From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============6132628794945574165==" MIME-Version: 1.0 From: Shahar Salzman Subject: [SPDK] SPDK + user space appliance Date: Thu, 25 Jan 2018 14:19:52 +0000 Message-ID: List-ID: To: spdk@lists.01.org --===============6132628794945574165== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi all, Sorry for the delay, had to solve a quarantine issue in order to get access= to the list. Some clarifications regarding the user space application: 1. The application is not the nvmf_tgt, we have an entire applicance to whi= ch we are integrating spdk 2. We are currently using nvmf_tgt functions in order to activate spdk, and= the bdev_user in order to handle IO 3. This is all in user space (I am used to the kernel/user distinction in o= rder to separate protocol/appliance). 4. The bdev_user will also notify spdk of changes to namespaces (e.g. a new= namespace has been added, and can be attached to the spdk subsystem) I am glad that this is your intention, the question is, do you think that i= t would be useful to create such a bdev_user module which will allow other = users to integrate spdk to their appliance using such a simple threading mo= del? Perhaps such a module will allow easier integration of spdk. I am attaching a reference application which is does NULL IO via bdev_user. Regarding the RPC, we have an implementation of it, and will be happy to pu= sh it upstream. I am not sure that using the RPC for this type of bdev_user namespaces is t= he correct approach in the long run, since the user appliance is the one ad= ding/removing namespaces (like hot plugging of a new NVME device), so it ca= n just call the "add_namespace_to_subsystem" interface directly, and does n= ot need to use an RPC for it. Thanks, Shahar --===============6132628794945574165== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl eHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzdHls ZT0iZGlzcGxheTpub25lOyI+PCEtLSBQIHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO30g LS0+PC9zdHlsZT4KPC9oZWFkPgo8Ym9keSBkaXI9Imx0ciI+CjxkaXYgaWQ9ImRpdnRhZ2RlZmF1 bHR3cmFwcGVyIiBzdHlsZT0iZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyBm b250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmLCBFbW9qaUZvbnQsICZx dW90O0FwcGxlIENvbG9yIEVtb2ppJnF1b3Q7LCAmcXVvdDtTZWdvZSBVSSBFbW9qaSZxdW90Oywg Tm90b0NvbG9yRW1vamksICZxdW90O1NlZ29lIFVJIFN5bWJvbCZxdW90OywgJnF1b3Q7QW5kcm9p ZCBFbW9qaSZxdW90OywgRW1vamlTeW1ib2xzOyIgZGlyPSJsdHIiPgo8cCBzdHlsZT0ibWFyZ2lu LXRvcDowO21hcmdpbi1ib3R0b206MCI+SGkgYWxsLDwvcD4KPHAgc3R5bGU9Im1hcmdpbi10b3A6 MDttYXJnaW4tYm90dG9tOjAiPjxicj4KPC9wPgo8cCBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdp bi1ib3R0b206MCI+U29ycnkgZm9yIHRoZSBkZWxheSwgaGFkIHRvIHNvbHZlIGEgcXVhcmFudGlu ZSBpc3N1ZSBpbiBvcmRlciB0byBnZXQgYWNjZXNzIHRvIHRoZSBsaXN0LjwvcD4KPHAgc3R5bGU9 Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPjxicj4KPC9wPgo8cCBzdHlsZT0ibWFyZ2lu LXRvcDowO21hcmdpbi1ib3R0b206MCI+U29tZSBjbGFyaWZpY2F0aW9ucyByZWdhcmRpbmcgdGhl IHVzZXIgc3BhY2UgYXBwbGljYXRpb246PC9wPgo8cCBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdp bi1ib3R0b206MCI+MS4gVGhlIGFwcGxpY2F0aW9uIGlzIG5vdCB0aGUgbnZtZl90Z3QsIHdlIGhh dmUgYW4gZW50aXJlIGFwcGxpY2FuY2UgdG8gd2hpY2ggd2UgYXJlIGludGVncmF0aW5nIHNwZGs8 L3A+CjxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj4yLiBXZSBhcmUgY3Vy cmVudGx5IHVzaW5nIG52bWZfdGd0IGZ1bmN0aW9ucyBpbiBvcmRlciB0byBhY3RpdmF0ZSBzcGRr LCBhbmQgdGhlIGJkZXZfdXNlciBpbiBvcmRlciB0byBoYW5kbGUgSU88L3A+CjxwIHN0eWxlPSJt YXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj4zLiBUaGlzIGlzIGFsbCBpbiZuYnNwO3VzZXIg c3BhY2UgKEkgYW0gdXNlZCB0byB0aGUga2VybmVsL3VzZXIgZGlzdGluY3Rpb24gaW4gb3JkZXIg dG8gc2VwYXJhdGUgcHJvdG9jb2wvYXBwbGlhbmNlKS48L3A+CjxwIHN0eWxlPSJtYXJnaW4tdG9w OjA7bWFyZ2luLWJvdHRvbTowIj40LiBUaGUgYmRldl91c2VyIHdpbGwgYWxzbyBub3RpZnkgc3Bk ayBvZiBjaGFuZ2VzIHRvIG5hbWVzcGFjZXMgKGUuZy4gYSBuZXcgbmFtZXNwYWNlIGhhcyBiZWVu IGFkZGVkLCBhbmQgY2FuIGJlIGF0dGFjaGVkIHRvIHRoZSBzcGRrIHN1YnN5c3RlbSk8L3A+Cjxw IHN0eWxlPSJtYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj48YnI+CjwvcD4KPHAgc3R5bGU9 Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPkkgYW0gZ2xhZCB0aGF0IHRoaXMgaXMgeW91 ciBpbnRlbnRpb24sIHRoZSBxdWVzdGlvbiBpcywgZG8geW91IHRoaW5rIHRoYXQgaXQgd291bGQg YmUgdXNlZnVsIHRvIGNyZWF0ZSBzdWNoIGEgYmRldl91c2VyIG1vZHVsZSB3aGljaCB3aWxsIGFs bG93IG90aGVyIHVzZXJzIHRvIGludGVncmF0ZSBzcGRrIHRvIHRoZWlyIGFwcGxpYW5jZSB1c2lu ZyBzdWNoIGEgc2ltcGxlIHRocmVhZGluZwogbW9kZWw/IFBlcmhhcHMmbmJzcDtzdWNoIGEgbW9k dWxlIHdpbGwgYWxsb3cgZWFzaWVyIGludGVncmF0aW9uIG9mIHNwZGsuPC9wPgo8cCBzdHlsZT0i bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+PGJyPgo8L3A+CjxwIHN0eWxlPSJtYXJnaW4t dG9wOjA7bWFyZ2luLWJvdHRvbTowIj5JIGFtIGF0dGFjaGluZyBhIHJlZmVyZW5jZSBhcHBsaWNh dGlvbiB3aGljaCBpcyBkb2VzIE5VTEwgSU8gdmlhIGJkZXZfdXNlci48L3A+CjxwIHN0eWxlPSJt YXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj48YnI+CjwvcD4KPHAgc3R5bGU9Im1hcmdpbi10 b3A6MDttYXJnaW4tYm90dG9tOjAiPlJlZ2FyZGluZyB0aGUgUlBDLCB3ZSBoYXZlIGFuIGltcGxl bWVudGF0aW9uIG9mIGl0LCBhbmQgd2lsbCBiZSBoYXBweSB0byBwdXNoIGl0IHVwc3RyZWFtLjwv cD4KPHAgc3R5bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPkkgYW0gbm90IHN1cmUg dGhhdCB1c2luZyB0aGUgUlBDIGZvciB0aGlzIHR5cGUgb2YgYmRldl91c2VyIG5hbWVzcGFjZXMg aXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggaW4gdGhlIGxvbmcgcnVuLCBzaW5jZSB0aGUgdXNlciBh cHBsaWFuY2UgaXMgdGhlIG9uZSBhZGRpbmcvcmVtb3ZpbmcgbmFtZXNwYWNlcyAobGlrZSBob3Qm bmJzcDtwbHVnZ2luZyBvZiBhIG5ldyBOVk1FIGRldmljZSksCiBzbyBpdCBjYW4ganVzdCBjYWxs IHRoZSAmcXVvdDthZGRfbmFtZXNwYWNlX3RvX3N1YnN5c3RlbSZxdW90OyBpbnRlcmZhY2UgZGly ZWN0bHksIGFuZCBkb2VzIG5vdCBuZWVkIHRvIHVzZSBhbiBSUEMgZm9yIGl0LjwvcD4KPHAgc3R5 bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPjxicj4KPC9wPgo8cCBzdHlsZT0ibWFy Z2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+VGhhbmtzLDwvcD4KPHAgc3R5bGU9Im1hcmdpbi10 b3A6MDttYXJnaW4tYm90dG9tOjAiPlNoYWhhcjwvcD4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgo= --===============6132628794945574165== Content-Type: text/x-csrc MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="nvmf_null_tgt.c" LyotCiAqICAgQlNEIExJQ0VOU0UKICoKICogICBDb3B5cmlnaHQgKGMpIEludGVsIENvcnBvcmF0 aW9uLgogKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqICAgUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqICAgbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCiAqICAgYXJlIG1ldDoKICoKICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogKiAg ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAogKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICogICAgICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogKiAgICAgICBkaXN0cmli dXRpb24uCiAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9y IHRoZSBuYW1lcyBvZiBpdHMKICogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAqICAgICAgIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogICBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O VFJJQlVUT1JTCiAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKICogICBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI VAogKiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAogKiAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKICogICBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKICogICBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkKICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAqICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAqICAgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KICovCgojaW5jbHVkZSA8c3Bkay9zdGRpbmMuaD4KI2luY2x1ZGUgPHNwZGsvZW52Lmg+ CiNpbmNsdWRlIDxzcGRrL2V2ZW50Lmg+CiNpbmNsdWRlIDxzcGRrL2xvZy5oPgojaW5jbHVkZSA8 c3Bkay9udm1mLmg+CiNpbmNsdWRlIDxzcGRrL2JkZXYuaD4KI2luY2x1ZGUgPGFwcC9udm1mX3Rn dC9udm1mX3RndC5oPgojaW5jbHVkZSAiLi4vLi4vL2xpYi9iZGV2L3VzZXIvYmxvY2tkZXZfdXNl ci5oIgojaW5jbHVkZSA8bGltaXRzLmg+CgojZGVmaW5lIE5WTUZfTlVMTF9UR1RfTlVNX0lPUyAo NjQgKiAxMDI0KQojZGVmaW5lIE5WTUZfTlVMTF9UR1RfSU9fUklOR19TSVpFIChOVk1GX05VTExf VEdUX05VTV9JT1MpCiNkZWZpbmUgTlZNRl9OVUxMX1RHVF9JT19QT09MX0NBQ0hFX1NJWkUgKDY0 KQojZGVmaW5lIE5WTUZfTlVMTF9UR1RfSEFORExFX1JFUVVFU1RfQkFUQ0ggKDgpCgojZGVmaW5l IE5WTUZfTlVMTF9UR1RfREVGQVVMVF9OUU4gIm5xbi4yMDE2LTA2LmlvLnNwZGs6Y25vZGUxIgoj ZGVmaW5lIE1BWF9DT05GX0ZJTEVfTEVOICgyMDQ4KQoKY2hhciBjb25mX2ZpbGVfdGVtcGxhdGVb XSA9ICIiCiJbR2xvYmFsXVxuIgoiICBSZWFjdG9yTWFzayAweDJcbiIKIiAgTG9nRmFjaWxpdHkg XCJsb2NhbDdcIlxuIgoiW1VTRVJdXG4iCiIgIFVTRVIgVXNlcjFcbiIKIltOdm1mXVxuIgoiICBN YXhRdWV1ZXNQZXJTZXNzaW9uIDRcbiIKIiAgQWNjZXB0b3JQb2xsUmF0ZSAxMDAwMFxuIgoiW1N1 YnN5c3RlbTFdXG4iCiIgIE5RTiAlc1xuIgoiICBDb3JlIDFcbiIKIiAgTW9kZSBWaXJ0dWFsXG4i CiIgIExpc3RlbiBSRE1BICVzOjEwMjNcbiIKIiAgTmFtZXNwYWNlIFVzZXIxIFxuIgoiICBTTiBT UERLMDAwMDAwMDAwMDAwMDFcbiIKIiI7CgpjaGFyIGNvbmZfZmlsZV90ZW1wX25hbWVbUEFUSF9N QVhdOwpzdHJ1Y3Qgc3Bka19ldmVudCAqZ19zaHV0ZG93bl9ldmVudCA9IE5VTEw7CgpzdHJ1Y3Qg bnZtZl9udWxsX3RndF9yaW5nX2VudHJ5IHsKCXN0cnVjdCBzcGRrX2JkZXZfaW8gKmJkZXZfaW87 CglzdHJ1Y3Qgc3Bka19pb19jaGFubmVsICppb19jaGFubmVsOwp9OwoKc3RydWN0IG52bWZfbnVs bF90Z3RfaW9fdGhyZWFkX2N0eHQgewoJcHRocmVhZF90IHRpZDsKCXN0cnVjdCBzcGRrX3Jpbmcg KmlvX3Jpbmc7CglzdHJ1Y3Qgc3Bka19tZW1wb29sICppb19ldmVudF9wb29sOwoJdWludDMyX3Qg bGNvcmU7Cgl2b2xhdGlsZSBib29sIGlvX3RocmVhZF9ydW47Cn07CgpzdHJ1Y3QgbnZtZl9udWxs X3RndF9hcHAgewoJc3RydWN0IHNwZGtfYXBwX29wdHMgb3B0czsKCXN0cnVjdCBudm1mX251bGxf dGd0X2lvX3RocmVhZF9jdHh0IHRocmVhZF9jdHh0OwoJY2hhciAqbGlzdGVuZXJfaXA7CgljaGFy ICpucW47Cn07CgpzdHJ1Y3QgbnZtZl9udWxsX3RndF9pb190aHJlYWRfY3R4dCAqYXBwX3RocmVh ZF9jdHh0OwoKc3RhdGljIHZvaWQgX19zaHV0ZG93bl9ldmVudF9jYih2b2lkICphcmcxLCB2b2lk ICphcmcyKQp7CglzcGRrX252bWZfc2h1dGRvd25fY2IoKTsKfQoKLyogVGhpcyBpcyBleGFjdGx5 IHdoYXQgbGliL2V2ZW50L2FwcCB3b3VsZCBkbywgYnV0IGl0IGFsbG93cyB0aGUgdXNlciB0byBj YXRjaAogKiBpdHMgb3duIHNpZ25hbHMsIGJ1dCBhbHNvIGlzc3VlIHRoZSBzcGRrIHNodXRkb3du IGV2ZW50ICovCnN0YXRpYyB2b2lkIG52bWZfbnVsbF90Z3Rfc2lnbmFsX2hhbmRsZXIoaW50IHNp Z251bSkKewoJU1BES19OT1RJQ0VMT0coIlNodXR0aW5nIGRvd24gc3Bka1xuIik7CglpZiAoZ19z aHV0ZG93bl9ldmVudCkgewoJCXNwZGtfZXZlbnRfY2FsbChnX3NodXRkb3duX2V2ZW50KTsKCQln X3NodXRkb3duX2V2ZW50ID0gTlVMTDsKCX0KfQoKc3RhdGljIHZvaWQgbnZtZl9udWxsX3RndF9n ZXRfY29uZl9maWxlKHN0cnVjdCBudm1mX251bGxfdGd0X2FwcCAqYXBwKQp7CgljaGFyIHRlbXBs YXRlW10gPSAiL3RtcC9zcGRrX2NvbmZfZmlsZVhYWFhYWCI7CgljaGFyIGNvbmZfZmlsZV9jb250 ZW50c1tNQVhfQ09ORl9GSUxFX0xFTl07CglpbnQgZmQ7CglpbnQgcmM7CgoJc25wcmludGYoY29u Zl9maWxlX2NvbnRlbnRzLCBNQVhfQ09ORl9GSUxFX0xFTiwgY29uZl9maWxlX3RlbXBsYXRlLAoJ CWFwcC0+bnFuLCBhcHAtPmxpc3RlbmVyX2lwKTsKCXN0cmNweShjb25mX2ZpbGVfdGVtcF9uYW1l LCB0ZW1wbGF0ZSk7CglmZCA9IG1rc3RlbXAoY29uZl9maWxlX3RlbXBfbmFtZSk7CglyYyA9IHdy aXRlKGZkLCBjb25mX2ZpbGVfY29udGVudHMsIHN0cmxlbihjb25mX2ZpbGVfY29udGVudHMpKTsK CWFzc2VydChyYyA+IDApOwoJY2xvc2UoZmQpOwoKCWFwcC0+b3B0cy5jb25maWdfZmlsZSA9IGNv bmZfZmlsZV90ZW1wX25hbWU7Cn0KCnN0YXRpYyB2b2lkIG52bWZfbnVsbF90Z3RfcmVtb3ZlX2Nv bmZfZmlsZShzdHJ1Y3Qgc3Bka19hcHBfb3B0cyAqb3B0cykKewoJdW5saW5rKGNvbmZfZmlsZV90 ZW1wX25hbWUpOwp9CgovKiBGb3IgbXVsdGlwbGUgaGFuZGxlcnMsIHdlIGl0ZXJhdGUgYmV0d2Vl biB0aGUgcmVjZWl2ZXJzICovCnN0YXRpYyBzdHJ1Y3QgbnZtZl9udWxsX3RndF9pb190aHJlYWRf Y3R4dCAqbnZtZl9udWxsX3RndF9jaG9vc2VfaGFuZGxlcih2b2lkKQp7CglyZXR1cm4gYXBwX3Ro cmVhZF9jdHh0Owp9CgpzdGF0aWMgdm9pZCBudm1mX251bGxfdGd0X3NldF9kZWZhdWx0X29wdHMo c3RydWN0IHNwZGtfYXBwX29wdHMgKm9wdHMpCnsKCXNwZGtfYXBwX29wdHNfaW5pdChvcHRzKTsK CW9wdHMtPm5hbWUgPSAibnZtZl9udWxsX3RndCI7CglvcHRzLT5tYXhfZGVsYXlfdXMgPSAxMDAw OwoKCXJldHVybjsKfQoKc3RhdGljIHZvaWQgbnZtZl9udWxsX3RndF9oYW5kbGVfcmVxdWVzdF9i YXRjaChzdHJ1Y3QgbnZtZl9udWxsX3RndF9pb190aHJlYWRfY3R4dCAqY3R4dCkKewoJaW50IGNv dW50OwoJdm9pZCAqZXZlbnRzW05WTUZfTlVMTF9UR1RfSEFORExFX1JFUVVFU1RfQkFUQ0hdOwoJ c3RydWN0IG52bWZfbnVsbF90Z3RfcmluZ19lbnRyeSAqaW9fZXZlbnQ7CglpbnQgaTsKCgljb3Vu dCA9IHNwZGtfcmluZ19kZXF1ZXVlKGN0eHQtPmlvX3JpbmcsIGV2ZW50cywgMSk7CglpZiAoY291 bnQgPT0gMCkgewoJCXJldHVybjsKCX0KCglhc3NlcnQoY291bnQgPCBOVk1GX05VTExfVEdUX0hB TkRMRV9SRVFVRVNUX0JBVENIKTsKCglmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewoJCWlv X2V2ZW50ID0gZXZlbnRzW2ldOwoJCWJsb2NrZGV2X3VzZXJfc3VibWl0X2NvbXBsZXRpb24oaW9f ZXZlbnQtPmJkZXZfaW8pOwoJCXNwZGtfbWVtcG9vbF9wdXQoY3R4dC0+aW9fZXZlbnRfcG9vbCwg aW9fZXZlbnQpOwoJfQp9CgpzdGF0aWMgdm9pZCBudm1mX251bGxfdGd0X3N1Ym1pdF9yZXF1ZXN0 KHN0cnVjdCBzcGRrX2lvX2NoYW5uZWwgKmlvX2NoYW5uZWwsCglzdHJ1Y3Qgc3Bka19iZGV2X2lv ICpiZGV2X2lvKQp7CglpbnQgbnVtX2VucXVldWVkOwoJc3RydWN0IG52bWZfbnVsbF90Z3Rfcmlu Z19lbnRyeSAqaW9fZXZlbnQ7CglzdHJ1Y3QgbnZtZl9udWxsX3RndF9pb190aHJlYWRfY3R4dCAq aGFuZGxlcl90aHJlYWRfY3R4dDsKCgloYW5kbGVyX3RocmVhZF9jdHh0ID0gbnZtZl9udWxsX3Rn dF9jaG9vc2VfaGFuZGxlcigpOwoKCWlvX2V2ZW50ID0gc3Bka19tZW1wb29sX2dldChoYW5kbGVy X3RocmVhZF9jdHh0LT5pb19ldmVudF9wb29sKTsKCWlvX2V2ZW50LT5iZGV2X2lvID0gYmRldl9p bzsKCWlvX2V2ZW50LT5pb19jaGFubmVsID0gaW9fY2hhbm5lbDsKCgludW1fZW5xdWV1ZWQgPSBz cGRrX3JpbmdfZW5xdWV1ZShoYW5kbGVyX3RocmVhZF9jdHh0LT5pb19yaW5nLAoJCSh2b2lkICoq KSZpb19ldmVudCwgMSk7Cglhc3NlcnQobnVtX2VucXVldWVkID09IDEpOwp9CgpzdGF0aWMgdm9p ZCAqIG52bWZfbnVsbF90Z3RfaW9fdGhyZWFkX2ZuKHZvaWQgKmFyZykKewoJc3RydWN0IG52bWZf bnVsbF90Z3RfaW9fdGhyZWFkX2N0eHQgKmN0eHQgPSBhcmc7CglpbnQgcmM7CgljcHVfc2V0X3Qg Y3B1X3NldDsKICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CgogICAgICAgIHBhcmFt LnNjaGVkX3ByaW9yaXR5ID0gc2NoZWRfZ2V0X3ByaW9yaXR5X21heChTQ0hFRF9SUik7CiAgICAg ICAgYXNzZXJ0KHBhcmFtLnNjaGVkX3ByaW9yaXR5ICE9IC0xKTsKICAgICAgICByYyA9IHB0aHJl YWRfc2V0c2NoZWRwYXJhbShjdHh0LT50aWQsIFNDSEVEX1JSLCAmcGFyYW0pOwoJYXNzZXJ0KHJj ID09IDApOwoKCUNQVV9TRVQoY3R4dC0+bGNvcmUsICZjcHVfc2V0KTsKCXJjID0gcHRocmVhZF9z ZXRhZmZpbml0eV9ucChjdHh0LT50aWQsIHNpemVvZihjcHVfc2V0X3QpLCAmY3B1X3NldCk7CgoJ U1BES19OT1RJQ0VMT0coIlN0YXJ0aW5nIElPIGhhbmRsZXJcbiIpOwoKCXdoaWxlIChjdHh0LT5p b190aHJlYWRfcnVuKSB7CgkJbnZtZl9udWxsX3RndF9oYW5kbGVfcmVxdWVzdF9iYXRjaChjdHh0 KTsKCX0KCglTUERLX05PVElDRUxPRygiU3RvcHBpbmcgSU8gaGFuZGxlclxuIik7CgoJcmV0dXJu IE5VTEw7Cn0KCnN0YXRpYyB2b2lkIG52bWZfbnVsbF90Z3RfaW9fdGhyZWFkX3J1bihzdHJ1Y3Qg bnZtZl9udWxsX3RndF9pb190aHJlYWRfY3R4dCAqY3R4dCkKewoJaW50IHJjOwoKCWN0eHQtPmlv X3RocmVhZF9ydW4gPSB0cnVlOwoJY3R4dC0+bGNvcmUgPSAyOyAvKiBUT0RPIC0gc2V0IHRoaXMg ZnJvbSB1c2VyIGlucHV0ICovCglyYyA9IHB0aHJlYWRfY3JlYXRlKCZjdHh0LT50aWQsIE5VTEws IG52bWZfbnVsbF90Z3RfaW9fdGhyZWFkX2ZuLAoJCWN0eHQpOwoJYXNzZXJ0KHJjID09IDApOwp9 CgpzdGF0aWMgdm9pZCBudm1mX251bGxfdGd0X2lvX3RocmVhZF9zdG9wKHN0cnVjdCBudm1mX251 bGxfdGd0X2lvX3RocmVhZF9jdHh0ICpjdHh0KQp7Cgl2b2lkICpyZXM7CglpbnQgcmM7CgoJY3R4 dC0+aW9fdGhyZWFkX3J1biA9IGZhbHNlOwoJcmMgPSBwdGhyZWFkX2pvaW4oY3R4dC0+dGlkLCAm cmVzKTsKCWFzc2VydChyYyA9PSAwKTsKfQoKc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKewoJcHJp bnRmKCJudm1mX251bGxfdGd0IFtvcHRpb25zXVxuIik7CglwcmludGYoIm9wdGlvbnM6XG4iKTsK CXByaW50ZigiIC1uIG5xbiAgLSB0YXJnZXQgbnFuIChkZWZhdWx0ICVzKVxuIiwgTlZNRl9OVUxM X1RHVF9ERUZBVUxUX05RTik7CglwcmludGYoIiAtaSBJUCAtIGxpc3RlbmVyIElQIChyZXF1aXJl ZClcbiIpOwp9CgpzdGF0aWMgdm9pZCBudm1mX251bGxfdGd0X2NsaShzdHJ1Y3QgbnZtZl9udWxs X3RndF9hcHAgKmFwcCwgaW50IGFyZ2MsCgljaGFyICphcmd2W10pCnsKCWludCBjaDsKCglhcHAt Pm5xbiA9IE5WTUZfTlVMTF9UR1RfREVGQVVMVF9OUU47CgoJd2hpbGUgKChjaCA9IGdldG9wdChh cmdjLCBhcmd2LCAiaTpuOkgiKSkgIT0gLTEpIHsKCQlzd2l0Y2ggKGNoKSB7CgkJY2FzZSAnaSc6 CgkJCWFwcC0+bGlzdGVuZXJfaXAgPSBvcHRhcmc7CgkJCWJyZWFrOwoJCWNhc2UgJ24nOgoJCQlh cHAtPm5xbiA9IG9wdGFyZzsKCQkJYnJlYWs7CgkJY2FzZSAnaCc6CgkJZGVmYXVsdDoKCQkJdXNh Z2UoKTsKCQkJZXhpdChFWElUX1NVQ0NFU1MpOwoJCX0KCX0KCglpZiAoYXBwLT5saXN0ZW5lcl9p cCA9PSBOVUxMKSB7CgkJcHJpbnRmKCJNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50IElQICgtaSlc biIpOwoJCXByaW50ZigiXG4iKTsKCQl1c2FnZSgpOwoJfQoKCVNQREtfTk9USUNFTE9HKCJVc2lu ZyBucW4gJXMgSVAgJXNcbiIsIGFwcC0+bnFuLCBhcHAtPmxpc3RlbmVyX2lwKTsKfQoKc3RhdGlj IHZvaWQgbnZtZl9zaHV0ZG93bl90ZXN0X3NldHVwX2NiKHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIp CnsKCVNQREtfTk9USUNFTE9HKCJOVk1GIHNodXRkb3duIHRlc3QgcmVhZHkgdG8gcm9sbCFcbiIp Owp9CgpzdGF0aWMgdm9pZCBudm1mX251bGxfdGd0X3NldHVwKHN0cnVjdCBudm1mX251bGxfdGd0 X2FwcCAqYXBwKQp7CglzdHJ1Y3Qgc3Bka191c2VyX2ZuX3RhYmxlIHNwZGtfdXNlcl9rYWxfZm5f dGFibGUgPSB7CgkJLnN1Ym1pdF9yZXF1ZXN0CT0gbnZtZl9udWxsX3RndF9zdWJtaXRfcmVxdWVz dCwKCX07CglpbnQgcmM7CgoJcmMgPSBzaWduYWwoU0lHSU5ULCBudm1mX251bGxfdGd0X3NpZ25h bF9oYW5kbGVyKTsKCWFzc2VydChyYyA9PSAwKTsKCXJjID0gc2lnbmFsKFNJR1RFUk0sIG52bWZf bnVsbF90Z3Rfc2lnbmFsX2hhbmRsZXIpOwoJYXNzZXJ0KHJjID09IDApOwoKCXNwZGtfbG9nX3Nl dF9wcmludF9sZXZlbChTUERLX0xPR19OT1RJQ0UpOwoJbnZtZl9udWxsX3RndF9zZXRfZGVmYXVs dF9vcHRzKCZhcHAtPm9wdHMpOwoJbnZtZl9udWxsX3RndF9nZXRfY29uZl9maWxlKGFwcCk7CgoJ c3Bka19hcHBfaW5pdCgmYXBwLT5vcHRzKTsKCglibG9ja2Rldl91c2VyX3JlZ2lzdGVyX2ZuX3Rh YmxlKCZzcGRrX3VzZXJfa2FsX2ZuX3RhYmxlKTsKCglhcHAtPnRocmVhZF9jdHh0LmlvX3Jpbmcg PSBzcGRrX3JpbmdfY3JlYXRlKFNQREtfUklOR19UWVBFX1NQX1NDLAoJCU5WTUZfTlVMTF9UR1Rf SU9fUklOR19TSVpFLAoJCVNQREtfRU5WX1NPQ0tFVF9JRF9BTlkpOwoJYXBwLT50aHJlYWRfY3R4 dC5pb19ldmVudF9wb29sID0gc3Bka19tZW1wb29sX2NyZWF0ZSgibnVsbF90Z3RfaW9fZXZlbnQi LAoJCU5WTUZfTlVMTF9UR1RfTlVNX0lPUywgc2l6ZW9mKHN0cnVjdCBudm1mX251bGxfdGd0X3Jp bmdfZW50cnkpLAoJCU5WTUZfTlVMTF9UR1RfSU9fUE9PTF9DQUNIRV9TSVpFLAoJCVNQREtfRU5W X1NPQ0tFVF9JRF9BTlkpOwoJYXBwX3RocmVhZF9jdHh0ID0gJmFwcC0+dGhyZWFkX2N0eHQ7CgoJ Z19zaHV0ZG93bl9ldmVudCA9IHNwZGtfZXZlbnRfYWxsb2NhdGUoc3Bka19lbnZfZ2V0X2N1cnJl bnRfY29yZSgpLAoJCV9fc2h1dGRvd25fZXZlbnRfY2IsIE5VTEwsIE5VTEwpOwoKCXNwZGtfYXBw X3N1YnN5c3RlbV9pbml0KG52bWZfc2h1dGRvd25fdGVzdF9zZXR1cF9jYik7Cn0KCnN0YXRpYyB2 b2lkIG52bWZfbnVsbF90Z3RfcnVuKHN0cnVjdCBudm1mX251bGxfdGd0X2FwcCAqYXBwKQp7Cglz dHJ1Y3Qgc3Bka19ldmVudCAqYXBwX3N0YXJ0X2V2ZW50OwoKCW52bWZfbnVsbF90Z3RfaW9fdGhy ZWFkX3J1bigmYXBwLT50aHJlYWRfY3R4dCk7CglhcHBfc3RhcnRfZXZlbnQgPSBzcGRrX2V2ZW50 X2FsbG9jYXRlKHNwZGtfZW52X2dldF9jdXJyZW50X2NvcmUoKSwKCQlzcGRrX252bWZfc3RhcnR1 cCwgTlVMTCwgTlVMTCk7CglzcGRrX2V2ZW50X2NhbGwoYXBwX3N0YXJ0X2V2ZW50KTsKCglzcGRr X3JlYWN0b3JzX3N0YXJ0KCk7CgoJbnZtZl9udWxsX3RndF9pb190aHJlYWRfc3RvcCgmYXBwLT50 aHJlYWRfY3R4dCk7Cn0KCnN0YXRpYyB2b2lkIG52bWZfbnVsbF90Z3RfdGVhcmRvd24oc3RydWN0 IG52bWZfbnVsbF90Z3RfYXBwICphcHApCnsKCXNwZGtfcmluZ19mcmVlKGFwcC0+dGhyZWFkX2N0 eHQuaW9fcmluZyk7CglzcGRrX21lbXBvb2xfZnJlZShhcHAtPnRocmVhZF9jdHh0LmlvX2V2ZW50 X3Bvb2wpOwoJbnZtZl9udWxsX3RndF9yZW1vdmVfY29uZl9maWxlKCZhcHAtPm9wdHMpOwp9Cgpp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCXN0cnVjdCBudm1mX251bGxfdGd0X2Fw cCBhcHAgOwoKCW1lbXNldCgmYXBwLCAwLCBzaXplb2Yoc3RydWN0IG52bWZfbnVsbF90Z3RfYXBw KSk7CgoJbnZtZl9udWxsX3RndF9jbGkoJmFwcCwgYXJnYywgYXJndik7Cgludm1mX251bGxfdGd0 X3NldHVwKCZhcHApOwoJbnZtZl9udWxsX3RndF9ydW4oJmFwcCk7IC8qIFN0b3BwZWQgYnkgc2ln bmFsIGhhbmRsZXIgKi8KCW52bWZfbnVsbF90Z3RfdGVhcmRvd24oJmFwcCk7CgoJcmV0dXJuIDA7 Cn0K --===============6132628794945574165==--