Skip to content

The 128-bit of interface dispatch cache entry and indirection cell's stub/cache mismatch the PalInterlockedCompareExchange128's atomically requirements #109276

@shushanhf

Description

@shushanhf

Description

#108364 (comment)

I have some question about the CAS-128bit when updating and loading the 128-bit data.

cmp rax, [r11 + CurrentOffset]
jne 0f
jmp [r11 + CurrentOffset + 8]

Are these codes related with the CAS-128-bit data?
If yes, is there some problem if the 128-bit data are loaded by two instructions rather than a 128-bit load instruction? When finished the first 64-bit pointer loading, the CAS-128-bit update the whole 128-bit date, then the second loading will get a new value but now the old value.

Reproduction Steps

When finished the first 64-bit pointer loading, the CAS-128-bit update the whole 128-bit date, then the second loading will get a new value but now the old value.

Expected behavior

should load the 128-bit date by one instruction atomically.

Actual behavior

But now these code will hit the wrong value at the very low possibility.

Regression?

No response

Known Workarounds

No response

Configuration

No response

Other information

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    No status

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions