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)
|
void *page_get_target_data(target_ulong address)
|
||||||
{
|
{
|
||||||
PageDesc *p = page_find(address >> TARGET_PAGE_BITS);
|
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) {
|
if (!ret) {
|
||||||
p->target_data = ret = g_malloc0(TARGET_PAGE_DATA_SIZE);
|
ret = g_malloc0(TARGET_PAGE_DATA_SIZE);
|
||||||
}
|
p->target_data = ret;
|
||||||
}
|
}
|
||||||
return 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);
|
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
|
* @address: guest virtual address
|
||||||
*
|
*
|
||||||
* Allocate TARGET_PAGE_DATA_SIZE bytes of out-of-band data to associate
|
* Return 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
|
* with the guest page at @address, allocating it if necessary. The
|
||||||
* be returned. If there is existing data associated with @address,
|
* caller should already have verified that the address is valid.
|
||||||
* no new memory will be allocated.
|
|
||||||
*
|
*
|
||||||
* The memory will be freed when the guest page is deallocated,
|
* The memory will be freed when the guest page is deallocated,
|
||||||
* e.g. with the munmap system call.
|
* e.g. with the munmap system call.
|
||||||
*/
|
*/
|
||||||
void *page_alloc_target_data(target_ulong address);
|
void *page_get_target_data(target_ulong address)
|
||||||
|
__attribute__((returns_nonnull));
|
||||||
/**
|
|
||||||
* 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);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CPUArchState *cpu_copy(CPUArchState *env);
|
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);
|
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,
|
index = extract32(ptr, LOG2_TAG_GRANULE + 1,
|
||||||
TARGET_PAGE_BITS - LOG2_TAG_GRANULE - 1);
|
TARGET_PAGE_BITS - LOG2_TAG_GRANULE - 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user