|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC][v2][PATCH 04/14] tools/libxl: detect and avoid conflicts with RDM
On Wed, Jun 03, 2015 at 10:25:47AM +0800, Chen, Tiejun wrote:
[...]
> >>+static struct xen_reserved_device_memory
> >>+*xc_device_get_rdm(libxl__gc *gc,
> >>+ uint32_t flag,
> >>+ uint16_t seg,
> >>+ uint8_t bus,
> >>+ uint8_t devfn,
> >>+ unsigned int *nr_entries)
> >>+{
> >>+ struct xen_reserved_device_memory *xrdm = NULL;
> >>+ int rc = xc_reserved_device_memory_map(CTX->xch, flag, seg, bus, devfn,
> >>+ xrdm, nr_entries);
> >>+
> >
> >Please separate declaration and function call. Also change xrdm to NULL
>
> Are you saying this?
>
> struct xen_reserved_device_memory *xrdm = NULL;
> int rc;
>
> rc = xc_reserved_device_memory_map(CTX->xch, flag, seg, bus, devfn,
> xrdm, nr_entries);
Yes, splitting "rc = " to a separate line. The other thing is:
rc = xc_reserved_device_memory_map(CTX->xch, flag, seg, bus, devfn,
NULL, nr_entries);
^ here
It's mostly cosmetic. IMHO it is clearer than passing xrdm which is
always NULL in that function call.
>
> >in that function call.
>
> Sorry, what do you mean by this point? Or you let me to change xrdm to NULL
> inside xc_reserved_device_memory_map()?
>
> >
> >>+ assert( rc <= 0 );
> >>+ /* "0" means we have no any rdm entry. */
> >>+ if ( !rc )
> >>+ goto out;
> >
> >Also set *nr_entries = 0; otherwise you can't distinguish error vs 0
> >entries.
>
> *nr_entries is always updated by xc_reserved_device_memory_map() above.
>
Actually no. If xc_hypercall_bounce_pre fails in the function,
nr_entries is untouched.
> >
> >>+
> >>+ if ( errno == ENOBUFS )
> >>+ {
> >>+ if ( (xrdm = malloc(*nr_entries *
> >>+ sizeof(xen_reserved_device_memory_t))) == NULL
> >>)
[...]
> >>+ return -1;
> >
> >Please return libxl error code.
>
> ERROR_FAIL?
>
Yes, that's fine.
[...]
> >>+ args.mmio_size = HVM_BELOW_4G_MMIO_LENGTH;
> >>+ mmio_start = (1ull << 32) - args.mmio_size;
> >>+
> >>+ if (args.lowmem_size > mmio_start)
> >>+ args.lowmem_size = mmio_start;
> >>+
> >>+ /*
> >>+ * We'd like to set a memory boundary to determine if we need to check
> >>+ * any overlap with reserved device memory.
> >>+ */
> >>+ rdm_mem_boundary = 0x80000000;
> >>+ if (info->rdm_mem_boundary_memkb)
> >
>
> I'm going to update this chunk of codes as follows:
>
> #1. @@ -858,6 +858,12 @@ const char *libxl_defbool_to_string(libxl_defbool
> b);
> #define LIBXL_TIMER_MODE_DEFAULT -1
> #define LIBXL_MEMKB_DEFAULT ~0ULL
>
> +/*
> + * We'd like to set a memory boundary to determine if we need to check
> + * any overlap with reserved device memory.
> + */
> +#define LIBXL_RDM_MEM_BOUNDARY_MEMKB_DEFAULT (2048 * 1024)
> +
> #define LIBXL_MS_VM_GENID_LEN 16
> typedef struct {
> uint8_t bytes[LIBXL_MS_VM_GENID_LEN];
>
> >I think you mean info->rdm_mem_boundary_memkb != LIBXL_MEMKB_DEFAULT?
> >
>
> #2.
>
> @@ -109,6 +109,10 @@ void libxl__rdm_setdefault(libxl__gc *gc,
> libxl_domain_build_info *b_info)
> {
> if (b_info->rdm.reserve == LIBXL_RDM_RESERVE_FLAG_INVALID)
> b_info->rdm.reserve = LIBXL_RDM_RESERVE_FLAG_RELAXED;
> +
> + if (b_info->rdm_mem_boundary_memkb == LIBXL_MEMKB_DEFAULT)
> + b_info->rdm_mem_boundary_memkb =
> + LIBXL_RDM_MEM_BOUNDARY_MEMKB_DEFAULT;
This looks plausible.
Wei.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |