From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dario Faggioli Subject: [PATCHv3 1 of 2] libxl: allow for specifying the CPU affinity in the config file. Date: Wed, 25 Jan 2012 15:36:11 +0100 Message-ID: <1327502171.2723.17.camel@Abyss> References: <1327500920.2723.11.camel@Abyss> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1220177572573469436==" Return-path: In-Reply-To: <1327500920.2723.11.camel@Abyss> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel Cc: "Ian.Campbell" , George Dunlap , Juergen Gross , Ian Jackson List-Id: xen-devel@lists.xenproject.org --===============1220177572573469436== Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-zrugTtglDLYN0Fm/cuFQ" --=-zrugTtglDLYN0Fm/cuFQ Content-Type: multipart/mixed; boundary="=-oqQVQy5diNUns+vXee/K" --=-oqQVQy5diNUns+vXee/K Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Enable CPU affinity specification in a VM's config file with the exact syntax `xl vcpu-pin' provides. Signed-off-by: Dario Faggioli diff -r e4fd5305381e tools/libxl/libxl.c --- a/tools/libxl/libxl.c Wed Jan 25 11:40:23 2012 +0000 +++ b/tools/libxl/libxl.c Wed Jan 25 14:08:21 2012 +0000 @@ -2663,6 +2663,21 @@ int libxl_set_vcpuaffinity(libxl_ctx *ct return 0; } =20 +int libxl_set_vcpuaffinity_all(libxl_ctx *ctx, uint32_t domid, + unsigned int max_vcpus, libxl_cpumap *cpuma= p) +{ + int i, rc =3D 0; + + for (i =3D 0; i < max_vcpus; i++) { + if (libxl_set_vcpuaffinity(ctx, domid, i, cpumap)) { + LIBXL__LOG(ctx, LIBXL__LOG_WARNING, + "failed to set affinity for %d", i); + rc =3D ERROR_FAIL; + } + } + return rc; +} + int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_cpumap *cpu= map) { GC_INIT(ctx); diff -r e4fd5305381e tools/libxl/libxl.h --- a/tools/libxl/libxl.h Wed Jan 25 11:40:23 2012 +0000 +++ b/tools/libxl/libxl.h Wed Jan 25 14:08:21 2012 +0000 @@ -560,6 +560,8 @@ libxl_vcpuinfo *libxl_list_vcpu(libxl_ct int *nb_vcpu, int *nrcpus); int libxl_set_vcpuaffinity(libxl_ctx *ctx, uint32_t domid, uint32_t vcpuid= , libxl_cpumap *cpumap); +int libxl_set_vcpuaffinity_all(libxl_ctx *ctx, uint32_t domid, + unsigned int max_vcpus, libxl_cpumap *cpuma= p); int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_cpumap *cpu= map); =20 int libxl_get_sched_id(libxl_ctx *ctx); diff -r e4fd5305381e tools/libxl/libxl_create.c --- a/tools/libxl/libxl_create.c Wed Jan 25 11:40:23 2012 +0000 +++ b/tools/libxl/libxl_create.c Wed Jan 25 14:08:21 2012 +0000 @@ -71,6 +71,9 @@ int libxl_init_build_info(libxl_ctx *ctx memset(b_info, '\0', sizeof(*b_info)); b_info->max_vcpus =3D 1; b_info->cur_vcpus =3D 1; + if (libxl_cpumap_alloc(ctx, &b_info->cpumap)) + return ERROR_NOMEM; + libxl_cpumap_set_any(&b_info->cpumap); b_info->max_memkb =3D 32 * 1024; b_info->target_memkb =3D b_info->max_memkb; b_info->disable_migrate =3D 0; diff -r e4fd5305381e tools/libxl/libxl_dom.c --- a/tools/libxl/libxl_dom.c Wed Jan 25 11:40:23 2012 +0000 +++ b/tools/libxl/libxl_dom.c Wed Jan 25 14:08:21 2012 +0000 @@ -65,6 +65,7 @@ int libxl__build_pre(libxl__gc *gc, uint libxl_ctx *ctx =3D libxl__gc_owner(gc); int tsc_mode; xc_domain_max_vcpus(ctx->xch, domid, info->max_vcpus); + libxl_set_vcpuaffinity_all(ctx, domid, info->max_vcpus, &info->cpumap)= ; xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + LIBXL_MAXMEM= _CONSTANT); if (info->type =3D=3D LIBXL_DOMAIN_TYPE_PV) xc_domain_set_memmap_limit(ctx->xch, domid, diff -r e4fd5305381e tools/libxl/libxl_types.idl --- a/tools/libxl/libxl_types.idl Wed Jan 25 11:40:23 2012 +0000 +++ b/tools/libxl/libxl_types.idl Wed Jan 25 14:08:21 2012 +0000 @@ -162,6 +162,7 @@ libxl_domain_create_info =3D Struct("domai libxl_domain_build_info =3D Struct("domain_build_info",[ ("max_vcpus", integer), ("cur_vcpus", integer), + ("cpumap", libxl_cpumap), ("tsc_mode", libxl_tsc_mode), ("max_memkb", uint32), ("target_memkb", uint32), diff -r e4fd5305381e tools/libxl/libxl_utils.h --- a/tools/libxl/libxl_utils.h Wed Jan 25 11:40:23 2012 +0000 +++ b/tools/libxl/libxl_utils.h Wed Jan 25 14:08:21 2012 +0000 @@ -70,6 +70,18 @@ int libxl_cpumap_alloc(libxl_ctx *ctx, l int libxl_cpumap_test(libxl_cpumap *cpumap, int cpu); void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu); void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu); +static inline void libxl_cpumap_set_any(libxl_cpumap *cpumap) +{ + memset(cpumap->map, -1, cpumap->size); +} +static inline void libxl_cpumap_set_none(libxl_cpumap *cpumap) +{ + memset(cpumap->map, 0, cpumap->size); +} +static inline int libxl_cpumap_cpu_valid(libxl_cpumap *cpumap, int cpu) +{ + return cpu >=3D 0 && cpu < (cpumap->size * 8); +} #define libxl_for_each_cpu(var, map) for (var =3D 0; var < (map).size * 8;= var++) #define libxl_for_each_set_cpu(v, m) for (v =3D 0; v < (m).size * 8; v++) = \ if (libxl_cpumap_test(&(m), v= )) diff -r e4fd5305381e tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Wed Jan 25 11:40:23 2012 +0000 +++ b/tools/libxl/xl_cmdimpl.c Wed Jan 25 14:08:21 2012 +0000 @@ -569,6 +569,65 @@ static void split_string_into_string_lis free(s); } =20 +static int vcpupin_parse(char *cpu, libxl_cpumap *cpumap) +{ + libxl_cpumap exclude_cpumap; + uint32_t cpuida, cpuidb; + char *endptr, *toka, *tokb, *saveptr =3D NULL; + int i, rc =3D 0, rmcpu; + + if (!strcmp(cpu, "all")) { + libxl_cpumap_set_any(cpumap); + return 0; + } + + if (libxl_cpumap_alloc(ctx, &exclude_cpumap)) { + fprintf(stderr, "Error: Failed to allocate cpumap.\n"); + return ENOMEM; + } + + for (toka =3D strtok_r(cpu, ",", &saveptr); toka; + toka =3D strtok_r(NULL, ",", &saveptr)) { + rmcpu =3D 0; + if (*toka =3D=3D '^') { + /* This (These) Cpu(s) will be removed from the map */ + toka++; + rmcpu =3D 1; + } + /* Extract a valid (range of) cpu(s) */ + cpuida =3D cpuidb =3D strtoul(toka, &endptr, 10); + if (endptr =3D=3D toka) { + fprintf(stderr, "Error: Invalid argument.\n"); + rc =3D EINVAL; + goto vcpp_out; + } + if (*endptr =3D=3D '-') { + tokb =3D endptr + 1; + cpuidb =3D strtoul(tokb, &endptr, 10); + if (endptr =3D=3D tokb || cpuida > cpuidb) { + fprintf(stderr, "Error: Invalid argument.\n"); + rc =3D EINVAL; + goto vcpp_out; + } + } + while (cpuida <=3D cpuidb) { + rmcpu =3D=3D 0 ? libxl_cpumap_set(cpumap, cpuida) : + libxl_cpumap_set(&exclude_cpumap, cpuida); + cpuida++; + } + } + + /* Clear all the cpus from the removal list */ + libxl_for_each_set_cpu(i, exclude_cpumap) { + libxl_cpumap_reset(cpumap, i); + } + +vcpp_out: + libxl_cpumap_dispose(&exclude_cpumap); + + return rc; +} + static void parse_config_data(const char *configfile_filename_report, const char *configfile_data, int configfile_len, @@ -578,7 +637,7 @@ static void parse_config_data(const char const char *buf; long l; XLU_Config *config; - XLU_ConfigList *vbds, *nics, *pcis, *cvfbs, *cpuids; + XLU_ConfigList *cpus, *vbds, *nics, *pcis, *cvfbs, *cpuids; int pci_power_mgmt =3D 0; int pci_msitranslate =3D 1; int e; @@ -661,6 +720,29 @@ static void parse_config_data(const char if (!xlu_cfg_get_long (config, "maxvcpus", &l, 0)) b_info->max_vcpus =3D l; =20 + if (!xlu_cfg_get_list (config, "cpus", &cpus, 0, 1)) { + int i, n_cpus =3D 0; + + libxl_cpumap_set_none(&b_info->cpumap); + while ((buf =3D xlu_cfg_get_listitem(cpus, n_cpus)) !=3D NULL) { + i =3D atoi(buf); + if (!libxl_cpumap_cpu_valid(&b_info->cpumap, i)) { + fprintf(stderr, "cpu %d illegal\n", i); + exit(1); + } + libxl_cpumap_set(&b_info->cpumap, i); + n_cpus++; + } + } + else if (!xlu_cfg_get_string (config, "cpus", &buf, 0)) { + char *buf2 =3D strdup(buf); + + libxl_cpumap_set_none(&b_info->cpumap); + if (vcpupin_parse(buf2, &b_info->cpumap)) + exit(1); + free(buf2); + } + if (!xlu_cfg_get_long (config, "memory", &l, 0)) { b_info->max_memkb =3D l * 1024; b_info->target_memkb =3D b_info->max_memkb; @@ -3503,65 +3585,6 @@ int main_vcpulist(int argc, char **argv) return 0; } =20 -static int vcpupin_parse(char *cpu, libxl_cpumap *cpumap) -{ - libxl_cpumap exclude_cpumap; - uint32_t cpuida, cpuidb; - char *endptr, *toka, *tokb, *saveptr =3D NULL; - int i, rc =3D 0, rmcpu; - - if (!strcmp(cpu, "all")) { - memset(cpumap->map, -1, cpumap->size); - return 0; - } - - if (libxl_cpumap_alloc(ctx, &exclude_cpumap)) { - fprintf(stderr, "Error: Failed to allocate cpumap.\n"); - return ENOMEM; - } - - for (toka =3D strtok_r(cpu, ",", &saveptr); toka; - toka =3D strtok_r(NULL, ",", &saveptr)) { - rmcpu =3D 0; - if (*toka =3D=3D '^') { - /* This (These) Cpu(s) will be removed from the map */ - toka++; - rmcpu =3D 1; - } - /* Extract a valid (range of) cpu(s) */ - cpuida =3D cpuidb =3D strtoul(toka, &endptr, 10); - if (endptr =3D=3D toka) { - fprintf(stderr, "Error: Invalid argument.\n"); - rc =3D EINVAL; - goto vcpp_out; - } - if (*endptr =3D=3D '-') { - tokb =3D endptr + 1; - cpuidb =3D strtoul(tokb, &endptr, 10); - if (endptr =3D=3D tokb || cpuida > cpuidb) { - fprintf(stderr, "Error: Invalid argument.\n"); - rc =3D EINVAL; - goto vcpp_out; - } - } - while (cpuida <=3D cpuidb) { - rmcpu =3D=3D 0 ? libxl_cpumap_set(cpumap, cpuida) : - libxl_cpumap_set(&exclude_cpumap, cpuida); - cpuida++; - } - } - - /* Clear all the cpus from the removal list */ - libxl_for_each_set_cpu(i, exclude_cpumap) { - libxl_cpumap_reset(cpumap, i); - } - -vcpp_out: - libxl_cpumap_dispose(&exclude_cpumap); - - return rc; -} - static void vcpupin(const char *d, const char *vcpu, char *cpu) { libxl_vcpuinfo *vcpuinfo; --=20 <> (Raistlin Majere) ------------------------------------------------------------------- Dario Faggioli, Ph.D, http://retis.sssup.it/people/faggioli Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK) --=-oqQVQy5diNUns+vXee/K Content-Disposition: attachment; filename="support-cpus-par-in-config-file.patch" Content-Type: text/x-patch; name="support-cpus-par-in-config-file.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gNCiMgUGFyZW50IGU0ZmQ1MzA1MzgxZTYzYWY5NjhmYmEwN2U1 YjQ5ZGQzMjFkMDg0ZGMNCmxpYnhsOiBhbGxvdyBmb3Igc3BlY2lmeWluZyB0aGUgQ1BVIGFmZmlu aXR5IGluIHRoZSBjb25maWcgZmlsZS4NCg0KRW5hYmxlIENQVSBhZmZpbml0eSBzcGVjaWZpY2F0 aW9uIGluIGEgVk0ncyBjb25maWcgZmlsZSB3aXRoIHRoZQ0KZXhhY3Qgc3ludGF4IGB4bCB2Y3B1 LXBpbicgcHJvdmlkZXMuDQoNClNpZ25lZC1vZmYtYnk6IERhcmlvIEZhZ2dpb2xpIDxkYXJpby5m YWdnaW9saUBjaXRyaXguY29tPg0KDQpkaWZmIC1yIGU0ZmQ1MzA1MzgxZSB0b29scy9saWJ4bC9s aWJ4bC5jDQotLS0gYS90b29scy9saWJ4bC9saWJ4bC5jCVdlZCBKYW4gMjUgMTE6NDA6MjMgMjAx MiArMDAwMA0KKysrIGIvdG9vbHMvbGlieGwvbGlieGwuYwlXZWQgSmFuIDI1IDE0OjA4OjIxIDIw MTIgKzAwMDANCkBAIC0yNjYzLDYgKzI2NjMsMjEgQEAgaW50IGxpYnhsX3NldF92Y3B1YWZmaW5p dHkobGlieGxfY3R4ICpjdA0KICAgICByZXR1cm4gMDsNCiB9DQogDQoraW50IGxpYnhsX3NldF92 Y3B1YWZmaW5pdHlfYWxsKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heF92Y3B1cywgbGlieGxfY3B1 bWFwICpjcHVtYXApDQorew0KKyAgICBpbnQgaSwgcmMgPSAwOw0KKw0KKyAgICBmb3IgKGkgPSAw OyBpIDwgbWF4X3ZjcHVzOyBpKyspIHsNCisgICAgICAgIGlmIChsaWJ4bF9zZXRfdmNwdWFmZmlu aXR5KGN0eCwgZG9taWQsIGksIGNwdW1hcCkpIHsNCisgICAgICAgICAgICBMSUJYTF9fTE9HKGN0 eCwgTElCWExfX0xPR19XQVJOSU5HLA0KKyAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0 byBzZXQgYWZmaW5pdHkgZm9yICVkIiwgaSk7DQorICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlM Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIHJldHVybiByYzsNCit9DQorDQogaW50IGxpYnhs X3NldF92Y3B1b25saW5lKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwgbGlieGxfY3B1 bWFwICpjcHVtYXApDQogew0KICAgICBHQ19JTklUKGN0eCk7DQpkaWZmIC1yIGU0ZmQ1MzA1Mzgx ZSB0b29scy9saWJ4bC9saWJ4bC5oDQotLS0gYS90b29scy9saWJ4bC9saWJ4bC5oCVdlZCBKYW4g MjUgMTE6NDA6MjMgMjAxMiArMDAwMA0KKysrIGIvdG9vbHMvbGlieGwvbGlieGwuaAlXZWQgSmFu IDI1IDE0OjA4OjIxIDIwMTIgKzAwMDANCkBAIC01NjAsNiArNTYwLDggQEAgbGlieGxfdmNwdWlu Zm8gKmxpYnhsX2xpc3RfdmNwdShsaWJ4bF9jdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCAqbmJfdmNwdSwgaW50ICpucmNwdXMpOw0KIGludCBsaWJ4bF9zZXRf dmNwdWFmZmluaXR5KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwgdWludDMyX3QgdmNw dWlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2NwdW1hcCAqY3B1bWFwKTsN CitpbnQgbGlieGxfc2V0X3ZjcHVhZmZpbml0eV9hbGwobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90 IGRvbWlkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF4 X3ZjcHVzLCBsaWJ4bF9jcHVtYXAgKmNwdW1hcCk7DQogaW50IGxpYnhsX3NldF92Y3B1b25saW5l KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwgbGlieGxfY3B1bWFwICpjcHVtYXApOw0K IA0KIGludCBsaWJ4bF9nZXRfc2NoZWRfaWQobGlieGxfY3R4ICpjdHgpOw0KZGlmZiAtciBlNGZk NTMwNTM4MWUgdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMNCi0tLSBhL3Rvb2xzL2xpYnhsL2xp YnhsX2NyZWF0ZS5jCVdlZCBKYW4gMjUgMTE6NDA6MjMgMjAxMiArMDAwMA0KKysrIGIvdG9vbHMv bGlieGwvbGlieGxfY3JlYXRlLmMJV2VkIEphbiAyNSAxNDowODoyMSAyMDEyICswMDAwDQpAQCAt NzEsNiArNzEsOSBAQCBpbnQgbGlieGxfaW5pdF9idWlsZF9pbmZvKGxpYnhsX2N0eCAqY3R4DQog ICAgIG1lbXNldChiX2luZm8sICdcMCcsIHNpemVvZigqYl9pbmZvKSk7DQogICAgIGJfaW5mby0+ bWF4X3ZjcHVzID0gMTsNCiAgICAgYl9pbmZvLT5jdXJfdmNwdXMgPSAxOw0KKyAgICBpZiAobGli eGxfY3B1bWFwX2FsbG9jKGN0eCwgJmJfaW5mby0+Y3B1bWFwKSkNCisgICAgICAgIHJldHVybiBF UlJPUl9OT01FTTsNCisgICAgbGlieGxfY3B1bWFwX3NldF9hbnkoJmJfaW5mby0+Y3B1bWFwKTsN CiAgICAgYl9pbmZvLT5tYXhfbWVta2IgPSAzMiAqIDEwMjQ7DQogICAgIGJfaW5mby0+dGFyZ2V0 X21lbWtiID0gYl9pbmZvLT5tYXhfbWVta2I7DQogICAgIGJfaW5mby0+ZGlzYWJsZV9taWdyYXRl ID0gMDsNCmRpZmYgLXIgZTRmZDUzMDUzODFlIHRvb2xzL2xpYnhsL2xpYnhsX2RvbS5jDQotLS0g YS90b29scy9saWJ4bC9saWJ4bF9kb20uYwlXZWQgSmFuIDI1IDExOjQwOjIzIDIwMTIgKzAwMDAN CisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2RvbS5jCVdlZCBKYW4gMjUgMTQ6MDg6MjEgMjAxMiAr MDAwMA0KQEAgLTY1LDYgKzY1LDcgQEAgaW50IGxpYnhsX19idWlsZF9wcmUobGlieGxfX2djICpn YywgdWludA0KICAgICBsaWJ4bF9jdHggKmN0eCA9IGxpYnhsX19nY19vd25lcihnYyk7DQogICAg IGludCB0c2NfbW9kZTsNCiAgICAgeGNfZG9tYWluX21heF92Y3B1cyhjdHgtPnhjaCwgZG9taWQs IGluZm8tPm1heF92Y3B1cyk7DQorICAgIGxpYnhsX3NldF92Y3B1YWZmaW5pdHlfYWxsKGN0eCwg ZG9taWQsIGluZm8tPm1heF92Y3B1cywgJmluZm8tPmNwdW1hcCk7DQogICAgIHhjX2RvbWFpbl9z ZXRtYXhtZW0oY3R4LT54Y2gsIGRvbWlkLCBpbmZvLT50YXJnZXRfbWVta2IgKyBMSUJYTF9NQVhN RU1fQ09OU1RBTlQpOw0KICAgICBpZiAoaW5mby0+dHlwZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9Q VikNCiAgICAgICAgIHhjX2RvbWFpbl9zZXRfbWVtbWFwX2xpbWl0KGN0eC0+eGNoLCBkb21pZCwN CmRpZmYgLXIgZTRmZDUzMDUzODFlIHRvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbA0KLS0tIGEv dG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCVdlZCBKYW4gMjUgMTE6NDA6MjMgMjAxMiArMDAw MA0KKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCVdlZCBKYW4gMjUgMTQ6MDg6MjEg MjAxMiArMDAwMA0KQEAgLTE2Miw2ICsxNjIsNyBAQCBsaWJ4bF9kb21haW5fY3JlYXRlX2luZm8g PSBTdHJ1Y3QoImRvbWFpDQogbGlieGxfZG9tYWluX2J1aWxkX2luZm8gPSBTdHJ1Y3QoImRvbWFp bl9idWlsZF9pbmZvIixbDQogICAgICgibWF4X3ZjcHVzIiwgICAgICAgaW50ZWdlciksDQogICAg ICgiY3VyX3ZjcHVzIiwgICAgICAgaW50ZWdlciksDQorICAgICgiY3B1bWFwIiwgICAgICAgICAg bGlieGxfY3B1bWFwKSwNCiAgICAgKCJ0c2NfbW9kZSIsICAgICAgICBsaWJ4bF90c2NfbW9kZSks DQogICAgICgibWF4X21lbWtiIiwgICAgICAgdWludDMyKSwNCiAgICAgKCJ0YXJnZXRfbWVta2Ii LCAgICB1aW50MzIpLA0KZGlmZiAtciBlNGZkNTMwNTM4MWUgdG9vbHMvbGlieGwvbGlieGxfdXRp bHMuaA0KLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfdXRpbHMuaAlXZWQgSmFuIDI1IDExOjQwOjIz IDIwMTIgKzAwMDANCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmgJV2VkIEphbiAyNSAx NDowODoyMSAyMDEyICswMDAwDQpAQCAtNzAsNiArNzAsMTggQEAgaW50IGxpYnhsX2NwdW1hcF9h bGxvYyhsaWJ4bF9jdHggKmN0eCwgbA0KIGludCBsaWJ4bF9jcHVtYXBfdGVzdChsaWJ4bF9jcHVt YXAgKmNwdW1hcCwgaW50IGNwdSk7DQogdm9pZCBsaWJ4bF9jcHVtYXBfc2V0KGxpYnhsX2NwdW1h cCAqY3B1bWFwLCBpbnQgY3B1KTsNCiB2b2lkIGxpYnhsX2NwdW1hcF9yZXNldChsaWJ4bF9jcHVt YXAgKmNwdW1hcCwgaW50IGNwdSk7DQorc3RhdGljIGlubGluZSB2b2lkIGxpYnhsX2NwdW1hcF9z ZXRfYW55KGxpYnhsX2NwdW1hcCAqY3B1bWFwKQ0KK3sNCisgICAgbWVtc2V0KGNwdW1hcC0+bWFw LCAtMSwgY3B1bWFwLT5zaXplKTsNCit9DQorc3RhdGljIGlubGluZSB2b2lkIGxpYnhsX2NwdW1h cF9zZXRfbm9uZShsaWJ4bF9jcHVtYXAgKmNwdW1hcCkNCit7DQorICAgIG1lbXNldChjcHVtYXAt Pm1hcCwgMCwgY3B1bWFwLT5zaXplKTsNCit9DQorc3RhdGljIGlubGluZSBpbnQgbGlieGxfY3B1 bWFwX2NwdV92YWxpZChsaWJ4bF9jcHVtYXAgKmNwdW1hcCwgaW50IGNwdSkNCit7DQorICAgIHJl dHVybiBjcHUgPj0gMCAmJiBjcHUgPCAoY3B1bWFwLT5zaXplICogOCk7DQorfQ0KICNkZWZpbmUg bGlieGxfZm9yX2VhY2hfY3B1KHZhciwgbWFwKSBmb3IgKHZhciA9IDA7IHZhciA8IChtYXApLnNp emUgKiA4OyB2YXIrKykNCiAjZGVmaW5lIGxpYnhsX2Zvcl9lYWNoX3NldF9jcHUodiwgbSkgZm9y ICh2ID0gMDsgdiA8IChtKS5zaXplICogODsgdisrKSBcDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpYnhsX2NwdW1hcF90ZXN0KCYobSksIHYpKQ0K ZGlmZiAtciBlNGZkNTMwNTM4MWUgdG9vbHMvbGlieGwveGxfY21kaW1wbC5jDQotLS0gYS90b29s cy9saWJ4bC94bF9jbWRpbXBsLmMJV2VkIEphbiAyNSAxMTo0MDoyMyAyMDEyICswMDAwDQorKysg Yi90b29scy9saWJ4bC94bF9jbWRpbXBsLmMJV2VkIEphbiAyNSAxNDowODoyMSAyMDEyICswMDAw DQpAQCAtNTY5LDYgKzU2OSw2NSBAQCBzdGF0aWMgdm9pZCBzcGxpdF9zdHJpbmdfaW50b19zdHJp bmdfbGlzDQogICAgIGZyZWUocyk7DQogfQ0KIA0KK3N0YXRpYyBpbnQgdmNwdXBpbl9wYXJzZShj aGFyICpjcHUsIGxpYnhsX2NwdW1hcCAqY3B1bWFwKQ0KK3sNCisgICAgbGlieGxfY3B1bWFwIGV4 Y2x1ZGVfY3B1bWFwOw0KKyAgICB1aW50MzJfdCBjcHVpZGEsIGNwdWlkYjsNCisgICAgY2hhciAq ZW5kcHRyLCAqdG9rYSwgKnRva2IsICpzYXZlcHRyID0gTlVMTDsNCisgICAgaW50IGksIHJjID0g MCwgcm1jcHU7DQorDQorICAgIGlmICghc3RyY21wKGNwdSwgImFsbCIpKSB7DQorICAgICAgICBs aWJ4bF9jcHVtYXBfc2V0X2FueShjcHVtYXApOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0N CisNCisgICAgaWYgKGxpYnhsX2NwdW1hcF9hbGxvYyhjdHgsICZleGNsdWRlX2NwdW1hcCkpIHsN CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IEZhaWxlZCB0byBhbGxvY2F0ZSBjcHVt YXAuXG4iKTsNCisgICAgICAgIHJldHVybiBFTk9NRU07DQorICAgIH0NCisNCisgICAgZm9yICh0 b2thID0gc3RydG9rX3IoY3B1LCAiLCIsICZzYXZlcHRyKTsgdG9rYTsNCisgICAgICAgICB0b2th ID0gc3RydG9rX3IoTlVMTCwgIiwiLCAmc2F2ZXB0cikpIHsNCisgICAgICAgIHJtY3B1ID0gMDsN CisgICAgICAgIGlmICgqdG9rYSA9PSAnXicpIHsNCisgICAgICAgICAgICAvKiBUaGlzIChUaGVz ZSkgQ3B1KHMpIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtYXAgKi8NCisgICAgICAgICAgICB0 b2thKys7DQorICAgICAgICAgICAgcm1jcHUgPSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgLyog RXh0cmFjdCBhIHZhbGlkIChyYW5nZSBvZikgY3B1KHMpICovDQorICAgICAgICBjcHVpZGEgPSBj cHVpZGIgPSBzdHJ0b3VsKHRva2EsICZlbmRwdHIsIDEwKTsNCisgICAgICAgIGlmIChlbmRwdHIg PT0gdG9rYSkgew0KKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IEludmFsaWQg YXJndW1lbnQuXG4iKTsNCisgICAgICAgICAgICByYyA9IEVJTlZBTDsNCisgICAgICAgICAgICBn b3RvIHZjcHBfb3V0Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKCplbmRwdHIgPT0gJy0nKSB7 DQorICAgICAgICAgICAgdG9rYiA9IGVuZHB0ciArIDE7DQorICAgICAgICAgICAgY3B1aWRiID0g c3RydG91bCh0b2tiLCAmZW5kcHRyLCAxMCk7DQorICAgICAgICAgICAgaWYgKGVuZHB0ciA9PSB0 b2tiIHx8IGNwdWlkYSA+IGNwdWlkYikgew0KKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIkVycm9yOiBJbnZhbGlkIGFyZ3VtZW50LlxuIik7DQorICAgICAgICAgICAgICAgIHJjID0g RUlOVkFMOw0KKyAgICAgICAgICAgICAgICBnb3RvIHZjcHBfb3V0Ow0KKyAgICAgICAgICAgIH0N CisgICAgICAgIH0NCisgICAgICAgIHdoaWxlIChjcHVpZGEgPD0gY3B1aWRiKSB7DQorICAgICAg ICAgICAgcm1jcHUgPT0gMCA/IGxpYnhsX2NwdW1hcF9zZXQoY3B1bWFwLCBjcHVpZGEpIDoNCisg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfY3B1bWFwX3NldCgmZXhjbHVkZV9jcHVtYXAs IGNwdWlkYSk7DQorICAgICAgICAgICAgY3B1aWRhKys7DQorICAgICAgICB9DQorICAgIH0NCisN CisgICAgLyogQ2xlYXIgYWxsIHRoZSBjcHVzIGZyb20gdGhlIHJlbW92YWwgbGlzdCAqLw0KKyAg ICBsaWJ4bF9mb3JfZWFjaF9zZXRfY3B1KGksIGV4Y2x1ZGVfY3B1bWFwKSB7DQorICAgICAgICBs aWJ4bF9jcHVtYXBfcmVzZXQoY3B1bWFwLCBpKTsNCisgICAgfQ0KKw0KK3ZjcHBfb3V0Og0KKyAg ICBsaWJ4bF9jcHVtYXBfZGlzcG9zZSgmZXhjbHVkZV9jcHVtYXApOw0KKw0KKyAgICByZXR1cm4g cmM7DQorfQ0KKw0KIHN0YXRpYyB2b2lkIHBhcnNlX2NvbmZpZ19kYXRhKGNvbnN0IGNoYXIgKmNv bmZpZ2ZpbGVfZmlsZW5hbWVfcmVwb3J0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmNvbmZpZ2ZpbGVfZGF0YSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgY29uZmlnZmlsZV9sZW4sDQpAQCAtNTc4LDcgKzYzNyw3IEBAIHN0YXRpYyB2b2lk IHBhcnNlX2NvbmZpZ19kYXRhKGNvbnN0IGNoYXINCiAgICAgY29uc3QgY2hhciAqYnVmOw0KICAg ICBsb25nIGw7DQogICAgIFhMVV9Db25maWcgKmNvbmZpZzsNCi0gICAgWExVX0NvbmZpZ0xpc3Qg KnZiZHMsICpuaWNzLCAqcGNpcywgKmN2ZmJzLCAqY3B1aWRzOw0KKyAgICBYTFVfQ29uZmlnTGlz dCAqY3B1cywgKnZiZHMsICpuaWNzLCAqcGNpcywgKmN2ZmJzLCAqY3B1aWRzOw0KICAgICBpbnQg cGNpX3Bvd2VyX21nbXQgPSAwOw0KICAgICBpbnQgcGNpX21zaXRyYW5zbGF0ZSA9IDE7DQogICAg IGludCBlOw0KQEAgLTY2MSw2ICs3MjAsMjkgQEAgc3RhdGljIHZvaWQgcGFyc2VfY29uZmlnX2Rh dGEoY29uc3QgY2hhcg0KICAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgIm1heHZj cHVzIiwgJmwsIDApKQ0KICAgICAgICAgYl9pbmZvLT5tYXhfdmNwdXMgPSBsOw0KIA0KKyAgICBp ZiAoIXhsdV9jZmdfZ2V0X2xpc3QgKGNvbmZpZywgImNwdXMiLCAmY3B1cywgMCwgMSkpIHsNCisg ICAgICAgIGludCBpLCBuX2NwdXMgPSAwOw0KKw0KKyAgICAgICAgbGlieGxfY3B1bWFwX3NldF9u b25lKCZiX2luZm8tPmNwdW1hcCk7DQorICAgICAgICB3aGlsZSAoKGJ1ZiA9IHhsdV9jZmdfZ2V0 X2xpc3RpdGVtKGNwdXMsIG5fY3B1cykpICE9IE5VTEwpIHsNCisgICAgICAgICAgICBpID0gYXRv aShidWYpOw0KKyAgICAgICAgICAgIGlmICghbGlieGxfY3B1bWFwX2NwdV92YWxpZCgmYl9pbmZv LT5jcHVtYXAsIGkpKSB7DQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY3B1ICVk IGlsbGVnYWxcbiIsIGkpOw0KKyAgICAgICAgICAgICAgICBleGl0KDEpOw0KKyAgICAgICAgICAg IH0NCisgICAgICAgICAgICBsaWJ4bF9jcHVtYXBfc2V0KCZiX2luZm8tPmNwdW1hcCwgaSk7DQor ICAgICAgICAgICAgbl9jcHVzKys7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZSBpZiAo IXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAiY3B1cyIsICZidWYsIDApKSB7DQorICAgICAg ICBjaGFyICpidWYyID0gc3RyZHVwKGJ1Zik7DQorDQorICAgICAgICBsaWJ4bF9jcHVtYXBfc2V0 X25vbmUoJmJfaW5mby0+Y3B1bWFwKTsNCisgICAgICAgIGlmICh2Y3B1cGluX3BhcnNlKGJ1ZjIs ICZiX2luZm8tPmNwdW1hcCkpDQorICAgICAgICAgICAgZXhpdCgxKTsNCisgICAgICAgIGZyZWUo YnVmMik7DQorICAgIH0NCisNCiAgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJt ZW1vcnkiLCAmbCwgMCkpIHsNCiAgICAgICAgIGJfaW5mby0+bWF4X21lbWtiID0gbCAqIDEwMjQ7 DQogICAgICAgICBiX2luZm8tPnRhcmdldF9tZW1rYiA9IGJfaW5mby0+bWF4X21lbWtiOw0KQEAg LTM1MDMsNjUgKzM1ODUsNiBAQCBpbnQgbWFpbl92Y3B1bGlzdChpbnQgYXJnYywgY2hhciAqKmFy Z3YpDQogICAgIHJldHVybiAwOw0KIH0NCiANCi1zdGF0aWMgaW50IHZjcHVwaW5fcGFyc2UoY2hh ciAqY3B1LCBsaWJ4bF9jcHVtYXAgKmNwdW1hcCkNCi17DQotICAgIGxpYnhsX2NwdW1hcCBleGNs dWRlX2NwdW1hcDsNCi0gICAgdWludDMyX3QgY3B1aWRhLCBjcHVpZGI7DQotICAgIGNoYXIgKmVu ZHB0ciwgKnRva2EsICp0b2tiLCAqc2F2ZXB0ciA9IE5VTEw7DQotICAgIGludCBpLCByYyA9IDAs IHJtY3B1Ow0KLQ0KLSAgICBpZiAoIXN0cmNtcChjcHUsICJhbGwiKSkgew0KLSAgICAgICAgbWVt c2V0KGNwdW1hcC0+bWFwLCAtMSwgY3B1bWFwLT5zaXplKTsNCi0gICAgICAgIHJldHVybiAwOw0K LSAgICB9DQotDQotICAgIGlmIChsaWJ4bF9jcHVtYXBfYWxsb2MoY3R4LCAmZXhjbHVkZV9jcHVt YXApKSB7DQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBGYWlsZWQgdG8gYWxsb2Nh dGUgY3B1bWFwLlxuIik7DQotICAgICAgICByZXR1cm4gRU5PTUVNOw0KLSAgICB9DQotDQotICAg IGZvciAodG9rYSA9IHN0cnRva19yKGNwdSwgIiwiLCAmc2F2ZXB0cik7IHRva2E7DQotICAgICAg ICAgdG9rYSA9IHN0cnRva19yKE5VTEwsICIsIiwgJnNhdmVwdHIpKSB7DQotICAgICAgICBybWNw dSA9IDA7DQotICAgICAgICBpZiAoKnRva2EgPT0gJ14nKSB7DQotICAgICAgICAgICAgLyogVGhp cyAoVGhlc2UpIENwdShzKSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbWFwICovDQotICAgICAg ICAgICAgdG9rYSsrOw0KLSAgICAgICAgICAgIHJtY3B1ID0gMTsNCi0gICAgICAgIH0NCi0gICAg ICAgIC8qIEV4dHJhY3QgYSB2YWxpZCAocmFuZ2Ugb2YpIGNwdShzKSAqLw0KLSAgICAgICAgY3B1 aWRhID0gY3B1aWRiID0gc3RydG91bCh0b2thLCAmZW5kcHRyLCAxMCk7DQotICAgICAgICBpZiAo ZW5kcHRyID09IHRva2EpIHsNCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBJ bnZhbGlkIGFyZ3VtZW50LlxuIik7DQotICAgICAgICAgICAgcmMgPSBFSU5WQUw7DQotICAgICAg ICAgICAgZ290byB2Y3BwX291dDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICgqZW5kcHRyID09 ICctJykgew0KLSAgICAgICAgICAgIHRva2IgPSBlbmRwdHIgKyAxOw0KLSAgICAgICAgICAgIGNw dWlkYiA9IHN0cnRvdWwodG9rYiwgJmVuZHB0ciwgMTApOw0KLSAgICAgICAgICAgIGlmIChlbmRw dHIgPT0gdG9rYiB8fCBjcHVpZGEgPiBjcHVpZGIpIHsNCi0gICAgICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJFcnJvcjogSW52YWxpZCBhcmd1bWVudC5cbiIpOw0KLSAgICAgICAgICAgICAg ICByYyA9IEVJTlZBTDsNCi0gICAgICAgICAgICAgICAgZ290byB2Y3BwX291dDsNCi0gICAgICAg ICAgICB9DQotICAgICAgICB9DQotICAgICAgICB3aGlsZSAoY3B1aWRhIDw9IGNwdWlkYikgew0K LSAgICAgICAgICAgIHJtY3B1ID09IDAgPyBsaWJ4bF9jcHVtYXBfc2V0KGNwdW1hcCwgY3B1aWRh KSA6DQotICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2NwdW1hcF9zZXQoJmV4Y2x1ZGVf Y3B1bWFwLCBjcHVpZGEpOw0KLSAgICAgICAgICAgIGNwdWlkYSsrOw0KLSAgICAgICAgfQ0KLSAg ICB9DQotDQotICAgIC8qIENsZWFyIGFsbCB0aGUgY3B1cyBmcm9tIHRoZSByZW1vdmFsIGxpc3Qg Ki8NCi0gICAgbGlieGxfZm9yX2VhY2hfc2V0X2NwdShpLCBleGNsdWRlX2NwdW1hcCkgew0KLSAg ICAgICAgbGlieGxfY3B1bWFwX3Jlc2V0KGNwdW1hcCwgaSk7DQotICAgIH0NCi0NCi12Y3BwX291 dDoNCi0gICAgbGlieGxfY3B1bWFwX2Rpc3Bvc2UoJmV4Y2x1ZGVfY3B1bWFwKTsNCi0NCi0gICAg cmV0dXJuIHJjOw0KLX0NCi0NCiBzdGF0aWMgdm9pZCB2Y3B1cGluKGNvbnN0IGNoYXIgKmQsIGNv bnN0IGNoYXIgKnZjcHUsIGNoYXIgKmNwdSkNCiB7DQogICAgIGxpYnhsX3ZjcHVpbmZvICp2Y3B1 aW5mbzsNCg== --=-oqQVQy5diNUns+vXee/K-- --=-zrugTtglDLYN0Fm/cuFQ 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 v1.4.11 (GNU/Linux) iEYEABECAAYFAk8gE1sACgkQk4XaBE3IOsRjQgCgmyA1blq/BhmHuVn7iBI0yEFu mWAAoIx5ZosTtI82MwEMJdXYLie+/ssX =gdwS -----END PGP SIGNATURE----- --=-zrugTtglDLYN0Fm/cuFQ-- --===============1220177572573469436== 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.xensource.com http://lists.xensource.com/xen-devel --===============1220177572573469436==--