diff options
Diffstat (limited to 'include/asm-x86/paravirt.h')
-rw-r--r-- | include/asm-x86/paravirt.h | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/include/asm-x86/paravirt.h b/include/asm-x86/paravirt.h index ef5e8ec6a6ab..695ce9383f52 100644 --- a/include/asm-x86/paravirt.h +++ b/include/asm-x86/paravirt.h | |||
@@ -205,7 +205,6 @@ struct pv_apic_ops { | |||
205 | * these shouldn't be in this interface. | 205 | * these shouldn't be in this interface. |
206 | */ | 206 | */ |
207 | void (*apic_write)(unsigned long reg, u32 v); | 207 | void (*apic_write)(unsigned long reg, u32 v); |
208 | void (*apic_write_atomic)(unsigned long reg, u32 v); | ||
209 | u32 (*apic_read)(unsigned long reg); | 208 | u32 (*apic_read)(unsigned long reg); |
210 | void (*setup_boot_clock)(void); | 209 | void (*setup_boot_clock)(void); |
211 | void (*setup_secondary_clock)(void); | 210 | void (*setup_secondary_clock)(void); |
@@ -896,11 +895,6 @@ static inline void apic_write(unsigned long reg, u32 v) | |||
896 | PVOP_VCALL2(pv_apic_ops.apic_write, reg, v); | 895 | PVOP_VCALL2(pv_apic_ops.apic_write, reg, v); |
897 | } | 896 | } |
898 | 897 | ||
899 | static inline void apic_write_atomic(unsigned long reg, u32 v) | ||
900 | { | ||
901 | PVOP_VCALL2(pv_apic_ops.apic_write_atomic, reg, v); | ||
902 | } | ||
903 | |||
904 | static inline u32 apic_read(unsigned long reg) | 898 | static inline u32 apic_read(unsigned long reg) |
905 | { | 899 | { |
906 | return PVOP_CALL1(unsigned long, pv_apic_ops.apic_read, reg); | 900 | return PVOP_CALL1(unsigned long, pv_apic_ops.apic_read, reg); |
@@ -1396,8 +1390,8 @@ extern struct paravirt_patch_site __parainstructions[], | |||
1396 | * caller saved registers but the argument parameter */ | 1390 | * caller saved registers but the argument parameter */ |
1397 | #define PV_SAVE_REGS "pushq %%rdi;" | 1391 | #define PV_SAVE_REGS "pushq %%rdi;" |
1398 | #define PV_RESTORE_REGS "popq %%rdi;" | 1392 | #define PV_RESTORE_REGS "popq %%rdi;" |
1399 | #define PV_EXTRA_CLOBBERS EXTRA_CLOBBERS, "rcx" , "rdx" | 1393 | #define PV_EXTRA_CLOBBERS EXTRA_CLOBBERS, "rcx" , "rdx", "rsi" |
1400 | #define PV_VEXTRA_CLOBBERS EXTRA_CLOBBERS, "rdi", "rcx" , "rdx" | 1394 | #define PV_VEXTRA_CLOBBERS EXTRA_CLOBBERS, "rdi", "rcx" , "rdx", "rsi" |
1401 | #define PV_FLAGS_ARG "D" | 1395 | #define PV_FLAGS_ARG "D" |
1402 | #endif | 1396 | #endif |
1403 | 1397 | ||
@@ -1489,8 +1483,26 @@ static inline unsigned long __raw_local_irq_save(void) | |||
1489 | 1483 | ||
1490 | 1484 | ||
1491 | #ifdef CONFIG_X86_64 | 1485 | #ifdef CONFIG_X86_64 |
1492 | #define PV_SAVE_REGS pushq %rax; pushq %rdi; pushq %rcx; pushq %rdx | 1486 | #define PV_SAVE_REGS \ |
1493 | #define PV_RESTORE_REGS popq %rdx; popq %rcx; popq %rdi; popq %rax | 1487 | push %rax; \ |
1488 | push %rcx; \ | ||
1489 | push %rdx; \ | ||
1490 | push %rsi; \ | ||
1491 | push %rdi; \ | ||
1492 | push %r8; \ | ||
1493 | push %r9; \ | ||
1494 | push %r10; \ | ||
1495 | push %r11 | ||
1496 | #define PV_RESTORE_REGS \ | ||
1497 | pop %r11; \ | ||
1498 | pop %r10; \ | ||
1499 | pop %r9; \ | ||
1500 | pop %r8; \ | ||
1501 | pop %rdi; \ | ||
1502 | pop %rsi; \ | ||
1503 | pop %rdx; \ | ||
1504 | pop %rcx; \ | ||
1505 | pop %rax | ||
1494 | #define PARA_PATCH(struct, off) ((PARAVIRT_PATCH_##struct + (off)) / 8) | 1506 | #define PARA_PATCH(struct, off) ((PARAVIRT_PATCH_##struct + (off)) / 8) |
1495 | #define PARA_SITE(ptype, clobbers, ops) _PVSITE(ptype, clobbers, ops, .quad, 8) | 1507 | #define PARA_SITE(ptype, clobbers, ops) _PVSITE(ptype, clobbers, ops, .quad, 8) |
1496 | #define PARA_INDIRECT(addr) *addr(%rip) | 1508 | #define PARA_INDIRECT(addr) *addr(%rip) |