On 22.01.2021 19:20, Paul Gofman wrote:
On 1/22/21 21:03, Jacek Caban wrote:
On 22.01.2021 18:44, Paul Gofman wrote:
xsave is part of SSE2, not AVX, and it should ignore unsupported requested features, so the patch should be fine as is on hardware without AVX. xsave needs, however, to be enabled by OS, so we may need a feature check if we want to support OSes without xsave enabled.
There was a real bug with that: https://bugs.winehq.org/show_bug.cgi?id=50271.
Looking at the bug report, I think it was about missing AVX support, not missing XSAVE support, so it should be fine with my patches.
It was faulting exactly on xrstor instruction, with the mask being taken from what Linux gives us in its xsave structure. I didn't check the mask that time, so I can't fully exclude the possibility that it was the wrong mask somehow and it wouldn't fail with a zero mask, but I got an impression that it is xrstor instruction itself is unsupported. And apparently there wasn't cpuid XSAVE flag set, that's how the fix there is helping. Also, xsave instruction documentation explicitly refers XSAVE CPUID feature flag.
It's mentioned in exceptions section of documentation that you linked:
"#UD If CPUID.01H:ECX.XSAVE[bit 26] = 0."
There is no AVX check. (There is also If "CR4.OSXSAVE[bit 18] = 0.", which is how OS may decide to support it or not).
I'm not sure why you conclude that XSAVE CPUID flag wasn't set in case of the bug. With current code, both AVX and XSAVE flags to set EnabledFeatures, so it wouldn't be set even if XSAVE is supported but AVX not.
Jacek
[1] https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-3...