[ros-dev] Re: [ros-svn] [hbirr] 12690: - Implemented KeAcquireInterruptSpinLock and KeReleaseInterruptSpinLock.

Alex Ionescu ionucu at videotron.ca
Sat Jan 1 11:02:12 CET 2005


hbirr at svn.reactos.com wrote:

>- Implemented KeAcquireInterruptSpinLock and KeReleaseInterruptSpinLock.   
>- Implemented the interrupt handling for smp machines.
>
>
>
>Updated files:
>trunk/reactos/include/ddk/kefuncs.h
>trunk/reactos/include/ntos/zwtypes.h
>trunk/reactos/ntoskrnl/io/irq.c
>trunk/reactos/ntoskrnl/ke/i386/irq.c
>trunk/reactos/ntoskrnl/ke/spinlock.c
>
>_______________________________________________
>Ros-svn mailing list
>Ros-svn at reactos.com
>http://reactos.com:8080/mailman/listinfo/ros-svn
>
>  
>
Hi,

Thanks for adding this feature to the kernel, I only have one problem 
with it... Would it be possible to modify the code to use the documented 
KINTERRUPT structure? This would (already does) wreck havoc on the new 
header system, which uses documented Windows structures (except in 
extreme cases where our code is very old, and those structures were 
unavailable, ie the Ob Manager structures... although enventually that 
code will have to be updated).

The correct KINTERRUPT structure is:

typedef struct _KINTERRUPT {
    CSHORT              Type;
    CSHORT              Size;
    LIST_ENTRY          InterruptListEntry;
    PKSERVICE_ROUTINE   ServiceRoutine;
    PVOID               ServiceContext;
    KSPIN_LOCK          SpinLock;
    ULONG               TickCount;
    PKSPIN_LOCK         ActualLock;
    PVOID               DispatchAddress;
    ULONG               Vector;
    KIRQL               Irql;
    KIRQL               SynchronizeIrql;
    BOOLEAN             FloatingSave;
    BOOLEAN             Connected;
    CHAR                Number;
    UCHAR               ShareVector;
    KINTERRUPT_MODE     Mode;
    ULONG               ServiceCount;
    ULONG               DispatchCount;
    ULONG               DispatchCode[106];
} *KINTERRUPT*, *PKINTERRUPT;

vs ours:

typedef struct _KINTERRUPT
{
   ULONG Vector;
   KAFFINITY ProcessorEnableMask;
   KSPIN_LOCK SpinLock;
   PKSPIN_LOCK ActualLock;
   BOOLEAN Shareable;
   BOOLEAN FloatingSave;
   CHAR ProcessorNumber;
   PKSERVICE_ROUTINE ServiceRoutine;
   PVOID ServiceContext;
   LIST_ENTRY Entry;
   KIRQL Irql;
   KIRQL SynchLevel;
   KINTERRUPT_MODE InterruptMode;
} KINTERRUPT;

Type/Size are Windows Ob Manager headers for each Object...if you look 
in KOBJECTS you'll find the right value...but we don't check for this 
yet, so it's not important yet. I don't know what "Shareable" is 
however. But we only need to rename/reposition some of the items. 
ProcessorEnableMask also seems to be missing in the real defintion.

If you'd be kind enough to do these changes, I would really appreciate 
it. If you have any comments, let me know.

Best regards, and happy new year,
Alex Ionescu




More information about the Ros-dev mailing list