Pass initial affinity map to InitializeProcess

This commit is contained in:
2026-06-10 11:27:25 +02:00
parent 5a9df7ca86
commit 830f84ab26
2 changed files with 16 additions and 1 deletions

View File

@@ -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);
}; };

View File

@@ -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;