Skip to content

Commit

Permalink
accel/tcg: Simplify page_get/alloc_target_data
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Richard Henderson <[email protected]>
  • Loading branch information
rth7680 committed Oct 26, 2022
1 parent 0fe6108 commit 8269c01
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 31 deletions.
16 changes: 4 additions & 12 deletions accel/tcg/user-exec.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
21 changes: 6 additions & 15 deletions include/exec/cpu-all.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
4 changes: 0 additions & 4 deletions target/arm/mte_helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 8269c01

Please sign in to comment.