ARM/Memory: Correct Exclusive Monitor and Implement Exclusive Memory Writes.
This commit is contained in:
parent
535c542d84
commit
cd1c38be8d
12 changed files with 325 additions and 24 deletions
|
@ -244,6 +244,71 @@ public:
|
|||
*/
|
||||
void Write64(VAddr addr, u64 data);
|
||||
|
||||
/**
|
||||
* Writes a 8-bit unsigned integer to the given virtual address in
|
||||
* the current process' address space if and only if the address contains
|
||||
* the expected value. This operation is atomic.
|
||||
*
|
||||
* @param addr The virtual address to write the 8-bit unsigned integer to.
|
||||
* @param data The 8-bit unsigned integer to write to the given virtual address.
|
||||
* @param expected The 8-bit unsigned integer to check against the given virtual address.
|
||||
*
|
||||
* @post The memory range [addr, sizeof(data)) contains the given data value.
|
||||
*/
|
||||
bool WriteExclusive8(VAddr addr, u8 data, u8 expected);
|
||||
|
||||
/**
|
||||
* Writes a 16-bit unsigned integer to the given virtual address in
|
||||
* the current process' address space if and only if the address contains
|
||||
* the expected value. This operation is atomic.
|
||||
*
|
||||
* @param addr The virtual address to write the 16-bit unsigned integer to.
|
||||
* @param data The 16-bit unsigned integer to write to the given virtual address.
|
||||
* @param expected The 16-bit unsigned integer to check against the given virtual address.
|
||||
*
|
||||
* @post The memory range [addr, sizeof(data)) contains the given data value.
|
||||
*/
|
||||
bool WriteExclusive16(VAddr addr, u16 data, u16 expected);
|
||||
|
||||
/**
|
||||
* Writes a 32-bit unsigned integer to the given virtual address in
|
||||
* the current process' address space if and only if the address contains
|
||||
* the expected value. This operation is atomic.
|
||||
*
|
||||
* @param addr The virtual address to write the 32-bit unsigned integer to.
|
||||
* @param data The 32-bit unsigned integer to write to the given virtual address.
|
||||
* @param expected The 32-bit unsigned integer to check against the given virtual address.
|
||||
*
|
||||
* @post The memory range [addr, sizeof(data)) contains the given data value.
|
||||
*/
|
||||
bool WriteExclusive32(VAddr addr, u32 data, u32 expected);
|
||||
|
||||
/**
|
||||
* Writes a 64-bit unsigned integer to the given virtual address in
|
||||
* the current process' address space if and only if the address contains
|
||||
* the expected value. This operation is atomic.
|
||||
*
|
||||
* @param addr The virtual address to write the 64-bit unsigned integer to.
|
||||
* @param data The 64-bit unsigned integer to write to the given virtual address.
|
||||
* @param expected The 64-bit unsigned integer to check against the given virtual address.
|
||||
*
|
||||
* @post The memory range [addr, sizeof(data)) contains the given data value.
|
||||
*/
|
||||
bool WriteExclusive64(VAddr addr, u64 data, u64 expected);
|
||||
|
||||
/**
|
||||
* Writes a 128-bit unsigned integer to the given virtual address in
|
||||
* the current process' address space if and only if the address contains
|
||||
* the expected value. This operation is atomic.
|
||||
*
|
||||
* @param addr The virtual address to write the 128-bit unsigned integer to.
|
||||
* @param data The 128-bit unsigned integer to write to the given virtual address.
|
||||
* @param expected The 128-bit unsigned integer to check against the given virtual address.
|
||||
*
|
||||
* @post The memory range [addr, sizeof(data)) contains the given data value.
|
||||
*/
|
||||
bool WriteExclusive128(VAddr addr, u128 data, u128 expected);
|
||||
|
||||
/**
|
||||
* Reads a null-terminated string from the given virtual address.
|
||||
* This function will continually read characters until either:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue