|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] tools: libxl: do not set the PoD target on ARM
On Thu, 2014-01-16 at 15:27 +0000, Ian Campbell wrote:
> ARM does not implemented PoD and so returns ENOSYS from XENMEM_set_pod_target.
>
> The correct solution here would be to check for ENOSYS in libxl, unfortunately
> xc_domain_set_pod_target suffers from the same broken error reporting as the
> rest of libxc and throws away the errno.
>
> So for now conditionally define xc_domain_set_pod_target to return success
> (which is what PoD does if nothing needs doing). xc_domain_get_pod_target sets
> errno==-1 and returns -1, which matches the broken error reporting of the
> existing function. It appears to have no in tree callers in any case.
>
> The conditional should be removed once libxc has been fixed.
>
> This makes ballooning (xl mem-set) work for ARM domains.
>
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> Cc: george.dunlap@xxxxxxxxxx
> ---
> I'd be generally wary of modifying the error handling in a piecemeal way, but
> certainly doing so for 4.4 now would be inapropriate.
>
> IIRC Ian J was planning a thorough sweep of the libxc error paths in 4.5 time
> frame, at which point this conditional stuff could be dropped.
>
> In terms of the 4.4 release, obviously ballooning would be very nice to have
> for ARM guests, on the other hand I'm aware that while the patch is fairly
> small/contained and safe it is also pretty skanky and likely wouldn't be
> accepted outside of the rc period.
George -- what do you think of this?
> ---
> tools/libxc/xc_domain.c | 28 ++++++++++++++++++++++++++++
> 1 file changed, 28 insertions(+)
>
> diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
> index c2fdd74..e1d1bec 100644
> --- a/tools/libxc/xc_domain.c
> +++ b/tools/libxc/xc_domain.c
> @@ -986,6 +986,12 @@ out:
> return rc;
> }
>
> +/* Currently only implemented on x86. This cannot be handled in the
> + * caller, e.g. by looking for errno==ENOSYS because of the broken
> + * error reporting style. Once this is fixed then this condition can
> + * be removed.
> + */
> +#if defined(__i386__)||defined(__x86_64__)
> static int xc_domain_pod_target(xc_interface *xch,
> int op,
> uint32_t domid,
> @@ -1055,6 +1061,28 @@ int xc_domain_get_pod_target(xc_interface *xch,
> pod_cache_pages,
> pod_entries);
> }
> +#else
> +int xc_domain_set_pod_target(xc_interface *xch,
> + uint32_t domid,
> + uint64_t target_pages,
> + uint64_t *tot_pages,
> + uint64_t *pod_cache_pages,
> + uint64_t *pod_entries)
> +{
> + return 0;
> +}
> +int xc_domain_get_pod_target(xc_interface *xch,
> + uint32_t domid,
> + uint64_t *tot_pages,
> + uint64_t *pod_cache_pages,
> + uint64_t *pod_entries)
> +{
> + /* On x86 (above) xc_domain_pod_target will incorrectly return -1
> + * with errno==-1 on error. Do the same for least surprise. */
> + errno = -1;
> + return -1;
> +}
> +#endif
>
> int xc_domain_max_vcpus(xc_interface *xch, uint32_t domid, unsigned int max)
> {
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |