--- trunk/reactos/hal/halx86/include/halp.h 2005-11-22 00:29:22 UTC (rev 19437)
+++ trunk/reactos/hal/halx86/include/halp.h 2005-11-22 00:34:46 UTC (rev 19438)
@@ -60,22 +60,12 @@
#define Ki386DisableInterrupts() __asm__ __volatile__("cli\n\t")
#define Ki386EnableInterrupts() __asm__ __volatile__("sti\n\t")
#define Ki386HaltProcessor() __asm__ __volatile__("hlt\n\t")
-#define Ki386RdTSC(x) __asm__ __volatile__("rdtsc\n\t" : "=A" (x.u.LowPart), "=d" (x.u.HighPart));
+#define Ki386RdTSC(x) __asm__ __volatile__("rdtsc\n\t" : "=A" (x.u.LowPart), "=d" (x.u.HighPart))
#define Ki386Rdmsr(msr,val1,val2) __asm__ __volatile__("rdmsr" : "=a" (val1), "=d" (val2) : "c" (msr))
#define Ki386Wrmsr(msr,val1,val2) __asm__ __volatile__("wrmsr" : /* no outputs */ : "c" (msr), "a" (val1), "d" (val2))
+#define Ki386ReadFsByte(offset,x) __asm__ __volatile__("movb %%fs:%c1,%0" : "=q" (x) : "i" (offset))
+#define Ki386WriteFsByte(offset,x) __asm__ __volatile__("movb %0,%%fs:%c1" : : "q" ((UCHAR)x), "i" (offset))
-static inline BYTE Ki386ReadFsByte(ULONG offset)
-{
- BYTE b;
- __asm__ __volatile__("movb %%fs:(%1),%0":"=q" (b):"r" (offset));
- return b;
-}
-
-static inline VOID Ki386WriteFsByte(ULONG offset, BYTE value)
-{
- __asm__ __volatile__("movb %0,%%fs:(%1)"::"q" (value), "r" (offset));
-}
-
#elif defined(_MSC_VER)
#define Ki386SaveFlags(x) __asm pushfd __asm pop x;
#define Ki386RestoreFlags(x) __asm push x __asm popfd;
--- trunk/reactos/hal/halx86/mp/mpsirql.c 2005-11-22 00:29:22 UTC (rev 19437)
+++ trunk/reactos/hal/halx86/mp/mpsirql.c 2005-11-22 00:34:46 UTC (rev 19438)
@@ -33,7 +33,7 @@
Ki386SaveFlags(Flags);
Ki386DisableInterrupts();
- irql = Ki386ReadFsByte(FIELD_OFFSET(KPCR, Irql));
+ Ki386ReadFsByte(FIELD_OFFSET(KPCR, Irql), irql);
if (irql > HIGH_LEVEL)
{
DPRINT1 ("CurrentIrql %x\n", irql);
@@ -72,6 +72,7 @@
HalpLowerIrql(KIRQL NewIrql, BOOL FromHalEndSystemInterrupt)
{
ULONG Flags;
+ UCHAR DpcRequested;
if (NewIrql >= DISPATCH_LEVEL)
{
KeSetCurrentIrql (NewIrql);
@@ -83,7 +84,8 @@
{
KeSetCurrentIrql (DISPATCH_LEVEL);
APICWrite(APIC_TPR, IRQL2TPR (DISPATCH_LEVEL) & APIC_TPR_PRI);
- if (FromHalEndSystemInterrupt || Ki386ReadFsByte(FIELD_OFFSET(KIPCR, HalReserved[HAL_DPC_REQUEST])))
+ Ki386ReadFsByte(FIELD_OFFSET(KIPCR, HalReserved[HAL_DPC_REQUEST]), DpcRequested);
+ if (FromHalEndSystemInterrupt || DpcRequested)
{
Ki386WriteFsByte(FIELD_OFFSET(KIPCR, HalReserved[HAL_DPC_REQUEST]), 0);
Ki386EnableInterrupts();