Message ID | 20200404131017.27330-6-julien@xen.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | xen: Consolidate asm-*/guest_access.h in xen/guest_access.h | expand |
> -----Original Message----- > From: Julien Grall <julien@xen.org> > Sent: 04 April 2020 14:10 > To: xen-devel@lists.xenproject.org > Cc: julien@xen.org; Julien Grall <jgrall@amazon.com>; Stefano Stabellini <sstabellini@kernel.org>; > Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>; Andrew Cooper <andrew.cooper3@citrix.com>; George > Dunlap <george.dunlap@citrix.com>; Ian Jackson <ian.jackson@eu.citrix.com>; Jan Beulich > <jbeulich@suse.com>; Wei Liu <wl@xen.org>; Roger Pau Monné <roger.pau@citrix.com>; Paul Durrant > <paul@xen.org>; Jun Nakajima <jun.nakajima@intel.com>; Kevin Tian <kevin.tian@intel.com> > Subject: [PATCH 5/7] xen: include xen/guest_access.h rather than asm/guest_access.h > > From: Julien Grall <jgrall@amazon.com> > > Only a few places are actually including asm/guest_access.h. While this > is fine today, a follow-up patch will want to move most of the helpers > from asm/guest_access.h to xen/guest_access.h. > > To prepare the move, everyone should include xen/guest_access.h rather > than asm/guest_access.h. > > Interestingly, asm-arm/guest_access.h includes xen/guest_access.h. The > inclusion is now removed as no-one but the latter should include the > former. > > Signed-off-by: Julien Grall <jgrall@amazon.com> > --- > xen/arch/arm/decode.c | 2 +- > xen/arch/arm/domain.c | 2 +- > xen/arch/arm/guest_walk.c | 3 ++- > xen/arch/arm/guestcopy.c | 2 +- > xen/arch/arm/vgic-v3-its.c | 2 +- > xen/arch/x86/hvm/svm/svm.c | 2 +- > xen/arch/x86/hvm/viridian/viridian.c | 2 +- > xen/arch/x86/hvm/vmx/vmx.c | 2 +- > xen/common/libelf/libelf-loader.c | 2 +- > xen/include/asm-arm/guest_access.h | 1 - > xen/include/asm-x86/guest_access.h | 22 ++++++++++++---------- > xen/lib/x86/private.h | 2 +- > 12 files changed, 23 insertions(+), 21 deletions(-) > > diff --git a/xen/arch/arm/decode.c b/xen/arch/arm/decode.c > index 144793c8ce..792c2e92a7 100644 > --- a/xen/arch/arm/decode.c > +++ b/xen/arch/arm/decode.c > @@ -17,12 +17,12 @@ > * GNU General Public License for more details. > */ > > +#include <xen/guest_access.h> > #include <xen/lib.h> > #include <xen/sched.h> > #include <xen/types.h> > > #include <asm/current.h> > -#include <asm/guest_access.h> > > #include "decode.h" > > diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c > index 2190d908eb..b062c232b6 100644 > --- a/xen/arch/arm/domain.c > +++ b/xen/arch/arm/domain.c > @@ -12,6 +12,7 @@ > #include <xen/bitops.h> > #include <xen/errno.h> > #include <xen/grant_table.h> > +#include <xen/guest_access.h> > #include <xen/hypercall.h> > #include <xen/init.h> > #include <xen/lib.h> > @@ -26,7 +27,6 @@ > #include <asm/current.h> > #include <asm/event.h> > #include <asm/gic.h> > -#include <asm/guest_access.h> > #include <asm/guest_atomics.h> > #include <asm/irq.h> > #include <asm/p2m.h> > diff --git a/xen/arch/arm/guest_walk.c b/xen/arch/arm/guest_walk.c > index a1cdd7f4af..b4496c4c86 100644 > --- a/xen/arch/arm/guest_walk.c > +++ b/xen/arch/arm/guest_walk.c > @@ -16,8 +16,9 @@ > */ > > #include <xen/domain_page.h> > +#include <xen/guest_access.h> > #include <xen/sched.h> > -#include <asm/guest_access.h> > + > #include <asm/guest_walk.h> > #include <asm/short-desc.h> > > diff --git a/xen/arch/arm/guestcopy.c b/xen/arch/arm/guestcopy.c > index c8023e2bca..32681606d8 100644 > --- a/xen/arch/arm/guestcopy.c > +++ b/xen/arch/arm/guestcopy.c > @@ -1,10 +1,10 @@ > #include <xen/domain_page.h> > +#include <xen/guest_access.h> > #include <xen/lib.h> > #include <xen/mm.h> > #include <xen/sched.h> > > #include <asm/current.h> > -#include <asm/guest_access.h> > > #define COPY_flush_dcache (1U << 0) > #define COPY_from_guest (0U << 1) > diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c > index 6e153c698d..58d939b85f 100644 > --- a/xen/arch/arm/vgic-v3-its.c > +++ b/xen/arch/arm/vgic-v3-its.c > @@ -32,6 +32,7 @@ > #include <xen/bitops.h> > #include <xen/config.h> > #include <xen/domain_page.h> > +#include <xen/guest_access.h> > #include <xen/lib.h> > #include <xen/init.h> > #include <xen/softirq.h> > @@ -39,7 +40,6 @@ > #include <xen/sched.h> > #include <xen/sizes.h> > #include <asm/current.h> > -#include <asm/guest_access.h> > #include <asm/mmio.h> > #include <asm/gic_v3_defs.h> > #include <asm/gic_v3_its.h> > diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c > index 888f504a94..9e14a451eb 100644 > --- a/xen/arch/x86/hvm/svm/svm.c > +++ b/xen/arch/x86/hvm/svm/svm.c > @@ -16,6 +16,7 @@ > * this program; If not, see <http://www.gnu.org/licenses/>. > */ > > +#include <xen/guest_access.h> > #include <xen/init.h> > #include <xen/lib.h> > #include <xen/trace.h> > @@ -34,7 +35,6 @@ > #include <asm/cpufeature.h> > #include <asm/processor.h> > #include <asm/amd.h> > -#include <asm/guest_access.h> > #include <asm/debugreg.h> > #include <asm/msr.h> > #include <asm/i387.h> > diff --git a/xen/arch/x86/hvm/viridian/viridian.c b/xen/arch/x86/hvm/viridian/viridian.c > index 977c1bc54f..dc7183a546 100644 > --- a/xen/arch/x86/hvm/viridian/viridian.c > +++ b/xen/arch/x86/hvm/viridian/viridian.c > @@ -5,12 +5,12 @@ > * Hypervisor Top Level Functional Specification for more information. > */ > > +#include <xen/guest_access.h> > #include <xen/sched.h> > #include <xen/version.h> > #include <xen/hypercall.h> > #include <xen/domain_page.h> > #include <xen/param.h> > -#include <asm/guest_access.h> > #include <asm/guest/hyperv-tlfs.h> > #include <asm/paging.h> > #include <asm/p2m.h> > diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c > index 1c398fdb6e..98e9c91ea3 100644 > --- a/xen/arch/x86/hvm/vmx/vmx.c > +++ b/xen/arch/x86/hvm/vmx/vmx.c > @@ -15,6 +15,7 @@ > * this program; If not, see <http://www.gnu.org/licenses/>. > */ > > +#include <xen/guest_access.h> > #include <xen/init.h> > #include <xen/lib.h> > #include <xen/param.h> > @@ -31,7 +32,6 @@ > #include <asm/regs.h> > #include <asm/cpufeature.h> > #include <asm/processor.h> > -#include <asm/guest_access.h> > #include <asm/debugreg.h> > #include <asm/msr.h> > #include <asm/p2m.h> > diff --git a/xen/common/libelf/libelf-loader.c b/xen/common/libelf/libelf-loader.c > index 0f468727d0..629cc0d3e6 100644 > --- a/xen/common/libelf/libelf-loader.c > +++ b/xen/common/libelf/libelf-loader.c > @@ -16,7 +16,7 @@ > */ > > #ifdef __XEN__ > -#include <asm/guest_access.h> > +#include <xen/guest_access.h> > #endif > > #include "libelf-private.h" > diff --git a/xen/include/asm-arm/guest_access.h b/xen/include/asm-arm/guest_access.h > index 4046d50347..93d56868f1 100644 > --- a/xen/include/asm-arm/guest_access.h > +++ b/xen/include/asm-arm/guest_access.h > @@ -1,7 +1,6 @@ > #ifndef __ASM_ARM_GUEST_ACCESS_H__ > #define __ASM_ARM_GUEST_ACCESS_H__ > > -#include <xen/guest_access.h> > #include <xen/errno.h> > #include <xen/sched.h> > > diff --git a/xen/include/asm-x86/guest_access.h b/xen/include/asm-x86/guest_access.h > index 9ee275d01f..5c3dfc47b6 100644 > --- a/xen/include/asm-x86/guest_access.h > +++ b/xen/include/asm-x86/guest_access.h > @@ -54,22 +54,24 @@ > > /* Cast a XEN_GUEST_HANDLE to XEN_GUEST_HANDLE_PARAM */ > #define guest_handle_to_param(hnd, type) ({ \ > + typeof((hnd).p) _x = (hnd).p; \ > + XEN_GUEST_HANDLE_PARAM(type) _y = { _x }; \ > /* type checking: make sure that the pointers inside \ > * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ > * the same type, then return hnd */ \ > - (void)((typeof(&(hnd).p)) 0 == \ > - (typeof(&((XEN_GUEST_HANDLE_PARAM(type)) {}).p)) 0); \ > - (hnd); \ > + (void)(&_x == &_y.p); \ > + _y; \ > }) > > /* Cast a XEN_GUEST_HANDLE_PARAM to XEN_GUEST_HANDLE */ > -#define guest_handle_from_param(hnd, type) ({ \ > - /* type checking: make sure that the pointers inside \ > - * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ > - * the same type, then return hnd */ \ > - (void)((typeof(&(hnd).p)) 0 == \ > - (typeof(&((XEN_GUEST_HANDLE_PARAM(type)) {}).p)) 0); \ > - (hnd); \ > +#define guest_handle_from_param(hnd, type) ({ \ > + typeof((hnd).p) _x = (hnd).p; \ > + XEN_GUEST_HANDLE(type) _y = { _x }; \ > + /* type checking: make sure that the pointers inside \ > + * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ > + * the same type, then return hnd */ \ > + (void)(&_x == &_y.p); \ > + _y; \ > }) > The commit comment would have the reader believe that this patch is just some changes in header file inclusion. These last two hunks are something else so I would suggest they get split out into a separate patch. Paul > #define guest_handle_for_field(hnd, type, fld) \ > diff --git a/xen/lib/x86/private.h b/xen/lib/x86/private.h > index b793181464..2d53bd3ced 100644 > --- a/xen/lib/x86/private.h > +++ b/xen/lib/x86/private.h > @@ -4,12 +4,12 @@ > #ifdef __XEN__ > > #include <xen/bitops.h> > +#include <xen/guest_access.h> > #include <xen/kernel.h> > #include <xen/lib.h> > #include <xen/nospec.h> > #include <xen/types.h> > > -#include <asm/guest_access.h> > #include <asm/msr-index.h> > > #define copy_to_buffer_offset copy_to_guest_offset > -- > 2.17.1
Hi Paul, On 06/04/2020 08:40, Paul Durrant wrote: >> diff --git a/xen/include/asm-x86/guest_access.h b/xen/include/asm-x86/guest_access.h >> index 9ee275d01f..5c3dfc47b6 100644 >> --- a/xen/include/asm-x86/guest_access.h >> +++ b/xen/include/asm-x86/guest_access.h >> @@ -54,22 +54,24 @@ >> >> /* Cast a XEN_GUEST_HANDLE to XEN_GUEST_HANDLE_PARAM */ >> #define guest_handle_to_param(hnd, type) ({ \ >> + typeof((hnd).p) _x = (hnd).p; \ >> + XEN_GUEST_HANDLE_PARAM(type) _y = { _x }; \ >> /* type checking: make sure that the pointers inside \ >> * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ >> * the same type, then return hnd */ \ >> - (void)((typeof(&(hnd).p)) 0 == \ >> - (typeof(&((XEN_GUEST_HANDLE_PARAM(type)) {}).p)) 0); \ >> - (hnd); \ >> + (void)(&_x == &_y.p); \ >> + _y; \ >> }) >> >> /* Cast a XEN_GUEST_HANDLE_PARAM to XEN_GUEST_HANDLE */ >> -#define guest_handle_from_param(hnd, type) ({ \ >> - /* type checking: make sure that the pointers inside \ >> - * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ >> - * the same type, then return hnd */ \ >> - (void)((typeof(&(hnd).p)) 0 == \ >> - (typeof(&((XEN_GUEST_HANDLE_PARAM(type)) {}).p)) 0); \ >> - (hnd); \ >> +#define guest_handle_from_param(hnd, type) ({ \ >> + typeof((hnd).p) _x = (hnd).p; \ >> + XEN_GUEST_HANDLE(type) _y = { _x }; \ >> + /* type checking: make sure that the pointers inside \ >> + * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ >> + * the same type, then return hnd */ \ >> + (void)(&_x == &_y.p); \ >> + _y; \ >> }) >> > > The commit comment would have the reader believe that this patch is just some changes in header file inclusion. These last two hunks are something else so I would suggest they get split out into a separate patch. These two chunks were meant to be squashed in patch #6, but I messed up the rebase. I will fix on the next version. Sorry for that. Cheers, > > Paul > >> #define guest_handle_for_field(hnd, type, fld) \ >> diff --git a/xen/lib/x86/private.h b/xen/lib/x86/private.h >> index b793181464..2d53bd3ced 100644 >> --- a/xen/lib/x86/private.h >> +++ b/xen/lib/x86/private.h >> @@ -4,12 +4,12 @@ >> #ifdef __XEN__ >> >> #include <xen/bitops.h> >> +#include <xen/guest_access.h> >> #include <xen/kernel.h> >> #include <xen/lib.h> >> #include <xen/nospec.h> >> #include <xen/types.h> >> >> -#include <asm/guest_access.h> >> #include <asm/msr-index.h> >> >> #define copy_to_buffer_offset copy_to_guest_offset >> -- >> 2.17.1 > >
diff --git a/xen/arch/arm/decode.c b/xen/arch/arm/decode.c index 144793c8ce..792c2e92a7 100644 --- a/xen/arch/arm/decode.c +++ b/xen/arch/arm/decode.c @@ -17,12 +17,12 @@ * GNU General Public License for more details. */ +#include <xen/guest_access.h> #include <xen/lib.h> #include <xen/sched.h> #include <xen/types.h> #include <asm/current.h> -#include <asm/guest_access.h> #include "decode.h" diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index 2190d908eb..b062c232b6 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -12,6 +12,7 @@ #include <xen/bitops.h> #include <xen/errno.h> #include <xen/grant_table.h> +#include <xen/guest_access.h> #include <xen/hypercall.h> #include <xen/init.h> #include <xen/lib.h> @@ -26,7 +27,6 @@ #include <asm/current.h> #include <asm/event.h> #include <asm/gic.h> -#include <asm/guest_access.h> #include <asm/guest_atomics.h> #include <asm/irq.h> #include <asm/p2m.h> diff --git a/xen/arch/arm/guest_walk.c b/xen/arch/arm/guest_walk.c index a1cdd7f4af..b4496c4c86 100644 --- a/xen/arch/arm/guest_walk.c +++ b/xen/arch/arm/guest_walk.c @@ -16,8 +16,9 @@ */ #include <xen/domain_page.h> +#include <xen/guest_access.h> #include <xen/sched.h> -#include <asm/guest_access.h> + #include <asm/guest_walk.h> #include <asm/short-desc.h> diff --git a/xen/arch/arm/guestcopy.c b/xen/arch/arm/guestcopy.c index c8023e2bca..32681606d8 100644 --- a/xen/arch/arm/guestcopy.c +++ b/xen/arch/arm/guestcopy.c @@ -1,10 +1,10 @@ #include <xen/domain_page.h> +#include <xen/guest_access.h> #include <xen/lib.h> #include <xen/mm.h> #include <xen/sched.h> #include <asm/current.h> -#include <asm/guest_access.h> #define COPY_flush_dcache (1U << 0) #define COPY_from_guest (0U << 1) diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c index 6e153c698d..58d939b85f 100644 --- a/xen/arch/arm/vgic-v3-its.c +++ b/xen/arch/arm/vgic-v3-its.c @@ -32,6 +32,7 @@ #include <xen/bitops.h> #include <xen/config.h> #include <xen/domain_page.h> +#include <xen/guest_access.h> #include <xen/lib.h> #include <xen/init.h> #include <xen/softirq.h> @@ -39,7 +40,6 @@ #include <xen/sched.h> #include <xen/sizes.h> #include <asm/current.h> -#include <asm/guest_access.h> #include <asm/mmio.h> #include <asm/gic_v3_defs.h> #include <asm/gic_v3_its.h> diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index 888f504a94..9e14a451eb 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -16,6 +16,7 @@ * this program; If not, see <http://www.gnu.org/licenses/>. */ +#include <xen/guest_access.h> #include <xen/init.h> #include <xen/lib.h> #include <xen/trace.h> @@ -34,7 +35,6 @@ #include <asm/cpufeature.h> #include <asm/processor.h> #include <asm/amd.h> -#include <asm/guest_access.h> #include <asm/debugreg.h> #include <asm/msr.h> #include <asm/i387.h> diff --git a/xen/arch/x86/hvm/viridian/viridian.c b/xen/arch/x86/hvm/viridian/viridian.c index 977c1bc54f..dc7183a546 100644 --- a/xen/arch/x86/hvm/viridian/viridian.c +++ b/xen/arch/x86/hvm/viridian/viridian.c @@ -5,12 +5,12 @@ * Hypervisor Top Level Functional Specification for more information. */ +#include <xen/guest_access.h> #include <xen/sched.h> #include <xen/version.h> #include <xen/hypercall.h> #include <xen/domain_page.h> #include <xen/param.h> -#include <asm/guest_access.h> #include <asm/guest/hyperv-tlfs.h> #include <asm/paging.h> #include <asm/p2m.h> diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 1c398fdb6e..98e9c91ea3 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -15,6 +15,7 @@ * this program; If not, see <http://www.gnu.org/licenses/>. */ +#include <xen/guest_access.h> #include <xen/init.h> #include <xen/lib.h> #include <xen/param.h> @@ -31,7 +32,6 @@ #include <asm/regs.h> #include <asm/cpufeature.h> #include <asm/processor.h> -#include <asm/guest_access.h> #include <asm/debugreg.h> #include <asm/msr.h> #include <asm/p2m.h> diff --git a/xen/common/libelf/libelf-loader.c b/xen/common/libelf/libelf-loader.c index 0f468727d0..629cc0d3e6 100644 --- a/xen/common/libelf/libelf-loader.c +++ b/xen/common/libelf/libelf-loader.c @@ -16,7 +16,7 @@ */ #ifdef __XEN__ -#include <asm/guest_access.h> +#include <xen/guest_access.h> #endif #include "libelf-private.h" diff --git a/xen/include/asm-arm/guest_access.h b/xen/include/asm-arm/guest_access.h index 4046d50347..93d56868f1 100644 --- a/xen/include/asm-arm/guest_access.h +++ b/xen/include/asm-arm/guest_access.h @@ -1,7 +1,6 @@ #ifndef __ASM_ARM_GUEST_ACCESS_H__ #define __ASM_ARM_GUEST_ACCESS_H__ -#include <xen/guest_access.h> #include <xen/errno.h> #include <xen/sched.h> diff --git a/xen/include/asm-x86/guest_access.h b/xen/include/asm-x86/guest_access.h index 9ee275d01f..5c3dfc47b6 100644 --- a/xen/include/asm-x86/guest_access.h +++ b/xen/include/asm-x86/guest_access.h @@ -54,22 +54,24 @@ /* Cast a XEN_GUEST_HANDLE to XEN_GUEST_HANDLE_PARAM */ #define guest_handle_to_param(hnd, type) ({ \ + typeof((hnd).p) _x = (hnd).p; \ + XEN_GUEST_HANDLE_PARAM(type) _y = { _x }; \ /* type checking: make sure that the pointers inside \ * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ * the same type, then return hnd */ \ - (void)((typeof(&(hnd).p)) 0 == \ - (typeof(&((XEN_GUEST_HANDLE_PARAM(type)) {}).p)) 0); \ - (hnd); \ + (void)(&_x == &_y.p); \ + _y; \ }) /* Cast a XEN_GUEST_HANDLE_PARAM to XEN_GUEST_HANDLE */ -#define guest_handle_from_param(hnd, type) ({ \ - /* type checking: make sure that the pointers inside \ - * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ - * the same type, then return hnd */ \ - (void)((typeof(&(hnd).p)) 0 == \ - (typeof(&((XEN_GUEST_HANDLE_PARAM(type)) {}).p)) 0); \ - (hnd); \ +#define guest_handle_from_param(hnd, type) ({ \ + typeof((hnd).p) _x = (hnd).p; \ + XEN_GUEST_HANDLE(type) _y = { _x }; \ + /* type checking: make sure that the pointers inside \ + * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ + * the same type, then return hnd */ \ + (void)(&_x == &_y.p); \ + _y; \ }) #define guest_handle_for_field(hnd, type, fld) \ diff --git a/xen/lib/x86/private.h b/xen/lib/x86/private.h index b793181464..2d53bd3ced 100644 --- a/xen/lib/x86/private.h +++ b/xen/lib/x86/private.h @@ -4,12 +4,12 @@ #ifdef __XEN__ #include <xen/bitops.h> +#include <xen/guest_access.h> #include <xen/kernel.h> #include <xen/lib.h> #include <xen/nospec.h> #include <xen/types.h> -#include <asm/guest_access.h> #include <asm/msr-index.h> #define copy_to_buffer_offset copy_to_guest_offset