mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
- Fix several interlocked list functions -- they should return NULL if the list is empty.
- Fix a bug in FreeLDR-ARM, we forgot to set the RegistryLength, resulting in a corrupted registry. We can now load the system registry. - Enable code to handle DPC, Timer and Deferred Ready cleanup (portable code that's already written). - Enable code to handle quantum end. - We now load all the way to IoInitSystem!IopInitializeBootDrivers. svn path=/trunk/; revision=34091
This commit is contained in:
parent
e84c1a5512
commit
2b63244bc8
4 changed files with 33 additions and 20 deletions
|
@ -1163,6 +1163,7 @@ ArmPrepareForReactOS(IN BOOLEAN Setup)
|
|||
// Setup registry data
|
||||
//
|
||||
ArmLoaderBlock->RegistryBase = (PVOID)((ULONG_PTR)RegistryData | KSEG0_BASE);
|
||||
ArmLoaderBlock->RegistryLength = RegistrySize;
|
||||
|
||||
//
|
||||
// Create an MD for it
|
||||
|
|
|
@ -20,6 +20,8 @@ NTSTATUS
|
|||
NTAPI
|
||||
CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
//
|
||||
// Nothing to do on ARM
|
||||
//
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -136,7 +136,7 @@ ExfInterlockedInsertTailList(IN PLIST_ENTRY ListHead,
|
|||
{
|
||||
KIRQL OldIrql;
|
||||
PLIST_ENTRY OldHead = NULL;
|
||||
KeAcquireSpinLock(Lock,&OldIrql);
|
||||
KeAcquireSpinLock(Lock, &OldIrql);
|
||||
if (!IsListEmpty(ListHead)) OldHead = ListEntry->Blink;
|
||||
InsertTailList(ListHead, ListEntry);
|
||||
KeReleaseSpinLock(Lock, OldIrql);
|
||||
|
@ -223,7 +223,7 @@ ExInterlockedInsertHeadList(IN PLIST_ENTRY ListHead,
|
|||
{
|
||||
KIRQL OldIrql;
|
||||
PLIST_ENTRY OldHead = NULL;
|
||||
KeAcquireSpinLock(Lock,&OldIrql);
|
||||
KeAcquireSpinLock(Lock, &OldIrql);
|
||||
if (!IsListEmpty(ListHead)) OldHead = ListEntry->Flink;
|
||||
InsertHeadList(ListHead, ListEntry);
|
||||
KeReleaseSpinLock(Lock, OldIrql);
|
||||
|
@ -238,7 +238,7 @@ ExInterlockedInsertTailList(IN PLIST_ENTRY ListHead,
|
|||
{
|
||||
KIRQL OldIrql;
|
||||
PLIST_ENTRY OldHead = NULL;
|
||||
KeAcquireSpinLock(Lock,&OldIrql);
|
||||
KeAcquireSpinLock(Lock, &OldIrql);
|
||||
if (!IsListEmpty(ListHead)) OldHead = ListEntry->Blink;
|
||||
InsertTailList(ListHead, ListEntry);
|
||||
KeReleaseSpinLock(Lock, OldIrql);
|
||||
|
@ -252,8 +252,8 @@ ExInterlockedPopEntryList(IN PSINGLE_LIST_ENTRY ListHead,
|
|||
{
|
||||
KIRQL OldIrql;
|
||||
PSINGLE_LIST_ENTRY OldHead = NULL;
|
||||
KeAcquireSpinLock(Lock,&OldIrql);
|
||||
OldHead = PopEntryList(ListHead);
|
||||
KeAcquireSpinLock(Lock, &OldIrql);
|
||||
if (!ListHead->Next) OldHead = PopEntryList(ListHead);
|
||||
KeReleaseSpinLock(Lock, OldIrql);
|
||||
return OldHead;
|
||||
}
|
||||
|
@ -266,8 +266,8 @@ ExInterlockedPushEntryList(IN PSINGLE_LIST_ENTRY ListHead,
|
|||
{
|
||||
KIRQL OldIrql;
|
||||
PSINGLE_LIST_ENTRY OldHead = NULL;
|
||||
KeAcquireSpinLock(Lock,&OldIrql);
|
||||
OldHead = PushEntryList(ListHead, ListEntry);
|
||||
KeAcquireSpinLock(Lock, &OldIrql);
|
||||
if (!ListHead->Next) OldHead = PushEntryList(ListHead, ListEntry);
|
||||
KeReleaseSpinLock(Lock, OldIrql);
|
||||
return OldHead;
|
||||
}
|
||||
|
@ -279,8 +279,8 @@ ExInterlockedRemoveHeadList(IN PLIST_ENTRY ListHead,
|
|||
{
|
||||
KIRQL OldIrql;
|
||||
PLIST_ENTRY OldHead = NULL;
|
||||
KeAcquireSpinLock(Lock,&OldIrql);
|
||||
OldHead = RemoveHeadList(ListHead);
|
||||
KeAcquireSpinLock(Lock, &OldIrql);
|
||||
if (!IsListEmpty(ListHead)) OldHead = RemoveHeadList(ListHead);
|
||||
KeReleaseSpinLock(Lock, OldIrql);
|
||||
return OldHead;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,18 @@ KiSystemCall(
|
|||
IN ULONG ArgumentCount
|
||||
);
|
||||
|
||||
VOID
|
||||
FASTCALL
|
||||
KiRetireDpcList(
|
||||
IN PKPRCB Prcb
|
||||
);
|
||||
|
||||
VOID
|
||||
FASTCALL
|
||||
KiQuantumEnd(
|
||||
VOID
|
||||
);
|
||||
|
||||
/* FUNCTIONS ******************************************************************/
|
||||
|
||||
VOID
|
||||
|
@ -58,10 +70,9 @@ KiIdleLoop(VOID)
|
|||
HalClearSoftwareInterrupt(DISPATCH_LEVEL);
|
||||
|
||||
//
|
||||
// FIXME: TODO
|
||||
// Retire DPCs
|
||||
//
|
||||
DPRINT1("DPC/Timer Delivery!\n");
|
||||
while (TRUE);
|
||||
KiRetireDpcList(Prcb);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -242,10 +253,9 @@ KiDispatchInterrupt(VOID)
|
|||
(Prcb->DeferredReadyListHead.Next))
|
||||
{
|
||||
//
|
||||
// FIXME: TODO
|
||||
// Retire DPCs
|
||||
//
|
||||
DPRINT1("DPC/Timer Delivery!\n");
|
||||
while (TRUE);
|
||||
KiRetireDpcList(Prcb);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -259,10 +269,10 @@ KiDispatchInterrupt(VOID)
|
|||
if (Prcb->QuantumEnd)
|
||||
{
|
||||
//
|
||||
// FIXME: TODO
|
||||
// Handle quantum end
|
||||
//
|
||||
DPRINT1("Quantum End!\n");
|
||||
while (TRUE);
|
||||
Prcb->QuantumEnd = FALSE;
|
||||
KiQuantumEnd();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue