|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-next 8/9] xen: Introduce HAS_M2P config and use to protect mfn_to_gmfn call
>>> On 18.02.19 at 12:35, <julien.grall@xxxxxxx> wrote:
> --- a/xen/common/domctl.c
> +++ b/xen/common/domctl.c
> @@ -205,7 +205,7 @@ void getdomaininfo(struct domain *d, struct
> xen_domctl_getdomaininfo *info)
> info->outstanding_pages = d->outstanding_pages;
> info->shr_pages = atomic_read(&d->shr_pages);
> info->paged_pages = atomic_read(&d->paged_pages);
> - info->shared_info_frame = mfn_to_gmfn(d, virt_to_mfn(d->shared_info));
> + info->shared_info_frame = gfn_x(domain_shared_info_gfn(d));
I think this change wants to be accompanied by a warning attached
to the field declaration in the public header.
But I'd also like to have the tool stack maintainers' view on making
this field effectively unusable for Arm.
> --- a/xen/common/memory.c
> +++ b/xen/common/memory.c
> @@ -510,6 +510,7 @@ static bool propagate_node(unsigned int xmf, unsigned int
> *memflags)
> return true;
> }
>
> +#ifdef CONFIG_M2P
> static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t)
> arg)
> {
> struct xen_memory_exchange exch;
> @@ -802,6 +803,7 @@ static long
> memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
> rc = -EFAULT;
> return rc;
> }
> +#endif
Please can you move the #ifdef inside the function body, add #else
to return -EOPNOTSUPP, and ...
> @@ -1233,12 +1235,14 @@ long do_memory_op(unsigned long cmd,
> XEN_GUEST_HANDLE_PARAM(void) arg)
>
> break;
>
> +#ifdef CONFIG_M2P
> case XENMEM_exchange:
> if ( unlikely(start_extent) )
> return -EINVAL;
>
> rc = memory_exchange(guest_handle_cast(arg, xen_memory_exchange_t));
> break;
> +#endif
... avoid the extra #ifdef-ary here altogether?
> --- a/xen/drivers/passthrough/iommu.c
> +++ b/xen/drivers/passthrough/iommu.c
> @@ -186,9 +186,10 @@ void __hwdom_init iommu_hwdom_init(struct domain *d)
> hd->need_sync = iommu_hwdom_strict && !iommu_use_hap_pt(d);
> if ( need_iommu_pt_sync(d) )
> {
> + int rc = 0;
> +#ifdef CONFIG_HAS_M2P
> struct page_info *page;
> unsigned int i = 0, flush_flags = 0;
> - int rc = 0;
>
> page_list_for_each ( page, &d->page_list )
> {
> @@ -215,6 +216,9 @@ void __hwdom_init iommu_hwdom_init(struct domain *d)
> /* Use while-break to avoid compiler warning */
> while ( iommu_iotlb_flush_all(d, flush_flags) )
> break;
> +#else
> + rc = -ENOSYS;
-EOPNOTSUPP please.
> --- a/xen/include/asm-arm/domain.h
> +++ b/xen/include/asm-arm/domain.h
> @@ -267,6 +267,11 @@ static inline void free_vcpu_guest_context(struct
> vcpu_guest_context *vgc)
>
> static inline void arch_vcpu_block(struct vcpu *v) {}
>
> +static inline gfn_t domain_shared_info_gfn(struct domain *d)
> +{
> + return INVALID_GFN;
> +}
> +
> #endif /* __ASM_DOMAIN_H__ */
>
> /*
> diff --git a/xen/include/xen/domain.h b/xen/include/xen/domain.h
> index d1bfc82f57..00d8b09794 100644
> --- a/xen/include/xen/domain.h
> +++ b/xen/include/xen/domain.h
> @@ -118,4 +118,13 @@ struct vnuma_info {
>
> void vnuma_destroy(struct vnuma_info *vnuma);
>
> +#ifdef CONFIG_HAS_M2P
> +#define domain_shared_info_gfn(d_) ({ \
> + struct domain *d = (d_); \
const
Also the naming needs to be the other way around: The macro
parameter should be named d (all instances will get substituted
anyway, and hence name collisions are impossible) while the
local variable should be named d_, to avoid collisions with names
in the outer scopes.
> + \
I won't insist, but especially small macros are often an exception
to the blank-line-between-declarations-and-statements rule. IOW
I'd prefer if you dropped this line, unless others correct my view
here.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |