[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH for-4.15] xen/mm: Fix build when CONFIG_HVM=n and CONFIG_COVERAGE=y
From: Julien Grall <jgrall@xxxxxxxxxx> Xen is heavily relying on the DCE stage to remove unused code so the linker doesn't throw an error because a function is not implemented yet we defined a prototype for it. On some GCC version (such as 9.4 provided by Debian sid), the compiler will DCE stage will not managed to figure that out for xenmem_add_to_physmap_batch(): ld: ld: prelink.o: in function `xenmem_add_to_physmap_batch': /xen/xen/common/memory.c:942: undefined reference to `xenmem_add_to_physmap_one' /xen/xen/common/memory.c:942:(.text+0x22145): relocation truncated to fit: R_X86_64_PLT32 against undefined symbol `xenmem_add_to_physmap_one' prelink-efi.o: in function `xenmem_add_to_physmap_batch': /xen/xen/common/memory.c:942: undefined reference to `xenmem_add_to_physmap_one' make[2]: *** [Makefile:215: /root/xen/xen/xen.efi] Error 1 make[2]: *** Waiting for unfinished jobs.... ld: /xen/xen/.xen-syms.0: hidden symbol `xenmem_add_to_physmap_one' isn't defined ld: final link failed: bad value It is not entirely clear why the compiler DCE is not detecting the unused code. However, moving the permission check from do_memory_op() to xenmem_add_to_physmap_batch() does the trick. Note that this required to move the implementation of xapt_permision_check() earlier on so it can be called in xemem_add_to_physmap_batch(). No functional change intended. Fixes: d4f699a0df6c ("x86/mm: p2m_add_foreign() is HVM-only") Reported-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx> Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx> --- This also resolves a randconfig issue on the gitlab CI. The gitlab CI is used to provide basic testing on a per-series basis. So I would like to request this patch to be merged in Xen 4.15 in order to reduce the number of failure not related to the series tested. Note that there are a few more randconfig issues that needs to be addressed. --- xen/common/memory.c | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/xen/common/memory.c b/xen/common/memory.c index 01cab7e4930e..b047a93a703a 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -898,11 +898,32 @@ int xenmem_add_to_physmap(struct domain *d, struct xen_add_to_physmap *xatp, return rc; } +static long xatp_permission_check(struct domain *d, unsigned int space) +{ + if ( !paging_mode_translate(d) ) + return -EACCES; + + /* + * XENMAPSPACE_dev_mmio mapping is only supported for hardware Domain + * to map this kind of space to itself. + */ + if ( (space == XENMAPSPACE_dev_mmio) && + (!is_hardware_domain(d) || (d != current->domain)) ) + return -EACCES; + + return xsm_add_to_physmap(XSM_TARGET, current->domain, d); +} + static int xenmem_add_to_physmap_batch(struct domain *d, struct xen_add_to_physmap_batch *xatpb, unsigned int extent) { union add_to_physmap_extra extra = {}; + int rc; + + rc = xatp_permission_check(d, xatpb->space); + if ( rc ) + return rc; if ( unlikely(xatpb->size < extent) ) return -EILSEQ; @@ -1038,22 +1059,6 @@ static int get_reserved_device_memory(xen_pfn_t start, xen_ulong_t nr, } #endif -static long xatp_permission_check(struct domain *d, unsigned int space) -{ - if ( !paging_mode_translate(d) ) - return -EACCES; - - /* - * XENMAPSPACE_dev_mmio mapping is only supported for hardware Domain - * to map this kind of space to itself. - */ - if ( (space == XENMAPSPACE_dev_mmio) && - (!is_hardware_domain(d) || (d != current->domain)) ) - return -EACCES; - - return xsm_add_to_physmap(XSM_TARGET, current->domain, d); -} - unsigned int ioreq_server_max_frames(const struct domain *d) { unsigned int nr = 0; @@ -1442,13 +1447,6 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg) if ( d == NULL ) return -ESRCH; - rc = xatp_permission_check(d, xatpb.space); - if ( rc ) - { - rcu_unlock_domain(d); - return rc; - } - rc = xenmem_add_to_physmap_batch(d, &xatpb, start_extent); rcu_unlock_domain(d); -- 2.17.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |