mirror of
https://github.com/reactos/reactos.git
synced 2026-06-04 02:10:28 +08:00
[NTOS:MM/x64] Fix Interlocked(Compare)ExchangePte and PAGE_FROM_SSE for x64
This fixes using PFNs with more than 20 bits.
This commit is contained in:
@@ -159,11 +159,19 @@ typedef ULONG_PTR SWAPENTRY;
|
||||
#error Unsupported architecture!
|
||||
#endif
|
||||
|
||||
#ifdef _M_AMD64
|
||||
#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
|
||||
InterlockedCompareExchange64((PLONG64)(PointerPte), Exchange, Comperand)
|
||||
|
||||
#define InterlockedExchangePte(PointerPte, Value) \
|
||||
InterlockedExchange64((PLONG64)(PointerPte), Value)
|
||||
#else
|
||||
#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
|
||||
InterlockedCompareExchange((PLONG)(PointerPte), Exchange, Comperand)
|
||||
|
||||
#define InterlockedExchangePte(PointerPte, Value) \
|
||||
InterlockedExchange((PLONG)(PointerPte), Value)
|
||||
#endif
|
||||
|
||||
typedef struct _MM_SECTION_SEGMENT
|
||||
{
|
||||
@@ -1282,7 +1290,11 @@ MmFindRegion(
|
||||
#define IS_DIRTY_SSE(E) ((E) & 2)
|
||||
#define WRITE_SSE(E) ((E) | 4)
|
||||
#define IS_WRITE_SSE(E) ((E) & 4)
|
||||
#ifdef _WIN64
|
||||
#define PAGE_FROM_SSE(E) ((E) & 0xFFFFFFF000ULL)
|
||||
#else
|
||||
#define PAGE_FROM_SSE(E) ((E) & 0xFFFFF000)
|
||||
#endif
|
||||
#define SHARE_COUNT_FROM_SSE(E) (((E) & 0x00000FFC) >> 3)
|
||||
#define MAX_SHARE_COUNT 0x1FF
|
||||
#define MAKE_SSE(P, C) ((ULONG_PTR)((P) | ((C) << 3)))
|
||||
|
||||
Reference in New Issue
Block a user