Message ID | f76852db6601b1bf243781b0b8b16c7a6fdc8a01.1621712830.git.connojdavis@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Minimal build for RISCV | expand |
On 24.05.2021 16:34, Connor Davis wrote: > 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> Somewhat hesitantly Acked-by: Jan Beulich <jbeulich@suse.com> with ... > --- a/xen/include/xen/iommu.h > +++ b/xen/include/xen/iommu.h > @@ -51,9 +51,15 @@ static inline bool_t dfn_eq(dfn_t x, dfn_t y) > return dfn_x(x) == dfn_x(y); > } > > -extern bool_t iommu_enable, iommu_enabled; > +extern bool_t iommu_enable; ... just "bool" used here, as I think I did say before. Can be taken care of while committing, I think. Jan
On 25.05.2021 10:44, Jan Beulich wrote: > On 24.05.2021 16:34, Connor Davis wrote: >> --- a/xen/include/xen/iommu.h >> +++ b/xen/include/xen/iommu.h >> @@ -51,9 +51,15 @@ static inline bool_t dfn_eq(dfn_t x, dfn_t y) >> return dfn_x(x) == dfn_x(y); >> } >> >> -extern bool_t iommu_enable, iommu_enabled; >> +extern bool_t iommu_enable; > > ... just "bool" used here, as I think I did say before. Can be taken > care of while committing, I think. Actually, while preparing to commit this, I realized this would better be --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -51,8 +51,12 @@ static inline bool_t dfn_eq(dfn_t x, dfn_t y) return dfn_x(x) == dfn_x(y); } +#ifdef CONFIG_HAS_PASSTHROUGH extern bool_t iommu_enable, iommu_enabled; extern bool force_iommu, iommu_quarantine, iommu_verbose; +#else +#define iommu_enabled false +#endif #ifdef CONFIG_X86 extern enum __packed iommu_intremap { Which is what I'm about to commit. Jan
diff --git a/xen/common/memory.c b/xen/common/memory.c index b5c70c4b85..72a6b70cb5 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/include/xen/iommu.h b/xen/include/xen/iommu.h index 460755df29..904cdf725d 100644 --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -51,9 +51,15 @@ static inline bool_t dfn_eq(dfn_t x, dfn_t y) return dfn_x(x) == dfn_x(y); } -extern bool_t iommu_enable, iommu_enabled; +extern bool_t iommu_enable; extern bool force_iommu, iommu_quarantine, iommu_verbose; +#ifdef CONFIG_HAS_PASSTHROUGH +extern bool iommu_enabled; +#else +#define iommu_enabled false +#endif + #ifdef CONFIG_X86 extern enum __packed iommu_intremap { /*
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/memory.c | 10 ++++++++++ xen/include/xen/iommu.h | 8 +++++++- 2 files changed, 17 insertions(+), 1 deletion(-)