accel/tcg: Simplify page_get/alloc_target_data
Since the only user, Arm MTE, always requires allocation, merge the get and alloc functions to always produce a non-null result. Also assume that the user has already checked page validity. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
0fe6108432
commit
8269c01417
@ -242,19 +242,11 @@ void page_reset_target_data(target_ulong start, target_ulong end)
|
||||
void *page_get_target_data(target_ulong address)
|
||||
{
|
||||
PageDesc *p = page_find(address >> TARGET_PAGE_BITS);
|
||||
return p ? p->target_data : NULL;
|
||||
}
|
||||
void *ret = p->target_data;
|
||||
|
||||
void *page_alloc_target_data(target_ulong address)
|
||||
{
|
||||
PageDesc *p = page_find(address >> TARGET_PAGE_BITS);
|
||||
void *ret = NULL;
|
||||
|
||||
if (p->flags & PAGE_VALID) {
|
||||
ret = p->target_data;
|
||||
if (!ret) {
|
||||
p->target_data = ret = g_malloc0(TARGET_PAGE_DATA_SIZE);
|
||||
}
|
||||
if (!ret) {
|
||||
ret = g_malloc0(TARGET_PAGE_DATA_SIZE);
|
||||
p->target_data = ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -281,27 +281,18 @@ void page_reset_target_data(target_ulong start, target_ulong end);
|
||||
int page_check_range(target_ulong start, target_ulong len, int flags);
|
||||
|
||||
/**
|
||||
* page_alloc_target_data(address)
|
||||
* page_get_target_data(address)
|
||||
* @address: guest virtual address
|
||||
*
|
||||
* Allocate TARGET_PAGE_DATA_SIZE bytes of out-of-band data to associate
|
||||
* with the guest page at @address. If the page is not mapped, NULL will
|
||||
* be returned. If there is existing data associated with @address,
|
||||
* no new memory will be allocated.
|
||||
* Return TARGET_PAGE_DATA_SIZE bytes of out-of-band data to associate
|
||||
* with the guest page at @address, allocating it if necessary. The
|
||||
* caller should already have verified that the address is valid.
|
||||
*
|
||||
* The memory will be freed when the guest page is deallocated,
|
||||
* e.g. with the munmap system call.
|
||||
*/
|
||||
void *page_alloc_target_data(target_ulong address);
|
||||
|
||||
/**
|
||||
* page_get_target_data(address)
|
||||
* @address: guest virtual address
|
||||
*
|
||||
* Return any out-of-bound memory assocated with the guest page
|
||||
* at @address, as per page_alloc_target_data.
|
||||
*/
|
||||
void *page_get_target_data(target_ulong address);
|
||||
void *page_get_target_data(target_ulong address)
|
||||
__attribute__((returns_nonnull));
|
||||
#endif
|
||||
|
||||
CPUArchState *cpu_copy(CPUArchState *env);
|
||||
|
@ -95,10 +95,6 @@ static uint8_t *allocation_tag_mem(CPUARMState *env, int ptr_mmu_idx,
|
||||
}
|
||||
|
||||
tags = page_get_target_data(clean_ptr);
|
||||
if (tags == NULL) {
|
||||
tags = page_alloc_target_data(clean_ptr);
|
||||
assert(tags != NULL);
|
||||
}
|
||||
|
||||
index = extract32(ptr, LOG2_TAG_GRANULE + 1,
|
||||
TARGET_PAGE_BITS - LOG2_TAG_GRANULE - 1);
|
||||
|
Loading…
Reference in New Issue
Block a user