This is really a rearrangement to make adding FRED support easier.
No functional change.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
v2:
* New
There is a marginal code size improvement:
add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-46 (-46)
Function old new delta
do_set_segment_base 496 450 -46
but it does get undone by the FRED support.
---
xen/arch/x86/pv/misc-hypercalls.c | 32 ++++++++++++++++---------------
1 file changed, 17 insertions(+), 15 deletions(-)
diff --git a/xen/arch/x86/pv/misc-hypercalls.c b/xen/arch/x86/pv/misc-hypercalls.c
index 7a37f16bf038..4c2abeb4add8 100644
--- a/xen/arch/x86/pv/misc-hypercalls.c
+++ b/xen/arch/x86/pv/misc-hypercalls.c
@@ -176,27 +176,29 @@ long do_set_segment_base(unsigned int which, unsigned long base)
switch ( which )
{
case SEGBASE_FS:
- if ( is_canonical_address(base) )
- write_fs_base(base);
- else
+ case SEGBASE_GS_USER:
+ case SEGBASE_GS_KERNEL:
+ if ( !is_canonical_address(base) )
+ {
ret = -EINVAL;
- break;
+ break;
+ }
- case SEGBASE_GS_USER:
- if ( is_canonical_address(base) )
+ switch ( which )
{
- write_gs_shadow(base);
+ case SEGBASE_FS:
+ write_fs_base(base);
+ break;
+
+ case SEGBASE_GS_USER:
v->arch.pv.gs_base_user = base;
- }
- else
- ret = -EINVAL;
- break;
+ write_gs_shadow(base);
+ break;
- case SEGBASE_GS_KERNEL:
- if ( is_canonical_address(base) )
+ case SEGBASE_GS_KERNEL:
write_gs_base(base);
- else
- ret = -EINVAL;
+ break;
+ }
break;
case SEGBASE_GS_USER_SEL:
--
2.39.5