Pass initial affinity map to InitializeProcess
This commit is contained in:
@@ -27,6 +27,7 @@ namespace KE
|
|||||||
IN PULONG_PTR DirectoryTable);
|
IN PULONG_PTR DirectoryTable);
|
||||||
STATIC XTAPI VOID InitializeProcess(IN OUT PKPROCESS Process,
|
STATIC XTAPI VOID InitializeProcess(IN OUT PKPROCESS Process,
|
||||||
IN KPRIORITY Priority,
|
IN KPRIORITY Priority,
|
||||||
|
IN PKAFFINITY_MAP AffinityMap,
|
||||||
IN PULONG_PTR DirectoryTable,
|
IN PULONG_PTR DirectoryTable,
|
||||||
IN BOOLEAN Alignment);
|
IN BOOLEAN Alignment);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -78,8 +78,11 @@ KE::KProcess::InitializeIdleProcess(IN OUT PKPROCESS Process,
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set Idle Process affinity */
|
||||||
|
KE::Affinity::SetAllProcessorsAffinity(Process->Affinity);
|
||||||
|
|
||||||
/* Initialize Idle process */
|
/* Initialize Idle process */
|
||||||
KE::KProcess::InitializeProcess(Process, 0, DirectoryTable, FALSE);
|
KE::KProcess::InitializeProcess(Process, 0, NULLPTR, DirectoryTable, FALSE);
|
||||||
Process->Quantum = MAXCHAR;
|
Process->Quantum = MAXCHAR;
|
||||||
|
|
||||||
/* Populate the global Idle Process affinity */
|
/* Populate the global Idle Process affinity */
|
||||||
@@ -102,6 +105,9 @@ KE::KProcess::InitializeIdleProcess(IN OUT PKPROCESS Process,
|
|||||||
* @param Priority
|
* @param Priority
|
||||||
* Specifies the process priority.
|
* Specifies the process priority.
|
||||||
*
|
*
|
||||||
|
* @param AffinityMap
|
||||||
|
* Specifies a process affinity map designating processors on which process can run.
|
||||||
|
*
|
||||||
* @param DirectoryTable
|
* @param DirectoryTable
|
||||||
* Supplies a pointer to the directory table.
|
* Supplies a pointer to the directory table.
|
||||||
*
|
*
|
||||||
@@ -116,6 +122,7 @@ XTAPI
|
|||||||
VOID
|
VOID
|
||||||
KE::KProcess::InitializeProcess(IN OUT PKPROCESS Process,
|
KE::KProcess::InitializeProcess(IN OUT PKPROCESS Process,
|
||||||
IN KPRIORITY Priority,
|
IN KPRIORITY Priority,
|
||||||
|
IN PKAFFINITY_MAP AffinityMap,
|
||||||
IN PULONG_PTR DirectoryTable,
|
IN PULONG_PTR DirectoryTable,
|
||||||
IN BOOLEAN Alignment)
|
IN BOOLEAN Alignment)
|
||||||
{
|
{
|
||||||
@@ -130,6 +137,13 @@ KE::KProcess::InitializeProcess(IN OUT PKPROCESS Process,
|
|||||||
RtlInitializeListHead(&Process->ReadyListHead);
|
RtlInitializeListHead(&Process->ReadyListHead);
|
||||||
RtlInitializeListHead(&Process->ThreadListHead);
|
RtlInitializeListHead(&Process->ThreadListHead);
|
||||||
|
|
||||||
|
/* Check if source affinity map was provided */
|
||||||
|
if(AffinityMap != NULLPTR && AffinityMap != Process->Affinity)
|
||||||
|
{
|
||||||
|
/* Set process affinity */
|
||||||
|
KE::Affinity::CopyAffinity(Process->Affinity, AffinityMap);
|
||||||
|
}
|
||||||
|
|
||||||
/* Set base process properties */
|
/* Set base process properties */
|
||||||
Process->BasePriority = Priority;
|
Process->BasePriority = Priority;
|
||||||
Process->AutoAlignment = Alignment;
|
Process->AutoAlignment = Alignment;
|
||||||
|
|||||||
Reference in New Issue
Block a user