Introduce per-page-color modified page lists
This commit is contained in:
@@ -19,6 +19,7 @@ namespace MM
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
STATIC PMMCOLOR_TABLES FreePages[FreePageList + 1];
|
STATIC PMMCOLOR_TABLES FreePages[FreePageList + 1];
|
||||||
|
STATIC MMPFNLIST ModifiedPages[MM_PAGING_COLORS];
|
||||||
STATIC ULONG PagingColors;
|
STATIC ULONG PagingColors;
|
||||||
STATIC ULONG PagingColorsMask;
|
STATIC ULONG PagingColorsMask;
|
||||||
|
|
||||||
@@ -26,9 +27,10 @@ namespace MM
|
|||||||
STATIC XTAPI VOID ComputePageColoring(VOID);
|
STATIC XTAPI VOID ComputePageColoring(VOID);
|
||||||
STATIC XTAPI PMMCOLOR_TABLES GetFreePages(MMPAGELISTS PageList,
|
STATIC XTAPI PMMCOLOR_TABLES GetFreePages(MMPAGELISTS PageList,
|
||||||
ULONG Color);
|
ULONG Color);
|
||||||
STATIC XTAPI ULONG GetNextColor();
|
STATIC XTAPI PMMPFNLIST GetModifiedPages(IN ULONG Color);
|
||||||
STATIC XTAPI ULONG GetPagingColors();
|
STATIC XTAPI ULONG GetNextColor(VOID);
|
||||||
STATIC XTAPI ULONG GetPagingColorsMask();
|
STATIC XTAPI ULONG GetPagingColors(VOID);
|
||||||
|
STATIC XTAPI ULONG GetPagingColorsMask(VOID);
|
||||||
STATIC XTAPI VOID InitializeColorTables(VOID);
|
STATIC XTAPI VOID InitializeColorTables(VOID);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,23 @@ MM::Colors::GetFreePages(MMPAGELISTS PageList,
|
|||||||
return &FreePages[PageList][Color];
|
return &FreePages[PageList][Color];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a pointer to the modified pages list for a specific color.
|
||||||
|
*
|
||||||
|
* @param Color
|
||||||
|
* Supplies the specific color index.
|
||||||
|
*
|
||||||
|
* @return This routine returns a pointer to the corresponding MMPFNLIST structure.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTAPI
|
||||||
|
PMMPFNLIST
|
||||||
|
MM::Colors::GetModifiedPages(IN ULONG Color)
|
||||||
|
{
|
||||||
|
return &ModifiedPages[Color];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the next available color for page coloring.
|
* Retrieves the next available color for page coloring.
|
||||||
*
|
*
|
||||||
@@ -58,7 +75,7 @@ MM::Colors::GetFreePages(MMPAGELISTS PageList,
|
|||||||
*/
|
*/
|
||||||
XTAPI
|
XTAPI
|
||||||
ULONG
|
ULONG
|
||||||
MM::Colors::GetNextColor()
|
MM::Colors::GetNextColor(VOID)
|
||||||
{
|
{
|
||||||
/* Increment the color counter and wrap it around using the mask */
|
/* Increment the color counter and wrap it around using the mask */
|
||||||
return ((++PagingColors) & PagingColorsMask);
|
return ((++PagingColors) & PagingColorsMask);
|
||||||
@@ -73,7 +90,7 @@ MM::Colors::GetNextColor()
|
|||||||
*/
|
*/
|
||||||
XTAPI
|
XTAPI
|
||||||
ULONG
|
ULONG
|
||||||
MM::Colors::GetPagingColors()
|
MM::Colors::GetPagingColors(VOID)
|
||||||
{
|
{
|
||||||
/* Return the total number of page colors */
|
/* Return the total number of page colors */
|
||||||
return PagingColors;
|
return PagingColors;
|
||||||
@@ -88,7 +105,7 @@ MM::Colors::GetPagingColors()
|
|||||||
*/
|
*/
|
||||||
XTAPI
|
XTAPI
|
||||||
ULONG
|
ULONG
|
||||||
MM::Colors::GetPagingColorsMask()
|
MM::Colors::GetPagingColorsMask(VOID)
|
||||||
{
|
{
|
||||||
/* Return the mask used for page coloring calculations */
|
/* Return the mask used for page coloring calculations */
|
||||||
return PagingColorsMask;
|
return PagingColorsMask;
|
||||||
|
|||||||
@@ -12,6 +12,9 @@
|
|||||||
/* Array of free page lists segregated by cache color */
|
/* Array of free page lists segregated by cache color */
|
||||||
PMMCOLOR_TABLES MM::Colors::FreePages[FreePageList + 1];
|
PMMCOLOR_TABLES MM::Colors::FreePages[FreePageList + 1];
|
||||||
|
|
||||||
|
/* Array of modified pages segregated by cache color */
|
||||||
|
MMPFNLIST MM::Colors::ModifiedPages[MM_PAGING_COLORS];
|
||||||
|
|
||||||
/* Number of supported page colors */
|
/* Number of supported page colors */
|
||||||
ULONG MM::Colors::PagingColors;
|
ULONG MM::Colors::PagingColors;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user