xen/arm/static-shmem: Static-shmem should be direct-mapped for direct-mapped domains

Currently, users are allowed to map static shared memory in a
non-direct-mapped way for direct-mapped domains. This can lead to
clashing of guest memory spaces. Also, the current extended region
finding logic only removes the host physical addresses of the
static shared memory areas for direct-mapped domains, which may be
inconsistent with the guest memory map if users map the static
shared memory in a non-direct-mapped way. This will lead to incorrect
extended region calculation results.

To make things easier, add restriction that static shared memory
should also be direct-mapped for direct-mapped domains. Check the
host physical address to be matched with guest physical address when
parsing the device tree. Document this restriction in the doc.

Signed-off-by: Henry Wang <xin.wang2@amd.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com>
Acked-by: Michal Orzel <michal.orzel@amd.com>
This commit is contained in:
Henry Wang authored and Stefano Stabellini committed 2024-06-18 17:27:51 -07:00
1 parent bd59af9970
commit cb1ddafdc5
2 files changed
+9

No files matched your search

+3
View File
@@ -607,6 +607,9 @@ communication.
shared memory region in host physical address space, a size, and a guest
physical address, as the target address of the mapping.
e.g. xen,shared-mem = < [host physical address] [guest address] [size] >;
Note that if a domain is direct-mapped, i.e. the Dom0 and the Dom0less
DomUs with `direct-map` device tree property, the static shared memory
should also be direct-mapped (host physical address == guest address).
It shall also meet the following criteria:
1) If the SHM ID matches with an existing region, the address range of the
+6
View File
@@ -324,6 +324,12 @@ int __init process_shm(struct domain *d, struct kernel_info *kinfo,
printk("%pd: static shared memory bank not found: '%s'", d, shm_id);
return -ENOENT;
}
if ( is_domain_direct_mapped(d) && (pbase != gbase) )
{
printk("%pd: physical address 0x%"PRIpaddr" and guest address 0x%"PRIpaddr" are not direct-mapped.\n",
d, pbase, gbase);
return -EINVAL;
}
pbase = boot_shm_bank->start;
psize = boot_shm_bank->size;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.