mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-29 10:08:53 +00:00
9606abc146
A long long time ago, in a galaxy^W^W^W we used DDE kit to ease the porting of purely C based drivers. By now it became clear, that we do not gain that much by following this approach. DDE kit contains much generic functionality, which is not used or rather not needed by most ported drivers. Hence, we implement a slim C wrapper on top of Genode's C++ APIs, that is especially tailored to the driver. In addition to removing the dependency on DDE kit, the iPXE driver now uses the server framework and the newly introduced signal based IRQ handling. Issue #1456.
17 lines
603 B
Diff
17 lines
603 B
Diff
diff --git a/src/arch/i386/include/ipxe/rdtsc_timer.h b/src/arch/i386/include/ipxe/rdtsc_timer.h
|
|
index 472e140..d5095a7 100644
|
|
--- a/src/arch/i386/include/ipxe/rdtsc_timer.h
|
|
+++ b/src/arch/i386/include/ipxe/rdtsc_timer.h
|
|
@@ -30,7 +30,10 @@ static inline __always_inline unsigned long
|
|
TIMER_INLINE ( rdtsc, currticks ) ( void ) {
|
|
unsigned long ticks;
|
|
|
|
- __asm__ __volatile__ ( "rdtsc\n\t"
|
|
+ __asm__ __volatile__ (
|
|
+ "mfence\n\t"
|
|
+ "rdtsc\n\t"
|
|
+ "mfence\n\t"
|
|
"shrdl %1, %%edx, %%eax\n\t"
|
|
: "=a" ( ticks ) : "i" ( TSC_SHIFT ) : "edx" );
|
|
return ticks;
|