From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dario Faggioli Subject: Re: [PATCH v9 5/9] libxl/xl: push VCPU affinity pinning down to libxl Date: Fri, 20 Jun 2014 10:17:17 +0200 Message-ID: <1403252237.16957.7.camel@Solace> References: <20140618141449.21586.55528.stgit@Solace> <20140618142818.21586.48020.stgit@Solace> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7684083802363655629==" Return-path: In-Reply-To: <20140618142818.21586.48020.stgit@Solace> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Ian.Jackson@citrix.com, George.Dunlap@citrix.com, Wei Liu , Ian.Campbell@citrix.com, Andrew.Cooper3@citrix.com List-Id: xen-devel@lists.xenproject.org --===============7684083802363655629== Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-cFol6Rpn3L1gJog4goGq" --=-cFol6Rpn3L1gJog4goGq Content-Type: multipart/mixed; boundary="=-sQRLdPWJ+k6AeDqjPzfw" --=-sQRLdPWJ+k6AeDqjPzfw Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On mer, 2014-06-18 at 16:28 +0200, Dario Faggioli wrote: > From: Wei Liu >=20 Oh and, Wei, one more thing about this patch. While preparing v10, I happen to have made quite a few changes to the patch itself. It still accomplishes its goal, and its still based on your one, of course, but it does look a bit different from it now. I'm attaching it to this email, let me know what you want me to do about authorship. I'm totally fine with keeping the `From: Wei Liu' tag, but I'll keep it only if you also are... I don't want you to be blamed for my bugs! :-P To have an idea of what happened, have a look at the 'Changes from v9' section. It's nothing too mind-blowing at all, but the code does look different. [sorry for the kind-of top-posting. I'm leaving the content of the original e-mail here, so that one can easily compare the old (here in the message body) and new (attached) look of the patch] Regards, Dario > This patch introduces an array of libxl_bitmap called "vcpu_hard_affinity= " > in libxl IDL to preserve VCPU to PCPU mapping. This is necessary for libx= l > to preserve all information to construct a domain. >=20 > Also define LIBXL_HAVE_BUILDINFO_VCPU_HARD_AFFINITY_ARRAY in libxl.h to > mark the change in API. >=20 > This patch was originally part of Wei's series about pushing as much > information as possible on domain configuration in libxl, rather than > xl. See here, for more details: > http://lists.xen.org/archives/html/xen-devel/2014-06/msg01026.html > http://lists.xen.org/archives/html/xen-devel/2014-06/msg01031.html >=20 > Signed-off-by: Wei Liu > Signed-off-by: Dario Faggioli > > --- > Changes from v8: > * type in the changelog. >=20 > Changes from v7: > This patch is new in the series, and it is coming from Wei's series > about pushing domain config information down to libxl. It is being > incorporated in this series to reduce as much as possible the > inter-dependencies between the two patch series, i.e., for ease > of development and review. > --- > tools/libxl/libxl.h | 15 ++++++++++ > tools/libxl/libxl_dom.c | 14 +++++++++ > tools/libxl/libxl_types.idl | 1 + > tools/libxl/xl_cmdimpl.c | 65 ++++++++++++-------------------------= ------ > 4 files changed, 48 insertions(+), 47 deletions(-) >=20 > diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h > index c2b143b..663abe2 100644 > --- a/tools/libxl/libxl.h > +++ b/tools/libxl/libxl.h > @@ -338,6 +338,21 @@ > #endif > =20 > /* > + * LIBXL_HAVE_BUILDINFO_VCPU_HARD_AFFINITY_ARRAY > + * > + * If this is defined, then libxl_domain_build_info structure will > + * contain vcpu_hard_affinity, an array of libxl_bitmap that contains > + * the necessary information to set the hard affinity of each VCPU to > + * a set of PCPUs. Libxl will try to pin VCPUs to PCPUs according to > + * this list. > + * > + * The number of libxl_bitmap in the array equals to the maximum number > + * of VCPUs. The size of each bitmap is computed basing on the maximum > + * number of PCPUs. > + */ > +#define LIBXL_HAVE_BUILDINFO_VCPU_HARD_AFFINITY_ARRAY 1 > + > +/* > * LIBXL_HAVE_BUILDINFO_USBDEVICE_LIST > * > * If this is defined, then the libxl_domain_build_info structure will > diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c > index a90a8d5..484ad84 100644 > --- a/tools/libxl/libxl_dom.c > +++ b/tools/libxl/libxl_dom.c > @@ -264,6 +264,20 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid, > libxl_set_vcpuaffinity_all(ctx, domid, info->max_vcpus, > &info->cpumap, NULL); > =20 > + /* If we have the vcpu hard affinity list, honour it */ > + if (info->num_vcpu_hard_affinity) { > + int i; > + > + for (i =3D 0; i < info->num_vcpu_hard_affinity; i++) { > + if (libxl_set_vcpuaffinity(ctx, domid, i, > + &info->vcpu_hard_affinity[i], > + NULL)) { > + LOG(ERROR, "setting affinity failed on vcpu `%d'", i); > + return ERROR_FAIL; > + } > + } > + } > + > if (xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + > LIBXL_MAXMEM_CONSTANT) < 0) { > LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "Couldn't set max memory= "); > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > index 2da58e2..05978d7 100644 > --- a/tools/libxl/libxl_types.idl > +++ b/tools/libxl/libxl_types.idl > @@ -299,6 +299,7 @@ libxl_domain_build_info =3D Struct("domain_build_info= ",[ > ("avail_vcpus", libxl_bitmap), > ("cpumap", libxl_bitmap), > ("nodemap", libxl_bitmap), > + ("vcpu_hard_affinity", Array(libxl_bitmap, "num_vcpu_hard_affinity")= ), > ("numa_placement", libxl_defbool), > ("tsc_mode", libxl_tsc_mode), > ("max_memkb", MemKB), > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index 516a4d7..ac603c8 100644 > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -88,9 +88,6 @@ xlchild children[child_max]; > static const char *common_domname; > static int fd_lock =3D -1; > =20 > -/* Stash for specific vcpu to pcpu mappping */ > -static int *vcpu_to_pcpu; > - > static const char savefileheader_magic[32]=3D > "Xen saved domain, xl format\n \0 \r"; > =20 > @@ -825,6 +822,7 @@ static void parse_config_data(const char *config_sour= ce, > b_info->max_vcpus =3D l; > =20 > if (!xlu_cfg_get_list (config, "cpus", &cpus, 0, 1)) { > + b_info->num_vcpu_hard_affinity =3D b_info->max_vcpus; > int n_cpus =3D 0; > =20 > if (libxl_cpu_bitmap_alloc(ctx, &b_info->cpumap, 0)) { > @@ -832,21 +830,19 @@ static void parse_config_data(const char *config_so= urce, > exit(1); > } > =20 > - /* Prepare the array for single vcpu to pcpu mappings */ > - vcpu_to_pcpu =3D xmalloc(sizeof(int) * b_info->max_vcpus); > - memset(vcpu_to_pcpu, -1, sizeof(int) * b_info->max_vcpus); > + b_info->vcpu_hard_affinity =3D > + xmalloc(b_info->num_vcpu_hard_affinity * sizeof(libxl_bitmap= )); > + > + for (i =3D 0; i < b_info->num_vcpu_hard_affinity; i++) { > + libxl_bitmap_init(&b_info->vcpu_hard_affinity[i]); > + if (libxl_cpu_bitmap_alloc(ctx, > + &b_info->vcpu_hard_affinity[i], 0= )) { > + fprintf(stderr, "Unable to allocate cpumap for vcpu %d\n= ", i); > + exit(1); > + } > + libxl_bitmap_set_any(&b_info->vcpu_hard_affinity[i]); > + } > =20 > - /* > - * Idea here is to let libxl think all the domain's vcpus > - * have cpu affinity with all the pcpus on the list. > - * It is then us, here in xl, that matches each single vcpu > - * to its pcpu (and that's why we need to stash such info in > - * the vcpu_to_pcpu array now) after the domain has been created= . > - * Doing it like this saves the burden of passing to libxl > - * some big array hosting the single mappings. Also, using > - * the cpumap derived from the list ensures memory is being > - * allocated on the proper nodes anyway. > - */ > libxl_bitmap_set_none(&b_info->cpumap); > while ((buf =3D xlu_cfg_get_listitem(cpus, n_cpus)) !=3D NULL) { > i =3D atoi(buf); > @@ -855,12 +851,14 @@ static void parse_config_data(const char *config_so= urce, > exit(1); > } > libxl_bitmap_set(&b_info->cpumap, i); > - if (n_cpus < b_info->max_vcpus) > - vcpu_to_pcpu[n_cpus] =3D i; > + if (n_cpus < b_info->max_vcpus) { > + libxl_bitmap_set_none(&b_info->vcpu_hard_affinity[n_cpus= ]); > + libxl_bitmap_set(&b_info->vcpu_hard_affinity[n_cpus], i)= ; > + } > n_cpus++; > } > =20 > - /* We have a cpumap, disable automatic placement */ > + /* We have a list of cpumaps, disable automatic placement */ > libxl_defbool_set(&b_info->numa_placement, false); > } > else if (!xlu_cfg_get_string (config, "cpus", &buf, 0)) { > @@ -2217,33 +2215,6 @@ start: > if ( ret ) > goto error_out; > =20 > - /* If single vcpu to pcpu mapping was requested, honour it */ > - if (vcpu_to_pcpu) { > - libxl_bitmap vcpu_cpumap; > - > - ret =3D libxl_cpu_bitmap_alloc(ctx, &vcpu_cpumap, 0); > - if (ret) > - goto error_out; > - for (i =3D 0; i < d_config.b_info.max_vcpus; i++) { > - > - if (vcpu_to_pcpu[i] !=3D -1) { > - libxl_bitmap_set_none(&vcpu_cpumap); > - libxl_bitmap_set(&vcpu_cpumap, vcpu_to_pcpu[i]); > - } else { > - libxl_bitmap_set_any(&vcpu_cpumap); > - } > - if (libxl_set_vcpuaffinity(ctx, domid, i, &vcpu_cpumap, NULL= )) { > - fprintf(stderr, "setting affinity failed on vcpu `%d'.\n= ", i); > - libxl_bitmap_dispose(&vcpu_cpumap); > - free(vcpu_to_pcpu); > - ret =3D ERROR_FAIL; > - goto error_out; > - } > - } > - libxl_bitmap_dispose(&vcpu_cpumap); > - free(vcpu_to_pcpu); vcpu_to_pcpu =3D NULL; > - } > - > ret =3D libxl_userdata_store(ctx, domid, "xl", > config_data, config_len); > if (ret) { >=20 --=20 <> (Raistlin Majere) ----------------------------------------------------------------- Dario Faggioli, Ph.D, http://about.me/dario.faggioli Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK) --=-sQRLdPWJ+k6AeDqjPzfw Content-Disposition: attachment; filename="libxl-xl-vcpu-1to1-maping-in-libxl_from-Wei.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="libxl-xl-vcpu-1to1-maping-in-libxl_from-Wei.patch"; charset="UTF-8" Y29tbWl0IGFjOGMwNmQwNzcyMTA1M2ViY2Q0MTE1YWQzMGE2ZmEwNmNmYTQwODYNCkF1dGhvcjog V2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4NCkRhdGU6ICAgV2VkIEp1biAxMSAxMDo1Mjoy MCAyMDE0ICswMjAwDQoNCiAgICBsaWJ4bC94bDogcHVzaCBWQ1BVIGFmZmluaXR5IHBpbm5pbmcg ZG93biB0byBsaWJ4bA0KICAgIA0KICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbiBhcnJheSBv ZiBsaWJ4bF9iaXRtYXAgY2FsbGVkICJ2Y3B1X2hhcmRfYWZmaW5pdHkiDQogICAgaW4gbGlieGwg SURMIHRvIHByZXNlcnZlIFZDUFUgdG8gUENQVSBtYXBwaW5nLiBUaGlzIGlzIG5lY2Vzc2FyeSBm b3IgbGlieGwNCiAgICB0byBwcmVzZXJ2ZSBhbGwgaW5mb3JtYXRpb24gdG8gY29uc3RydWN0IGEg ZG9tYWluLg0KICAgIA0KICAgIFRoZSBhcnJheSBhY2NvbW1vZGF0ZXMgYXQgbW9zdCBtYXhfdmNw dXMgZWxlbWVudHMsIGVhY2ggY29udGFpbmluZyB0aGUNCiAgICBhZmZpbml0eSBvZiB0aGUgcmVz cGVjdGl2ZSBWQ1BVLiBJZiBsZXNzIHRoYW4gbWF4X3ZjcHVzIGJpdG1hcHMgYXJlDQogICAgcHJl c2VudCwgdGhlIFZDUFVzIGFzc29jaWF0ZWQgdG8gdGhlIG1pc3NpbmcgZWxlbWVudHMgd2lsbCBq dXN0IHN0YXkgd2l0aA0KICAgIHRoZWlyIGRlZmF1bHQgYWZmaW5pdHkgKHRoZXknbGwgYmUgZnJl ZSB0byBleGVjdXRlIG9uIGV2ZXJ5IFBDUFUpLg0KICAgIA0KICAgIEluIGNhc2UgYm90aCB0aGlz IG5ldyBmaWVsZCwgYW5kIHRoZSBhbHJlYWR5IGV4aXN0aW5nIGNwdW1hcCBmaWVsZCBhcmUNCiAg ICB1c2VkLCB0aGUgY29udGVudCBvZiB0aGUgYXJyYXkgd2lsbCBvdmVycmlkZSB3aGF0J3Mgc2V0 IGluIGNwdW1hcC4gKEluDQogICAgeGwsIHdlIG1ha2Ugc3VyZSB0aGF0IHRoaXMgbmV2ZXIgaGFw cGVucyBpbiB4bCwgYnkgdXNpbmcgb25seSBvbmUgb2YgdGhlDQogICAgdHdvIGF0IGFueSBnaXZl biB0aW1lLikNCiAgICANCiAgICBUaGUgcHJvcGVyIG1hY3JvIHRvIG1hcmsgdGhlIEFQSSBjaGFu Z2UgKGNhbGxlZA0KICAgIExJQlhMX0hBVkVfQlVJTERJTkZPX1ZDUFVfQUZGSU5JVFlfQVJSQVlT KSBpcyBhZGRlZCBidXQgaXQgaXMgY29tbWVudGVkLg0KICAgIEl0IHdpbGwgYmUgdW5jb21tZW50 ZWQgYnkgdGhlIHBhdGNoIGluIHRoZSBzZXJpZXMgdGhhdCBjb21wbGV0ZXMgdGhlDQogICAgcHJv Y2VzcywgYnkgYWRkaW5nIHRoZSAidmNwdV9zb2Z0X2FmZmluaXR5IiBhcnJheS4gVGhpcyBpcyBi ZWNhdXNlLCBhZnRlcg0KICAgIGFsbCwgdGhlc2UgdHdvIGZpZWxkcyBhcmUgYmVpbmcgYWRkZWQg c29ydC1vZiB0b2dldGhlciwgYW5kIGFyZSB2ZXJ5DQogICAgdmVyeSBzaW1pbGFyLCBpbiBib3Ro IG1lYW5pbmcgYW5kIHVzYWdlLCBzbyBpdCBtYWtlcyBzZW5zZSBmb3IgdGhlbSB0bw0KICAgIHNo YXJlIHRoZSBzYW1lIG1hcmtlci4NCiAgICANCiAgICBUaGlzIHBhdGNoIHdhcyBvcmlnaW5hbGx5 IHBhcnQgb2YgV2VpJ3Mgc2VyaWVzIGFib3V0IHB1c2hpbmcgYXMgbXVjaA0KICAgIGluZm9ybWF0 aW9uIGFzIHBvc3NpYmxlIG9uIGRvbWFpbiBjb25maWd1cmF0aW9uIGluIGxpYnhsLCByYXRoZXIg dGhhbg0KICAgIHhsLiBTZWUgaGVyZSwgZm9yIG1vcmUgZGV0YWlsczoNCiAgICAgIGh0dHA6Ly9s aXN0cy54ZW4ub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTQtMDYvbXNnMDEwMjYuaHRt bA0KICAgICAgaHR0cDovL2xpc3RzLnhlbi5vcmcvYXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwvMjAx NC0wNi9tc2cwMTAzMS5odG1sDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2Vp LmxpdTJAY2l0cml4LmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYXJpbyBGYWdnaW9saSA8ZGFy aW8uZmFnZ2lvbGlAY2l0cml4LmNvbT4+DQogICAgLS0tDQogICAgQ2hhbmdlcyBmcm9tIHY5Og0K ICAgICAqIHVwZGF0ZSB0aGUgTElCWExfSEFWRV94eHggbWFjcm8gc28gdGhhdCBpdCBjYW4gYWNj b3VudCBmb3IgYm90aA0KICAgICAgIHZjcHVfaGFyZF9hZmZpbml0eSBhcnJheSwgaW50cm9kdWNl ZCBpbiB0aGlzIHBhdGNoLCBhbmQNCiAgICAgICB2Y3B1X3NvZnRfYWZmaW5pdHkgYXJyYXksIGlu dHJvZHVjZWQgaW4gYW5vdGhlciBwYXRjaCBvZiB0aGUNCiAgICAgICBzZXJpZXMsIGFzIHN1Z2dl c3RlZCBkdXJpbmcgcmV2aWV3Ow0KICAgICAqIHVwZGF0ZSB0aGUgTElCWExfSEFWRV94eHggbWFj cm8gY29tbWVudCBhY2NvcmRpbmdseS4gQWxzbywNCiAgICAgICByZXdvcmQgaXQgYXMgcmVxdWVz dGVkIGR1cmluZyByZXZpZXc7DQogICAgICogaW4geGwgY29kZSwgYXZvaWQgcHJlYWxsb2NhdGlu ZyB0aGUgd2hvbGUgdmNwdV9oYXJkX2FmZmluaXR5IGFycmF5Lg0KICAgICAgIFRoYXQgaXMgbm90 IG5lY2Vzc2FyeTogdmNwdXMgbm90IHByZXNlbnQgaW4gdGhlIGFycmF5IHdpbGwNCiAgICAgICBz dGF5IHdpdGggdGhlaXIgZGVmYXVsdCBhZmZpbml0eSwgbm8gbmVlZCB0byBwYXNzIGFueSBlbXB0 eSwNCiAgICAgICBvciBmdWxsLCBvciB3aGF0ZXZlciBjcHVtYXAgZm9yIHRoZW07DQogICAgICog c3RpbGwgaW4geGwsIHdoaWxlIGRlYWxpbmcgd2l0aCBhIGxpc3QgKCJjcHVzID0gWzIsIDNdIiks IGl0DQogICAgICAgaXMgbm90IG5lY2Vzc2FyeSB0byBtZXNzIHdpdGggY3B1bWFwLCBzbyBraWxs IGFueSByZWZlcmVuY2UgdG8NCiAgICAgICB0aGF0Lg0KICAgIA0KICAgIENoYW5nZXMgZnJvbSB2 ODoNCiAgICAgKiB0eXBvIGluIHRoZSBjaGFuZ2Vsb2cuDQogICAgDQogICAgQ2hhbmdlcyBmcm9t IHY3Og0KICAgICBUaGlzIHBhdGNoIGlzIG5ldyBpbiB0aGUgc2VyaWVzLCBhbmQgaXQgaXMgY29t aW5nIGZyb20gV2VpJ3Mgc2VyaWVzDQogICAgIGFib3V0IHB1c2hpbmcgZG9tYWluIGNvbmZpZyBp bmZvcm1hdGlvbiBkb3duIHRvIGxpYnhsLiBJdCBpcyBiZWluZw0KICAgICBpbmNvcnBvcmF0ZWQg aW4gdGhpcyBzZXJpZXMgdG8gcmVkdWNlIGFzIG11Y2ggYXMgcG9zc2libGUgdGhlDQogICAgIGlu dGVyLWRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSB0d28gcGF0Y2ggc2VyaWVzLCBpLmUuLCBmb3Ig ZWFzZQ0KICAgICBvZiBkZXZlbG9wbWVudCBhbmQgcmV2aWV3Lg0KDQpkaWZmIC0tZ2l0IGEvdG9v bHMvbGlieGwvbGlieGwuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsLmgNCmluZGV4IGE4NDc3YzkuLmQ2 M2NkMTEgMTAwNjQ0DQotLS0gYS90b29scy9saWJ4bC9saWJ4bC5oDQorKysgYi90b29scy9saWJ4 bC9saWJ4bC5oDQpAQCAtMzQwLDYgKzM0MCwzMSBAQCB0eXBlZGVmIHN0cnVjdCBsaWJ4bF9fY3R4 IGxpYnhsX2N0eDsNCiAjZW5kaWYNCiANCiAvKg0KKyAqIExJQlhMX0hBVkVfQlVJTERJTkZPX1ZD UFVfQUZGSU5JVFlfQVJSQVlTDQorICoNCisgKiBJZiB0aGlzIGlzIGRlZmluZWQsIHRoZW4gdGhl IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvIHN0cnVjdHVyZSB3aWxsDQorICogY29udGFpbiB0d28g YXJyYXlzIG9mIGxpYnhsX2JpdG1hcC1zLCB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0 aW9uDQorICogdG8gc2V0IHRoZSBoYXJkIGFmZmluaXR5ICh2Y3B1X2hhcmRfYWZmaW5pdHkpIGFu ZCB0aGUgc29mdCBhZmZpbml0eQ0KKyAqICh2Y3B1X3NvZnRfYWZmaW5pdHkpIG9mIHRoZSBWQ1BV cy4NCisgKg0KKyAqIE5vdGUgdGhhdCwgaWYgdGhlIHZjcHVfaGFyZF9hZmZpbml0eSBhcnJheSBp cyB1c2VkLCBsaWJ4bCB3aWxsIGlnbm9yZQ0KKyAqIHRoZSBjb250ZW50IG9mIHRoZSBjcHVtYXAg ZmllbGQgb2YgbGlieGxfZG9tYWluX2J1aWxkX2luZm8uIFRoYXQgaXMgdG8NCisgKiBzYXksIGlm IHRoZSBhcnJheSBpcyBhbGxvY2F0ZWQgYW5kIHVzZWQgYnkgdGhlIGNhbGxlciwgaXQgaXMgaXQg YW5kDQorICogb25seSBpdCB0aGF0IGRldGVybWluZXMgdGhlIGhhcmQgYWZmaW5pdHkgb2YgdGhl IGRvbWFpbidzIFZDUFVzLg0KKyAqDQorICogVGhlIG51bWJlciBvZiBsaWJ4bF9iaXRtYXAtcyBp biB0aGUgYXJyYXlzIHNob3VsZCBiZSBlcXVhbCB0byB0aGUNCisgKiBtYXhpbXVtIG51bWJlciBv ZiBWQ1BVcyBvZiB0aGUgZG9tYWluLiBJZiB0aGVyZSBvbmx5IGFyZSBOIGVsZW1lbnRzIGluDQor ICogYW4gYXJyYXksIHdpdGggTiBzbWFsbGVyIHRoZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgVkNQ VXMsIHRoZSBoYXJkIG9yDQorICogc29mdCBhZmZpbml0eSAoZGVwZW5kaW5nIG9uIHdoaWNoIGFy cmF5IHdlIGFyZSB0YWxraW5nIGFib3V0KSB3aWxsIGJlDQorICogc2V0IG9ubHkgZm9yIHRoZSBm aXJzdCBOIFZDUFVzLiBUaGUgb3RoZXIgVkNQVXMgd2lsbCBqdXN0IGhhdmUgYWZmaW5pdHksDQor ICogYm90aCBoYXJkIGFuZCBzb2Z0LCB3aXRoIGFsbCB0aGUgaG9zdCBQQ1BVcy4NCisgKiBFYWNo IGJpdG1hcCBzaG91bGQgYmUgYmlnIGVub3VnaCB0byBhY2NvbW1vZGF0ZSB0aGUgbWF4aW11bSBu dW1iZXIgb2YNCisgKiBQQ1BVcyBvZiB0aGUgaG9zdC4NCisgKi8NCisvKiB0byBiZSB1bmNvbW1l bnRlZCB3aGVuIHNvZnQgYXJyYXkgYWRkZWQgKi8NCisvKiAjZGVmaW5lIExJQlhMX0hBVkVfQlVJ TERJTkZPX1ZDUFVfQUZGSU5JVFlfQVJSQVlTIDEgKi8NCisNCisvKg0KICAqIExJQlhMX0hBVkVf QlVJTERJTkZPX1VTQkRFVklDRV9MSVNUDQogICoNCiAgKiBJZiB0aGlzIGlzIGRlZmluZWQsIHRo ZW4gdGhlIGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvIHN0cnVjdHVyZSB3aWxsDQpkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGwvbGlieGxfZG9tLmMgYi90b29scy9saWJ4bC9saWJ4bF9kb20uYw0KaW5k ZXggNWQ4YTBiZS4uN2E2MGVlMiAxMDA2NDQNCi0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2RvbS5j DQorKysgYi90b29scy9saWJ4bC9saWJ4bF9kb20uYw0KQEAgLTI0OSw3ICsyNDksNyBAQCBpbnQg bGlieGxfX2J1aWxkX3ByZShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwNCiAgICAgICog bGlieGxfZG9tYWluX3NldF9ub2RlYWZmaW5pdHkoKSB0aGF0IGVuYWN0cyB0aGUgYWN0dWFsIHBs YWNlbWVudC4NCiAgICAgICovDQogICAgIGlmIChsaWJ4bF9kZWZib29sX3ZhbChpbmZvLT5udW1h X3BsYWNlbWVudCkpIHsNCi0gICAgICAgIGlmIChpbmZvLT5jcHVtYXAuc2l6ZSkgew0KKyAgICAg ICAgaWYgKGluZm8tPmNwdW1hcC5zaXplIHx8IGluZm8tPm51bV92Y3B1X2hhcmRfYWZmaW5pdHkp IHsNCiAgICAgICAgICAgICBMT0coRVJST1IsICJDYW4gcnVuIE5VTUEgcGxhY2VtZW50IG9ubHkg aWYgbm8gdmNwdSAiDQogICAgICAgICAgICAgICAgICAgICAgICAiYWZmaW5pdHkgaXMgc3BlY2lm aWVkIGV4cGxpY2l0bHkiKTsNCiAgICAgICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7DQpAQCAt MjcxLDEwICsyNzEsMjMgQEAgaW50IGxpYnhsX19idWlsZF9wcmUobGlieGxfX2djICpnYywgdWlu dDMyX3QgZG9taWQsDQogICAgIH0NCiAgICAgaWYgKGluZm8tPm5vZGVtYXAuc2l6ZSkNCiAgICAg ICAgIGxpYnhsX2RvbWFpbl9zZXRfbm9kZWFmZmluaXR5KGN0eCwgZG9taWQsICZpbmZvLT5ub2Rl bWFwKTsNCi0gICAgaWYgKGluZm8tPmNwdW1hcC5zaXplKQ0KKyAgICAvKiBBcyBtZW50aW9uZWQg aW4gbGlieGwuaCwgdmNwdV9oYXJkX2FycmF5IHRha2VzIHByZWNlZGVuY2UgKi8NCisgICAgaWYg KGluZm8tPm51bV92Y3B1X2hhcmRfYWZmaW5pdHkpIHsNCisgICAgICAgIGludCBpOw0KKw0KKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IGluZm8tPm51bV92Y3B1X2hhcmRfYWZmaW5pdHk7IGkrKykg ew0KKyAgICAgICAgICAgIGlmIChsaWJ4bF9zZXRfdmNwdWFmZmluaXR5KGN0eCwgZG9taWQsIGks DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluZm8tPnZjcHVfaGFy ZF9hZmZpbml0eVtpXSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMKSkgew0KKyAgICAgICAgICAgICAgICBMT0coRVJST1IsICJzZXR0aW5nIGFmZmluaXR5IGZh aWxlZCBvbiB2Y3B1IGAlZCciLCBpKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0ZB SUw7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9IGVsc2UgaWYgKGluZm8tPmNw dW1hcC5zaXplKQ0KICAgICAgICAgbGlieGxfc2V0X3ZjcHVhZmZpbml0eV9hbGwoY3R4LCBkb21p ZCwgaW5mby0+bWF4X3ZjcHVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JmluZm8tPmNwdW1hcCwgTlVMTCk7DQogDQorDQogICAgIGlmICh4Y19kb21haW5fc2V0bWF4bWVt KGN0eC0+eGNoLCBkb21pZCwgaW5mby0+dGFyZ2V0X21lbWtiICsNCiAgICAgICAgIExJQlhMX01B WE1FTV9DT05TVEFOVCkgPCAwKSB7DQogICAgICAgICBMSUJYTF9fTE9HX0VSUk5PKGN0eCwgTElC WExfX0xPR19FUlJPUiwgIkNvdWxkbid0IHNldCBtYXggbWVtb3J5Iik7DQpkaWZmIC0tZ2l0IGEv dG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRs DQppbmRleCAzN2RmODU0Li41NjA3ZWE3IDEwMDY0NA0KLS0tIGEvdG9vbHMvbGlieGwvbGlieGxf dHlwZXMuaWRsDQorKysgYi90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwNCkBAIC0zMDMsNiAr MzAzLDcgQEAgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gPSBTdHJ1Y3QoImRvbWFpbl9idWlsZF9p bmZvIixbDQogICAgICgiYXZhaWxfdmNwdXMiLCAgICAgbGlieGxfYml0bWFwKSwNCiAgICAgKCJj cHVtYXAiLCAgICAgICAgICBsaWJ4bF9iaXRtYXApLA0KICAgICAoIm5vZGVtYXAiLCAgICAgICAg IGxpYnhsX2JpdG1hcCksDQorICAgICgidmNwdV9oYXJkX2FmZmluaXR5IiwgQXJyYXkobGlieGxf Yml0bWFwLCAibnVtX3ZjcHVfaGFyZF9hZmZpbml0eSIpKSwNCiAgICAgKCJudW1hX3BsYWNlbWVu dCIsICBsaWJ4bF9kZWZib29sKSwNCiAgICAgKCJ0c2NfbW9kZSIsICAgICAgICBsaWJ4bF90c2Nf bW9kZSksDQogICAgICgibWF4X21lbWtiIiwgICAgICAgTWVtS0IpLA0KZGlmZiAtLWdpdCBhL3Rv b2xzL2xpYnhsL3hsX2NtZGltcGwuYyBiL3Rvb2xzL2xpYnhsL3hsX2NtZGltcGwuYw0KaW5kZXgg YzYzOWM3OC4uZjJmNWZiMiAxMDA2NDQNCi0tLSBhL3Rvb2xzL2xpYnhsL3hsX2NtZGltcGwuYw0K KysrIGIvdG9vbHMvbGlieGwveGxfY21kaW1wbC5jDQpAQCAtODgsOSArODgsNiBAQCB4bGNoaWxk IGNoaWxkcmVuW2NoaWxkX21heF07DQogc3RhdGljIGNvbnN0IGNoYXIgKmNvbW1vbl9kb21uYW1l Ow0KIHN0YXRpYyBpbnQgZmRfbG9jayA9IC0xOw0KIA0KLS8qIFN0YXNoIGZvciBzcGVjaWZpYyB2 Y3B1IHRvIHBjcHUgbWFwcHBpbmcgKi8NCi1zdGF0aWMgaW50ICp2Y3B1X3RvX3BjcHU7DQotDQog c3RhdGljIGNvbnN0IGNoYXIgc2F2ZWZpbGVoZWFkZXJfbWFnaWNbMzJdPQ0KICAgICAiWGVuIHNh dmVkIGRvbWFpbiwgeGwgZm9ybWF0XG4gXDAgXHIiOw0KIA0KQEAgLTcwMyw3ICs3MDAsNyBAQCBz dGF0aWMgdm9pZCBwYXJzZV9jb25maWdfZGF0YShjb25zdCBjaGFyICpjb25maWdfc291cmNlLA0K ICAgICBYTFVfQ29uZmlnICpjb25maWc7DQogICAgIFhMVV9Db25maWdMaXN0ICpjcHVzLCAqdmJk cywgKm5pY3MsICpwY2lzLCAqY3ZmYnMsICpjcHVpZHMsICp2dHBtczsNCiAgICAgWExVX0NvbmZp Z0xpc3QgKmlvcG9ydHMsICppcnFzLCAqaW9tZW07DQotICAgIGludCBudW1faW9wb3J0cywgbnVt X2lycXMsIG51bV9pb21lbTsNCisgICAgaW50IG51bV9pb3BvcnRzLCBudW1faXJxcywgbnVtX2lv bWVtLCBudW1fY3B1czsNCiAgICAgaW50IHBjaV9wb3dlcl9tZ210ID0gMDsNCiAgICAgaW50IHBj aV9tc2l0cmFuc2xhdGUgPSAwOw0KICAgICBpbnQgcGNpX3Blcm1pc3NpdmUgPSAwOw0KQEAgLTgw MCw0MyArNzk3LDMyIEBAIHN0YXRpYyB2b2lkIHBhcnNlX2NvbmZpZ19kYXRhKGNvbnN0IGNoYXIg KmNvbmZpZ19zb3VyY2UsDQogICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAibWF4 dmNwdXMiLCAmbCwgMCkpDQogICAgICAgICBiX2luZm8tPm1heF92Y3B1cyA9IGw7DQogDQotICAg IGlmICgheGx1X2NmZ19nZXRfbGlzdCAoY29uZmlnLCAiY3B1cyIsICZjcHVzLCAwLCAxKSkgew0K LSAgICAgICAgaW50IG5fY3B1cyA9IDA7DQorICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdCAoY29u ZmlnLCAiY3B1cyIsICZjcHVzLCAmbnVtX2NwdXMsIDEpKSB7DQorICAgICAgICBpbnQgaiA9IDA7 DQogDQotICAgICAgICBpZiAobGlieGxfY3B1X2JpdG1hcF9hbGxvYyhjdHgsICZiX2luZm8tPmNw dW1hcCwgMCkpIHsNCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBhbGxv Y2F0ZSBjcHVtYXBcbiIpOw0KLSAgICAgICAgICAgIGV4aXQoMSk7DQotICAgICAgICB9DQorICAg ICAgICAvKiBTaWxlbnRseSBpZ25vcmUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gbm9uIGV4aXN0 aW5nIHZjcHVzICovDQorICAgICAgICBpZiAobnVtX2NwdXMgPiBiX2luZm8tPm1heF92Y3B1cykN CisgICAgICAgICAgICBudW1fY3B1cyA9IGJfaW5mby0+bWF4X3ZjcHVzOw0KIA0KLSAgICAgICAg LyogUHJlcGFyZSB0aGUgYXJyYXkgZm9yIHNpbmdsZSB2Y3B1IHRvIHBjcHUgbWFwcGluZ3MgKi8N Ci0gICAgICAgIHZjcHVfdG9fcGNwdSA9IHhtYWxsb2Moc2l6ZW9mKGludCkgKiBiX2luZm8tPm1h eF92Y3B1cyk7DQotICAgICAgICBtZW1zZXQodmNwdV90b19wY3B1LCAtMSwgc2l6ZW9mKGludCkg KiBiX2luZm8tPm1heF92Y3B1cyk7DQorICAgICAgICBiX2luZm8tPnZjcHVfaGFyZF9hZmZpbml0 eSA9IHhtYWxsb2MobnVtX2NwdXMgKiBzaXplb2YobGlieGxfYml0bWFwKSk7DQogDQotICAgICAg ICAvKg0KLSAgICAgICAgICogSWRlYSBoZXJlIGlzIHRvIGxldCBsaWJ4bCB0aGluayBhbGwgdGhl IGRvbWFpbidzIHZjcHVzDQotICAgICAgICAgKiBoYXZlIGNwdSBhZmZpbml0eSB3aXRoIGFsbCB0 aGUgcGNwdXMgb24gdGhlIGxpc3QuDQotICAgICAgICAgKiBJdCBpcyB0aGVuIHVzLCBoZXJlIGlu IHhsLCB0aGF0IG1hdGNoZXMgZWFjaCBzaW5nbGUgdmNwdQ0KLSAgICAgICAgICogdG8gaXRzIHBj cHUgKGFuZCB0aGF0J3Mgd2h5IHdlIG5lZWQgdG8gc3Rhc2ggc3VjaCBpbmZvIGluDQotICAgICAg ICAgKiB0aGUgdmNwdV90b19wY3B1IGFycmF5IG5vdykgYWZ0ZXIgdGhlIGRvbWFpbiBoYXMgYmVl biBjcmVhdGVkLg0KLSAgICAgICAgICogRG9pbmcgaXQgbGlrZSB0aGlzIHNhdmVzIHRoZSBidXJk ZW4gb2YgcGFzc2luZyB0byBsaWJ4bA0KLSAgICAgICAgICogc29tZSBiaWcgYXJyYXkgaG9zdGlu ZyB0aGUgc2luZ2xlIG1hcHBpbmdzLiBBbHNvLCB1c2luZw0KLSAgICAgICAgICogdGhlIGNwdW1h cCBkZXJpdmVkIGZyb20gdGhlIGxpc3QgZW5zdXJlcyBtZW1vcnkgaXMgYmVpbmcNCi0gICAgICAg ICAqIGFsbG9jYXRlZCBvbiB0aGUgcHJvcGVyIG5vZGVzIGFueXdheS4NCi0gICAgICAgICAqLw0K LSAgICAgICAgbGlieGxfYml0bWFwX3NldF9ub25lKCZiX2luZm8tPmNwdW1hcCk7DQotICAgICAg ICB3aGlsZSAoKGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtKGNwdXMsIG5fY3B1cykpICE9IE5V TEwpIHsNCisgICAgICAgIHdoaWxlICgoYnVmID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0oY3B1cywg aikpICE9IE5VTEwgJiYgaiA8IG51bV9jcHVzKSB7DQogICAgICAgICAgICAgaSA9IGF0b2koYnVm KTsNCi0gICAgICAgICAgICBpZiAoIWxpYnhsX2JpdG1hcF9jcHVfdmFsaWQoJmJfaW5mby0+Y3B1 bWFwLCBpKSkgew0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNwdSAlZCBpbGxl Z2FsXG4iLCBpKTsNCisNCisgICAgICAgICAgICBsaWJ4bF9iaXRtYXBfaW5pdCgmYl9pbmZvLT52 Y3B1X2hhcmRfYWZmaW5pdHlbal0pOw0KKyAgICAgICAgICAgIGlmIChsaWJ4bF9jcHVfYml0bWFw X2FsbG9jKGN0eCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9p bmZvLT52Y3B1X2hhcmRfYWZmaW5pdHlbal0sIDApKSB7DQorICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGNwdW1hcCBmb3IgdmNwdSAlZFxuIiwgaik7 DQogICAgICAgICAgICAgICAgIGV4aXQoMSk7DQogICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg IGxpYnhsX2JpdG1hcF9zZXQoJmJfaW5mby0+Y3B1bWFwLCBpKTsNCi0gICAgICAgICAgICBpZiAo bl9jcHVzIDwgYl9pbmZvLT5tYXhfdmNwdXMpDQotICAgICAgICAgICAgICAgIHZjcHVfdG9fcGNw dVtuX2NwdXNdID0gaTsNCi0gICAgICAgICAgICBuX2NwdXMrKzsNCisgICAgICAgICAgICBsaWJ4 bF9iaXRtYXBfc2V0X25vbmUoJmJfaW5mby0+dmNwdV9oYXJkX2FmZmluaXR5W2pdKTsNCisgICAg ICAgICAgICBsaWJ4bF9iaXRtYXBfc2V0KCZiX2luZm8tPnZjcHVfaGFyZF9hZmZpbml0eVtqXSwg aSk7DQorDQorICAgICAgICAgICAgaisrOw0KICAgICAgICAgfQ0KKyAgICAgICAgYl9pbmZvLT5u dW1fdmNwdV9oYXJkX2FmZmluaXR5ID0gbnVtX2NwdXM7DQogDQotICAgICAgICAvKiBXZSBoYXZl IGEgY3B1bWFwLCBkaXNhYmxlIGF1dG9tYXRpYyBwbGFjZW1lbnQgKi8NCisgICAgICAgIC8qIFdl IGhhdmUgYSBsaXN0IG9mIGNwdW1hcHMsIGRpc2FibGUgYXV0b21hdGljIHBsYWNlbWVudCAqLw0K ICAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJmJfaW5mby0+bnVtYV9wbGFjZW1lbnQsIGZhbHNl KTsNCiAgICAgfQ0KICAgICBlbHNlIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJj cHVzIiwgJmJ1ZiwgMCkpIHsNCkBAIC0yMTgzLDMzICsyMTY5LDYgQEAgc3RhcnQ6DQogICAgIGlm ICggcmV0ICkNCiAgICAgICAgIGdvdG8gZXJyb3Jfb3V0Ow0KIA0KLSAgICAvKiBJZiBzaW5nbGUg dmNwdSB0byBwY3B1IG1hcHBpbmcgd2FzIHJlcXVlc3RlZCwgaG9ub3VyIGl0ICovDQotICAgIGlm ICh2Y3B1X3RvX3BjcHUpIHsNCi0gICAgICAgIGxpYnhsX2JpdG1hcCB2Y3B1X2NwdW1hcDsNCi0N Ci0gICAgICAgIHJldCA9IGxpYnhsX2NwdV9iaXRtYXBfYWxsb2MoY3R4LCAmdmNwdV9jcHVtYXAs IDApOw0KLSAgICAgICAgaWYgKHJldCkNCi0gICAgICAgICAgICBnb3RvIGVycm9yX291dDsNCi0g ICAgICAgIGZvciAoaSA9IDA7IGkgPCBkX2NvbmZpZy5iX2luZm8ubWF4X3ZjcHVzOyBpKyspIHsN Ci0NCi0gICAgICAgICAgICBpZiAodmNwdV90b19wY3B1W2ldICE9IC0xKSB7DQotICAgICAgICAg ICAgICAgIGxpYnhsX2JpdG1hcF9zZXRfbm9uZSgmdmNwdV9jcHVtYXApOw0KLSAgICAgICAgICAg ICAgICBsaWJ4bF9iaXRtYXBfc2V0KCZ2Y3B1X2NwdW1hcCwgdmNwdV90b19wY3B1W2ldKTsNCi0g ICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBsaWJ4bF9iaXRtYXBfc2V0X2Fu eSgmdmNwdV9jcHVtYXApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobGlieGxf c2V0X3ZjcHVhZmZpbml0eShjdHgsIGRvbWlkLCBpLCAmdmNwdV9jcHVtYXAsIE5VTEwpKSB7DQot ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic2V0dGluZyBhZmZpbml0eSBmYWlsZWQg b24gdmNwdSBgJWQnLlxuIiwgaSk7DQotICAgICAgICAgICAgICAgIGxpYnhsX2JpdG1hcF9kaXNw b3NlKCZ2Y3B1X2NwdW1hcCk7DQotICAgICAgICAgICAgICAgIGZyZWUodmNwdV90b19wY3B1KTsN Ci0gICAgICAgICAgICAgICAgcmV0ID0gRVJST1JfRkFJTDsNCi0gICAgICAgICAgICAgICAgZ290 byBlcnJvcl9vdXQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbGlieGxf Yml0bWFwX2Rpc3Bvc2UoJnZjcHVfY3B1bWFwKTsNCi0gICAgICAgIGZyZWUodmNwdV90b19wY3B1 KTsgdmNwdV90b19wY3B1ID0gTlVMTDsNCi0gICAgfQ0KLQ0KICAgICByZXQgPSBsaWJ4bF91c2Vy ZGF0YV9zdG9yZShjdHgsIGRvbWlkLCAieGwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbmZpZ19kYXRhLCBjb25maWdfbGVuKTsNCiAgICAgaWYgKHJldCkgew0K --=-sQRLdPWJ+k6AeDqjPzfw-- --=-cFol6Rpn3L1gJog4goGq Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iEYEABECAAYFAlOj7g0ACgkQk4XaBE3IOsTPeACgipnY6iBJbYPmfDC0nWR3CbM+ fJMAoItHFIXfJMuGFeU6TjeKcAOBC5an =gNn3 -----END PGP SIGNATURE----- --=-cFol6Rpn3L1gJog4goGq-- --===============7684083802363655629== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============7684083802363655629==--