Cleanup low-level arch code
Subsystems (2)
v2 cover Cleanup low-level arch code
This is 2nd attempt to make mainly x86 arch code consistent with other architectures.
Changes since v1:
- arm compilation error fixed;
- disabling memory re-ordering for generic memory barriers added;
Alexander Gordeev (9):
Remove unused and unnecessary PHYS32 macro
Move phys_addr_t type definition to lib/libcflat.h
x86: Introduce lib/x86/asm/page.h
x86: Introduce lib/x86/asm/io.h
x86: Introduce lib/x86/asm/barrier.h
x86: Optimize virt_to_phys() and phys_to_virt()
io: Make ioremap() prototype conform to Linux one io/x86: Factor out ioremap()
io: Disable memory re-ordering for generic memory barriers
arm/selftest.c | 1 - lib/alloc.h | 5 ----- lib/arm/asm/page.h | 2 -- lib/arm/asm/setup.h | 1 - lib/arm/setup.c | 1 - lib/asm-generic/io.h | 13 +++++++++---- lib/libcflat.h | 2 ++ lib/powerpc/asm/setup.h | 1 - lib/ppc64/asm/io.h | 2 ++ lib/x86/asm/barrier.h | 8 ++++++++ lib/x86/asm/io.h | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ lib/x86/asm/page.h | 30 +++++++++++++++++++++++++++++ lib/x86/asm/pci.h | 2 +- lib/x86/io.c | 16 +++++++++++++++- lib/x86/io.h | 40 --------------------------------------- lib/x86/smp.h | 4 ---- lib/x86/vm.c | 17 ----------------- lib/x86/vm.h | 24 +----------------------- x86/eventinj.c | 7 +------ x86/hyperv.c | 1 + x86/hyperv.h | 1 - x86/hyperv_stimer.c | 1 - x86/hyperv_synic.c | 1 - x86/init.c | 2 +- x86/kvmclock.c | 1 + x86/svm.c | 1 - x86/vmexit.c | 11 ++--------- x86/vmx.c | 1 - x86/vmx_tests.c | 1 - 29 files changed, 124 insertions(+), 123 deletions(-) create mode 100644 lib/x86/asm/barrier.h create mode 100644 lib/x86/asm/io.h create mode 100644 lib/x86/asm/page.h delete mode 100644 lib/x86/io.h
Signature · 1 line
1.8.3.1
PATCH v2 1/9 Remove unused and unnecessary PHYS32 macro
--- lib/alloc.h | 4 ---- 1 file changed, 4 deletions(-)
lib/alloc.h +0 -4
@@ -58,11 +58,7 @@ static inline void *memalign(size_t alignment, size_t size)return alloc_ops->memalign (alignment, size); } -#ifdef PHYS32 -typedef u32 phys_addr_t ; -#else typedef u64 phys_addr_t ; -#endif #define INVALID_PHYS_ADDR (~(phys_addr_t)0)/*
Signature · 1 line
1.8.3.1
PATCH v2 2/9 Move phys_addr_t type definition to lib/libcflat.h
In reply to Alexander GordeevThis change leads to removing '#include <alloc.h>'s from several places that only included alloc.h to get the typedef.
--- arm/selftest.c | 1 - lib/alloc.h | 1 - lib/arm/asm/page.h | 2 -- lib/arm/asm/setup.h | 1 - lib/arm/setup.c | 1 - lib/libcflat.h | 2 ++ lib/powerpc/asm/setup.h | 1 - 7 files changed, 2 insertions(+), 7 deletions(-)
arm/selftest.c +0 -1
@@ -7,7 +7,6 @@*/ #include <libcflat.h> #include <util.h> -#include <alloc.h> #include <devicetree.h> #include <asm/setup.h> #include <asm/ptrace.h>
lib/alloc.h +0 -1
@@ -58,7 +58,6 @@ static inline void *memalign(size_t alignment, size_t size)return alloc_ops->memalign (alignment, size); } -typedef u64 phys_addr_t ;#define INVALID_PHYS_ADDR (~(phys_addr_t)0)/*
lib/arm/asm/page.h +0 -2
@@ -16,8 +16,6 @@#define PAGE_ALIGN (addr) ALIGN(addr, PAGE_SIZE) -#include <alloc.h> -typedef u64 pteval_t ;typedef u64 pmdval_t ;typedef u64 pgdval_t ;
lib/arm/asm/setup.h +0 -1
@@ -6,7 +6,6 @@* This work is licensed under the terms of the GNU LGPL, version 2. */ #include <libcflat.h> -#include <alloc.h> /* phys_addr_t */ #include <asm/page.h> #include <asm/pgtable-hwdef.h>
lib/arm/setup.c +0 -1
@@ -13,7 +13,6 @@#include <libcflat.h> #include <libfdt/libfdt.h> #include <devicetree.h> -#include <alloc.h> #include <asm/thread_info.h> #include <asm/setup.h> #include <asm/page.h>
lib/libcflat.h +2 -0
@@ -60,6 +60,8 @@ typedef _Bool bool;#define PRIx64 __PRI64_PREFIX "x"#define PRIxPTR __PRIPTR_PREFIX "x" +typedef u64 phys_addr_t ; +extern void puts (const char *s);extern void exit (int code);extern void abort (void );
lib/powerpc/asm/setup.h +0 -1
@@ -6,7 +6,6 @@* This work is licensed under the terms of the GNU LGPL, version 2. */ #include <libcflat.h> -#include <alloc.h> /* phys_addr_t */ #define NR_CPUS 8/* arbitrarily set for now */ extern u32 cpus[NR_CPUS ];
Signature · 1 line
1.8.3.1
Re: [PATCH v2 2/9] Move phys_addr_t type definition to lib/libcflat.h
Quoted 72 lines · Alexander Gordeev
This change leads to removing '#include <alloc.h>'s from several places that only included
alloc.hto get the typedef.Cc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Suggested-by Andrew Jones <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>--- arm/selftest.c | 1 - lib/alloc.h | 1 - lib/arm/asm/page.h | 2 -- lib/arm/asm/setup.h | 1 - lib/arm/setup.c | 1 - lib/libcflat.h | 2 ++ lib/powerpc/asm/setup.h | 1 - 7 files changed, 2 insertions(+), 7 deletions(-)arm/selftest.c +0
-1@@ -7,7 +7,6 @@*/ #include <libcflat.h> #include <util.h> -#include <alloc.h> #include <devicetree.h> #include <asm/setup.h> #include <asm/ptrace.h> lib/alloc.h +0
-1@@ -58,7 +58,6 @@ static inline void *memalign(size_t alignment, size_t size)return alloc_ops->memalign (alignment, size); } -typedef u64 phys_addr_t ;#define INVALID_PHYS_ADDR (~(phys_addr_t)0)/* lib/arm/asm/page.h +0
-2@@ -16,8 +16,6 @@#define PAGE_ALIGN (addr) ALIGN(addr, PAGE_SIZE) -#include <alloc.h> -typedef u64 pteval_t ;typedef u64 pmdval_t ;typedef u64 pgdval_t ;lib/arm/asm/setup.h +0
-1@@ -6,7 +6,6 @@* This work is licensed under the terms of the GNU LGPL, version 2. */ #include <libcflat.h> -#include <alloc.h> /* phys_addr_t */ #include <asm/page.h> #include <asm/pgtable-hwdef.h> lib/arm/setup.c +0
-0
lib/arm/setup.c line 18
Quoted 7 lines
lib/arm/setup.c +0
-1@@ -13,7 +13,6 @@#include <libcflat.h> #include <libfdt/libfdt.h> #include <devicetree.h> -#include <alloc.h> #include <asm/thread_info.h> #include <asm/setup.h> #include <asm/page.h>
setup.c is actually a primary user of alloc, as it inits the physmem allocator, so including alloc.h is pretty appropriate here, and should stay. And, if it wasn't appropriate (which it is), then you should have removed it from lib/powerpc/setup.c too.
Quoted 27 lines
lib/libcflat.h +2
-0@@ -60,6 +60,8 @@ typedef _Bool bool;#define PRIx64 __PRI64_PREFIX "x"#define PRIxPTR __PRIPTR_PREFIX "x" +typedef u64 phys_addr_t ; +extern void puts (const char *s);extern void exit (int code);extern void abort (void );lib/powerpc/asm/setup.h +0
-1@@ -6,7 +6,6 @@* This work is licensed under the terms of the GNU LGPL, version 2. */ #include <libcflat.h> -#include <alloc.h> /* phys_addr_t */ #define NR_CPUS 8/* arbitrarily set for now */ extern u32 cpus[NR_CPUS ];Signature · 1 line
1.8.3.1
Thanks,
drew
PATCH v2 3/9 x86: Introduce lib/x86/asm/page.h
In reply to Alexander GordeevMake x86 consistent with other architectures and put memory page specific defines to lib/x86/asm/page.h
--- lib/x86/asm/page.h | 27 +++++++++++++++++++++++++++ lib/x86/vm.c | 17 ----------------- lib/x86/vm.h | 14 +------------- 3 files changed, 28 insertions(+), 30 deletions(-) create mode 100644 lib/x86/asm/page.h
lib/x86/asm/page.h new file +27 -0
@@ -0,0 +1,27 @@ +#ifndef _ASM_X86_PAGE_H_ +#define _ASM_X86_PAGE_H_ + +#define PAGE_SIZE 4096ul +#ifdef __x86_64__ +#define LARGE_PAGE_SIZE (512 * PAGE_SIZE) +#else +#define LARGE_PAGE_SIZE (1024 * PAGE_SIZE) +#endif + +#define PTE_PRESENT (1ull << 0) +#define PTE_PSE (1ull << 7) +#define PTE_WRITE (1ull << 1) +#define PTE_USER (1ull << 2) +#define PTE_ADDR (0xffffffffff000ull) + +#ifdef __x86_64__ +#define PAGE_LEVEL 4 +#define PGDIR_WIDTH 9 +#define PGDIR_MASK 511 +#else +#define PAGE_LEVEL 2 +#define PGDIR_WIDTH 10 +#define PGDIR_MASK 1023 +#endif + +#endif
lib/x86/vm.c +0 -17
@@ -2,13 +2,6 @@#include "vm.h" #include "libcflat.h" -#define PAGE_SIZE 4096ul -#ifdef __x86_64__ -#define LARGE_PAGE_SIZE (512 * PAGE_SIZE) -#else -#define LARGE_PAGE_SIZE (1024 * PAGE_SIZE) -#endif -static void *free =0 ;static void *vfree_top =0 ;
@@ -44,16 +37,6 @@ void free_page(void *page)extern char edata;static unsigned long end_of_memory; -#ifdef __x86_64__ -#define PAGE_LEVEL 4 -#define PGDIR_WIDTH 9 -#define PGDIR_MASK 511 -#else -#define PAGE_LEVEL 2 -#define PGDIR_WIDTH 10 -#define PGDIR_MASK 1023 -#endif - unsigned long *install_pte(unsigned long *cr3, int pte_level, void *virt,
lib/x86/vm.h +1 -13
@@ -2,19 +2,7 @@#define VM_H #include "processor.h" - -#define PAGE_SIZE 4096ul -#ifdef __x86_64__ -#define LARGE_PAGE_SIZE (512 * PAGE_SIZE) -#else -#define LARGE_PAGE_SIZE (1024 * PAGE_SIZE) -#endif - -#define PTE_PRESENT (1ull << 0) -#define PTE_PSE (1ull << 7) -#define PTE_WRITE (1ull << 1) -#define PTE_USER (1ull << 2) -#define PTE_ADDR (0xffffffffff000ull) +#include "asm/page.h" void setup_vm ();
Signature · 1 line
1.8.3.1
Re: [PATCH v2 3/9] x86: Introduce lib/x86/asm/page.h
Quoted 7 lines · Alexander Gordeev
Make x86 consistent with other architectures and put memory page specific defines to
lib/x86/asm/page.hCc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>
Quoted 6 lines
--- lib/x86/asm/page.h | 27 +++++++++++++++++++++++++++ lib/x86/vm.c | 17 ----------------- lib/x86/vm.h | 14 +------------- 3 files changed, 28 insertions(+), 30 deletions(-) create mode 100644 lib/x86/asm/page.h
Quoted 101 lines
lib/x86/asm/page.h new file +27
-0@@ -0,0 +1,27 @@ +#ifndef _ASM_X86_PAGE_H_ +#define _ASM_X86_PAGE_H_ + +#define PAGE_SIZE 4096ul +#ifdef __x86_64__ +#define LARGE_PAGE_SIZE (512 * PAGE_SIZE) +#else +#define LARGE_PAGE_SIZE (1024 * PAGE_SIZE) +#endif + +#define PTE_PRESENT (1ull << 0) +#define PTE_PSE (1ull << 7) +#define PTE_WRITE (1ull << 1) +#define PTE_USER (1ull << 2) +#define PTE_ADDR (0xffffffffff000ull) + +#ifdef __x86_64__ +#define PAGE_LEVEL 4 +#define PGDIR_WIDTH 9 +#define PGDIR_MASK 511 +#else +#define PAGE_LEVEL 2 +#define PGDIR_WIDTH 10 +#define PGDIR_MASK 1023 +#endif + +#endif lib/x86/vm.c +0
-17@@ -2,13 +2,6 @@#include "vm.h" #include "libcflat.h" -#define PAGE_SIZE 4096ul -#ifdef __x86_64__ -#define LARGE_PAGE_SIZE (512 * PAGE_SIZE) -#else -#define LARGE_PAGE_SIZE (1024 * PAGE_SIZE) -#endif -static void *free =0 ;static void *vfree_top =0 ;@@ -44,16 +37,6 @@ void free_page(void *page)extern char edata;static unsigned long end_of_memory; -#ifdef __x86_64__ -#define PAGE_LEVEL 4 -#define PGDIR_WIDTH 9 -#define PGDIR_MASK 511 -#else -#define PAGE_LEVEL 2 -#define PGDIR_WIDTH 10 -#define PGDIR_MASK 1023 -#endif - unsigned long *install_pte(unsigned long *cr3, int pte_level, void *virt,lib/x86/vm.h +1
-13@@ -2,19 +2,7 @@#define VM_H #include "processor.h" - -#define PAGE_SIZE 4096ul -#ifdef __x86_64__ -#define LARGE_PAGE_SIZE (512 * PAGE_SIZE) -#else -#define LARGE_PAGE_SIZE (1024 * PAGE_SIZE) -#endif - -#define PTE_PRESENT (1ull << 0) -#define PTE_PSE (1ull << 7) -#define PTE_WRITE (1ull << 1) -#define PTE_USER (1ull << 2) -#define PTE_ADDR (0xffffffffff000ull) +#include "asm/page.h" void setup_vm ();Signature · 6 lines
1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 4/9 x86: Introduce lib/x86/asm/io.h
In reply to Alexander GordeevMake x86 consistent with other architectures and put IO specific defines to lib/x86/asm/io.h
--- lib/x86/asm/io.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/x86/asm/pci.h | 2 +- lib/x86/io.c | 2 +- lib/x86/io.h | 40 ---------------------------------------- lib/x86/vm.h | 12 +----------- x86/eventinj.c | 7 +------ x86/hyperv.c | 1 + x86/hyperv.h | 1 - x86/hyperv_stimer.c | 1 - x86/hyperv_synic.c | 1 - x86/init.c | 2 +- x86/svm.c | 1 - x86/vmexit.c | 1 - x86/vmx.c | 1 - x86/vmx_tests.c | 1 - 15 files changed, 58 insertions(+), 67 deletions(-) create mode 100644 lib/x86/asm/io.h delete mode 100644 lib/x86/io.h
lib/x86/asm/io.h new file +52 -0
@@ -0,0 +1,52 @@ +#ifndef _ASM_X86_IO_H_ +#define _ASM_X86_IO_H_ + +#include "asm/page.h" + +static inline unsigned char inb (unsigned short port) +{ +unsigned char value; + asmvolatile ("inb %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline unsigned short inw (unsigned short port) +{ +unsigned short value; + asmvolatile ("inw %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline unsigned int inl (unsigned short port) +{ +unsigned int value; + asmvolatile ("inl %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline void outb (unsigned char value,unsigned short port) +{ + asmvolatile ("outb %b0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline void outw (unsigned short value,unsigned short port) +{ + asmvolatile ("outw %w0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline void outl (unsigned int value,unsigned short port) +{ + asmvolatile ("outl %0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline unsigned long virt_to_phys (const void *virt) +{ +return (unsigned long )virt; +} + +static inline void *phys_to_virt (unsigned long phys) +{ +return (void *)phys; +} + +#endif
lib/x86/asm/pci.h +1 -1
@@ -7,7 +7,7 @@*/ #include "libcflat.h" #include "pci.h" -#include "x86/io.h" +#include "x86/asm/io.h" static inline uint32_t pci_config_read (pcidevaddr_t dev,uint8_t reg) {
lib/x86/io.c +1 -1
@@ -1,6 +1,6 @@#include "libcflat.h" #include "smp.h" -#include "io.h" +#include "asm/io.h" #ifndef USE_SERIAL #define USE_SERIAL #endif
lib/x86/io.h deleted +0 -40
@@ -1,40 +0,0 @@ -#ifndef IO_H -#define IO_H - -static inline unsigned char inb (unsigned short port) -{ -unsigned char value; - asmvolatile ("inb %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline unsigned short inw (unsigned short port) -{ -unsigned short value; - asmvolatile ("inw %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline unsigned int inl (unsigned short port) -{ -unsigned int value; - asmvolatile ("inl %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline void outb (unsigned char value,unsigned short port) -{ - asmvolatile ("outb %b0, %w1" : :"a" (value),"Nd" (port)); -} - -static inline void outw (unsigned short value,unsigned short port) -{ - asmvolatile ("outw %w0, %w1" : :"a" (value),"Nd" (port)); -} - -static inline void outl (unsigned int value,unsigned short port) -{ - asmvolatile ("outl %0, %w1" : :"a" (value),"Nd" (port)); -} - -#endif
lib/x86/vm.h +1 -11
@@ -2,7 +2,7 @@#define VM_H #include "processor.h" -#include "asm/page.h" +#include "asm/io.h" void setup_vm ();
@@ -27,14 +27,4 @@ unsigned long *install_large_page(unsigned long *cr3,unsigned long phys, void *virt);unsigned long *install_page (unsigned long *cr3,unsigned long phys,void *virt); -static inline unsigned long virt_to_phys (const void *virt) -{ -return (unsigned long )virt; -} - -static inline void *phys_to_virt (unsigned long phys) -{ -return (void *)phys; -} -#endif
x86/eventinj.c +1 -6
@@ -16,11 +16,6 @@ static inline void io_delay(void) { } -static inline void outl (int addr,int val) -{ - asmvolatile ("outl %1, %w0" : :"d" (addr),"a" (val)); -} -void apic_self_ipi (u8 v) { apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_FIXED |
@@ -32,7 +27,7 @@ void apic_self_nmi(void)apic_icr_write (APIC_DEST_PHYSICAL |APIC_DM_NMI |APIC_INT_ASSERT ,0 ); } -#define flush_phys_addr (__s) outl(0xe4, __s) +#define flush_phys_addr (__s) outl(__s, 0xe4)#define flush_stack () do { \ int __l; \ flush_phys_addr(virt_to_phys(&__l)); \
x86/hyperv.c +1 -0
@@ -1,4 +1,5 @@#include "hyperv.h" +#include "asm/io.h" static void synic_ctl (u8 ctl,u8 vcpu_id,u8 sint) {
x86/hyperv.h +0 -1
@@ -3,7 +3,6 @@#include "libcflat.h" #include "processor.h" -#include "io.h" #define HYPERV_CPUID_FEATURES 0x40000003
x86/hyperv_stimer.c +0 -1
@@ -5,7 +5,6 @@#include "vm.h" #include "apic.h" #include "desc.h" -#include "io.h" #include "smp.h" #include "atomic.h" #include "hyperv.h"
x86/hyperv_synic.c +0 -1
@@ -5,7 +5,6 @@#include "vm.h" #include "apic.h" #include "desc.h" -#include "io.h" #include "smp.h" #include "atomic.h" #include "hyperv.h"
x86/init.c +1 -1
@@ -1,6 +1,6 @@#include "libcflat.h" #include "apic.h" -#include "io.h" +#include "asm/io.h" #define KBD_CCMD_READ_OUTPORT 0xD0/* read output port */ #define KBD_CCMD_WRITE_OUTPORT 0xD1/* write output port */
x86/svm.c +0 -1
@@ -6,7 +6,6 @@#include "vm.h" #include "smp.h" #include "types.h" -#include "io.h" /* for the nested page table*/ u64 *pml4e;
x86/vmexit.c +0 -1
@@ -6,7 +6,6 @@#include "x86/vm.h" #include "x86/desc.h" #include "x86/acpi.h" -#include "x86/io.h" struct test {void (*func)(void );
x86/vmx.c +0 -1
@@ -35,7 +35,6 @@#include "vmx.h" #include "msr.h" #include "smp.h" -#include "io.h" u64 *vmxon_region;struct vmcs *vmcs_root;
x86/vmx_tests.c +0 -1
@@ -7,7 +7,6 @@#include "msr.h" #include "processor.h" #include "vm.h" -#include "io.h" #include "fwcfg.h" #include "isr.h" #include "apic.h"
Signature · 1 line
1.8.3.1
Re: [PATCH v2 4/9] x86: Introduce lib/x86/asm/io.h
Quoted 33 lines · Alexander Gordeev
Make x86 consistent with other architectures and put IO specific defines to
lib/x86/asm/io.hCc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>--- lib/x86/asm/io.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/x86/asm/pci.h | 2 +- lib/x86/io.c | 2 +- lib/x86/io.h | 40 ---------------------------------------- lib/x86/vm.h | 12 +----------- x86/eventinj.c | 7 +------ x86/hyperv.c | 1 + x86/hyperv.h | 1 - x86/hyperv_stimer.c | 1 - x86/hyperv_synic.c | 1 - x86/init.c | 2 +- x86/svm.c | 1 - x86/vmexit.c | 1 - x86/vmx.c | 1 - x86/vmx_tests.c | 1 - 15 files changed, 58 insertions(+), 67 deletions(-) create mode 100644 lib/x86/asm/io.h delete mode 100644 lib/x86/io.hlib/x86/asm/io.h new file +0
-0
lib/x86/asm/io.h line 4
Quoted 4 lines
lib/x86/asm/io.h new file +4
-0@@ -0,0 +1,52 @@ +#ifndef _ASM_X86_IO_H_ +#define _ASM_X86_IO_H_ + +#include "asm/page.h"
why is this include here?
Quoted 280 lines
lib/x86/asm/io.h new file +48
-0+ +static inline unsigned char inb (unsigned short port) +{ +unsigned char value; + asmvolatile ("inb %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline unsigned short inw (unsigned short port) +{ +unsigned short value; + asmvolatile ("inw %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline unsigned int inl (unsigned short port) +{ +unsigned int value; + asmvolatile ("inl %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline void outb (unsigned char value,unsigned short port) +{ + asmvolatile ("outb %b0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline void outw (unsigned short value,unsigned short port) +{ + asmvolatile ("outw %w0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline void outl (unsigned int value,unsigned short port) +{ + asmvolatile ("outl %0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline unsigned long virt_to_phys (const void *virt) +{ +return (unsigned long )virt; +} + +static inline void *phys_to_virt (unsigned long phys) +{ +return (void *)phys; +} + +#endif lib/x86/asm/pci.h +1
-1@@ -7,7 +7,7 @@*/ #include "libcflat.h" #include "pci.h" -#include "x86/io.h" +#include "x86/asm/io.h" static inline uint32_t pci_config_read (pcidevaddr_t dev,uint8_t reg) {lib/x86/io.c +1
-1@@ -1,6 +1,6 @@#include "libcflat.h" #include "smp.h" -#include "io.h" +#include "asm/io.h" #ifndef USE_SERIAL #define USE_SERIAL #endif lib/x86/io.h deleted +0
-40@@ -1,40 +0,0 @@ -#ifndef IO_H -#define IO_H - -static inline unsigned char inb (unsigned short port) -{ -unsigned char value; - asmvolatile ("inb %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline unsigned short inw (unsigned short port) -{ -unsigned short value; - asmvolatile ("inw %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline unsigned int inl (unsigned short port) -{ -unsigned int value; - asmvolatile ("inl %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline void outb (unsigned char value,unsigned short port) -{ - asmvolatile ("outb %b0, %w1" : :"a" (value),"Nd" (port)); -} - -static inline void outw (unsigned short value,unsigned short port) -{ - asmvolatile ("outw %w0, %w1" : :"a" (value),"Nd" (port)); -} - -static inline void outl (unsigned int value,unsigned short port) -{ - asmvolatile ("outl %0, %w1" : :"a" (value),"Nd" (port)); -} - -#endif lib/x86/vm.h +1
-11@@ -2,7 +2,7 @@#define VM_H #include "processor.h" -#include "asm/page.h" +#include "asm/io.h" void setup_vm ();@@ -27,14 +27,4 @@ unsigned long *install_large_page(unsigned long *cr3,unsigned long phys, void *virt);unsigned long *install_page (unsigned long *cr3,unsigned long phys,void *virt); -static inline unsigned long virt_to_phys (const void *virt) -{ -return (unsigned long )virt; -} - -static inline void *phys_to_virt (unsigned long phys) -{ -return (void *)phys; -} -#endif x86/eventinj.c +1
-6@@ -16,11 +16,6 @@ static inline void io_delay(void) { } -static inline void outl (int addr,int val) -{ - asmvolatile ("outl %1, %w0" : :"d" (addr),"a" (val)); -} -void apic_self_ipi (u8 v) { apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_FIXED |@@ -32,7 +27,7 @@ void apic_self_nmi(void)apic_icr_write (APIC_DEST_PHYSICAL |APIC_DM_NMI |APIC_INT_ASSERT ,0 ); } -#define flush_phys_addr (__s) outl(0xe4, __s) +#define flush_phys_addr (__s) outl(__s, 0xe4)#define flush_stack () do { \ int __l; \ flush_phys_addr(virt_to_phys(&__l)); \x86/hyperv.c +1
-0@@ -1,4 +1,5 @@#include "hyperv.h" +#include "asm/io.h" static void synic_ctl (u8 ctl,u8 vcpu_id,u8 sint) {x86/hyperv.h +0
-1@@ -3,7 +3,6 @@#include "libcflat.h" #include "processor.h" -#include "io.h" #define HYPERV_CPUID_FEATURES 0x40000003x86/hyperv_stimer.c +0
-1@@ -5,7 +5,6 @@#include "vm.h" #include "apic.h" #include "desc.h" -#include "io.h" #include "smp.h" #include "atomic.h" #include "hyperv.h" x86/hyperv_synic.c +0
-1@@ -5,7 +5,6 @@#include "vm.h" #include "apic.h" #include "desc.h" -#include "io.h" #include "smp.h" #include "atomic.h" #include "hyperv.h" x86/init.c +1
-1@@ -1,6 +1,6 @@#include "libcflat.h" #include "apic.h" -#include "io.h" +#include "asm/io.h" #define KBD_CCMD_READ_OUTPORT 0xD0/* read output port */ #define KBD_CCMD_WRITE_OUTPORT 0xD1/* write output port */ x86/svm.c +0
-1@@ -6,7 +6,6 @@#include "vm.h" #include "smp.h" #include "types.h" -#include "io.h" /* for the nested page table*/ u64 *pml4e;x86/vmexit.c +0
-1@@ -6,7 +6,6 @@#include "x86/vm.h" #include "x86/desc.h" #include "x86/acpi.h" -#include "x86/io.h" struct test {void (*func)(void );x86/vmx.c +0
-1@@ -35,7 +35,6 @@#include "vmx.h" #include "msr.h" #include "smp.h" -#include "io.h" u64 *vmxon_region;struct vmcs *vmcs_root;x86/vmx_tests.c +0
-1@@ -7,7 +7,6 @@#include "msr.h" #include "processor.h" #include "vm.h" -#include "io.h" #include "fwcfg.h" #include "isr.h" #include "apic.h" Signature · 1 line
1.8.3.1
Thanks,
drew
Re: [PATCH v2 4/9] x86: Introduce lib/x86/asm/io.h
Quoted 28 lines · Andrew Jones
Quoted 27 lines · Alexander Gordeev
Make x86 consistent with other architectures and put IO specific defines to
lib/x86/asm/io.hCc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>--- lib/x86/asm/io.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/x86/asm/pci.h | 2 +- lib/x86/io.c | 2 +- lib/x86/io.h | 40 ---------------------------------------- lib/x86/vm.h | 12 +----------- x86/eventinj.c | 7 +------ x86/hyperv.c | 1 + x86/hyperv.h | 1 - x86/hyperv_stimer.c | 1 - x86/hyperv_synic.c | 1 - x86/init.c | 2 +- x86/svm.c | 1 - x86/vmexit.c | 1 - x86/vmx.c | 1 - x86/vmx_tests.c | 1 - 15 files changed, 58 insertions(+), 67 deletions(-) create mode 100644 lib/x86/asm/io.h delete mode 100644 lib/x86/io.h
Quoted 12 lines
lib/x86/asm/io.h line 4
Quoted 10 lines
lib/x86/asm/io.h new file +4
-0@@ -0,0 +1,52 @@ +#ifndef _ASM_X86_IO_H_ +#define _ASM_X86_IO_H_ + +#include "asm/page.h" why is this include here?
Just to conform to other archs which also include it. But probably it needs revising in the other archs instead..
Quoted 283 lines
Quoted 280 lines
lib/x86/asm/io.h new file +48
-0+ +static inline unsigned char inb (unsigned short port) +{ +unsigned char value; + asmvolatile ("inb %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline unsigned short inw (unsigned short port) +{ +unsigned short value; + asmvolatile ("inw %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline unsigned int inl (unsigned short port) +{ +unsigned int value; + asmvolatile ("inl %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline void outb (unsigned char value,unsigned short port) +{ + asmvolatile ("outb %b0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline void outw (unsigned short value,unsigned short port) +{ + asmvolatile ("outw %w0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline void outl (unsigned int value,unsigned short port) +{ + asmvolatile ("outl %0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline unsigned long virt_to_phys (const void *virt) +{ +return (unsigned long )virt; +} + +static inline void *phys_to_virt (unsigned long phys) +{ +return (void *)phys; +} + +#endif lib/x86/asm/pci.h +1
-1@@ -7,7 +7,7 @@*/ #include "libcflat.h" #include "pci.h" -#include "x86/io.h" +#include "x86/asm/io.h" static inline uint32_t pci_config_read (pcidevaddr_t dev,uint8_t reg) {lib/x86/io.c +1
-1@@ -1,6 +1,6 @@#include "libcflat.h" #include "smp.h" -#include "io.h" +#include "asm/io.h" #ifndef USE_SERIAL #define USE_SERIAL #endif lib/x86/io.h deleted +0
-40@@ -1,40 +0,0 @@ -#ifndef IO_H -#define IO_H - -static inline unsigned char inb (unsigned short port) -{ -unsigned char value; - asmvolatile ("inb %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline unsigned short inw (unsigned short port) -{ -unsigned short value; - asmvolatile ("inw %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline unsigned int inl (unsigned short port) -{ -unsigned int value; - asmvolatile ("inl %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline void outb (unsigned char value,unsigned short port) -{ - asmvolatile ("outb %b0, %w1" : :"a" (value),"Nd" (port)); -} - -static inline void outw (unsigned short value,unsigned short port) -{ - asmvolatile ("outw %w0, %w1" : :"a" (value),"Nd" (port)); -} - -static inline void outl (unsigned int value,unsigned short port) -{ - asmvolatile ("outl %0, %w1" : :"a" (value),"Nd" (port)); -} - -#endif lib/x86/vm.h +1
-11@@ -2,7 +2,7 @@#define VM_H #include "processor.h" -#include "asm/page.h" +#include "asm/io.h" void setup_vm ();@@ -27,14 +27,4 @@ unsigned long *install_large_page(unsigned long *cr3,unsigned long phys, void *virt);unsigned long *install_page (unsigned long *cr3,unsigned long phys,void *virt); -static inline unsigned long virt_to_phys (const void *virt) -{ -return (unsigned long )virt; -} - -static inline void *phys_to_virt (unsigned long phys) -{ -return (void *)phys; -} -#endif x86/eventinj.c +1
-6@@ -16,11 +16,6 @@ static inline void io_delay(void) { } -static inline void outl (int addr,int val) -{ - asmvolatile ("outl %1, %w0" : :"d" (addr),"a" (val)); -} -void apic_self_ipi (u8 v) { apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_FIXED |@@ -32,7 +27,7 @@ void apic_self_nmi(void)apic_icr_write (APIC_DEST_PHYSICAL |APIC_DM_NMI |APIC_INT_ASSERT ,0 ); } -#define flush_phys_addr (__s) outl(0xe4, __s) +#define flush_phys_addr (__s) outl(__s, 0xe4)#define flush_stack () do { \ int __l; \ flush_phys_addr(virt_to_phys(&__l)); \x86/hyperv.c +1
-0@@ -1,4 +1,5 @@#include "hyperv.h" +#include "asm/io.h" static void synic_ctl (u8 ctl,u8 vcpu_id,u8 sint) {x86/hyperv.h +0
-1@@ -3,7 +3,6 @@#include "libcflat.h" #include "processor.h" -#include "io.h" #define HYPERV_CPUID_FEATURES 0x40000003x86/hyperv_stimer.c +0
-1@@ -5,7 +5,6 @@#include "vm.h" #include "apic.h" #include "desc.h" -#include "io.h" #include "smp.h" #include "atomic.h" #include "hyperv.h" x86/hyperv_synic.c +0
-1@@ -5,7 +5,6 @@#include "vm.h" #include "apic.h" #include "desc.h" -#include "io.h" #include "smp.h" #include "atomic.h" #include "hyperv.h" x86/init.c +1
-1@@ -1,6 +1,6 @@#include "libcflat.h" #include "apic.h" -#include "io.h" +#include "asm/io.h" #define KBD_CCMD_READ_OUTPORT 0xD0/* read output port */ #define KBD_CCMD_WRITE_OUTPORT 0xD1/* write output port */ x86/svm.c +0
-1@@ -6,7 +6,6 @@#include "vm.h" #include "smp.h" #include "types.h" -#include "io.h" /* for the nested page table*/ u64 *pml4e;x86/vmexit.c +0
-1@@ -6,7 +6,6 @@#include "x86/vm.h" #include "x86/desc.h" #include "x86/acpi.h" -#include "x86/io.h" struct test {void (*func)(void );x86/vmx.c +0
-1@@ -35,7 +35,6 @@#include "vmx.h" #include "msr.h" #include "smp.h" -#include "io.h" u64 *vmxon_region;struct vmcs *vmcs_root;x86/vmx_tests.c +0
-1@@ -7,7 +7,6 @@#include "msr.h" #include "processor.h" #include "vm.h" -#include "io.h" #include "fwcfg.h" #include "isr.h" #include "apic.h" Signature · 1 line
1.8.3.1Thanks,
drew
Re: [PATCH v2 4/9] x86: Introduce lib/x86/asm/io.h
Quoted 42 lines · Alexander Gordeev
Quoted 28 lines · Andrew Jones
Quoted 27 lines · Alexander Gordeev
Make x86 consistent with other architectures and put IO specific defines to
lib/x86/asm/io.hCc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>--- lib/x86/asm/io.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/x86/asm/pci.h | 2 +- lib/x86/io.c | 2 +- lib/x86/io.h | 40 ---------------------------------------- lib/x86/vm.h | 12 +----------- x86/eventinj.c | 7 +------ x86/hyperv.c | 1 + x86/hyperv.h | 1 - x86/hyperv_stimer.c | 1 - x86/hyperv_synic.c | 1 - x86/init.c | 2 +- x86/svm.c | 1 - x86/vmexit.c | 1 - x86/vmx.c | 1 - x86/vmx_tests.c | 1 - 15 files changed, 58 insertions(+), 67 deletions(-) create mode 100644 lib/x86/asm/io.h delete mode 100644 lib/x86/io.hQuoted 12 lines
lib/x86/asm/io.h line 4
Quoted 10 lines
lib/x86/asm/io.h new file +4
-0@@ -0,0 +1,52 @@ +#ifndef _ASM_X86_IO_H_ +#define _ASM_X86_IO_H_ + +#include "asm/page.h" why is this include here?
Quoted 2 lines
Just to conform to other archs which also include it. But probably it needs revising in the other archs instead..
I guess, I'd better to remove this one at this stage, since I do not grasp the idea behind all archs header inclusion policy. It seems it could be cleaned up further, and if so - it is better to address in a separate patch.
Quoted 283 lines
Quoted 283 lines
Quoted 280 lines
lib/x86/asm/io.h new file +48
-0+ +static inline unsigned char inb (unsigned short port) +{ +unsigned char value; + asmvolatile ("inb %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline unsigned short inw (unsigned short port) +{ +unsigned short value; + asmvolatile ("inw %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline unsigned int inl (unsigned short port) +{ +unsigned int value; + asmvolatile ("inl %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline void outb (unsigned char value,unsigned short port) +{ + asmvolatile ("outb %b0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline void outw (unsigned short value,unsigned short port) +{ + asmvolatile ("outw %w0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline void outl (unsigned int value,unsigned short port) +{ + asmvolatile ("outl %0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline unsigned long virt_to_phys (const void *virt) +{ +return (unsigned long )virt; +} + +static inline void *phys_to_virt (unsigned long phys) +{ +return (void *)phys; +} + +#endif lib/x86/asm/pci.h +1
-1@@ -7,7 +7,7 @@*/ #include "libcflat.h" #include "pci.h" -#include "x86/io.h" +#include "x86/asm/io.h" static inline uint32_t pci_config_read (pcidevaddr_t dev,uint8_t reg) {lib/x86/io.c +1
-1@@ -1,6 +1,6 @@#include "libcflat.h" #include "smp.h" -#include "io.h" +#include "asm/io.h" #ifndef USE_SERIAL #define USE_SERIAL #endif lib/x86/io.h deleted +0
-40@@ -1,40 +0,0 @@ -#ifndef IO_H -#define IO_H - -static inline unsigned char inb (unsigned short port) -{ -unsigned char value; - asmvolatile ("inb %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline unsigned short inw (unsigned short port) -{ -unsigned short value; - asmvolatile ("inw %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline unsigned int inl (unsigned short port) -{ -unsigned int value; - asmvolatile ("inl %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline void outb (unsigned char value,unsigned short port) -{ - asmvolatile ("outb %b0, %w1" : :"a" (value),"Nd" (port)); -} - -static inline void outw (unsigned short value,unsigned short port) -{ - asmvolatile ("outw %w0, %w1" : :"a" (value),"Nd" (port)); -} - -static inline void outl (unsigned int value,unsigned short port) -{ - asmvolatile ("outl %0, %w1" : :"a" (value),"Nd" (port)); -} - -#endif lib/x86/vm.h +1
-11@@ -2,7 +2,7 @@#define VM_H #include "processor.h" -#include "asm/page.h" +#include "asm/io.h" void setup_vm ();@@ -27,14 +27,4 @@ unsigned long *install_large_page(unsigned long *cr3,unsigned long phys, void *virt);unsigned long *install_page (unsigned long *cr3,unsigned long phys,void *virt); -static inline unsigned long virt_to_phys (const void *virt) -{ -return (unsigned long )virt; -} - -static inline void *phys_to_virt (unsigned long phys) -{ -return (void *)phys; -} -#endif x86/eventinj.c +1
-6@@ -16,11 +16,6 @@ static inline void io_delay(void) { } -static inline void outl (int addr,int val) -{ - asmvolatile ("outl %1, %w0" : :"d" (addr),"a" (val)); -} -void apic_self_ipi (u8 v) { apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_FIXED |@@ -32,7 +27,7 @@ void apic_self_nmi(void)apic_icr_write (APIC_DEST_PHYSICAL |APIC_DM_NMI |APIC_INT_ASSERT ,0 ); } -#define flush_phys_addr (__s) outl(0xe4, __s) +#define flush_phys_addr (__s) outl(__s, 0xe4)#define flush_stack () do { \ int __l; \ flush_phys_addr(virt_to_phys(&__l)); \x86/hyperv.c +1
-0@@ -1,4 +1,5 @@#include "hyperv.h" +#include "asm/io.h" static void synic_ctl (u8 ctl,u8 vcpu_id,u8 sint) {x86/hyperv.h +0
-1@@ -3,7 +3,6 @@#include "libcflat.h" #include "processor.h" -#include "io.h" #define HYPERV_CPUID_FEATURES 0x40000003x86/hyperv_stimer.c +0
-1@@ -5,7 +5,6 @@#include "vm.h" #include "apic.h" #include "desc.h" -#include "io.h" #include "smp.h" #include "atomic.h" #include "hyperv.h" x86/hyperv_synic.c +0
-1@@ -5,7 +5,6 @@#include "vm.h" #include "apic.h" #include "desc.h" -#include "io.h" #include "smp.h" #include "atomic.h" #include "hyperv.h" x86/init.c +1
-1@@ -1,6 +1,6 @@#include "libcflat.h" #include "apic.h" -#include "io.h" +#include "asm/io.h" #define KBD_CCMD_READ_OUTPORT 0xD0/* read output port */ #define KBD_CCMD_WRITE_OUTPORT 0xD1/* write output port */ x86/svm.c +0
-1@@ -6,7 +6,6 @@#include "vm.h" #include "smp.h" #include "types.h" -#include "io.h" /* for the nested page table*/ u64 *pml4e;x86/vmexit.c +0
-1@@ -6,7 +6,6 @@#include "x86/vm.h" #include "x86/desc.h" #include "x86/acpi.h" -#include "x86/io.h" struct test {void (*func)(void );x86/vmx.c +0
-1@@ -35,7 +35,6 @@#include "vmx.h" #include "msr.h" #include "smp.h" -#include "io.h" u64 *vmxon_region;struct vmcs *vmcs_root;x86/vmx_tests.c +0
-1@@ -7,7 +7,6 @@#include "msr.h" #include "processor.h" #include "vm.h" -#include "io.h" #include "fwcfg.h" #include "isr.h" #include "apic.h" Signature · 1 line
1.8.3.1Thanks,
drew
Re: [PATCH v2 4/9] x86: Introduce lib/x86/asm/io.h
Quoted 4 lines · Alexander Gordeev
Quoted 3 lines · Alexander Gordeev
Quoted 2 lines · Andrew Jones
Quoted 1 line · Alexander Gordeev
Make x86 consistent with other architectures and put
...
Quoted 13 lines
Quoted 13 lines
Quoted 12 lines
lib/x86/asm/io.h line 4
Quoted 10 lines
lib/x86/asm/io.h new file +4
-0@@ -0,0 +1,52 @@ +#ifndef _ASM_X86_IO_H_ +#define _ASM_X86_IO_H_ + +#include "asm/page.h" why is this include here?
Quoted 7 lines
Quoted 2 lines
Just to conform to other archs which also include it. But probably it needs revising in the other archs instead..
I guess, I'd better to remove this one at this stage, since I do not grasp the idea behind all archs header inclusion policy. It seems it could be cleaned up further, and if so - it is better to address in a separate patch.
Agreed it would be a different patch. But in this case, none needed.
The policy is to only include what's needed in source files. Also, header files should only include what's needed [most] of the time. I've made at least one exception, commit 957b6055, and other cases for convenience could probably be made, but case-by- case.
Also, in this case, lib/arm[64]/asm/io.h includes asm/page.h because virt_to_phys/phys_to_virt builds on helpers that are in asm/page.h And, if you're wondering about asm/barrier.h, that's because asm-generic/io.h is included at the bottom, and we want to override the generic barriers before defining other generic functions that use them.
Thanks,
drew
Re: [PATCH v2 4/9] x86: Introduce lib/x86/asm/io.h
In reply to Alexander GordeevQuoted 18 lines · Alexander Gordeev
Make x86 consistent with other architectures and put IO specific defines to
lib/x86/asm/io.hCc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>--- lib/x86/asm/io.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/x86/asm/pci.h | 2 +- lib/x86/io.c | 2 +- lib/x86/io.h | 40 ---------------------------------------- lib/x86/vm.h | 12 +----------- x86/eventinj.c | 7 +------ x86/hyperv.c | 1 + x86/hyperv.h | 1 - x86/hyperv_stimer.c | 1 - x86/hyperv_synic.c | 1 -
Quoted 8 lines
x86/init.c | 2 +- x86/svm.c | 1 - x86/vmexit.c | 1 - x86/vmx.c | 1 - x86/vmx_tests.c | 1 - 15 files changed, 58 insertions(+), 67 deletions(-) create mode 100644 lib/x86/asm/io.h delete mode 100644 lib/x86/io.h
One other thing. Please prepare the patches with 'format-patch -M', as lib/x86/io.h -> lib/x86/asm/io.h is just a rename.
thanks,
drew
Quoted 296 lines
lib/x86/asm/io.h new file +52
-0@@ -0,0 +1,52 @@ +#ifndef _ASM_X86_IO_H_ +#define _ASM_X86_IO_H_ + +#include "asm/page.h" + +static inline unsigned char inb (unsigned short port) +{ +unsigned char value; + asmvolatile ("inb %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline unsigned short inw (unsigned short port) +{ +unsigned short value; + asmvolatile ("inw %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline unsigned int inl (unsigned short port) +{ +unsigned int value; + asmvolatile ("inl %w1, %0" :"=a" (value) :"Nd" (port)); +return value; +} + +static inline void outb (unsigned char value,unsigned short port) +{ + asmvolatile ("outb %b0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline void outw (unsigned short value,unsigned short port) +{ + asmvolatile ("outw %w0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline void outl (unsigned int value,unsigned short port) +{ + asmvolatile ("outl %0, %w1" : :"a" (value),"Nd" (port)); +} + +static inline unsigned long virt_to_phys (const void *virt) +{ +return (unsigned long )virt; +} + +static inline void *phys_to_virt (unsigned long phys) +{ +return (void *)phys; +} + +#endif lib/x86/asm/pci.h +1
-1@@ -7,7 +7,7 @@*/ #include "libcflat.h" #include "pci.h" -#include "x86/io.h" +#include "x86/asm/io.h" static inline uint32_t pci_config_read (pcidevaddr_t dev,uint8_t reg) {lib/x86/io.c +1
-1@@ -1,6 +1,6 @@#include "libcflat.h" #include "smp.h" -#include "io.h" +#include "asm/io.h" #ifndef USE_SERIAL #define USE_SERIAL #endif lib/x86/io.h deleted +0
-40@@ -1,40 +0,0 @@ -#ifndef IO_H -#define IO_H - -static inline unsigned char inb (unsigned short port) -{ -unsigned char value; - asmvolatile ("inb %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline unsigned short inw (unsigned short port) -{ -unsigned short value; - asmvolatile ("inw %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline unsigned int inl (unsigned short port) -{ -unsigned int value; - asmvolatile ("inl %w1, %0" :"=a" (value) :"Nd" (port)); -return value; -} - -static inline void outb (unsigned char value,unsigned short port) -{ - asmvolatile ("outb %b0, %w1" : :"a" (value),"Nd" (port)); -} - -static inline void outw (unsigned short value,unsigned short port) -{ - asmvolatile ("outw %w0, %w1" : :"a" (value),"Nd" (port)); -} - -static inline void outl (unsigned int value,unsigned short port) -{ - asmvolatile ("outl %0, %w1" : :"a" (value),"Nd" (port)); -} - -#endif lib/x86/vm.h +1
-11@@ -2,7 +2,7 @@#define VM_H #include "processor.h" -#include "asm/page.h" +#include "asm/io.h" void setup_vm ();@@ -27,14 +27,4 @@ unsigned long *install_large_page(unsigned long *cr3,unsigned long phys, void *virt);unsigned long *install_page (unsigned long *cr3,unsigned long phys,void *virt); -static inline unsigned long virt_to_phys (const void *virt) -{ -return (unsigned long )virt; -} - -static inline void *phys_to_virt (unsigned long phys) -{ -return (void *)phys; -} -#endif x86/eventinj.c +1
-6@@ -16,11 +16,6 @@ static inline void io_delay(void) { } -static inline void outl (int addr,int val) -{ - asmvolatile ("outl %1, %w0" : :"d" (addr),"a" (val)); -} -void apic_self_ipi (u8 v) { apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_FIXED |@@ -32,7 +27,7 @@ void apic_self_nmi(void)apic_icr_write (APIC_DEST_PHYSICAL |APIC_DM_NMI |APIC_INT_ASSERT ,0 ); } -#define flush_phys_addr (__s) outl(0xe4, __s) +#define flush_phys_addr (__s) outl(__s, 0xe4)#define flush_stack () do { \ int __l; \ flush_phys_addr(virt_to_phys(&__l)); \x86/hyperv.c +1
-0@@ -1,4 +1,5 @@#include "hyperv.h" +#include "asm/io.h" static void synic_ctl (u8 ctl,u8 vcpu_id,u8 sint) {x86/hyperv.h +0
-1@@ -3,7 +3,6 @@#include "libcflat.h" #include "processor.h" -#include "io.h" #define HYPERV_CPUID_FEATURES 0x40000003x86/hyperv_stimer.c +0
-1@@ -5,7 +5,6 @@#include "vm.h" #include "apic.h" #include "desc.h" -#include "io.h" #include "smp.h" #include "atomic.h" #include "hyperv.h" x86/hyperv_synic.c +0
-1@@ -5,7 +5,6 @@#include "vm.h" #include "apic.h" #include "desc.h" -#include "io.h" #include "smp.h" #include "atomic.h" #include "hyperv.h" x86/init.c +1
-1@@ -1,6 +1,6 @@#include "libcflat.h" #include "apic.h" -#include "io.h" +#include "asm/io.h" #define KBD_CCMD_READ_OUTPORT 0xD0/* read output port */ #define KBD_CCMD_WRITE_OUTPORT 0xD1/* write output port */ x86/svm.c +0
-1@@ -6,7 +6,6 @@#include "vm.h" #include "smp.h" #include "types.h" -#include "io.h" /* for the nested page table*/ u64 *pml4e;x86/vmexit.c +0
-1@@ -6,7 +6,6 @@#include "x86/vm.h" #include "x86/desc.h" #include "x86/acpi.h" -#include "x86/io.h" struct test {void (*func)(void );x86/vmx.c +0
-1@@ -35,7 +35,6 @@#include "vmx.h" #include "msr.h" #include "smp.h" -#include "io.h" u64 *vmxon_region;struct vmcs *vmcs_root;x86/vmx_tests.c +0
-1@@ -7,7 +7,6 @@#include "msr.h" #include "processor.h" #include "vm.h" -#include "io.h" #include "fwcfg.h" #include "isr.h" #include "apic.h" Signature · 6 lines
1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 5/9 x86: Introduce lib/x86/asm/barrier.h
In reply to Alexander GordeevMake x86 consistent with other architectures and put memory barrier defines to lib/x86/asm/barrier.h
--- lib/x86/asm/barrier.h | 8 ++++++++ lib/x86/asm/io.h | 1 + lib/x86/smp.h | 4 ---- x86/kvmclock.c | 1 + 4 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 lib/x86/asm/barrier.h
lib/x86/asm/barrier.h new file +8 -0
@@ -0,0 +1,8 @@ +#ifndef _ASM_X86_BARRIER_H_ +#define _ASM_X86_BARRIER_H_ + +#define mb () asm volatile("mfence":::"memory") +#define rmb () asm volatile("lfence":::"memory") +#define wmb () asm volatile("sfence" ::: "memory") + +#endif
lib/x86/asm/io.h +1 -0
@@ -2,6 +2,7 @@#define _ASM_X86_IO_H_#include "asm/page.h" +#include "asm/barrier.h" static inline unsigned char inb (unsigned short port) {
lib/x86/smp.h +0 -4
@@ -2,10 +2,6 @@#define __SMP_H#include <asm/spinlock.h> -#define mb () asm volatile("mfence":::"memory") -#define rmb () asm volatile("lfence":::"memory") -#define wmb () asm volatile("sfence" ::: "memory") -void smp_init (void );int cpu_count (void );
x86/kvmclock.c +1 -0
@@ -3,6 +3,7 @@#include "atomic.h" #include "processor.h" #include "kvmclock.h" +#include "asm/barrier.h" #define unlikely (x) __builtin_expect(!!(x), 0)#define likely (x) __builtin_expect(!!(x), 1)
Signature · 1 line
1.8.3.1
Re: [PATCH v2 5/9] x86: Introduce lib/x86/asm/barrier.h
Quoted 7 lines · Alexander Gordeev
Make x86 consistent with other architectures and put memory barrier defines to
lib/x86/asm/barrier.hCc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>
Quoted 7 lines
--- lib/x86/asm/barrier.h | 8 ++++++++ lib/x86/asm/io.h | 1 + lib/x86/smp.h | 4 ---- x86/kvmclock.c | 1 + 4 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 lib/x86/asm/barrier.h
Quoted 61 lines
lib/x86/asm/barrier.h new file +8
-0@@ -0,0 +1,8 @@ +#ifndef _ASM_X86_BARRIER_H_ +#define _ASM_X86_BARRIER_H_ + +#define mb () asm volatile("mfence":::"memory") +#define rmb () asm volatile("lfence":::"memory") +#define wmb () asm volatile("sfence" ::: "memory") + +#endif lib/x86/asm/io.h +1
-0@@ -2,6 +2,7 @@#define _ASM_X86_IO_H_#include "asm/page.h" +#include "asm/barrier.h" static inline unsigned char inb (unsigned short port) {lib/x86/smp.h +0
-4@@ -2,10 +2,6 @@#define __SMP_H#include <asm/spinlock.h> -#define mb () asm volatile("mfence":::"memory") -#define rmb () asm volatile("lfence":::"memory") -#define wmb () asm volatile("sfence" ::: "memory") -void smp_init (void );int cpu_count (void );x86/kvmclock.c +1
-0@@ -3,6 +3,7 @@#include "atomic.h" #include "processor.h" #include "kvmclock.h" +#include "asm/barrier.h" #define unlikely (x) __builtin_expect(!!(x), 0)#define likely (x) __builtin_expect(!!(x), 1)Signature · 6 lines
1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 5/9] x86: Introduce lib/x86/asm/barrier.h
Quoted 16 lines · Andrew Jones
Quoted 7 lines · Alexander Gordeev
Make x86 consistent with other architectures and put memory barrier defines to
lib/x86/asm/barrier.hCc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>Quoted 7 lines
--- lib/x86/asm/barrier.h | 8 ++++++++ lib/x86/asm/io.h | 1 + lib/x86/smp.h | 4 ---- x86/kvmclock.c | 1 + 4 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 lib/x86/asm/barrier.h
Quoted 1 line
Reviewed-by Andrew Jones <[email protected]>
I forgot about your _ASM_X86 vs _ASMX86 nit.
I will resend this (and others affected).
Quoted 61 lines
Quoted 61 lines
lib/x86/asm/barrier.h new file +8
-0@@ -0,0 +1,8 @@ +#ifndef _ASM_X86_BARRIER_H_ +#define _ASM_X86_BARRIER_H_ + +#define mb () asm volatile("mfence":::"memory") +#define rmb () asm volatile("lfence":::"memory") +#define wmb () asm volatile("sfence" ::: "memory") + +#endif lib/x86/asm/io.h +1
-0@@ -2,6 +2,7 @@#define _ASM_X86_IO_H_#include "asm/page.h" +#include "asm/barrier.h" static inline unsigned char inb (unsigned short port) {lib/x86/smp.h +0
-4@@ -2,10 +2,6 @@#define __SMP_H#include <asm/spinlock.h> -#define mb () asm volatile("mfence":::"memory") -#define rmb () asm volatile("lfence":::"memory") -#define wmb () asm volatile("sfence" ::: "memory") -void smp_init (void );int cpu_count (void );x86/kvmclock.c +1
-0@@ -3,6 +3,7 @@#include "atomic.h" #include "processor.h" #include "kvmclock.h" +#include "asm/barrier.h" #define unlikely (x) __builtin_expect(!!(x), 0)#define likely (x) __builtin_expect(!!(x), 1)Signature · 6 lines
1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 5/9] x86: Introduce lib/x86/asm/barrier.h
Quoted 17 lines · Alexander Gordeev
Quoted 16 lines · Andrew Jones
Quoted 14 lines · Alexander Gordeev
Make x86 consistent with other architectures and put memory barrier defines to
lib/x86/asm/barrier.hCc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>--- lib/x86/asm/barrier.h | 8 ++++++++ lib/x86/asm/io.h | 1 + lib/x86/smp.h | 4 ---- x86/kvmclock.c | 1 + 4 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 lib/x86/asm/barrier.h
Quoted 4 lines
Quoted 1 line
Reviewed-by Andrew Jones <[email protected]>I forgot about your
_ASM_X86vs_ASMX86nit.
I will resend this (and others affected).
Actually, all x86 headers have _ASM_X86 prefix, except lib/x86/asm/bitops.h. So either introduce _ASM_X86_BARRIER_H_ and _ASM_X86_PAGE_H_ and change _ASMX86_BITOPS_H_ or fix them all. Or just do not do anything about that? :)
Quoted 9 lines
Quoted 9 lines
lib/x86/asm/barrier.h line 2
Quoted 9 lines
lib/x86/asm/barrier.h new file +2
-0@@ -0,0 +1,8 @@ +#ifndef _ASM_X86_BARRIER_H_ +#define _ASM_X86_BARRIER_H_
Or _ASMX86_BARRIER_H_?
Quoted 52 lines
Quoted 52 lines
Quoted 52 lines
lib/x86/asm/barrier.h new file +6
-0+ +#define mb () asm volatile("mfence":::"memory") +#define rmb () asm volatile("lfence":::"memory") +#define wmb () asm volatile("sfence" ::: "memory") + +#endif lib/x86/asm/io.h +1
-0@@ -2,6 +2,7 @@#define _ASM_X86_IO_H_#include "asm/page.h" +#include "asm/barrier.h" static inline unsigned char inb (unsigned short port) {lib/x86/smp.h +0
-4@@ -2,10 +2,6 @@#define __SMP_H#include <asm/spinlock.h> -#define mb () asm volatile("mfence":::"memory") -#define rmb () asm volatile("lfence":::"memory") -#define wmb () asm volatile("sfence" ::: "memory") -void smp_init (void );int cpu_count (void );x86/kvmclock.c +1
-0@@ -3,6 +3,7 @@#include "atomic.h" #include "processor.h" #include "kvmclock.h" +#include "asm/barrier.h" #define unlikely (x) __builtin_expect(!!(x), 0)#define likely (x) __builtin_expect(!!(x), 1)Signature · 6 lines
1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 5/9] x86: Introduce lib/x86/asm/barrier.h
Quoted 20 lines · Alexander Gordeev
Quoted 19 lines · Alexander Gordeev
Quoted 17 lines · Andrew Jones
Quoted 7 lines · Alexander Gordeev
Make x86 consistent with other architectures and put memory barrier defines to
lib/x86/asm/barrier.hCc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>Quoted 7 lines
--- lib/x86/asm/barrier.h | 8 ++++++++ lib/x86/asm/io.h | 1 + lib/x86/smp.h | 4 ---- x86/kvmclock.c | 1 + 4 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 lib/x86/asm/barrier.hReviewed-by Andrew Jones <[email protected]>
Quoted 7 lines
Quoted 2 lines
I forgot about your
_ASM_X86vs_ASMX86nit.
I will resend this (and others affected).Actually, all x86 headers have
_ASM_X86prefix, exceptlib/x86/asm/bitops.h. So either introduce _ASM_X86_BARRIER_H_ and _ASM_X86_PAGE_H_ and change _ASMX86_BITOPS_H_ or fix them all. Or just do not do anything about that? :)
It doesn't matter to me. Definitely don't fix anything, just pick whichever you like for this one :)
Quoted 12 lines
Quoted 10 lines
Quoted 10 lines
lib/x86/asm/barrier.h line 2
Quoted 10 lines
lib/x86/asm/barrier.h new file +2
-0@@ -0,0 +1,8 @@ +#ifndef _ASM_X86_BARRIER_H_ +#define _ASM_X86_BARRIER_H_Or _ASMX86_BARRIER_H_?
Whatever :)
thanks,
drew
PATCH v2 6/9 x86: Optimize virt_to_phys() and phys_to_virt()
In reply to Alexander GordeevMake use of generic implementations and remove x86 specific virt_to_phys() and phys_to_virt() functions.
--- lib/asm-generic/io.h | 2 ++ lib/x86/asm/io.h | 10 +--------- lib/x86/asm/page.h | 3 +++ 3 files changed, 6 insertions(+), 9 deletions(-)
lib/asm-generic/io.h +2 -0
@@ -165,7 +165,9 @@ static inline unsigned long virt_to_phys(volatile void *address) {return __pa ((unsigned long )address); } +#endif +#ifndef phys_to_virtstatic inline void *phys_to_virt (unsigned long address) {return __va (address);
lib/x86/asm/io.h +1 -9
@@ -40,14 +40,6 @@ static inline void outl(unsigned int value, unsigned short port) asm volatile("outl %0, %w1" : : "a"(value), "Nd"(port)); } -static inline unsigned long virt_to_phys (const void *virt) -{ -return (unsigned long )virt; -} - -static inline void *phys_to_virt (unsigned long phys) -{ -return (void *)phys; -} +#include <asm-generic/io.h> #endif
lib/x86/asm/page.h +3 -0
@@ -24,4 +24,7 @@#define PGDIR_MASK 1023#endif +#define __va (x) ((void *)((unsigned long) (x))) +#define __pa (x) ((unsigned long) (x)) +#endif
Signature · 1 line
1.8.3.1
Re: [PATCH v2 6/9] x86: Optimize virt_to_phys() and phys_to_virt()
Quoted 2 lines · Alexander Gordeev
Make use of generic implementations and remove x86 specific
virt_to_phys()andphys_to_virt()functions.
I would drop this patch. If x86 needs/wants more stuff from lib/asm-generic/io.h at a later time, then it can be brought in then.
thanks,
drew
Quoted 64 lines
Cc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>--- lib/asm-generic/io.h | 2 ++ lib/x86/asm/io.h | 10 +--------- lib/x86/asm/page.h | 3 +++ 3 files changed, 6 insertions(+), 9 deletions(-)lib/asm-generic/io.h +2
-0@@ -165,7 +165,9 @@ static inline unsigned long virt_to_phys(volatile void *address) {return __pa ((unsigned long )address); } +#endif +#ifndef phys_to_virtstatic inline void *phys_to_virt (unsigned long address) {return __va (address);lib/x86/asm/io.h +1
-9@@ -40,14 +40,6 @@ static inline void outl(unsigned int value, unsigned short port) asm volatile("outl %0, %w1" : : "a"(value), "Nd"(port)); } -static inline unsigned long virt_to_phys (const void *virt) -{ -return (unsigned long )virt; -} - -static inline void *phys_to_virt (unsigned long phys) -{ -return (void *)phys; -} +#include <asm-generic/io.h> #endif lib/x86/asm/page.h +3
-0@@ -24,4 +24,7 @@#define PGDIR_MASK 1023#endif +#define __va (x) ((void *)((unsigned long) (x))) +#define __pa (x) ((unsigned long) (x)) +#endif Signature · 6 lines
1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 6/9] x86: Optimize virt_to_phys() and phys_to_virt()
Quoted 7 lines · Andrew Jones
Quoted 2 lines · Alexander Gordeev
Make use of generic implementations and remove x86 specific
virt_to_phys()andphys_to_virt()functions.I would drop this patch. If x86 needs/wants more stuff from
lib/asm-generic/io.hat a later time, then it can be brought in then.
Will drop it.
But I do not get your point :) The x86 variants almost duplicate the generic ones - so why x86 would not want to bring it?
Quoted 67 lines
thanks,
drewQuoted 64 lines
Cc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>--- lib/asm-generic/io.h | 2 ++ lib/x86/asm/io.h | 10 +--------- lib/x86/asm/page.h | 3 +++ 3 files changed, 6 insertions(+), 9 deletions(-)lib/asm-generic/io.h +2
-0@@ -165,7 +165,9 @@ static inline unsigned long virt_to_phys(volatile void *address) {return __pa ((unsigned long )address); } +#endif +#ifndef phys_to_virtstatic inline void *phys_to_virt (unsigned long address) {return __va (address);lib/x86/asm/io.h +1
-9@@ -40,14 +40,6 @@ static inline void outl(unsigned int value, unsigned short port) asm volatile("outl %0, %w1" : : "a"(value), "Nd"(port)); } -static inline unsigned long virt_to_phys (const void *virt) -{ -return (unsigned long )virt; -} - -static inline void *phys_to_virt (unsigned long phys) -{ -return (void *)phys; -} +#include <asm-generic/io.h> #endif lib/x86/asm/page.h +3
-0@@ -24,4 +24,7 @@#define PGDIR_MASK 1023#endif +#define __va (x) ((void *)((unsigned long) (x))) +#define __pa (x) ((unsigned long) (x)) +#endif Signature · 6 lines
1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 6/9] x86: Optimize virt_to_phys() and phys_to_virt()
Quoted 5 lines · Alexander Gordeev
Quoted 4 lines · Andrew Jones
Quoted 2 lines · Alexander Gordeev
Make use of generic implementations and remove x86 specific
virt_to_phys()andphys_to_virt()functions.
Quoted 8 lines
Quoted 3 lines
I would drop this patch. If x86 needs/wants more stuff from
lib/asm-generic/io.hat a later time, then it can be brought in then.Will drop it.
But I do not get your point :) The x86 variants almost duplicate the generic ones - so why x86 would not want to bring it?
yes, but a whole file full of stuff is a lot to bring in just to take advantage of two functions (virt_to_phys/phys_to_virt) that are likely better off being written more arch-specific sometime anyway.
thanks,
drew
Quoted 72 lines
Quoted 64 lines
thanks,
drewQuoted 60 lines
Cc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>--- lib/asm-generic/io.h | 2 ++ lib/x86/asm/io.h | 10 +--------- lib/x86/asm/page.h | 3 +++ 3 files changed, 6 insertions(+), 9 deletions(-)lib/asm-generic/io.h +2
-0@@ -165,7 +165,9 @@ static inline unsigned long virt_to_phys(volatile void *address) {return __pa ((unsigned long )address); } +#endif +#ifndef phys_to_virtstatic inline void *phys_to_virt (unsigned long address) {return __va (address);lib/x86/asm/io.h +1
-9@@ -40,14 +40,6 @@ static inline void outl(unsigned int value, unsigned short port) asm volatile("outl %0, %w1" : : "a"(value), "Nd"(port)); } -static inline unsigned long virt_to_phys (const void *virt) -{ -return (unsigned long )virt; -} - -static inline void *phys_to_virt (unsigned long phys) -{ -return (void *)phys; -} +#include <asm-generic/io.h> #endif lib/x86/asm/page.h +3
-0@@ -24,4 +24,7 @@#define PGDIR_MASK 1023#endif +#define __va (x) ((void *)((unsigned long) (x))) +#define __pa (x) ((unsigned long) (x)) +#endif Signature · 1 line
1.8.3.1Quoted 4 lines
Quoted 4 lines
--
To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html--
To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 7/9 io: Make ioremap() prototype conform to Linux one
In reply to Alexander GordeevThis update also adds missing __iomem specificator which has been used by existing IO accessors.
--- lib/asm-generic/io.h | 4 ++-- lib/ppc64/asm/io.h | 2 ++ lib/x86/asm/io.h | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-)
lib/asm-generic/io.h +2 -2
@@ -153,10 +153,10 @@ static inline u64 __bswap64(u64 x) ({ wmb(); __raw_writeq(cpu_to_le64(b), addr); })#ifndef ioremap -static inline void *ioremap(u64 phys_addr, size_t size __unused) +static inline void __iomem *ioremap(phys_addr_t phys_addr, size_t size __unused) {assert (sizeof (long ) ==8 || !(phys_addr >>32 )); -return (void *)(unsigned long )phys_addr; +return (void __iomem *)(unsigned long )phys_addr; }#endif
lib/ppc64/asm/io.h +2 -0
@@ -9,5 +9,7 @@#error Undefined byte order#endif +#define __iomem +#include <asm-generic/io.h> #endif
lib/x86/asm/io.h +2 -0
@@ -4,6 +4,8 @@#include "asm/page.h" #include "asm/barrier.h" +#define __iomem +static inline unsigned char inb (unsigned short port) {unsigned char value;
Signature · 1 line
1.8.3.1
Re: [PATCH v2 7/9] io: Make ioremap() prototype conform to Linux one
Quoted 7 lines · Alexander Gordeev
This update also adds missing
__iomemspecificator which has been used by existing IO accessors.Cc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>
Quoted 5 lines
--- lib/asm-generic/io.h | 4 ++-- lib/ppc64/asm/io.h | 2 ++ lib/x86/asm/io.h | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-)
Quoted 50 lines
lib/asm-generic/io.h +2
-2@@ -153,10 +153,10 @@ static inline u64 __bswap64(u64 x) ({ wmb(); __raw_writeq(cpu_to_le64(b), addr); })#ifndef ioremap -static inline void *ioremap(u64 phys_addr, size_t size __unused) +static inline void __iomem *ioremap(phys_addr_t phys_addr, size_t size __unused) {assert (sizeof (long ) ==8 || !(phys_addr >>32 )); -return (void *)(unsigned long )phys_addr; +return (void __iomem *)(unsigned long )phys_addr; }#endif lib/ppc64/asm/io.h +2
-0@@ -9,5 +9,7 @@#error Undefined byte order#endif +#define __iomem +#include <asm-generic/io.h> #endif lib/x86/asm/io.h +2
-0@@ -4,6 +4,8 @@#include "asm/page.h" #include "asm/barrier.h" +#define __iomem +static inline unsigned char inb (unsigned short port) {unsigned char value;Signature · 6 lines
1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 8/9 io/x86: Factor out ioremap()
In reply to Alexander Gordeev--- lib/x86/asm/io.h | 3 +++ lib/x86/io.c | 14 ++++++++++++++ x86/vmexit.c | 10 ++-------- 3 files changed, 19 insertions(+), 8 deletions(-)
lib/x86/asm/io.h +3 -0
@@ -42,6 +42,9 @@ static inline void outl(unsigned int value, unsigned short port) asm volatile("outl %0, %w1" : : "a"(value), "Nd"(port)); } +#define ioremap ioremap +void __iomem *ioremap (phys_addr_t phys_addr,size_t size); +#include <asm-generic/io.h> #endif
lib/x86/io.c +14 -0
@@ -1,4 +1,5 @@#include "libcflat.h" +#include "vm.h" #include "smp.h" #include "asm/io.h" #ifndef USE_SERIAL
@@ -81,3 +82,16 @@ void exit(int code) asmvolatile ("out %0, %1" : :"a" (code),"d" ((short )0xf4 ));#endif } + +void __iomem *ioremap (phys_addr_t phys_addr,size_t size) +{ +phys_addr_t base =ALIGN (phys_addr,PAGE_SIZE ); +phys_addr_t off = phys_addr - base; +ulong nr =ALIGN (off + size + (PAGE_SIZE -1 ),PAGE_SIZE ) /PAGE_SIZE ; +void *page =alloc_vpages (nr); + +install_page ((void *)read_cr3 (), base, page); + +return page + off; +} +
x86/vmexit.c +2 -8
@@ -371,8 +371,7 @@ int main(int ac, char **av) {struct fadt_descriptor_rev1 *fadt;int i; -unsigned long membar =0 , base, offset; -void *m; +unsigned long membar =0 ;pcidevaddr_t pcidev;smp_init ();
@@ -394,12 +393,7 @@ int main(int ac, char **av) }if (pci_bar_is_memory (pcidev, i)) { membar =pci_bar_addr (pcidev, i); - base = membar & ~4095 ; - offset = membar - base; - m =alloc_vpages (1 ); - -install_page ((void *)read_cr3 (), base, m); - pci_test.memaddr = m + offset; + pci_test.memaddr =ioremap (membar,PAGE_SIZE ); }else { pci_test.iobar =pci_bar_addr (pcidev, i); }
Signature · 1 line
1.8.3.1
Re: [PATCH v2 8/9] io/x86: Factor out ioremap()
Quoted 35 lines · Alexander Gordeev
Cc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>--- lib/x86/asm/io.h | 3 +++ lib/x86/io.c | 14 ++++++++++++++ x86/vmexit.c | 10 ++-------- 3 files changed, 19 insertions(+), 8 deletions(-)lib/x86/asm/io.h +3
-0@@ -42,6 +42,9 @@ static inline void outl(unsigned int value, unsigned short port) asm volatile("outl %0, %w1" : : "a"(value), "Nd"(port)); } +#define ioremap ioremap +void __iomem *ioremap (phys_addr_t phys_addr,size_t size); +#include <asm-generic/io.h> #endif lib/x86/io.c +1
-0@@ -1,4 +1,5 @@#include "libcflat.h" +#include "vm.h" #include "smp.h" #include "asm/io.h" #ifndef USE_SERIAL
lib/x86/io.c void exit(int code) · line 88
Quoted 7 lines
lib/x86/io.c +4
-0@@ -81,3 +82,16 @@ void exit(int code) asmvolatile ("out %0, %1" : :"a" (code),"d" ((short )0xf4 ));#endif } + +void __iomem *ioremap (phys_addr_t phys_addr,size_t size) +{ +phys_addr_t base =ALIGN (phys_addr,PAGE_SIZE );
ALIGN() aligns up, so base will be larger than phys_addr, and then...
lib/x86/io.c void exit(int code) · line 89
Quoted 1 line
lib/x86/io.c +1
-0+phys_addr_t off = phys_addr - base;
...here off is going to be some massive number. But then...
lib/x86/io.c void exit(int code) · line 90
Quoted 1 line
lib/x86/io.c +1
-0+ulong nr =ALIGN (off + size + (PAGE_SIZE -1 ),PAGE_SIZE ) /PAGE_SIZE ;
...it probably gets small again here after adding size (PAGE_SIZE called from vmexit.c) and PAGE_SIZE-1. So you probably end up with nr=1 anyway.
Also, since ALIGN() aligns up, you don't need the '+ (PAGE_SIZE - 1)' here.
Quoted 38 lines
lib/x86/io.c +7
-0+void *page =alloc_vpages (nr); + +install_page ((void *)read_cr3 (), base, page); + +return page + off; +} +x86/vmexit.c +2
-8@@ -371,8 +371,7 @@ int main(int ac, char **av) {struct fadt_descriptor_rev1 *fadt;int i; -unsigned long membar =0 , base, offset; -void *m; +unsigned long membar =0 ;pcidevaddr_t pcidev;smp_init ();@@ -394,12 +393,7 @@ int main(int ac, char **av) }if (pci_bar_is_memory (pcidev, i)) { membar =pci_bar_addr (pcidev, i); - base = membar & ~4095 ; - offset = membar - base; - m =alloc_vpages (1 ); - -install_page ((void *)read_cr3 (), base, m); - pci_test.memaddr = m + offset; + pci_test.memaddr =ioremap (membar,PAGE_SIZE ); }else { pci_test.iobar =pci_bar_addr (pcidev, i); }Signature · 1 line
1.8.3.1
Thanks,
drew
PATCH v2 9/9 io: Disable memory re-ordering for generic memory barriers
In reply to Alexander Gordeev--- lib/asm-generic/io.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
lib/asm-generic/io.h +5 -2
@@ -127,11 +127,14 @@ static inline u64 __bswap64(u64 x) ({ u64 __r = !__cpu_is_be() ? __bswap64(x) : ((u64)x); __r; })#define cpu_to_be64 be64_to_cpu +#ifndef mb +#define mb () asm volatile("":::"memory") +#endif #ifndef rmb -#define rmb () do { } while (0) +#define rmb () asm volatile("":::"memory")#endif #ifndef wmb -#define wmb () do { } while (0) +#define wmb () asm volatile("" ::: "memory")#endif #define readb (addr) \
Signature · 1 line
1.8.3.1
Re: [PATCH v2 9/9] io: Disable memory re-ordering for generic memory barriers
s/Disable/Disallow/ <<< $SUBJECT
Quoted 32 lines · Alexander Gordeev
Suggested-by Thomas Huth <[email protected]>Cc Andrew Jones <[email protected]>Cc Thomas Huth <[email protected]>Cc Radim Krčmář <[email protected]>Signed-off-by Alexander Gordeev <[email protected]>--- lib/asm-generic/io.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)lib/asm-generic/io.h +5
-2@@ -127,11 +127,14 @@ static inline u64 __bswap64(u64 x) ({ u64 __r = !__cpu_is_be() ? __bswap64(x) : ((u64)x); __r; })#define cpu_to_be64 be64_to_cpu +#ifndef mb +#define mb () asm volatile("":::"memory") +#endif #ifndef rmb -#define rmb () do { } while (0) +#define rmb () asm volatile("":::"memory")#endif #ifndef wmb -#define wmb () do { } while (0) +#define wmb () asm volatile("" ::: "memory")#endif #define readb (addr) \Signature · 1 line
1.8.3.1
Otherwise
Quoted 5 lines
--
To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please make sure you add 'kvm-unit-tests' to your PATCH prefix, i.e. [kvm-unit-tests PATCH]. To make sure you don't forget just run
git config format.subjectprefix 'kvm-unit-tests PATCH'
in your kvm-unit-tests git repository (see 'Patches' in the README).
Quoted 60 lines · Alexander Gordeev
This is 2nd attempt to make mainly x86 arch code consistent with other architectures.
Changes since v1:
- arm compilation error fixed;
- disabling memory re-ordering for generic memory barriers added;Alexander Gordeev (9):
Remove unused and unnecessary PHYS32 macro
Movephys_addr_ttype definition tolib/libcflat.h
x86: Introducelib/x86/asm/page.h
x86: Introducelib/x86/asm/io.h
x86: Introducelib/x86/asm/barrier.h
x86: Optimizevirt_to_phys()andphys_to_virt()
io: Makeioremap()prototype conform to Linux one io/x86: Factor outioremap()
io: Disable memory re-ordering for generic memory barriersarm/selftest.c | 1 - lib/alloc.h | 5 ----- lib/arm/asm/page.h | 2 -- lib/arm/asm/setup.h | 1 - lib/arm/setup.c | 1 - lib/asm-generic/io.h | 13 +++++++++---- lib/libcflat.h | 2 ++ lib/powerpc/asm/setup.h | 1 - lib/ppc64/asm/io.h | 2 ++ lib/x86/asm/barrier.h | 8 ++++++++ lib/x86/asm/io.h | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ lib/x86/asm/page.h | 30 +++++++++++++++++++++++++++++ lib/x86/asm/pci.h | 2 +- lib/x86/io.c | 16 +++++++++++++++- lib/x86/io.h | 40 --------------------------------------- lib/x86/smp.h | 4 ---- lib/x86/vm.c | 17 ----------------- lib/x86/vm.h | 24 +----------------------- x86/eventinj.c | 7 +------ x86/hyperv.c | 1 + x86/hyperv.h | 1 - x86/hyperv_stimer.c | 1 - x86/hyperv_synic.c | 1 - x86/init.c | 2 +- x86/kvmclock.c | 1 + x86/svm.c | 1 - x86/vmexit.c | 11 ++--------- x86/vmx.c | 1 - x86/vmx_tests.c | 1 - 29 files changed, 124 insertions(+), 123 deletions(-) create mode 100644 lib/x86/asm/barrier.h create mode 100644 lib/x86/asm/io.h create mode 100644 lib/x86/asm/page.h delete mode 100644 lib/x86/io.hSignature · 6 lines
1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html