* [PATCH 0/2] domain: followup for phys address mapping series @ 2023-10-06 9:13 Roger Pau Monne 2023-10-06 9:13 ` [PATCH 1/2] domain: fix misaligned unmap address in unmap_guest_area() Roger Pau Monne 2023-10-06 9:13 ` [PATCH 2/2] domain: expose newly introduced hypercalls as XENFEAT Roger Pau Monne 0 siblings, 2 replies; 11+ messages in thread From: Roger Pau Monne @ 2023-10-06 9:13 UTC (permalink / raw) To: xen-devel Cc: Henry Wang, Roger Pau Monne, Andrew Cooper, George Dunlap, Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu, Community Manager Hello, First patch fixes a bug reported by osstest, second patch is an addition requested by Andrew, I think this should remove the blocker raised against the series. Roger Pau Monne (2): domain: fix misaligned unmap address in unmap_guest_area() domain: expose newly introduced hypercalls as XENFEAT CHANGELOG.md | 2 ++ xen/common/domain.c | 2 +- xen/common/kernel.c | 6 +++++- xen/include/public/features.h | 9 +++++++++ 4 files changed, 17 insertions(+), 2 deletions(-) -- 2.42.0 ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/2] domain: fix misaligned unmap address in unmap_guest_area() 2023-10-06 9:13 [PATCH 0/2] domain: followup for phys address mapping series Roger Pau Monne @ 2023-10-06 9:13 ` Roger Pau Monne 2023-10-06 9:18 ` Henry Wang 2023-10-06 10:08 ` Julien Grall 2023-10-06 9:13 ` [PATCH 2/2] domain: expose newly introduced hypercalls as XENFEAT Roger Pau Monne 1 sibling, 2 replies; 11+ messages in thread From: Roger Pau Monne @ 2023-10-06 9:13 UTC (permalink / raw) To: xen-devel Cc: Henry Wang, Roger Pau Monne, Andrew Cooper, George Dunlap, Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu unmap_domain_page_global() expects the provided address to be page aligned, or else some of the called functions will trigger assertions, like modify_xen_mappings() on x86 or destroy_xen_mappings() on Arm. The following assert has been reported by osstest arm 32bit tests: (XEN) Assertion 'IS_ALIGNED(s, PAGE_SIZE)' failed at arch/arm/mm.c:1243 (XEN) ----[ Xen-4.18-rc arm32 debug=y Not tainted ]---- (XEN) CPU: 0 (XEN) PC: 00271a38 destroy_xen_mappings+0x50/0x5c [...] (XEN) Xen call trace: (XEN) [<00271a38>] destroy_xen_mappings+0x50/0x5c (PC) (XEN) [<00235aa8>] vunmap+0x30/0x1a0 (LR) (XEN) [<0026ad88>] unmap_domain_page_global+0x10/0x20 (XEN) [<00208e38>] unmap_guest_area+0x90/0xec (XEN) [<00208f98>] domain_kill+0x104/0x180 (XEN) [<00239e3c>] do_domctl+0x8ac/0x14fc (XEN) [<0027ae34>] do_trap_guest_sync+0x570/0x66c (XEN) [<002019f0>] arch/arm/arm32/entry.o#return_from_trap+0/0x4 Fixes: eadc288cbb0d ('domain: map/unmap GADDR based shared guest areas') Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> --- unmap_domain_page_global() and vunmap() should likely have the same alignment asserts, as not all paths lead to detecting the misalignment of the provided linear address. Will do a separate patch. --- xen/common/domain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index b8281d7cff9d..2dcc64e659cc 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1634,7 +1634,7 @@ void unmap_guest_area(struct vcpu *v, struct guest_area *area) if ( pg ) { - unmap_domain_page_global(map); + unmap_domain_page_global((void *)((unsigned long)map & PAGE_MASK)); put_page_and_type(pg); } } -- 2.42.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] domain: fix misaligned unmap address in unmap_guest_area() 2023-10-06 9:13 ` [PATCH 1/2] domain: fix misaligned unmap address in unmap_guest_area() Roger Pau Monne @ 2023-10-06 9:18 ` Henry Wang 2023-10-06 10:08 ` Julien Grall 1 sibling, 0 replies; 11+ messages in thread From: Henry Wang @ 2023-10-06 9:18 UTC (permalink / raw) To: Roger Pau Monne Cc: Xen-devel, Andrew Cooper, George Dunlap, Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu Hi Roger, > On Oct 6, 2023, at 17:13, Roger Pau Monne <roger.pau@citrix.com> wrote: > > unmap_domain_page_global() expects the provided address to be page aligned, or > else some of the called functions will trigger assertions, like > modify_xen_mappings() on x86 or destroy_xen_mappings() on Arm. > > The following assert has been reported by osstest arm 32bit tests: > > (XEN) Assertion 'IS_ALIGNED(s, PAGE_SIZE)' failed at arch/arm/mm.c:1243 > (XEN) ----[ Xen-4.18-rc arm32 debug=y Not tainted ]---- > (XEN) CPU: 0 > (XEN) PC: 00271a38 destroy_xen_mappings+0x50/0x5c > [...] > (XEN) Xen call trace: > (XEN) [<00271a38>] destroy_xen_mappings+0x50/0x5c (PC) > (XEN) [<00235aa8>] vunmap+0x30/0x1a0 (LR) > (XEN) [<0026ad88>] unmap_domain_page_global+0x10/0x20 > (XEN) [<00208e38>] unmap_guest_area+0x90/0xec > (XEN) [<00208f98>] domain_kill+0x104/0x180 > (XEN) [<00239e3c>] do_domctl+0x8ac/0x14fc > (XEN) [<0027ae34>] do_trap_guest_sync+0x570/0x66c > (XEN) [<002019f0>] arch/arm/arm32/entry.o#return_from_trap+0/0x4 > > Fixes: eadc288cbb0d ('domain: map/unmap GADDR based shared guest areas') > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Release-acked-by: Henry Wang <Henry.Wang@arm.com> Kind regards, Henry > --- > unmap_domain_page_global() and vunmap() should likely have the same alignment > asserts, as not all paths lead to detecting the misalignment of the provided > linear address. Will do a separate patch. > --- > xen/common/domain.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/xen/common/domain.c b/xen/common/domain.c > index b8281d7cff9d..2dcc64e659cc 100644 > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -1634,7 +1634,7 @@ void unmap_guest_area(struct vcpu *v, struct guest_area *area) > > if ( pg ) > { > - unmap_domain_page_global(map); > + unmap_domain_page_global((void *)((unsigned long)map & PAGE_MASK)); > put_page_and_type(pg); > } > } > -- > 2.42.0 > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] domain: fix misaligned unmap address in unmap_guest_area() 2023-10-06 9:13 ` [PATCH 1/2] domain: fix misaligned unmap address in unmap_guest_area() Roger Pau Monne 2023-10-06 9:18 ` Henry Wang @ 2023-10-06 10:08 ` Julien Grall 2023-10-06 10:47 ` Roger Pau Monné 1 sibling, 1 reply; 11+ messages in thread From: Julien Grall @ 2023-10-06 10:08 UTC (permalink / raw) To: Roger Pau Monne, xen-devel Cc: Henry Wang, Andrew Cooper, George Dunlap, Jan Beulich, Stefano Stabellini, Wei Liu Hi Roger, On 06/10/2023 10:13, Roger Pau Monne wrote: > unmap_domain_page_global() expects the provided address to be page aligned, or > else some of the called functions will trigger assertions, like > modify_xen_mappings() on x86 or destroy_xen_mappings() on Arm. > > The following assert has been reported by osstest arm 32bit tests: > > (XEN) Assertion 'IS_ALIGNED(s, PAGE_SIZE)' failed at arch/arm/mm.c:1243 > (XEN) ----[ Xen-4.18-rc arm32 debug=y Not tainted ]---- > (XEN) CPU: 0 > (XEN) PC: 00271a38 destroy_xen_mappings+0x50/0x5c > [...] > (XEN) Xen call trace: > (XEN) [<00271a38>] destroy_xen_mappings+0x50/0x5c (PC) > (XEN) [<00235aa8>] vunmap+0x30/0x1a0 (LR) > (XEN) [<0026ad88>] unmap_domain_page_global+0x10/0x20 > (XEN) [<00208e38>] unmap_guest_area+0x90/0xec > (XEN) [<00208f98>] domain_kill+0x104/0x180 > (XEN) [<00239e3c>] do_domctl+0x8ac/0x14fc > (XEN) [<0027ae34>] do_trap_guest_sync+0x570/0x66c > (XEN) [<002019f0>] arch/arm/arm32/entry.o#return_from_trap+0/0x4 > > Fixes: eadc288cbb0d ('domain: map/unmap GADDR based shared guest areas') > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> > --- > unmap_domain_page_global() and vunmap() should likely have the same alignment > asserts, as not all paths lead to detecting the misalignment of the provided > linear address. Will do a separate patch. unmap_domain_page() seems to be able to deal with unaligned pointer. And supporting unaligned pointer in vunmap()/unmap_domain_page_global() would simplifyy call to those functions. So I would consider to deal with the alignment rather than adding ASSERT() in the two functions. destroy_xen_mappings() and modify_xen_mappings() should stay as-is though. Anyway, I don't think this is a 4.18 material. > --- > xen/common/domain.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/xen/common/domain.c b/xen/common/domain.c > index b8281d7cff9d..2dcc64e659cc 100644 > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -1634,7 +1634,7 @@ void unmap_guest_area(struct vcpu *v, struct guest_area *area) > > if ( pg ) > { > - unmap_domain_page_global(map); > + unmap_domain_page_global((void *)((unsigned long)map & PAGE_MASK)); Looking at the code, I can't find where 'map' may have become unaligned. Do you have a pointer? Depending on the answer, the call in map_guest_area() may also need some adjustment. Cheers, -- Julien Grall ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] domain: fix misaligned unmap address in unmap_guest_area() 2023-10-06 10:08 ` Julien Grall @ 2023-10-06 10:47 ` Roger Pau Monné 0 siblings, 0 replies; 11+ messages in thread From: Roger Pau Monné @ 2023-10-06 10:47 UTC (permalink / raw) To: Julien Grall Cc: xen-devel, Henry Wang, Andrew Cooper, George Dunlap, Jan Beulich, Stefano Stabellini, Wei Liu On Fri, Oct 06, 2023 at 11:08:09AM +0100, Julien Grall wrote: > Hi Roger, > > On 06/10/2023 10:13, Roger Pau Monne wrote: > > unmap_domain_page_global() expects the provided address to be page aligned, or > > else some of the called functions will trigger assertions, like > > modify_xen_mappings() on x86 or destroy_xen_mappings() on Arm. > > > > The following assert has been reported by osstest arm 32bit tests: > > > > (XEN) Assertion 'IS_ALIGNED(s, PAGE_SIZE)' failed at arch/arm/mm.c:1243 > > (XEN) ----[ Xen-4.18-rc arm32 debug=y Not tainted ]---- > > (XEN) CPU: 0 > > (XEN) PC: 00271a38 destroy_xen_mappings+0x50/0x5c > > [...] > > (XEN) Xen call trace: > > (XEN) [<00271a38>] destroy_xen_mappings+0x50/0x5c (PC) > > (XEN) [<00235aa8>] vunmap+0x30/0x1a0 (LR) > > (XEN) [<0026ad88>] unmap_domain_page_global+0x10/0x20 > > (XEN) [<00208e38>] unmap_guest_area+0x90/0xec > > (XEN) [<00208f98>] domain_kill+0x104/0x180 > > (XEN) [<00239e3c>] do_domctl+0x8ac/0x14fc > > (XEN) [<0027ae34>] do_trap_guest_sync+0x570/0x66c > > (XEN) [<002019f0>] arch/arm/arm32/entry.o#return_from_trap+0/0x4 > > > > Fixes: eadc288cbb0d ('domain: map/unmap GADDR based shared guest areas') > > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> > > --- > > unmap_domain_page_global() and vunmap() should likely have the same alignment > > asserts, as not all paths lead to detecting the misalignment of the provided > > linear address. Will do a separate patch. > > unmap_domain_page() seems to be able to deal with unaligned pointer. And > supporting unaligned pointer in vunmap()/unmap_domain_page_global() would > simplifyy call to those functions. > > So I would consider to deal with the alignment rather than adding ASSERT() > in the two functions. destroy_xen_mappings() and modify_xen_mappings() > should stay as-is though. > > Anyway, I don't think this is a 4.18 material. Maybe, I don't really have a strong opinion. It seems more sane to me to expect a page aligned linear address if the function is unmapping a page, leaves less room for misuse IMO. > > --- > > xen/common/domain.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/xen/common/domain.c b/xen/common/domain.c > > index b8281d7cff9d..2dcc64e659cc 100644 > > --- a/xen/common/domain.c > > +++ b/xen/common/domain.c > > @@ -1634,7 +1634,7 @@ void unmap_guest_area(struct vcpu *v, struct guest_area *area) > > if ( pg ) > > { > > - unmap_domain_page_global(map); > > + unmap_domain_page_global((void *)((unsigned long)map & PAGE_MASK)); > > Looking at the code, I can't find where 'map' may have become unaligned. Do > you have a pointer? In map_guest_area(), there's: if ( ~gaddr ) /* Map (i.e. not just unmap)? */ { [...] map = __map_domain_page_global(pg); if ( !map ) { put_page_and_type(pg); return -ENOMEM; } map += PAGE_OFFSET(gaddr); } > Depending on the answer, the call in map_guest_area() may also need some > adjustment. Indeed, I've missed that one, let me spin v2. Thanks, Roger. ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/2] domain: expose newly introduced hypercalls as XENFEAT 2023-10-06 9:13 [PATCH 0/2] domain: followup for phys address mapping series Roger Pau Monne 2023-10-06 9:13 ` [PATCH 1/2] domain: fix misaligned unmap address in unmap_guest_area() Roger Pau Monne @ 2023-10-06 9:13 ` Roger Pau Monne 2023-10-06 9:18 ` Henry Wang 2023-10-06 10:47 ` Andrew Cooper 1 sibling, 2 replies; 11+ messages in thread From: Roger Pau Monne @ 2023-10-06 9:13 UTC (permalink / raw) To: xen-devel Cc: Henry Wang, Roger Pau Monne, Community Manager, Andrew Cooper, George Dunlap, Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu XENFEAT_runstate_phys_area is exposed to all architectures, while XENFEAT_vcpu_time_phys_area is currnelty only implemented for x86, and hence the feature flag is also only exposed on x86. Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> --- CHANGELOG.md | 2 ++ xen/common/kernel.c | 6 +++++- xen/include/public/features.h | 9 +++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e33cf4e1b113..41da710426f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Add Intel Hardware P-States (HWP) cpufreq driver. - On Arm, experimental support for dynamic addition/removal of Xen device tree nodes using a device tree overlay binary (.dtbo). + - Introduce two new hypercalls to map the vCPU runstate and time areas by + physical rather than linear addresses. ### Removed - On x86, the "pku" command line option has been removed. It has never diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 52aa28762782..b6302e44b34e 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -607,7 +607,11 @@ long do_xen_version(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) switch ( fi.submap_idx ) { case 0: - fi.submap = (1U << XENFEAT_memory_op_vnode_supported); + fi.submap = (1U << XENFEAT_memory_op_vnode_supported) | +#ifdef CONFIG_X86 + (1U << XENFEAT_vcpu_time_phys_area) | +#endif + (1U << XENFEAT_runstate_phys_area); if ( VM_ASSIST(d, pae_extended_cr3) ) fi.submap |= (1U << XENFEAT_pae_pgdir_above_4gb); if ( paging_mode_translate(d) ) diff --git a/xen/include/public/features.h b/xen/include/public/features.h index d2a9175aae67..cffb2f14a562 100644 --- a/xen/include/public/features.h +++ b/xen/include/public/features.h @@ -111,6 +111,15 @@ #define XENFEAT_not_direct_mapped 16 #define XENFEAT_direct_mapped 17 +/* + * Signal whether the hypervisor implements the following hypercalls: + * + * VCPUOP_register_runstate_phys_area + * VCPUOP_register_vcpu_time_phys_area + */ +#define XENFEAT_runstate_phys_area 18 +#define XENFEAT_vcpu_time_phys_area 19 + #define XENFEAT_NR_SUBMAPS 1 #endif /* __XEN_PUBLIC_FEATURES_H__ */ -- 2.42.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] domain: expose newly introduced hypercalls as XENFEAT 2023-10-06 9:13 ` [PATCH 2/2] domain: expose newly introduced hypercalls as XENFEAT Roger Pau Monne @ 2023-10-06 9:18 ` Henry Wang 2023-10-06 10:47 ` Andrew Cooper 1 sibling, 0 replies; 11+ messages in thread From: Henry Wang @ 2023-10-06 9:18 UTC (permalink / raw) To: Roger Pau Monne Cc: Xen-devel, Community Manager, Andrew Cooper, George Dunlap, Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu Hi Roger, > On Oct 6, 2023, at 17:13, Roger Pau Monne <roger.pau@citrix.com> wrote: > > XENFEAT_runstate_phys_area is exposed to all architectures, while > XENFEAT_vcpu_time_phys_area is currnelty only implemented for x86, and hence > the feature flag is also only exposed on x86. > > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Release-acked-by: Henry Wang <Henry.Wang@arm.com> Kind regards, Henry > --- > CHANGELOG.md | 2 ++ > xen/common/kernel.c | 6 +++++- > xen/include/public/features.h | 9 +++++++++ > 3 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/CHANGELOG.md b/CHANGELOG.md > index e33cf4e1b113..41da710426f6 100644 > --- a/CHANGELOG.md > +++ b/CHANGELOG.md > @@ -31,6 +31,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) > - Add Intel Hardware P-States (HWP) cpufreq driver. > - On Arm, experimental support for dynamic addition/removal of Xen device tree > nodes using a device tree overlay binary (.dtbo). > + - Introduce two new hypercalls to map the vCPU runstate and time areas by > + physical rather than linear addresses. > > ### Removed > - On x86, the "pku" command line option has been removed. It has never > diff --git a/xen/common/kernel.c b/xen/common/kernel.c > index 52aa28762782..b6302e44b34e 100644 > --- a/xen/common/kernel.c > +++ b/xen/common/kernel.c > @@ -607,7 +607,11 @@ long do_xen_version(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) > switch ( fi.submap_idx ) > { > case 0: > - fi.submap = (1U << XENFEAT_memory_op_vnode_supported); > + fi.submap = (1U << XENFEAT_memory_op_vnode_supported) | > +#ifdef CONFIG_X86 > + (1U << XENFEAT_vcpu_time_phys_area) | > +#endif > + (1U << XENFEAT_runstate_phys_area); > if ( VM_ASSIST(d, pae_extended_cr3) ) > fi.submap |= (1U << XENFEAT_pae_pgdir_above_4gb); > if ( paging_mode_translate(d) ) > diff --git a/xen/include/public/features.h b/xen/include/public/features.h > index d2a9175aae67..cffb2f14a562 100644 > --- a/xen/include/public/features.h > +++ b/xen/include/public/features.h > @@ -111,6 +111,15 @@ > #define XENFEAT_not_direct_mapped 16 > #define XENFEAT_direct_mapped 17 > > +/* > + * Signal whether the hypervisor implements the following hypercalls: > + * > + * VCPUOP_register_runstate_phys_area > + * VCPUOP_register_vcpu_time_phys_area > + */ > +#define XENFEAT_runstate_phys_area 18 > +#define XENFEAT_vcpu_time_phys_area 19 > + > #define XENFEAT_NR_SUBMAPS 1 > > #endif /* __XEN_PUBLIC_FEATURES_H__ */ > -- > 2.42.0 > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] domain: expose newly introduced hypercalls as XENFEAT 2023-10-06 9:13 ` [PATCH 2/2] domain: expose newly introduced hypercalls as XENFEAT Roger Pau Monne 2023-10-06 9:18 ` Henry Wang @ 2023-10-06 10:47 ` Andrew Cooper 2023-10-06 11:02 ` Roger Pau Monné 1 sibling, 1 reply; 11+ messages in thread From: Andrew Cooper @ 2023-10-06 10:47 UTC (permalink / raw) To: Roger Pau Monne, xen-devel Cc: Henry Wang, Community Manager, George Dunlap, Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu On 06/10/2023 10:13 am, Roger Pau Monne wrote: > XENFEAT_runstate_phys_area is exposed to all architectures, while > XENFEAT_vcpu_time_phys_area is currnelty only implemented for x86, and hence > the feature flag is also only exposed on x86. > > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Thanks for doing this. > --- > CHANGELOG.md | 2 ++ > xen/common/kernel.c | 6 +++++- > xen/include/public/features.h | 9 +++++++++ > 3 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/CHANGELOG.md b/CHANGELOG.md > index e33cf4e1b113..41da710426f6 100644 > --- a/CHANGELOG.md > +++ b/CHANGELOG.md > @@ -31,6 +31,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) > - Add Intel Hardware P-States (HWP) cpufreq driver. > - On Arm, experimental support for dynamic addition/removal of Xen device tree > nodes using a device tree overlay binary (.dtbo). > + - Introduce two new hypercalls to map the vCPU runstate and time areas by > + physical rather than linear addresses. I'd suggest linear/virtual here. Linear is the correct term in x86, but virtual is the correct term in pretty much every other architecture. > diff --git a/xen/include/public/features.h b/xen/include/public/features.h > index d2a9175aae67..cffb2f14a562 100644 > --- a/xen/include/public/features.h > +++ b/xen/include/public/features.h > @@ -111,6 +111,15 @@ > #define XENFEAT_not_direct_mapped 16 > #define XENFEAT_direct_mapped 17 > > +/* > + * Signal whether the hypervisor implements the following hypercalls: This is not what the hypervisor implements. It's what the domain is permitted to use. There also needs to be a matching patch to public/vcpu.h to require implementations to check for these feature bits before using the new hypercalls. Also, diff --git a/xen/common/domain.c b/xen/common/domain.c index b8281d7cff9d..df994bd30fd2 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1998,6 +1998,10 @@ long common_vcpu_op(int cmd, struct vcpu *v { struct vcpu_register_runstate_memory_area area; + rc = -ENOSYS; + if ( 0 /* TODO: Dom's XENFEAT_runstate_phys_area setting */ ) + break; + rc = -EFAULT; if ( copy_from_guest(&area.addr.p, arg, 1) ) break; and a matching one for XENFEAT_vcpu_time_phys_area because I'm even more serious about this becoming a domain controllable setting following what OSSTest had to say overnight. ~Andrew ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] domain: expose newly introduced hypercalls as XENFEAT 2023-10-06 10:47 ` Andrew Cooper @ 2023-10-06 11:02 ` Roger Pau Monné 2023-10-06 11:19 ` Andrew Cooper 0 siblings, 1 reply; 11+ messages in thread From: Roger Pau Monné @ 2023-10-06 11:02 UTC (permalink / raw) To: Andrew Cooper Cc: xen-devel, Henry Wang, Community Manager, George Dunlap, Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu On Fri, Oct 06, 2023 at 11:47:48AM +0100, Andrew Cooper wrote: > On 06/10/2023 10:13 am, Roger Pau Monne wrote: > > XENFEAT_runstate_phys_area is exposed to all architectures, while > > XENFEAT_vcpu_time_phys_area is currnelty only implemented for x86, and hence > > the feature flag is also only exposed on x86. > > > > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> > > Thanks for doing this. > > > --- > > CHANGELOG.md | 2 ++ > > xen/common/kernel.c | 6 +++++- > > xen/include/public/features.h | 9 +++++++++ > > 3 files changed, 16 insertions(+), 1 deletion(-) > > > > diff --git a/CHANGELOG.md b/CHANGELOG.md > > index e33cf4e1b113..41da710426f6 100644 > > --- a/CHANGELOG.md > > +++ b/CHANGELOG.md > > @@ -31,6 +31,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) > > - Add Intel Hardware P-States (HWP) cpufreq driver. > > - On Arm, experimental support for dynamic addition/removal of Xen device tree > > nodes using a device tree overlay binary (.dtbo). > > + - Introduce two new hypercalls to map the vCPU runstate and time areas by > > + physical rather than linear addresses. > > I'd suggest linear/virtual here. Linear is the correct term in x86, but > virtual is the correct term in pretty much every other architecture. > > > diff --git a/xen/include/public/features.h b/xen/include/public/features.h > > index d2a9175aae67..cffb2f14a562 100644 > > --- a/xen/include/public/features.h > > +++ b/xen/include/public/features.h > > @@ -111,6 +111,15 @@ > > #define XENFEAT_not_direct_mapped 16 > > #define XENFEAT_direct_mapped 17 > > > > +/* > > + * Signal whether the hypervisor implements the following hypercalls: > > This is not what the hypervisor implements. It's what the domain is > permitted to use. > > There also needs to be a matching patch to public/vcpu.h to require > implementations to check for these feature bits before using the new > hypercalls. > > Also, > > diff --git a/xen/common/domain.c b/xen/common/domain.c > index b8281d7cff9d..df994bd30fd2 100644 > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -1998,6 +1998,10 @@ long common_vcpu_op(int cmd, struct vcpu *v > { > struct vcpu_register_runstate_memory_area area; > > + rc = -ENOSYS; > + if ( 0 /* TODO: Dom's XENFEAT_runstate_phys_area setting */ ) > + break; > + > rc = -EFAULT; > if ( copy_from_guest(&area.addr.p, arg, 1) ) > break; > > and a matching one for XENFEAT_vcpu_time_phys_area because I'm even more > serious about this becoming a domain controllable setting following what > OSSTest had to say overnight. While this is all fine, please note that the newly added code {,un}map_guest_area() is also used by the existing VCPUOP_register_vcpu_info hypercall, and that one can't be disabled. IOW: even if we add knobs to make the new hypercalls selectable, most of the newly added code could still be reached from VCPUOP_register_vcpu_info. Thanks, Roger. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] domain: expose newly introduced hypercalls as XENFEAT 2023-10-06 11:02 ` Roger Pau Monné @ 2023-10-06 11:19 ` Andrew Cooper 2023-10-06 11:29 ` Roger Pau Monné 0 siblings, 1 reply; 11+ messages in thread From: Andrew Cooper @ 2023-10-06 11:19 UTC (permalink / raw) To: Roger Pau Monné Cc: xen-devel, Henry Wang, Community Manager, George Dunlap, Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu [-- Attachment #1: Type: text/plain, Size: 1224 bytes --] On 06/10/2023 12:02 pm, Roger Pau Monné wrote: > On Fri, Oct 06, 2023 at 11:47:48AM +0100, Andrew Cooper wrote: >> diff --git a/xen/common/domain.c b/xen/common/domain.c >> index b8281d7cff9d..df994bd30fd2 100644 >> --- a/xen/common/domain.c >> +++ b/xen/common/domain.c >> @@ -1998,6 +1998,10 @@ long common_vcpu_op(int cmd, struct vcpu *v >> { >> struct vcpu_register_runstate_memory_area area; >> >> + rc = -ENOSYS; >> + if ( 0 /* TODO: Dom's XENFEAT_runstate_phys_area setting */ ) >> + break; >> + >> rc = -EFAULT; >> if ( copy_from_guest(&area.addr.p, arg, 1) ) >> break; >> >> and a matching one for XENFEAT_vcpu_time_phys_area because I'm even more >> serious about this becoming a domain controllable setting following what >> OSSTest had to say overnight. > While this is all fine, please note that the newly added code > {,un}map_guest_area() is also used by the existing > VCPUOP_register_vcpu_info hypercall, and that one can't be disabled. Yeah, I'm aware we're stuck there, but a crap interface from the past is not an excuse not to do new interfaces properly. ~Andrew [-- Attachment #2: Type: text/html, Size: 1728 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] domain: expose newly introduced hypercalls as XENFEAT 2023-10-06 11:19 ` Andrew Cooper @ 2023-10-06 11:29 ` Roger Pau Monné 0 siblings, 0 replies; 11+ messages in thread From: Roger Pau Monné @ 2023-10-06 11:29 UTC (permalink / raw) To: Andrew Cooper Cc: xen-devel, Henry Wang, Community Manager, George Dunlap, Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu On Fri, Oct 06, 2023 at 12:19:29PM +0100, Andrew Cooper wrote: > On 06/10/2023 12:02 pm, Roger Pau Monné wrote: > > On Fri, Oct 06, 2023 at 11:47:48AM +0100, Andrew Cooper wrote: > >> diff --git a/xen/common/domain.c b/xen/common/domain.c > >> index b8281d7cff9d..df994bd30fd2 100644 > >> --- a/xen/common/domain.c > >> +++ b/xen/common/domain.c > >> @@ -1998,6 +1998,10 @@ long common_vcpu_op(int cmd, struct vcpu *v > >> { > >> struct vcpu_register_runstate_memory_area area; > >> > >> + rc = -ENOSYS; > >> + if ( 0 /* TODO: Dom's XENFEAT_runstate_phys_area setting */ ) > >> + break; > >> + > >> rc = -EFAULT; > >> if ( copy_from_guest(&area.addr.p, arg, 1) ) > >> break; > >> > >> and a matching one for XENFEAT_vcpu_time_phys_area because I'm even more > >> serious about this becoming a domain controllable setting following what > >> OSSTest had to say overnight. > > While this is all fine, please note that the newly added code > > {,un}map_guest_area() is also used by the existing > > VCPUOP_register_vcpu_info hypercall, and that one can't be disabled. > > Yeah, I'm aware we're stuck there, but a crap interface from the past is > not an excuse not to do new interfaces properly. Right, want I intended to say is that if we are worried the new {,un}map_guest_area() might be buggy, and would like to have a way to disable it, just preventing usage of VCPUOP_register_{runstate,vcpu_info}_phys_area won't be enough as the newly introduced function is also used by the existing VCPUOP_register_vcpu_info. Not that we shouldn't add the checks, just that those won't cover all usages of {,un}map_guest_area(). Thanks, Roger. ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2023-10-06 11:29 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-10-06 9:13 [PATCH 0/2] domain: followup for phys address mapping series Roger Pau Monne 2023-10-06 9:13 ` [PATCH 1/2] domain: fix misaligned unmap address in unmap_guest_area() Roger Pau Monne 2023-10-06 9:18 ` Henry Wang 2023-10-06 10:08 ` Julien Grall 2023-10-06 10:47 ` Roger Pau Monné 2023-10-06 9:13 ` [PATCH 2/2] domain: expose newly introduced hypercalls as XENFEAT Roger Pau Monne 2023-10-06 9:18 ` Henry Wang 2023-10-06 10:47 ` Andrew Cooper 2023-10-06 11:02 ` Roger Pau Monné 2023-10-06 11:19 ` Andrew Cooper 2023-10-06 11:29 ` Roger Pau Monné
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.