mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen: introduce domain-layout.h with common domain_use_host_layout()
domain_use_host_layout() is not architecture-specific and may be needed
on x86 [1]. Replace the ARM-specific macro in asm/domain.h with a common
static inline in a new dedicated header, xen/domain-layout.h.
xen/domain.h would be the natural home, but placing it there would
require including xen/paging.h (for paging_mode_translate()) and
xen/sched.h (for is_hardware_domain()), which would introduce circular
dependencies. A separate header that callers opt into avoids this.
Adjust the implementation to take paging_mode_translate() into account
so it works correctly for all architectures, including x86. Some extra
details about implementation [2] and [3].
To avoid the following compilation issue:
In file included from ./include/xen/paging.h:4,
from ./include/xen/domain-layout.h:6,
from common/device-tree/domain-build.c:4:
./arch/riscv/include/asm/paging.h:17:48: error: 'struct page_info'
declared inside parameter list will not be visible outside of this
definition or declaration [-Werror]
17 | void paging_free_page(struct domain *d, struct page_info *pg);
add the forward declaration of struct page_info to RISC-V's asm/paging.h.
[1] https://lore.kernel.org/xen-devel/alpine.DEB.2.22.394.2602161038120.359097@ubuntu-linux-20-04-desktop/
[2] https://lore.kernel.org/xen-devel/alpine.DEB.2.22.394.2602271742400.3148344@ubuntu-linux-20-04-desktop/
[3] https://lore.kernel.org/xen-devel/alpine.DEB.2.22.394.2602271750190.3148344@ubuntu-linux-20-04-desktop/
Suggested-by: Stefano Stabellini <sstabellini@kernel.org>
Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
Reviewed-by: Luca Fancellu <luca.fancellu@arm.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Michal Orzel <michal.orzel@amd.com>
This commit is contained in:
1 parent
392f935421
commit
b71811efe6
6 files changed
+32
-14
No files matched your search
@@ -2,6 +2,7 @@
|
||||
#include <xen/init.h>
|
||||
#include <xen/bootinfo.h>
|
||||
#include <xen/compile.h>
|
||||
#include <xen/domain-layout.h>
|
||||
#include <xen/dom0less-build.h>
|
||||
#include <xen/fdt-domain-build.h>
|
||||
#include <xen/fdt-kernel.h>
|
||||
|
||||
@@ -18,20 +18,6 @@ struct hvm_domain
|
||||
uint64_t params[HVM_NR_PARAMS];
|
||||
};
|
||||
|
||||
/*
|
||||
* Is the domain using the host memory layout?
|
||||
*
|
||||
* Direct-mapped domain will always have the RAM mapped with GFN == MFN.
|
||||
* To avoid any trouble finding space, it is easier to force using the
|
||||
* host memory layout.
|
||||
*
|
||||
* The hardware domain will use the host layout regardless of
|
||||
* direct-mapped because some OS may rely on a specific address ranges
|
||||
* for the devices.
|
||||
*/
|
||||
#define domain_use_host_layout(d) (is_domain_direct_mapped(d) || \
|
||||
is_hardware_domain(d))
|
||||
|
||||
struct vtimer {
|
||||
struct vcpu *v;
|
||||
int irq;
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
#include <xen/bitops.h>
|
||||
#include <xen/domain-layout.h>
|
||||
#include <xen/init.h>
|
||||
#include <xen/irq.h>
|
||||
#include <xen/lib.h>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <asm-generic/paging.h>
|
||||
|
||||
struct domain;
|
||||
struct page_info;
|
||||
|
||||
int paging_domain_init(struct domain *d);
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <xen/bootinfo.h>
|
||||
#include <xen/domain-layout.h>
|
||||
#include <xen/fdt-domain-build.h>
|
||||
#include <xen/init.h>
|
||||
#include <xen/lib.h>
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#ifndef XEN_DOMAIN_LAYOUT_H
|
||||
#define XEN_DOMAIN_LAYOUT_H
|
||||
|
||||
#include <xen/paging.h>
|
||||
#include <xen/sched.h>
|
||||
|
||||
/*
|
||||
* Is a domain using the host memory layout?
|
||||
*
|
||||
* domain_use_host_layout() is always False for PV domains (including Dom0).
|
||||
*
|
||||
* Direct-mapped domains (autotranslated domains with memory allocated
|
||||
* contiguously and mapped 1:1 so that GFN == MFN) must use the host
|
||||
* memory layout since GFN == MFN by definition.
|
||||
*
|
||||
* The hardware domain will use the host layout (regardless of
|
||||
* direct-mapped) because some OS may rely on specific address ranges
|
||||
* for the devices.
|
||||
*/
|
||||
static inline bool domain_use_host_layout(const struct domain *d)
|
||||
{
|
||||
return paging_mode_translate(d) &&
|
||||
(is_domain_direct_mapped(d) || is_hardware_domain(d));
|
||||
}
|
||||
|
||||
#endif /* XEN_DOMAIN_LAYOUT_H */
|
||||