mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-01-23 02:14:37 +00:00
compel: support XSAVE on newer Intel CPUs
Newer Intel CPUs (Sapphire Rapids) have a much larger xsave area than
before. Looking at older CPUs I see 2440 bytes.
# cpuid -1 -l 0xd -s 0
...
bytes required by XSAVE/XRSTOR area = 0x00000988 (2440)
On newer CPUs (Sapphire Rapids) it grows to 11008 bytes.
# cpuid -1 -l 0xd -s 0
...
bytes required by XSAVE/XRSTOR area = 0x00002b00 (11008)
This increase the xsave area from one page to four pages.
Without this patch the fpu03 test fails, with this patch it works again.
Signed-off-by: Adrian Reber <areber@redhat.com>
This commit is contained in:
parent
fa6af25e75
commit
727d796505
1 changed files with 26 additions and 2 deletions
|
|
@ -21,7 +21,28 @@
|
|||
#define XSTATE_YMM 0x4
|
||||
|
||||
#define FXSAVE_SIZE 512
|
||||
#define XSAVE_SIZE 4096
|
||||
/*
|
||||
* This used to be 4096 (one page). There is a comment below concerning
|
||||
* this size:
|
||||
* "One page should be enough for the whole xsave state ;-)"
|
||||
* Which is kind of funny as it is no longer enough ;-)
|
||||
*
|
||||
* Older CPUs:
|
||||
* # cpuid -1 -l 0xd -s 0
|
||||
* ...
|
||||
* bytes required by XSAVE/XRSTOR area = 0x00000988 (2440)
|
||||
*
|
||||
* Newer CPUs (Sapphire Rapids):
|
||||
* # cpuid -1 -l 0xd -s 0
|
||||
* ...
|
||||
* bytes required by XSAVE/XRSTOR area = 0x00002b00 (11008)
|
||||
*
|
||||
* So one page is no longer enough... But:
|
||||
*
|
||||
* Four pages should be enough for the whole xsave state ;-)
|
||||
*/
|
||||
|
||||
#define XSAVE_SIZE 4*4096
|
||||
|
||||
#define XSAVE_HDR_SIZE 64
|
||||
#define XSAVE_HDR_OFFSET FXSAVE_SIZE
|
||||
|
|
@ -235,8 +256,11 @@ struct pkru_state {
|
|||
*
|
||||
*
|
||||
* One page should be enough for the whole xsave state ;-)
|
||||
*
|
||||
* Of course it was not ;-) Now using four pages...
|
||||
*
|
||||
*/
|
||||
#define EXTENDED_STATE_AREA_SIZE (4096 - sizeof(struct i387_fxsave_struct) - sizeof(struct xsave_hdr_struct))
|
||||
#define EXTENDED_STATE_AREA_SIZE (XSAVE_SIZE - sizeof(struct i387_fxsave_struct) - sizeof(struct xsave_hdr_struct))
|
||||
|
||||
/*
|
||||
* cpu requires it to be 64 byte aligned
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue