mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
bsd-user: Propagate alignment argument to mmap_find_vma()
Propagate the alignment to mmap_find_vma(), effectively embedding mmap_find_vma_aligned() within mmap_find_vma(). Add a comment in do_bsd_shmat() to clarify alignment above page size is not required. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Warner Losh <imp@bsdimp.com> Message-Id: <20250308122842.76377-3-philmd@linaro.org>
This commit is contained in:
parent
019b4e84ed
commit
84d66261be
3 changed files with 6 additions and 10 deletions
|
@ -370,9 +370,11 @@ static inline abi_long do_bsd_shmat(int shmid, abi_ulong shmaddr, int shmflg)
|
||||||
if (shmaddr) {
|
if (shmaddr) {
|
||||||
host_raddr = shmat(shmid, (void *)g2h_untagged(shmaddr), shmflg);
|
host_raddr = shmat(shmid, (void *)g2h_untagged(shmaddr), shmflg);
|
||||||
} else {
|
} else {
|
||||||
|
abi_ulong alignment;
|
||||||
abi_ulong mmap_start;
|
abi_ulong mmap_start;
|
||||||
|
|
||||||
mmap_start = mmap_find_vma(0, shm_info.shm_segsz);
|
alignment = 0; /* alignment above page size not required */
|
||||||
|
mmap_start = mmap_find_vma(0, shm_info.shm_segsz, alignment);
|
||||||
|
|
||||||
if (mmap_start == -1) {
|
if (mmap_start == -1) {
|
||||||
return -TARGET_ENOMEM;
|
return -TARGET_ENOMEM;
|
||||||
|
|
|
@ -275,8 +275,7 @@ static abi_ulong mmap_find_vma_reserved(abi_ulong start, abi_ulong size,
|
||||||
* It must be called with mmap_lock() held.
|
* It must be called with mmap_lock() held.
|
||||||
* Return -1 if error.
|
* Return -1 if error.
|
||||||
*/
|
*/
|
||||||
static abi_ulong mmap_find_vma_aligned(abi_ulong start, abi_ulong size,
|
abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size, abi_ulong alignment)
|
||||||
abi_ulong alignment)
|
|
||||||
{
|
{
|
||||||
void *ptr, *prev;
|
void *ptr, *prev;
|
||||||
abi_ulong addr;
|
abi_ulong addr;
|
||||||
|
@ -395,11 +394,6 @@ static abi_ulong mmap_find_vma_aligned(abi_ulong start, abi_ulong size,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size)
|
|
||||||
{
|
|
||||||
return mmap_find_vma_aligned(start, size, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* NOTE: all the constants are the HOST ones */
|
/* NOTE: all the constants are the HOST ones */
|
||||||
abi_long target_mmap(abi_ulong start, abi_ulong len, int prot,
|
abi_long target_mmap(abi_ulong start, abi_ulong len, int prot,
|
||||||
int flags, int fd, off_t offset)
|
int flags, int fd, off_t offset)
|
||||||
|
@ -494,7 +488,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot,
|
||||||
host_len = len + offset - host_offset;
|
host_len = len + offset - host_offset;
|
||||||
host_len = HOST_PAGE_ALIGN(host_len);
|
host_len = HOST_PAGE_ALIGN(host_len);
|
||||||
alignment = (flags & MAP_ALIGNMENT_MASK) >> MAP_ALIGNMENT_SHIFT;
|
alignment = (flags & MAP_ALIGNMENT_MASK) >> MAP_ALIGNMENT_SHIFT;
|
||||||
start = mmap_find_vma_aligned(real_start, host_len, alignment);
|
start = mmap_find_vma(real_start, host_len, alignment);
|
||||||
if (start == (abi_ulong)-1) {
|
if (start == (abi_ulong)-1) {
|
||||||
errno = ENOMEM;
|
errno = ENOMEM;
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
|
@ -242,7 +242,7 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size,
|
||||||
abi_ulong new_addr);
|
abi_ulong new_addr);
|
||||||
int target_msync(abi_ulong start, abi_ulong len, int flags);
|
int target_msync(abi_ulong start, abi_ulong len, int flags);
|
||||||
extern abi_ulong mmap_next_start;
|
extern abi_ulong mmap_next_start;
|
||||||
abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size);
|
abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size, abi_ulong alignment);
|
||||||
void mmap_reserve(abi_ulong start, abi_ulong size);
|
void mmap_reserve(abi_ulong start, abi_ulong size);
|
||||||
void TSA_NO_TSA mmap_fork_start(void);
|
void TSA_NO_TSA mmap_fork_start(void);
|
||||||
void TSA_NO_TSA mmap_fork_end(int child);
|
void TSA_NO_TSA mmap_fork_end(int child);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue