From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dario Faggioli Subject: [PATCHv2 2 of 2] libxl: allow for specifying the CPU affinity in the config file. Date: Mon, 23 Jan 2012 19:22:12 +0100 Message-ID: <1327342932.2476.15.camel@Abyss> References: <1327342219.2476.9.camel@Abyss> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5201230328339749710==" Return-path: In-Reply-To: <1327342219.2476.9.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 --===============5201230328339749710== Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-rWAN+8NqY296F6OOQ8N3" --=-rWAN+8NqY296F6OOQ8N3 Content-Type: multipart/mixed; boundary="=-1nQzzaDXmGx+98o0WDTe" --=-1nQzzaDXmGx+98o0WDTe 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 d76603510485 tools/libxl/libxl.c --- a/tools/libxl/libxl.c Mon Jan 23 18:02:42 2012 +0000 +++ b/tools/libxl/libxl.c Mon Jan 23 18:02:47 2012 +0000 @@ -2663,6 +2663,20 @@ 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, "no affinity for cpu %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 d76603510485 tools/libxl/libxl.h --- a/tools/libxl/libxl.h Mon Jan 23 18:02:42 2012 +0000 +++ b/tools/libxl/libxl.h Mon Jan 23 18:02:47 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 d76603510485 tools/libxl/libxl_create.c --- a/tools/libxl/libxl_create.c Mon Jan 23 18:02:42 2012 +0000 +++ b/tools/libxl/libxl_create.c Mon Jan 23 18:02:47 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 d76603510485 tools/libxl/libxl_dom.c --- a/tools/libxl/libxl_dom.c Mon Jan 23 18:02:42 2012 +0000 +++ b/tools/libxl/libxl_dom.c Mon Jan 23 18:02:47 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 d76603510485 tools/libxl/libxl_types.idl --- a/tools/libxl/libxl_types.idl Mon Jan 23 18:02:42 2012 +0000 +++ b/tools/libxl/libxl_types.idl Mon Jan 23 18:02:47 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 d76603510485 tools/libxl/libxl_utils.h --- a/tools/libxl/libxl_utils.h Mon Jan 23 18:02:42 2012 +0000 +++ b/tools/libxl/libxl_utils.h Mon Jan 23 18:02:47 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 d76603510485 tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Mon Jan 23 18:02:42 2012 +0000 +++ b/tools/libxl/xl_cmdimpl.c Mon Jan 23 18:02:47 2012 +0000 @@ -288,16 +288,72 @@ static void dolog(const char *file, int=20 libxl_write_exactly(NULL, logfile, s, rc, NULL, NULL); } =20 +static void print_bitmap(uint8_t *map, int maplen, FILE *stream) +{ + int i; + uint8_t pmap =3D 0, bitmask =3D 0; + int firstset =3D 0, state =3D 0; + + for (i =3D 0; i < maplen; i++) { + if (i % 8 =3D=3D 0) { + pmap =3D *map++; + bitmask =3D 1; + } else bitmask <<=3D 1; + + switch (state) { + case 0: + case 2: + if ((pmap & bitmask) !=3D 0) { + firstset =3D i; + state++; + } + continue; + case 1: + case 3: + if ((pmap & bitmask) =3D=3D 0) { + fprintf(stream, "%s%d", state > 1 ? "," : "", firstset); + if (i - 1 > firstset) + fprintf(stream, "-%d", i - 1); + state =3D 2; + } + continue; + } + } + switch (state) { + case 0: + fprintf(stream, "none"); + break; + case 2: + break; + case 1: + if (firstset =3D=3D 0) { + fprintf(stream, "any cpu"); + break; + } + case 3: + fprintf(stream, "%s%d", state > 1 ? "," : "", firstset); + if (i - 1 > firstset) + fprintf(stream, "-%d", i - 1); + break; + } +} + static void printf_info(int domid, libxl_domain_config *d_config, libxl_device_model_info *dm_info) { - int i; + int i, nr_cpus =3D -1; libxl_dominfo info; + libxl_physinfo physinfo; =20 libxl_domain_create_info *c_info =3D &d_config->c_info; libxl_domain_build_info *b_info =3D &d_config->b_info; =20 + if (libxl_get_physinfo(ctx, &physinfo) =3D=3D 0) + nr_cpus =3D physinfo.nr_cpus; + else + fprintf(stderr, "libxl_physinfo failed.\n"); + printf("(domain\n\t(domid %d)\n", domid); printf("\t(create_info)\n"); printf("\t(hvm %d)\n", c_info->type =3D=3D LIBXL_DOMAIN_TYPE_HVM); @@ -328,6 +384,9 @@ static void printf_info(int domid, =20 printf("\t(build_info)\n"); printf("\t(max_vcpus %d)\n", b_info->max_vcpus); + printf("\t(CPU affinity "); + print_bitmap(b_info->cpumap.map, nr_cpus, stdout); + printf(")\n"); printf("\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode)= ); printf("\t(max_memkb %d)\n", b_info->max_memkb); printf("\t(target_memkb %d)\n", b_info->target_memkb); @@ -569,6 +628,8 @@ static void split_string_into_string_lis free(s); } =20 +static int vcpupin_parse(char *cpu, libxl_cpumap *cpumap); + static void parse_config_data(const char *configfile_filename_report, const char *configfile_data, int configfile_len, @@ -578,7 +639,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 +722,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; @@ -3357,56 +3441,6 @@ int main_button_press(int argc, char **a return 0; } =20 -static void print_bitmap(uint8_t *map, int maplen, FILE *stream) -{ - int i; - uint8_t pmap =3D 0, bitmask =3D 0; - int firstset =3D 0, state =3D 0; - - for (i =3D 0; i < maplen; i++) { - if (i % 8 =3D=3D 0) { - pmap =3D *map++; - bitmask =3D 1; - } else bitmask <<=3D 1; - - switch (state) { - case 0: - case 2: - if ((pmap & bitmask) !=3D 0) { - firstset =3D i; - state++; - } - continue; - case 1: - case 3: - if ((pmap & bitmask) =3D=3D 0) { - fprintf(stream, "%s%d", state > 1 ? "," : "", firstset); - if (i - 1 > firstset) - fprintf(stream, "-%d", i - 1); - state =3D 2; - } - continue; - } - } - switch (state) { - case 0: - fprintf(stream, "none"); - break; - case 2: - break; - case 1: - if (firstset =3D=3D 0) { - fprintf(stream, "any cpu"); - break; - } - case 3: - fprintf(stream, "%s%d", state > 1 ? "," : "", firstset); - if (i - 1 > firstset) - fprintf(stream, "-%d", i - 1); - break; - } -} - static void print_vcpuinfo(uint32_t tdomid, const libxl_vcpuinfo *vcpuinfo, uint32_t nr_cpus) @@ -3511,7 +3545,7 @@ static int vcpupin_parse(char *cpu, libx int i, ret =3D 0; =20 if (!strcmp(cpu, "all")) { - memset(cpumap->map, -1, cpumap->size); + libxl_cpumap_set_any(cpumap); return 0; } =20 --=20 <> (Raistlin Majere) ------------------------------------------------------------------- Dario Faggioli, Ph.D, http://retis.sssup.it/people/faggioli Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK) --=-1nQzzaDXmGx+98o0WDTe Content-Disposition: attachment; filename="support-cpus-par-in-config-file.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="support-cpus-par-in-config-file.patch"; charset="UTF-8" IyBIRyBjaGFuZ2VzZXQgcGF0Y2gNCiMgUGFyZW50IGQ3NjYwMzUxMDQ4NWJiZDY5YjMwOTA1NTk5 ZjI4ODNiYzBmYjliNjcNCmxpYnhsOiBhbGxvdyBmb3Igc3BlY2lmeWluZyB0aGUgQ1BVIGFmZmlu aXR5IGluIHRoZSBjb25maWcgZmlsZS4NCg0KRW5hYmxlIENQVSBhZmZpbml0eSBzcGVjaWZpY2F0 aW9uIGluIGEgVk0ncyBjb25maWcgZmlsZSB3aXRoIHRoZQ0KZXhhY3Qgc3ludGF4IGB4bCB2Y3B1 LXBpbicgcHJvdmlkZXMuDQoNClNpZ25lZC1vZmYtYnk6IERhcmlvIEZhZ2dpb2xpIDxkYXJpby5m YWdnaW9saUBjaXRyaXguY29tPg0KDQpkaWZmIC1yIGQ3NjYwMzUxMDQ4NSB0b29scy9saWJ4bC9s aWJ4bC5jDQotLS0gYS90b29scy9saWJ4bC9saWJ4bC5jCU1vbiBKYW4gMjMgMTg6MDI6NDIgMjAx MiArMDAwMA0KKysrIGIvdG9vbHMvbGlieGwvbGlieGwuYwlNb24gSmFuIDIzIDE4OjAyOjQ3IDIw MTIgKzAwMDANCkBAIC0yNjYzLDYgKzI2NjMsMjAgQEAgaW50IGxpYnhsX3NldF92Y3B1YWZmaW5p dHkobGlieGxfY3R4ICpjdA0KICAgICByZXR1cm4gMDsNCiB9DQogDQoraW50IGxpYnhsX3NldF92 Y3B1YWZmaW5pdHlfYWxsKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heF92Y3B1cywgbGlieGxfY3B1 bWFwICpjcHVtYXApDQorew0KKyAgICBpbnQgaSwgcmMgPSAwOw0KKw0KKyAgICBmb3IgKGkgPSAw OyBpIDwgbWF4X3ZjcHVzOyBpKyspIHsNCisgICAgICAgIGlmIChsaWJ4bF9zZXRfdmNwdWFmZmlu aXR5KGN0eCwgZG9taWQsIGksIGNwdW1hcCkpIHsNCisgICAgICAgICAgICBMSUJYTF9fTE9HKGN0 eCwgTElCWExfX0xPR19XQVJOSU5HLCAibm8gYWZmaW5pdHkgZm9yIGNwdSAlZCIsIGkpOw0KKyAg ICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICByZXR1 cm4gcmM7DQorfQ0KKw0KIGludCBsaWJ4bF9zZXRfdmNwdW9ubGluZShsaWJ4bF9jdHggKmN0eCwg dWludDMyX3QgZG9taWQsIGxpYnhsX2NwdW1hcCAqY3B1bWFwKQ0KIHsNCiAgICAgR0NfSU5JVChj dHgpOw0KZGlmZiAtciBkNzY2MDM1MTA0ODUgdG9vbHMvbGlieGwvbGlieGwuaA0KLS0tIGEvdG9v bHMvbGlieGwvbGlieGwuaAlNb24gSmFuIDIzIDE4OjAyOjQyIDIwMTIgKzAwMDANCisrKyBiL3Rv b2xzL2xpYnhsL2xpYnhsLmgJTW9uIEphbiAyMyAxODowMjo0NyAyMDEyICswMDAwDQpAQCAtNTYw LDYgKzU2MCw4IEBAIGxpYnhsX3ZjcHVpbmZvICpsaWJ4bF9saXN0X3ZjcHUobGlieGxfY3QNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5iX3ZjcHUsIGludCAq bnJjcHVzKTsNCiBpbnQgbGlieGxfc2V0X3ZjcHVhZmZpbml0eShsaWJ4bF9jdHggKmN0eCwgdWlu dDMyX3QgZG9taWQsIHVpbnQzMl90IHZjcHVpZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9jcHVtYXAgKmNwdW1hcCk7DQoraW50IGxpYnhsX3NldF92Y3B1YWZmaW5pdHlfYWxs KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IG1heF92Y3B1cywgbGlieGxfY3B1bWFwICpjcHVtYXApOw0K IGludCBsaWJ4bF9zZXRfdmNwdW9ubGluZShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQs IGxpYnhsX2NwdW1hcCAqY3B1bWFwKTsNCiANCiBpbnQgbGlieGxfZ2V0X3NjaGVkX2lkKGxpYnhs X2N0eCAqY3R4KTsNCmRpZmYgLXIgZDc2NjAzNTEwNDg1IHRvb2xzL2xpYnhsL2xpYnhsX2NyZWF0 ZS5jDQotLS0gYS90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwlNb24gSmFuIDIzIDE4OjAyOjQy IDIwMTIgKzAwMDANCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCU1vbiBKYW4gMjMg MTg6MDI6NDcgMjAxMiArMDAwMA0KQEAgLTcxLDYgKzcxLDkgQEAgaW50IGxpYnhsX2luaXRfYnVp bGRfaW5mbyhsaWJ4bF9jdHggKmN0eA0KICAgICBtZW1zZXQoYl9pbmZvLCAnXDAnLCBzaXplb2Yo KmJfaW5mbykpOw0KICAgICBiX2luZm8tPm1heF92Y3B1cyA9IDE7DQogICAgIGJfaW5mby0+Y3Vy X3ZjcHVzID0gMTsNCisgICAgaWYgKGxpYnhsX2NwdW1hcF9hbGxvYyhjdHgsICZiX2luZm8tPmNw dW1hcCkpDQorICAgICAgICByZXR1cm4gRVJST1JfTk9NRU07DQorICAgIGxpYnhsX2NwdW1hcF9z ZXRfYW55KCZiX2luZm8tPmNwdW1hcCk7DQogICAgIGJfaW5mby0+bWF4X21lbWtiID0gMzIgKiAx MDI0Ow0KICAgICBiX2luZm8tPnRhcmdldF9tZW1rYiA9IGJfaW5mby0+bWF4X21lbWtiOw0KICAg ICBiX2luZm8tPmRpc2FibGVfbWlncmF0ZSA9IDA7DQpkaWZmIC1yIGQ3NjYwMzUxMDQ4NSB0b29s cy9saWJ4bC9saWJ4bF9kb20uYw0KLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfZG9tLmMJTW9uIEph biAyMyAxODowMjo0MiAyMDEyICswMDAwDQorKysgYi90b29scy9saWJ4bC9saWJ4bF9kb20uYwlN b24gSmFuIDIzIDE4OjAyOjQ3IDIwMTIgKzAwMDANCkBAIC02NSw2ICs2NSw3IEBAIGludCBsaWJ4 bF9fYnVpbGRfcHJlKGxpYnhsX19nYyAqZ2MsIHVpbnQNCiAgICAgbGlieGxfY3R4ICpjdHggPSBs aWJ4bF9fZ2Nfb3duZXIoZ2MpOw0KICAgICBpbnQgdHNjX21vZGU7DQogICAgIHhjX2RvbWFpbl9t YXhfdmNwdXMoY3R4LT54Y2gsIGRvbWlkLCBpbmZvLT5tYXhfdmNwdXMpOw0KKyAgICBsaWJ4bF9z ZXRfdmNwdWFmZmluaXR5X2FsbChjdHgsIGRvbWlkLCBpbmZvLT5tYXhfdmNwdXMsICZpbmZvLT5j cHVtYXApOw0KICAgICB4Y19kb21haW5fc2V0bWF4bWVtKGN0eC0+eGNoLCBkb21pZCwgaW5mby0+ dGFyZ2V0X21lbWtiICsgTElCWExfTUFYTUVNX0NPTlNUQU5UKTsNCiAgICAgaWYgKGluZm8tPnR5 cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfUFYpDQogICAgICAgICB4Y19kb21haW5fc2V0X21lbW1h cF9saW1pdChjdHgtPnhjaCwgZG9taWQsDQpkaWZmIC1yIGQ3NjYwMzUxMDQ4NSB0b29scy9saWJ4 bC9saWJ4bF90eXBlcy5pZGwNCi0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbAlNb24g SmFuIDIzIDE4OjAyOjQyIDIwMTIgKzAwMDANCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVz LmlkbAlNb24gSmFuIDIzIDE4OjAyOjQ3IDIwMTIgKzAwMDANCkBAIC0xNjIsNiArMTYyLDcgQEAg bGlieGxfZG9tYWluX2NyZWF0ZV9pbmZvID0gU3RydWN0KCJkb21haQ0KIGxpYnhsX2RvbWFpbl9i dWlsZF9pbmZvID0gU3RydWN0KCJkb21haW5fYnVpbGRfaW5mbyIsWw0KICAgICAoIm1heF92Y3B1 cyIsICAgICAgIGludGVnZXIpLA0KICAgICAoImN1cl92Y3B1cyIsICAgICAgIGludGVnZXIpLA0K KyAgICAoImNwdW1hcCIsICAgICAgICAgIGxpYnhsX2NwdW1hcCksDQogICAgICgidHNjX21vZGUi LCAgICAgICAgbGlieGxfdHNjX21vZGUpLA0KICAgICAoIm1heF9tZW1rYiIsICAgICAgIHVpbnQz MiksDQogICAgICgidGFyZ2V0X21lbWtiIiwgICAgdWludDMyKSwNCmRpZmYgLXIgZDc2NjAzNTEw NDg1IHRvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmgNCi0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3V0 aWxzLmgJTW9uIEphbiAyMyAxODowMjo0MiAyMDEyICswMDAwDQorKysgYi90b29scy9saWJ4bC9s aWJ4bF91dGlscy5oCU1vbiBKYW4gMjMgMTg6MDI6NDcgMjAxMiArMDAwMA0KQEAgLTcwLDYgKzcw LDE4IEBAIGludCBsaWJ4bF9jcHVtYXBfYWxsb2MobGlieGxfY3R4ICpjdHgsIGwNCiBpbnQgbGli eGxfY3B1bWFwX3Rlc3QobGlieGxfY3B1bWFwICpjcHVtYXAsIGludCBjcHUpOw0KIHZvaWQgbGli eGxfY3B1bWFwX3NldChsaWJ4bF9jcHVtYXAgKmNwdW1hcCwgaW50IGNwdSk7DQogdm9pZCBsaWJ4 bF9jcHVtYXBfcmVzZXQobGlieGxfY3B1bWFwICpjcHVtYXAsIGludCBjcHUpOw0KK3N0YXRpYyBp bmxpbmUgdm9pZCBsaWJ4bF9jcHVtYXBfc2V0X2FueShsaWJ4bF9jcHVtYXAgKmNwdW1hcCkNCit7 DQorICAgIG1lbXNldChjcHVtYXAtPm1hcCwgLTEsIGNwdW1hcC0+c2l6ZSk7DQorfQ0KK3N0YXRp YyBpbmxpbmUgdm9pZCBsaWJ4bF9jcHVtYXBfc2V0X25vbmUobGlieGxfY3B1bWFwICpjcHVtYXAp DQorew0KKyAgICBtZW1zZXQoY3B1bWFwLT5tYXAsIDAsIGNwdW1hcC0+c2l6ZSk7DQorfQ0KK3N0 YXRpYyBpbmxpbmUgaW50IGxpYnhsX2NwdW1hcF9jcHVfdmFsaWQobGlieGxfY3B1bWFwICpjcHVt YXAsIGludCBjcHUpDQorew0KKyAgICByZXR1cm4gY3B1ID49IDAgJiYgY3B1IDwgKGNwdW1hcC0+ c2l6ZSAqIDgpOw0KK30NCiAjZGVmaW5lIGxpYnhsX2Zvcl9lYWNoX2NwdSh2YXIsIG1hcCkgZm9y ICh2YXIgPSAwOyB2YXIgPCAobWFwKS5zaXplICogODsgdmFyKyspDQogI2RlZmluZSBsaWJ4bF9m b3JfZWFjaF9zZXRfY3B1KHYsIG0pIGZvciAodiA9IDA7IHYgPCAobSkuc2l6ZSAqIDg7IHYrKykg XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaWJ4 bF9jcHVtYXBfdGVzdCgmKG0pLCB2KSkNCmRpZmYgLXIgZDc2NjAzNTEwNDg1IHRvb2xzL2xpYnhs L3hsX2NtZGltcGwuYw0KLS0tIGEvdG9vbHMvbGlieGwveGxfY21kaW1wbC5jCU1vbiBKYW4gMjMg MTg6MDI6NDIgMjAxMiArMDAwMA0KKysrIGIvdG9vbHMvbGlieGwveGxfY21kaW1wbC5jCU1vbiBK YW4gMjMgMTg6MDI6NDcgMjAxMiArMDAwMA0KQEAgLTI4OCwxNiArMjg4LDcyIEBAIHN0YXRpYyB2 b2lkIGRvbG9nKGNvbnN0IGNoYXIgKmZpbGUsIGludCANCiAgICAgICAgIGxpYnhsX3dyaXRlX2V4 YWN0bHkoTlVMTCwgbG9nZmlsZSwgcywgcmMsIE5VTEwsIE5VTEwpOw0KIH0NCiANCitzdGF0aWMg dm9pZCBwcmludF9iaXRtYXAodWludDhfdCAqbWFwLCBpbnQgbWFwbGVuLCBGSUxFICpzdHJlYW0p DQorew0KKyAgICBpbnQgaTsNCisgICAgdWludDhfdCBwbWFwID0gMCwgYml0bWFzayA9IDA7DQor ICAgIGludCBmaXJzdHNldCA9IDAsIHN0YXRlID0gMDsNCisNCisgICAgZm9yIChpID0gMDsgaSA8 IG1hcGxlbjsgaSsrKSB7DQorICAgICAgICBpZiAoaSAlIDggPT0gMCkgew0KKyAgICAgICAgICAg IHBtYXAgPSAqbWFwKys7DQorICAgICAgICAgICAgYml0bWFzayA9IDE7DQorICAgICAgICB9IGVs c2UgYml0bWFzayA8PD0gMTsNCisNCisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsNCisgICAgICAg IGNhc2UgMDoNCisgICAgICAgIGNhc2UgMjoNCisgICAgICAgICAgICBpZiAoKHBtYXAgJiBiaXRt YXNrKSAhPSAwKSB7DQorICAgICAgICAgICAgICAgIGZpcnN0c2V0ID0gaTsNCisgICAgICAgICAg ICAgICAgc3RhdGUrKzsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgY29udGludWU7DQor ICAgICAgICBjYXNlIDE6DQorICAgICAgICBjYXNlIDM6DQorICAgICAgICAgICAgaWYgKChwbWFw ICYgYml0bWFzaykgPT0gMCkgew0KKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVz JWQiLCBzdGF0ZSA+IDEgPyAiLCIgOiAiIiwgZmlyc3RzZXQpOw0KKyAgICAgICAgICAgICAgICBp ZiAoaSAtIDEgPiBmaXJzdHNldCkNCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFt LCAiLSVkIiwgaSAtIDEpOw0KKyAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7DQorICAgICAgICAg ICAgfQ0KKyAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIHN3 aXRjaCAoc3RhdGUpIHsNCisgICAgICAgIGNhc2UgMDoNCisgICAgICAgICAgICBmcHJpbnRmKHN0 cmVhbSwgIm5vbmUiKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgMjoNCisg ICAgICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgMToNCisgICAgICAgICAgICBpZiAoZmly c3RzZXQgPT0gMCkgew0KKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgImFueSBjcHUi KTsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgY2Fz ZSAzOg0KKyAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJXMlZCIsIHN0YXRlID4gMSA/ICIs IiA6ICIiLCBmaXJzdHNldCk7DQorICAgICAgICAgICAgaWYgKGkgLSAxID4gZmlyc3RzZXQpDQor ICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiLSVkIiwgaSAtIDEpOw0KKyAgICAgICAg ICAgIGJyZWFrOw0KKyAgICB9DQorfQ0KKw0KIHN0YXRpYyB2b2lkIHByaW50Zl9pbmZvKGludCBk b21pZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fY29uZmlnICpkX2Nv bmZpZywNCiAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfbW9kZWxfaW5mbyAq ZG1faW5mbykNCiB7DQotICAgIGludCBpOw0KKyAgICBpbnQgaSwgbnJfY3B1cyA9IC0xOw0KICAg ICBsaWJ4bF9kb21pbmZvIGluZm87DQorICAgIGxpYnhsX3BoeXNpbmZvIHBoeXNpbmZvOw0KIA0K ICAgICBsaWJ4bF9kb21haW5fY3JlYXRlX2luZm8gKmNfaW5mbyA9ICZkX2NvbmZpZy0+Y19pbmZv Ow0KICAgICBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqYl9pbmZvID0gJmRfY29uZmlnLT5iX2lu Zm87DQogDQorICAgIGlmIChsaWJ4bF9nZXRfcGh5c2luZm8oY3R4LCAmcGh5c2luZm8pID09IDAp DQorICAgICAgICBucl9jcHVzID0gcGh5c2luZm8ubnJfY3B1czsNCisgICAgZWxzZQ0KKyAgICAg ICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9waHlzaW5mbyBmYWlsZWQuXG4iKTsNCisNCiAgICAg cHJpbnRmKCIoZG9tYWluXG5cdChkb21pZCAlZClcbiIsIGRvbWlkKTsNCiAgICAgcHJpbnRmKCJc dChjcmVhdGVfaW5mbylcbiIpOw0KICAgICBwcmludGYoIlx0KGh2bSAlZClcbiIsIGNfaW5mby0+ dHlwZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9IVk0pOw0KQEAgLTMyOCw2ICszODQsOSBAQCBzdGF0 aWMgdm9pZCBwcmludGZfaW5mbyhpbnQgZG9taWQsDQogDQogICAgIHByaW50ZigiXHQoYnVpbGRf aW5mbylcbiIpOw0KICAgICBwcmludGYoIlx0KG1heF92Y3B1cyAlZClcbiIsIGJfaW5mby0+bWF4 X3ZjcHVzKTsNCisgICAgcHJpbnRmKCJcdChDUFUgYWZmaW5pdHkgIik7DQorICAgIHByaW50X2Jp dG1hcChiX2luZm8tPmNwdW1hcC5tYXAsIG5yX2NwdXMsIHN0ZG91dCk7DQorICAgIHByaW50Zigi KVxuIik7DQogICAgIHByaW50ZigiXHQodHNjX21vZGUgJXMpXG4iLCBsaWJ4bF90c2NfbW9kZV90 b19zdHJpbmcoYl9pbmZvLT50c2NfbW9kZSkpOw0KICAgICBwcmludGYoIlx0KG1heF9tZW1rYiAl ZClcbiIsIGJfaW5mby0+bWF4X21lbWtiKTsNCiAgICAgcHJpbnRmKCJcdCh0YXJnZXRfbWVta2Ig JWQpXG4iLCBiX2luZm8tPnRhcmdldF9tZW1rYik7DQpAQCAtNTY5LDYgKzYyOCw4IEBAIHN0YXRp YyB2b2lkIHNwbGl0X3N0cmluZ19pbnRvX3N0cmluZ19saXMNCiAgICAgZnJlZShzKTsNCiB9DQog DQorc3RhdGljIGludCB2Y3B1cGluX3BhcnNlKGNoYXIgKmNwdSwgbGlieGxfY3B1bWFwICpjcHVt YXApOw0KKw0KIHN0YXRpYyB2b2lkIHBhcnNlX2NvbmZpZ19kYXRhKGNvbnN0IGNoYXIgKmNvbmZp Z2ZpbGVfZmlsZW5hbWVfcmVwb3J0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKmNvbmZpZ2ZpbGVfZGF0YSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgY29uZmlnZmlsZV9sZW4sDQpAQCAtNTc4LDcgKzYzOSw3IEBAIHN0YXRpYyB2b2lkIHBh cnNlX2NvbmZpZ19kYXRhKGNvbnN0IGNoYXINCiAgICAgY29uc3QgY2hhciAqYnVmOw0KICAgICBs b25nIGw7DQogICAgIFhMVV9Db25maWcgKmNvbmZpZzsNCi0gICAgWExVX0NvbmZpZ0xpc3QgKnZi ZHMsICpuaWNzLCAqcGNpcywgKmN2ZmJzLCAqY3B1aWRzOw0KKyAgICBYTFVfQ29uZmlnTGlzdCAq Y3B1cywgKnZiZHMsICpuaWNzLCAqcGNpcywgKmN2ZmJzLCAqY3B1aWRzOw0KICAgICBpbnQgcGNp X3Bvd2VyX21nbXQgPSAwOw0KICAgICBpbnQgcGNpX21zaXRyYW5zbGF0ZSA9IDE7DQogICAgIGlu dCBlOw0KQEAgLTY2MSw2ICs3MjIsMjkgQEAgc3RhdGljIHZvaWQgcGFyc2VfY29uZmlnX2RhdGEo Y29uc3QgY2hhcg0KICAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgIm1heHZjcHVz IiwgJmwsIDApKQ0KICAgICAgICAgYl9pbmZvLT5tYXhfdmNwdXMgPSBsOw0KIA0KKyAgICBpZiAo IXhsdV9jZmdfZ2V0X2xpc3QgKGNvbmZpZywgImNwdXMiLCAmY3B1cywgMCwgMSkpIHsNCisgICAg ICAgIGludCBpLCBuX2NwdXMgPSAwOw0KKw0KKyAgICAgICAgbGlieGxfY3B1bWFwX3NldF9ub25l KCZiX2luZm8tPmNwdW1hcCk7DQorICAgICAgICB3aGlsZSAoKGJ1ZiA9IHhsdV9jZmdfZ2V0X2xp c3RpdGVtKGNwdXMsIG5fY3B1cykpICE9IE5VTEwpIHsNCisgICAgICAgICAgICBpID0gYXRvaShi dWYpOw0KKyAgICAgICAgICAgIGlmICghbGlieGxfY3B1bWFwX2NwdV92YWxpZCgmYl9pbmZvLT5j cHVtYXAsIGkpKSB7DQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY3B1ICVkIGls bGVnYWxcbiIsIGkpOw0KKyAgICAgICAgICAgICAgICBleGl0KDEpOw0KKyAgICAgICAgICAgIH0N CisgICAgICAgICAgICBsaWJ4bF9jcHVtYXBfc2V0KCZiX2luZm8tPmNwdW1hcCwgaSk7DQorICAg ICAgICAgICAgbl9jcHVzKys7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZSBpZiAoIXhs dV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAiY3B1cyIsICZidWYsIDApKSB7DQorICAgICAgICBj aGFyICpidWYyID0gc3RyZHVwKGJ1Zik7DQorDQorICAgICAgICBsaWJ4bF9jcHVtYXBfc2V0X25v bmUoJmJfaW5mby0+Y3B1bWFwKTsNCisgICAgICAgIGlmICh2Y3B1cGluX3BhcnNlKGJ1ZjIsICZi X2luZm8tPmNwdW1hcCkpDQorICAgICAgICAgICAgZXhpdCgxKTsNCisgICAgICAgIGZyZWUoYnVm Mik7DQorICAgIH0NCisNCiAgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJtZW1v cnkiLCAmbCwgMCkpIHsNCiAgICAgICAgIGJfaW5mby0+bWF4X21lbWtiID0gbCAqIDEwMjQ7DQog ICAgICAgICBiX2luZm8tPnRhcmdldF9tZW1rYiA9IGJfaW5mby0+bWF4X21lbWtiOw0KQEAgLTMz NTcsNTYgKzM0NDEsNiBAQCBpbnQgbWFpbl9idXR0b25fcHJlc3MoaW50IGFyZ2MsIGNoYXIgKiph DQogICAgIHJldHVybiAwOw0KIH0NCiANCi1zdGF0aWMgdm9pZCBwcmludF9iaXRtYXAodWludDhf dCAqbWFwLCBpbnQgbWFwbGVuLCBGSUxFICpzdHJlYW0pDQotew0KLSAgICBpbnQgaTsNCi0gICAg dWludDhfdCBwbWFwID0gMCwgYml0bWFzayA9IDA7DQotICAgIGludCBmaXJzdHNldCA9IDAsIHN0 YXRlID0gMDsNCi0NCi0gICAgZm9yIChpID0gMDsgaSA8IG1hcGxlbjsgaSsrKSB7DQotICAgICAg ICBpZiAoaSAlIDggPT0gMCkgew0KLSAgICAgICAgICAgIHBtYXAgPSAqbWFwKys7DQotICAgICAg ICAgICAgYml0bWFzayA9IDE7DQotICAgICAgICB9IGVsc2UgYml0bWFzayA8PD0gMTsNCi0NCi0g ICAgICAgIHN3aXRjaCAoc3RhdGUpIHsNCi0gICAgICAgIGNhc2UgMDoNCi0gICAgICAgIGNhc2Ug MjoNCi0gICAgICAgICAgICBpZiAoKHBtYXAgJiBiaXRtYXNrKSAhPSAwKSB7DQotICAgICAgICAg ICAgICAgIGZpcnN0c2V0ID0gaTsNCi0gICAgICAgICAgICAgICAgc3RhdGUrKzsNCi0gICAgICAg ICAgICB9DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICBjYXNlIDE6DQotICAgICAg ICBjYXNlIDM6DQotICAgICAgICAgICAgaWYgKChwbWFwICYgYml0bWFzaykgPT0gMCkgew0KLSAg ICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVzJWQiLCBzdGF0ZSA+IDEgPyAiLCIgOiAi IiwgZmlyc3RzZXQpOw0KLSAgICAgICAgICAgICAgICBpZiAoaSAtIDEgPiBmaXJzdHNldCkNCi0g ICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiLSVkIiwgaSAtIDEpOw0KLSAgICAg ICAgICAgICAgICBzdGF0ZSA9IDI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNvbnRp bnVlOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHN3aXRjaCAoc3RhdGUpIHsNCi0gICAgICAg IGNhc2UgMDoNCi0gICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIm5vbmUiKTsNCi0gICAgICAg ICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICBicmVhazsNCi0gICAg ICAgIGNhc2UgMToNCi0gICAgICAgICAgICBpZiAoZmlyc3RzZXQgPT0gMCkgew0KLSAgICAgICAg ICAgICAgICBmcHJpbnRmKHN0cmVhbSwgImFueSBjcHUiKTsNCi0gICAgICAgICAgICAgICAgYnJl YWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSAzOg0KLSAgICAgICAgICAgIGZwcmlu dGYoc3RyZWFtLCAiJXMlZCIsIHN0YXRlID4gMSA/ICIsIiA6ICIiLCBmaXJzdHNldCk7DQotICAg ICAgICAgICAgaWYgKGkgLSAxID4gZmlyc3RzZXQpDQotICAgICAgICAgICAgICAgIGZwcmludGYo c3RyZWFtLCAiLSVkIiwgaSAtIDEpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotfQ0K LQ0KIHN0YXRpYyB2b2lkIHByaW50X3ZjcHVpbmZvKHVpbnQzMl90IHRkb21pZCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF92Y3B1aW5mbyAqdmNwdWluZm8sDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnJfY3B1cykNCkBAIC0zNTExLDcgKzM1 NDUsNyBAQCBzdGF0aWMgaW50IHZjcHVwaW5fcGFyc2UoY2hhciAqY3B1LCBsaWJ4DQogICAgIGlu dCBpLCByZXQgPSAwOw0KIA0KICAgICBpZiAoIXN0cmNtcChjcHUsICJhbGwiKSkgew0KLSAgICAg ICAgbWVtc2V0KGNwdW1hcC0+bWFwLCAtMSwgY3B1bWFwLT5zaXplKTsNCisgICAgICAgIGxpYnhs X2NwdW1hcF9zZXRfYW55KGNwdW1hcCk7DQogICAgICAgICByZXR1cm4gMDsNCiAgICAgfQ0KIA0K --=-1nQzzaDXmGx+98o0WDTe-- --=-rWAN+8NqY296F6OOQ8N3 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) iEYEABECAAYFAk8dpVQACgkQk4XaBE3IOsTtBACgrLQy/A8ygYKA9s9zyN3cZla9 CcwAn04lHYqy9z8hdGLb9FGBn2fcF+rf =f7Ma -----END PGP SIGNATURE----- --=-rWAN+8NqY296F6OOQ8N3-- --===============5201230328339749710== 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 --===============5201230328339749710==--