Message ID | 20181203160840.15115-6-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | tcg/i386: Improve guest_base handling | expand |
On 03.12.2018 17:08, Richard Henderson wrote: > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > tcg/i386/tcg-target.inc.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c > index b8d2dd5ba3..3a39b51685 100644 > --- a/tcg/i386/tcg-target.inc.c > +++ b/tcg/i386/tcg-target.inc.c > @@ -1873,6 +1873,15 @@ static inline int setup_guest_base_seg(void) > } > return 0; > } > +# elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) > +# include <machine/sysarch.h> > +static inline int setup_guest_base_seg(void) > +{ > + if (sysarch(AMD64_SET_GSBASE, &guest_base) == 0) { > + return P_GS; > + } > + return 0; > +} > # else > static inline int setup_guest_base_seg(void) > { > There is also X86_SET_GSBASE in <include/sysarch.h> in NetBSD. Do we need to set it for this OS too?
On 12/3/18 11:01 AM, Kamil Rytarowski wrote: > On 03.12.2018 17:08, Richard Henderson wrote: >> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> >> --- >> tcg/i386/tcg-target.inc.c | 9 +++++++++ >> 1 file changed, 9 insertions(+) >> >> diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c >> index b8d2dd5ba3..3a39b51685 100644 >> --- a/tcg/i386/tcg-target.inc.c >> +++ b/tcg/i386/tcg-target.inc.c >> @@ -1873,6 +1873,15 @@ static inline int setup_guest_base_seg(void) >> } >> return 0; >> } >> +# elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) >> +# include <machine/sysarch.h> >> +static inline int setup_guest_base_seg(void) >> +{ >> + if (sysarch(AMD64_SET_GSBASE, &guest_base) == 0) { >> + return P_GS; >> + } >> + return 0; >> +} >> # else >> static inline int setup_guest_base_seg(void) >> { >> > > There is also X86_SET_GSBASE in <include/sysarch.h> in NetBSD. Do we > need to set it for this OS too? You will want to do so, yes. In the meantime NetBSD should not break; it is only an optimization. r~
diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c index b8d2dd5ba3..3a39b51685 100644 --- a/tcg/i386/tcg-target.inc.c +++ b/tcg/i386/tcg-target.inc.c @@ -1873,6 +1873,15 @@ static inline int setup_guest_base_seg(void) } return 0; } +# elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) +# include <machine/sysarch.h> +static inline int setup_guest_base_seg(void) +{ + if (sysarch(AMD64_SET_GSBASE, &guest_base) == 0) { + return P_GS; + } + return 0; +} # else static inline int setup_guest_base_seg(void) {
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- tcg/i386/tcg-target.inc.c | 9 +++++++++ 1 file changed, 9 insertions(+) -- 2.17.2