On Tue, Jun 09, 2020 at 10:54:23AM -0700, Brendan Shanks wrote: > Add emulation/spoofing of SLDT and STR for both 32- and 64-bit > processes. > > Wine users have found a small number of Windows apps using SLDT that > were crashing when run on UMIP-enabled systems. > > Reported-by: Andreas Rammhold <andi@notmuch.email> > Originally-by: Ricardo Neri <ricardo.neri-calde...@linux.intel.com> > Signed-off-by: Brendan Shanks <bsha...@codeweavers.com> > --- > > v4: Use braces for every clause of the conditional. I tried a switch(), > but it takes more lines and looks more cluttered (especially with the > #ifdef). > Also replace out-of-date comment at top of file. > > arch/x86/kernel/umip.c | 38 ++++++++++++++++++++++++++------------ > 1 file changed, 26 insertions(+), 12 deletions(-) > > diff --git a/arch/x86/kernel/umip.c b/arch/x86/kernel/umip.c > index 8d5cbe1bbb3b..62f4f0afb979 100644 > --- a/arch/x86/kernel/umip.c > +++ b/arch/x86/kernel/umip.c > @@ -45,11 +45,12 @@ > * value that, lies close to the top of the kernel memory. The limit for the > GDT > * and the IDT are set to zero. > * > - * Given that SLDT and STR are not commonly used in programs that run on > WineHQ > - * or DOSEMU2, they are not emulated. > - * > * The instruction smsw is emulated to return the value that the register CR0 > * has at boot time as set in the head_32. > + * sldt and str are emulated to return the values that the kernel > programmatically > + * assigns: > + * - sldt returns (GDT_ENTRY_LDT * 8) if an LDT has been set, 0 if not. > + * - str returns (GDT_ENTRY_TSS * 8).
Probably for consistency with the rest of the document the instruction names should be capitalized (I know that smsw was not capitalized before :/). Maybe maintainers can fix this when applying? Other than that, FWIW: Reviewed-by: Ricardo Neri <ricardo.neri-calde...@linux.intel.com> Tested-by: Ricardo Neri <ricardo.neri-calde...@linux.intel.com>