Message ID | 444658f690c81b9e93c2c709fa1032c049646763.1614265718.git.connojdavis@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Minimal build for RISCV | expand |
On 25.02.2021 16:24, Connor Davis wrote: > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -501,7 +501,9 @@ static int sanitise_domain_config(struct xen_domctl_createdomain *config) > return -EINVAL; > } > > +#ifdef CONFIG_HAS_PASSTHROUGH > if ( !iommu_enabled ) > +#endif > { > dprintk(XENLOG_INFO, "IOMMU requested but not available\n"); > return -EINVAL; Where possible - to avoid such #ifdef-ary - the symbol instead should get #define-d to a sensible value ("false" in this case) in the header. The other cases here may indeed need to remain as you have them. Jan
On Thu, Feb 25, 2021 at 04:45:15PM +0100, Jan Beulich wrote: > On 25.02.2021 16:24, Connor Davis wrote: > > --- a/xen/common/domain.c > > +++ b/xen/common/domain.c > > @@ -501,7 +501,9 @@ static int sanitise_domain_config(struct xen_domctl_createdomain *config) > > return -EINVAL; > > } > > > > +#ifdef CONFIG_HAS_PASSTHROUGH > > if ( !iommu_enabled ) > > +#endif > > { > > dprintk(XENLOG_INFO, "IOMMU requested but not available\n"); > > return -EINVAL; > > Where possible - to avoid such #ifdef-ary - the symbol instead should > get #define-d to a sensible value ("false" in this case) in the header. > The other cases here may indeed need to remain as you have them. > Do you prefer the #define in the same function near the if or somwhere near the top of the file? Connor
On 26.02.2021 03:54, Connor Davis wrote: > On Thu, Feb 25, 2021 at 04:45:15PM +0100, Jan Beulich wrote: >> On 25.02.2021 16:24, Connor Davis wrote: >>> --- a/xen/common/domain.c >>> +++ b/xen/common/domain.c >>> @@ -501,7 +501,9 @@ static int sanitise_domain_config(struct xen_domctl_createdomain *config) >>> return -EINVAL; >>> } >>> >>> +#ifdef CONFIG_HAS_PASSTHROUGH >>> if ( !iommu_enabled ) >>> +#endif >>> { >>> dprintk(XENLOG_INFO, "IOMMU requested but not available\n"); >>> return -EINVAL; >> >> Where possible - to avoid such #ifdef-ary - the symbol instead should >> get #define-d to a sensible value ("false" in this case) in the header. >> The other cases here may indeed need to remain as you have them. >> > Do you prefer the #define in the same function near the if or > somwhere near the top of the file? Neither, if I understand you correctly. It should be in the same header where the extern declaration lives, for the whole code base to consume. Jan
diff --git a/xen/common/domain.c b/xen/common/domain.c index d85984638a..ad66bca325 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -501,7 +501,9 @@ static int sanitise_domain_config(struct xen_domctl_createdomain *config) return -EINVAL; } +#ifdef CONFIG_HAS_PASSTHROUGH if ( !iommu_enabled ) +#endif { dprintk(XENLOG_INFO, "IOMMU requested but not available\n"); return -EINVAL; diff --git a/xen/common/memory.c b/xen/common/memory.c index 76b9f58478..7135324857 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -294,7 +294,9 @@ int guest_remove_page(struct domain *d, unsigned long gmfn) p2m_type_t p2mt; #endif mfn_t mfn; +#ifdef CONFIG_HAS_PASSTHROUGH bool *dont_flush_p, dont_flush; +#endif int rc; #ifdef CONFIG_X86 @@ -385,13 +387,17 @@ int guest_remove_page(struct domain *d, unsigned long gmfn) * Since we're likely to free the page below, we need to suspend * xenmem_add_to_physmap()'s suppressing of IOMMU TLB flushes. */ +#ifdef CONFIG_HAS_PASSTHROUGH dont_flush_p = &this_cpu(iommu_dont_flush_iotlb); dont_flush = *dont_flush_p; *dont_flush_p = false; +#endif rc = guest_physmap_remove_page(d, _gfn(gmfn), mfn, 0); +#ifdef CONFIG_HAS_PASSTHROUGH *dont_flush_p = dont_flush; +#endif /* * With the lack of an IOMMU on some platforms, domains with DMA-capable @@ -839,11 +845,13 @@ int xenmem_add_to_physmap(struct domain *d, struct xen_add_to_physmap *xatp, xatp->gpfn += start; xatp->size -= start; +#ifdef CONFIG_HAS_PASSTHROUGH if ( is_iommu_enabled(d) ) { this_cpu(iommu_dont_flush_iotlb) = 1; extra.ppage = &pages[0]; } +#endif while ( xatp->size > done ) { @@ -868,6 +876,7 @@ int xenmem_add_to_physmap(struct domain *d, struct xen_add_to_physmap *xatp, } } +#ifdef CONFIG_HAS_PASSTHROUGH if ( is_iommu_enabled(d) ) { int ret; @@ -894,6 +903,7 @@ int xenmem_add_to_physmap(struct domain *d, struct xen_add_to_physmap *xatp, if ( unlikely(ret) && rc >= 0 ) rc = ret; } +#endif return rc; } diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c index 3558641cd9..b4dde7bef6 100644 --- a/xen/common/sysctl.c +++ b/xen/common/sysctl.c @@ -271,12 +271,14 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl) pi->cpu_khz = cpu_khz; pi->max_mfn = get_upper_mfn_bound(); arch_do_physinfo(pi); +#ifdef CONFIG_HAS_PASSTHROUGH if ( iommu_enabled ) { pi->capabilities |= XEN_SYSCTL_PHYSCAP_directio; if ( iommu_hap_pt_share ) pi->capabilities |= XEN_SYSCTL_PHYSCAP_iommu_hap_pt_share; } +#endif if ( vmtrace_available ) pi->capabilities |= XEN_SYSCTL_PHYSCAP_vmtrace;
The variables iommu_enabled and iommu_dont_flush_iotlb are defined in drivers/passthrough/iommu.c and are referenced in common code, which causes the link to fail when !CONFIG_HAS_PASSTHROUGH. Guard references to these variables in common code so that xen builds when !CONFIG_HAS_PASSTHROUGH. Signed-off-by: Connor Davis <connojdavis@gmail.com> --- xen/common/domain.c | 2 ++ xen/common/memory.c | 10 ++++++++++ xen/common/sysctl.c | 2 ++ 3 files changed, 14 insertions(+)