From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH V8 3/7] libxl: add pvusb API Date: Tue, 10 Nov 2015 17:57:24 +0000 Message-ID: References: <1445418510-19614-1-git-send-email-cyliu@suse.com> <1445418510-19614-4-git-send-email-cyliu@suse.com> <22080.57829.461049.37192@mariner.uk.xensource.com> <56421E2B020000660008019B@relay2.provo.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=047d7b41889d37dd6205243371ab Return-path: In-Reply-To: <56421E2B020000660008019B@relay2.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Chun Yan Liu Cc: Juergen Gross , Wei Liu , Ian Campbell , Ian Jackson , "xen-devel@lists.xen.org" , Jim Fehlig , Simon Cao List-Id: xen-devel@lists.xenproject.org --047d7b41889d37dd6205243371ab Content-Type: text/plain; charset=UTF-8 On Tue, Nov 10, 2015 at 8:41 AM, Chun Yan Liu wrote: >> > +void libxl__device_usbctrl_add(libxl__egc *egc, uint32_t domid, >> > + libxl_device_usbctrl *usbctrl, >> > + libxl__ao_device *aodev) >> > +{ >> >> Thanks for adjusting the error-handling patterns in these functions. >> The new way is good, except that: >> >> > +out: >> > + aodev->rc = rc; >> > + if (rc) aodev->callback(egc, aodev); >> >> Here, rc is always set, and indeed the code would be wrong if it were >> not. So can you remove the conditional please ? Ie: > > Reading the codes, libxl__wait_device_connection will call aodev->callback > properly. So here, only if (rc != 0), that means error happens, then we need to > call aodev->callback to end the process. (Refer to current libxl__device_disk_add, > all current code does similar work.) So I think the code is not wrong (?) >> > +static int usb_busaddr_from_busid(libxl__gc *gc, const char *busid, >> > + uint8_t *bus, uint8_t *addr) >> > +{ >> > + char *filename; >> > + void *buf; >> > + >> > + filename = GCSPRINTF(SYSFS_USB_DEV"/%s/busnum", busid); >> > + if (!libxl__read_sysfs_file_contents(gc, filename, &buf, NULL)) >> > + *bus = atoi((char *)buf); >> >> I don't think this cast (and the one for addr) are necessary ? > > Which cast? Here, we want to get a uint_8 value, but buf is a string, > we need to do atoi. atoi() isn't a cast, it's a function call. The cast is the (char *) bit. I think probably you could get away with declaring buf as (char *). &buf should be converted to void** automatically without any warnings, I think. >> > +/* Encode usb interface so that it could be written to xenstore as a key. >> > + * >> > + * Since xenstore key cannot include '.' or ':', we'll change '.' to '_', >> > + * change ':' to '-'. For example, 3-1:2.1 will be encoded to 3-1-2_1. >> > + * This will be used to save original driver of USB device to xenstore. >> > + */ >> >> What is the syntax of the incoming busid ? Could it contain _ or - ? >> You should perhaps spot them and reject if it does. > > The busid is in syntax like 3-1:2.1. It does contain '-'. But since we only use > the single direction, never decode back, so it won't harm. So the only potential problem is that 3-1:2, 3-1-2, 3:1-2, and 3:1:2 all collapse down to 3-1-2. Is there any risk of something like that happening? (Ian: NB these are all read from sysfs.) Since this isn't really being read by anyone, maybe it would be better to replace ':' with another character, just to be safe. It could even be something like 'c' if no other punctuation is available. >> > +/* Bind USB device to "usbback" driver. >> > + * >> > + * If there are many interfaces under USB device, check each interface, >> > + * unbind from original driver and bind to "usbback" driver. >> > + */ >> > +static int usbback_dev_assign(libxl__gc *gc, libxl_device_usb *usb) >> > +{ >> ... >> > + if (libxl__xs_write_checked(gc, XBT_NULL, path, drvpath) < 0) { >> > + LOG(WARN, "Write of %s to node %s failed", drvpath, path); >> > + } >> >> One of the advantages of libxl__xs_write_checked is that it logs >> errors. So you can leave that log message out. >> >> However, if the xs write fails, you should presumably stop, rather >> than carrying on. >> >> I think you probably do things in the wrong order here. You should >> write the old driver info to xenstore first, so that if the bind to >> usbback fails, you have the old driver info. Ian, I don't understand what you're saying here. The code I'm looking at does: 1. unbind + get old driver path in drvpath 2. if(drvpath) write to xenstore 3. bind to usbback If the bind fails, then we do have drvpath in xenstore. Or am I missing something? Bailing out if the above xenstore write fails seems sensible though. >> > +/* Operation to remove usb device. >> > + * >> > + * Generally, it does: >> > + * 1) check if the usb device is assigned to the domain >> > + * 2) remove the usb device from xenstore controller/port. >> > + * 3) unbind usb device from usbback and rebind to its original driver. >> > + * If usb device has many interfaces, do it to each interface. >> > + */ >> > +static int libxl__device_usb_remove(libxl__gc *gc, uint32_t domid, >> > + libxl_device_usb *usb) >> > +{ >> > + int rc; >> > + >> > + if (usb->ctrl < 0 || usb->port < 1) { >> > + LOG(ERROR, "Invalid USB device"); >> > + rc = ERROR_FAIL; >> > + goto out; >> > + } >> > + >> > + if (usb->devtype == LIBXL_USBDEV_TYPE_HOSTDEV && >> > + (usb->u.hostdev.hostbus < 1 || usb->u.hostdev.hostaddr < 1)) { >> > + LOG(ERROR, "Invalid USB device of hostdev"); >> > + rc = ERROR_FAIL; >> > + goto out; >> > + } >> >> Why are these checks here rather than in do_usb_remove ? >> >> For that matter, why is this function not the same as do_usb_remove ? >> >> I might ask the same question about do_usb_add and >> libxl__device_usb_add ? > > Using libxl__device_usb_add and within it extracting do_usb_add is to: > * doing some initialization work and necessary check work in > libxl__device_usb_add (this part are common to PVUSB and QEMU USB) > * doing actual adding usb operations in do_usb_add (this part will diverge > for PVUSB and QEMU USB) . > > Same to libxl__device_usb_remove and do_usb_remove. > > Certainly, we could merge into one function if that is better. George may > have some opinions on this? I think it would be nice to have things broken down that way, but it's likely I'll have to do some adjustments when I come to add in devicemodel usb anyway. So making it one big function wouldn't hurt. (Nor would leaving it the way it is, as far as I'm concerned.) The big thing though is with the removal interface here, where we again have somewhat of a confusion between naming things based on the *host* name (as we do in pci pass-through) vs the *guest* names (as we do for disks and nics). If you have the controller and virtual port, there's no need for the caller to *also* go and look up the host bus and host address; or vice versa -- if you have the hostbus and hostaddr, you shouldn't also need to go look up the usbctrl and virtual port. It looks like for libxl_device_{disk,nic,vtpm}_remove(), it gets a libxl_device struct using libxl__device_from_{disk,nic,vtpm}; and in all cases, the information used to construct the "device" is the backend + either a devid (for nic and vtpm) or vdev, for disks. It looks like for those devices, any conversion from other labels (mac address for nic, uuid for vtpm) is done in xl_cmdimpli.c. I think we want to follow suit here -- libxl_device_usb_remove() should take a usbctrl and port number only, and should look up whatever information it needs to do the removal from that. All we really need for the re-assignment is the busid, which is already stored in a xenstore location we can find using domid, ctrl, and port. Something like the attached patch (compile-tested only). What do you think? (NB the patch doesn't fix the gc or aliasing issues in usb_interface_xenstore_encode() -- those still need to be addressed.) -George --047d7b41889d37dd6205243371ab Content-Type: text/x-diff; charset=US-ASCII; name="0001-tools-Don-t-use-usb-hostbus-and-hostaddr-during-remo.patch" Content-Disposition: attachment; filename="0001-tools-Don-t-use-usb-hostbus-and-hostaddr-during-remo.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_igtoh04z0 RnJvbSA5MmE0NzI1ZDlmNjY5Y2JkNjNlYzE5ZDg1NDI0ZjQ3ZmE0ZWI5NmI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2UgRHVubGFwIDxnZW9yZ2UuZHVubGFwQGV1LmNpdHJp eC5jb20+CkRhdGU6IFR1ZSwgMTAgTm92IDIwMTUgMTc6MjI6MzkgKzAwMDAKU3ViamVjdDogW1BB VENIXSB0b29sczogRG9uJ3QgdXNlIHVzYiBob3N0YnVzIGFuZCBob3N0YWRkciBkdXJpbmcgcmVt b3ZhbAoKVGhlIGJ1c2lkIGlzIGFscmVhZHkgc3RvcmVkIGF0IGEgeGVuc3RvcmUgbG9jYXRpb24g d2UgY2FuIGZpbmQgd2l0aAo8Y3RybCxwb3J0Pi4gIFJlYWQgdGhpcyB2YWx1ZSBiZWZvcmUgcmVt b3ZpbmcgdGhlIGVudHJ5OyB0aGVuIHVzZSBpdAp0byByZS1hc3NpZ24gdGhlIGhvc3QgZGV2aWNl IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGRyaXZlcnMuCgpDaGFuZ2UgdXNiX2dldF9hbGxfaW50ZXJm YWNlcygpIHRvIHRha2UgYnVzaWQsIHJhdGhlciB0aGFuIGxvb2tpbmcgZm9yCml0IGl0c2VsZi4g IEluIHRoZSByZW1vdmUgY2FzZSwgdXNlIHRoZSBidXNpZCB2YWx1ZSB3ZSBnb3QgZnJvbSB0aGUK YmFja2VuZDsgaW4gdGhlIGFkZCgpIGNhc2UsIGp1c3QgcmVvcmRlciB0aGUgY2FsbHMgc28gdGhh dApidXNhZGRyX3RvX2J1c2lkIGhhcHBlbnMgZmlyc3QuICAoVGhpcyBhY3R1YWxseSBhdm9pZHMg YSBkdXBsaWNhdGUKYnVzYWRkcl90b19idXNpZCBjb252ZXJzaW9uIGluIHRoZSBhZGQgY2FzZS4p CgpTaWduZWQtb2ZmLWJ5OiBHZW9yZ2UgRHVubGFwIDxnZW9yZ2UuZHVubGFwQGNpdHJpeC5jb20+ Ci0tLQogdG9vbHMvbGlieGwvbGlieGxfcHZ1c2IuYyB8IDU3ICsrKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjggaW5zZXJ0aW9u cygrKSwgMjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfcHZ1 c2IuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3B2dXNiLmMKaW5kZXggYWI1NzM3MS4uZWFkM2U1MCAx MDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfcHZ1c2IuYworKysgYi90b29scy9saWJ4bC9s aWJ4bF9wdnVzYi5jCkBAIC05NzEsNiArOTcxLDE1IEBAIHN0YXRpYyBpbnQgbGlieGxfX2Rldmlj ZV91c2JfcmVtb3ZlX3hlbnN0b3JlKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAogICAg IHJldHVybiAwOwogfQogCitzdGF0aWMgY2hhciAqIHVzYmJhY2tfYnVzaWRfZnJvbV9jdHJscG9y dChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2IgKnVzYikKK3sKKyAgICByZXR1 cm4gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBHQ1NQUklOVEYoIiVzL2JhY2tlbmQvdnVzYi8lZC8lZC9wb3J0LyVkIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9tcGF0aChnYywgTElCWExf VE9PTFNUQUNLX0RPTUlEKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv bWlkLCB1c2ItPmN0cmwsIHVzYi0+cG9ydCkpOworfQorCiAvKiBiaW5kL3VuYmluZCB1c2IgZGV2 aWNlIGludGVyZmFjZSAqLwogc3RhdGljIGludCB1bmJpbmRfdXNiX2ludGYobGlieGxfX2djICpn YywgY2hhciAqaW50ZiwgY2hhciAqKmRydnBhdGgpCiB7CkBAIC0xMDQ0LDI1ICsxMDUzLDE3IEBA IHN0YXRpYyBpbnQgdXNiX2ludGZfaXNfYXNzaWduZWQobGlieGxfX2djICpnYywgY2hhciAqaW50 ZikKICAgICByZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgdXNiX2dldF9hbGxfaW50ZXJmYWNl cyhsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9kZXZpY2VfdXNiICp1c2IsCitzdGF0aWMgaW50IHVzYl9n ZXRfYWxsX2ludGVyZmFjZXMobGlieGxfX2djICpnYywgY2hhciAqYnVzaWQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKippbnRmcywgaW50ICpudW0pCiB7CiAgICAg RElSICpkaXI7CiAgICAgc3RydWN0IGRpcmVudCAqZW50cnk7CiAgICAgY2hhciAqYnVmOwotICAg IGNoYXIgKmJ1c2lkOwogICAgIGludCByYzsKIAogICAgICppbnRmcyA9IE5VTEw7CiAgICAgKm51 bSA9IDA7CiAKLSAgICBidXNpZCA9IHVzYl9idXNhZGRyX3RvX2J1c2lkKGdjLCB1c2ItPnUuaG9z dGRldi5ob3N0YnVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiLT51Lmhv c3RkZXYuaG9zdGFkZHIpOwotICAgIGlmICghYnVzaWQpIHsKLSAgICAgICAgcmMgPSBFUlJPUl9G QUlMOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KICAgICBidWYgPSBHQ1NQUklOVEYoIiVz OiIsIGJ1c2lkKTsKIAogICAgIGlmICghKGRpciA9IG9wZW5kaXIoU1lTRlNfVVNCX0RFVikpKSB7 CkBAIC0xMTE0LDIwICsxMTE1LDE3IEBAIHN0YXRpYyBjaGFyICp1c2JfaW50ZXJmYWNlX3hlbnN0 b3JlX2VuY29kZShjaGFyICpidXNpZCkKICAqIElmIHRoZXJlIGFyZSBtYW55IGludGVyZmFjZXMg dW5kZXIgVVNCIGRldmljZSwgY2hlY2sgZWFjaCBpbnRlcmZhY2UsCiAgKiB1bmJpbmQgZnJvbSAi dXNiYmFjayIgZHJpdmVyIGFuZCByZWJpbmQgdG8gaXRzIG9yaWdpbmFsIGRyaXZlci4KICAqLwot c3RhdGljIGludCB1c2JiYWNrX2Rldl91bmFzc2lnbihsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9kZXZp Y2VfdXNiICp1c2IpCitzdGF0aWMgaW50IHVzYmJhY2tfZGV2X3VuYXNzaWduKGxpYnhsX19nYyAq Z2MsIGNoYXIgKmJ1c2lkKQogewogICAgIGNoYXIgKippbnRmcyA9IE5VTEw7CiAgICAgY2hhciAq cGF0aDsKICAgICBpbnQgbnVtID0gMCwgaTsKICAgICBpbnQgcmM7Ci0gICAgY2hhciAqYnVzaWQ7 CiAgICAgY2hhciAqdXNiX2VuY29kZSA9IE5VTEw7CiAKLSAgICBpZiAodXNiX2dldF9hbGxfaW50 ZXJmYWNlcyhnYywgdXNiLCAmaW50ZnMsICZudW0pIDwgMCkKKyAgICBpZiAodXNiX2dldF9hbGxf aW50ZXJmYWNlcyhnYywgYnVzaWQsICZpbnRmcywgJm51bSkgPCAwKQogICAgICAgICByZXR1cm4g RVJST1JfRkFJTDsKIAotICAgIGJ1c2lkID0gdXNiX2J1c2FkZHJfdG9fYnVzaWQoZ2MsIHVzYi0+ dS5ob3N0ZGV2Lmhvc3RidXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2It PnUuaG9zdGRldi5ob3N0YWRkcik7CiAgICAgdXNiX2VuY29kZSA9IHVzYl9pbnRlcmZhY2VfeGVu c3RvcmVfZW5jb2RlKGJ1c2lkKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewpA QCAtMTE3NCwxMSArMTE3MiwxNSBAQCBzdGF0aWMgaW50IHVzYmJhY2tfZGV2X2Fzc2lnbihsaWJ4 bF9fZ2MgKmdjLCBsaWJ4bF9kZXZpY2VfdXNiICp1c2IpCiAgICAgY2hhciAqYnVzaWQ7CiAgICAg Y2hhciAqdXNiX2VuY29kZSA9IE5VTEw7CiAKLSAgICBpZiAodXNiX2dldF9hbGxfaW50ZXJmYWNl cyhnYywgdXNiLCAmaW50ZnMsICZudW0pIDwgMCkKLSAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7 Ci0KICAgICBidXNpZCA9IHVzYl9idXNhZGRyX3RvX2J1c2lkKGdjLCB1c2ItPnUuaG9zdGRldi5o b3N0YnVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiLT51Lmhvc3RkZXYu aG9zdGFkZHIpOworCisgICAgaWYgKCFidXNpZCkKKyAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7 CisgICAgCisgICAgaWYgKHVzYl9nZXRfYWxsX2ludGVyZmFjZXMoZ2MsIGJ1c2lkLCAmaW50ZnMs ICZudW0pIDwgMCkKKyAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisKICAgICB1c2JfZW5jb2Rl ID0gdXNiX2ludGVyZmFjZV94ZW5zdG9yZV9lbmNvZGUoYnVzaWQpOwogCiAgICAgZm9yIChpID0g MDsgaSA8IG51bTsgaSsrKSB7CkBAIC0xMjAwLDkgKzEyMDIsOCBAQCBzdGF0aWMgaW50IHVzYmJh Y2tfZGV2X2Fzc2lnbihsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9kZXZpY2VfdXNiICp1c2IpCiAgICAg ICAgICAgICAvKiB3cml0ZSBkcml2ZXIgcGF0aCB0byB4ZW5zdG9yZSBmb3IgbGF0ZXIgcmViaW5k aW5nICovCiAgICAgICAgICAgICBwYXRoID0gR0NTUFJJTlRGKFVTQkJBQ0tfSU5GT19QQVRIIi8l cy8lcy9kcml2ZXJfcGF0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9lbmNv ZGUsIHVzYl9pbnRlcmZhY2VfeGVuc3RvcmVfZW5jb2RlKGludGYpKTsKLSAgICAgICAgICAgIGlm IChsaWJ4bF9feHNfd3JpdGVfY2hlY2tlZChnYywgWEJUX05VTEwsIHBhdGgsIGRydnBhdGgpIDwg MCkgewotICAgICAgICAgICAgICAgIExPRyhXQVJOLCAiV3JpdGUgb2YgJXMgdG8gbm9kZSAlcyBm YWlsZWQiLCBkcnZwYXRoLCBwYXRoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChs aWJ4bF9feHNfd3JpdGVfY2hlY2tlZChnYywgWEJUX05VTEwsIHBhdGgsIGRydnBhdGgpIDwgMCkK KyAgICAgICAgICAgICAgICBnb3RvIG91dF9yZWJpbmQ7CiAgICAgICAgIH0KIAogICAgICAgICAv KiBiaW5kIGludGVyZmFjZSB0byB1c2JiYWNrICovCkBAIC0xMjIwLDcgKzEyMjEsNyBAQCBvdXRf cmViaW5kOgogICAgIC8qIHNvbWUgaW50ZXJmYWNlcyBtaWdodCBiZSBib3VuZCB0byB1c2JiYWNr LCB1bmJpbmQgaXQgdGhlbiBhbmQKICAgICAgKiByZWJpbmQgdG8gaXRzIG9yaWdpbmFsIGRyaXZl cgogICAgICAqLwotICAgIHVzYmJhY2tfZGV2X3VuYXNzaWduKGdjLCB1c2IpOworICAgIHVzYmJh Y2tfZGV2X3VuYXNzaWduKGdjLCBidXNpZCk7CiBvdXQ6CiAgICAgZnJlZSh1c2JfZW5jb2RlKTsK ICAgICByZXR1cm4gcmM7CkBAIC0xMzc2LDYgKzEzNzcsNyBAQCBzdGF0aWMgaW50IGRvX3VzYl9y ZW1vdmUobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCiAgICAgbGlieGxfdXNiY3RybGlu Zm8gdXNiY3RybGluZm87CiAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgdXNiY3RybDsKICAgICBp bnQgcmM7CisgICAgY2hhciAqYnVzaWQ7CiAKICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0 KCZ1c2JjdHJsKTsKICAgICBsaWJ4bF91c2JjdHJsaW5mb19pbml0KCZ1c2JjdHJsaW5mbyk7CkBA IC0xMzk1LDEwICsxMzk3LDE0IEBAIHN0YXRpYyBpbnQgZG9fdXNiX3JlbW92ZShsaWJ4bF9fZ2Mg KmdjLCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgTE9HKEVSUk9SLCAiTm90IHN1cHBvcnRlZCIp OwogICAgICAgICBicmVhazsKICAgICBjYXNlIExJQlhMX1VTQkNUUkxfVFlQRV9QVjoKKyAgICAg ICAgYnVzaWQgPSB1c2JiYWNrX2J1c2lkX2Zyb21fY3RybHBvcnQoZ2MsIGRvbWlkLCB1c2JkZXYp OworCisgICAgICAgIGlmICghYnVzaWQpIGdvdG8gb3V0OworICAgICAgICAKICAgICAgICAgcmMg PSBsaWJ4bF9fZGV2aWNlX3VzYl9yZW1vdmVfeGVuc3RvcmUoZ2MsIGRvbWlkLCB1c2JkZXYpOwog ICAgICAgICBpZiAocmMpIGdvdG8gb3V0OwogCi0gICAgICAgIHVzYmJhY2tfZGV2X3VuYXNzaWdu KGdjLCB1c2JkZXYpOworICAgICAgICB1c2JiYWNrX2Rldl91bmFzc2lnbihnYywgYnVzaWQpOwog ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CkBA IC0xNDMyLDEzICsxNDM4LDYgQEAgc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX3VzYl9yZW1vdmUo bGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCiAgICAgICAgIGdvdG8gb3V0OwogICAgIH0K IAotICAgIGlmICh1c2ItPmRldnR5cGUgPT0gTElCWExfVVNCREVWX1RZUEVfSE9TVERFViAmJgot ICAgICAgICAodXNiLT51Lmhvc3RkZXYuaG9zdGJ1cyA8IDEgfHwgdXNiLT51Lmhvc3RkZXYuaG9z dGFkZHIgPCAxKSkgewotICAgICAgICBMT0coRVJST1IsICJJbnZhbGlkIFVTQiBkZXZpY2Ugb2Yg aG9zdGRldiIpOwotICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Ci0gICAgICAgIGdvdG8gb3V0Owot ICAgIH0KLQogICAgIC8qIERvIHRoZSByZW1vdmUgKi8KICAgICByYyA9IGRvX3VzYl9yZW1vdmUo Z2MsIGRvbWlkLCB1c2IpOwogCi0tIAoyLjEuNAoK --047d7b41889d37dd6205243371ab 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 --047d7b41889d37dd6205243371ab--