From mboxrd@z Thu Jan 1 00:00:00 1970 From: Changli Gao Subject: Re: [PATCH] ifb: add multi-queue support Date: Wed, 11 Nov 2009 14:30:37 +0800 Message-ID: <412e6f7f0911102230t40cc125bq6e9311cd034e864d@mail.gmail.com> References: <4AF924A5.1050303@gmail.com> <4AF95174.3060104@trash.net> <412e6f7f0911100414w7b6f45aap39f6568b7af2c1a7@mail.gmail.com> <4AF95A3D.5060602@trash.net> <412e6f7f0911100437g2759eb6dg509af4edb8848291@mail.gmail.com> <4AF96055.90509@trash.net> <412e6f7f0911100506r6a922b8aoabd359e7e4290ebe@mail.gmail.com> <4AF96BF1.5070902@gmail.com> <412e6f7f0911100549q68a57ba7s83b11be3a77323a2@mail.gmail.com> <20091110084516.15659fcc@nehalam> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=00504502cb24a0476b04781290a6 Cc: Eric Dumazet , Patrick McHardy , "David S. Miller" , netdev@vger.kernel.org, Tom Herbert To: Stephen Hemminger Return-path: Received: from mail-pz0-f188.google.com ([209.85.222.188]:44491 "EHLO mail-pz0-f188.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751964AbZKKGac (ORCPT ); Wed, 11 Nov 2009 01:30:32 -0500 Received: by pzk26 with SMTP id 26so557487pzk.4 for ; Tue, 10 Nov 2009 22:30:38 -0800 (PST) In-Reply-To: <20091110084516.15659fcc@nehalam> Sender: netdev-owner@vger.kernel.org List-ID: --00504502cb24a0476b04781290a6 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Wed, Nov 11, 2009 at 12:45 AM, Stephen Hemminger wrote: > On Tue, 10 Nov 2009 21:49:31 +0800 > Changli Gao wrote: > > > Distro's would find that hard, also it would cause people to forgot binar= y > API compatibility. > Get it. Thanks. The new version of ifb is attached: 1. fixbug: a deadlock. 2. fixbug: statistics data corruption. 3. fixbug: can't work with ip link command. Dear Patrick: The support for specifying the number of TX queues with ip link command is comming soon. I do think the corresponding kernel module parameter is needed for the default option and the ifbs created when module loading, so I preserve it. --=20 Regards=EF=BC=8C Changli Gao(xiaosuo@gmail.com) --00504502cb24a0476b04781290a6 Content-Type: application/octet-stream; name="ifb.c" Content-Disposition: attachment; filename="ifb.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g1vpojai0 LyogZHJpdmVycy9uZXQvaWZiLmM6CgoJVGhlIHB1cnBvc2Ugb2YgdGhpcyBkcml2ZXIgaXMgdG8g cHJvdmlkZSBhIGRldmljZSB0aGF0IGFsbG93cwoJZm9yIHNoYXJpbmcgb2YgcmVzb3VyY2VzOgoK CTEpIHFkaXNjcy9wb2xpY2llcyB0aGF0IGFyZSBwZXIgZGV2aWNlIGFzIG9wcG9zZWQgdG8gc3lz dGVtIHdpZGUuCglpZmIgYWxsb3dzIGZvciBhIGRldmljZSB3aGljaCBjYW4gYmUgcmVkaXJlY3Rl ZCB0byB0aHVzIHByb3ZpZGluZwoJYW4gaW1wcmVzc2lvbiBvZiBzaGFyaW5nLgoKCTIpIEFsbG93 cyBmb3IgcXVldWVpbmcgaW5jb21pbmcgdHJhZmZpYyBmb3Igc2hhcGluZyBpbnN0ZWFkIG9mCglk cm9wcGluZy4KCglUaGUgb3JpZ2luYWwgY29uY2VwdCBpcyBiYXNlZCBvbiB3aGF0IGlzIGtub3du IGFzIHRoZSBJTVEKCWRyaXZlciBpbml0aWFsbHkgd3JpdHRlbiBieSBNYXJ0aW4gRGV2ZXJhLCBs YXRlciByZXdyaXR0ZW4KCWJ5IFBhdHJpY2sgTWNIYXJkeSBhbmQgdGhlbiBtYWludGFpbmVkIGJ5 IEFuZHJlIENvcnJlYS4KCglZb3UgbmVlZCB0aGUgdGMgYWN0aW9uICBtaXJyb3Igb3IgcmVkaXJl Y3QgdG8gZmVlZCB0aGlzIGRldmljZQogICAgICAgCXBhY2tldHMuCgoJVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgoJbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKCWFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgoJ MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K CiAgCUF1dGhvcnM6CUphbWFsIEhhZGkgU2FsaW0gKDIwMDUpCgoqLwoKCiNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgojaW5jbHVkZSA8bGludXgvbmV0 ZGV2aWNlLmg+CiNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgojaW5jbHVkZSA8bGludXgv aW5pdC5oPgojaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KI2luY2x1ZGUgPGxpbnV4L3dh aXQuaD4KI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+ CiNpbmNsdWRlIDxsaW51eC9pcC5oPgojaW5jbHVkZSA8bGludXgvaXB2Ni5oPgojaW5jbHVkZSA8 bmV0L2lwLmg+CiNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CiNpbmNsdWRlIDxuZXQvbmV0X25h bWVzcGFjZS5oPgoKI2RlZmluZSBUWF9RX0xJTUlUICAgIDMyCgpzdHJ1Y3QgaWZiX3ByaXZhdGVf cSB7CglzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwoJc3RydWN0IHNrX2J1ZmZfaGVhZAlycTsKCXN0 cnVjdCBza19idWZmX2hlYWQJdHE7Cgl3YWl0X3F1ZXVlX2hlYWRfdAl3cTsKCXN0cnVjdCB0YXNr X3N0cnVjdAkqdGFzazsKCXVuc2lnbmVkIGxvbmcJCXJ4X3BhY2tldHM7Cgl1bnNpZ25lZCBsb25n CQlyeF9ieXRlczsKCXVuc2lnbmVkIGxvbmcJCXJ4X2Ryb3BwZWQ7Cn0gX19fX2NhY2hlbGluZV9h bGlnbmVkX2luX3NtcDsKCnN0cnVjdCBpZmJfcHJpdmF0ZSB7CglzdHJ1Y3QgaWZiX3ByaXZhdGVf cQkqcHE7Cn07CgovKiBOdW1iZXIgb2YgaWZiIGRldmljZXMgdG8gYmUgc2V0IHVwIGJ5IHRoaXMg bW9kdWxlLiAqLwpzdGF0aWMgaW50IG51bWlmYnMgPSAyOwptb2R1bGVfcGFyYW0obnVtaWZicywg aW50LCAwNDQ0KTsKTU9EVUxFX1BBUk1fREVTQyhudW1pZmJzLCAiTnVtYmVyIG9mIGlmYiBkZXZp Y2VzIik7CgovKiBOdW1iZXIgb2YgVFggcXVldWVzIHBlciBpZmIgKi8Kc3RhdGljIGludCBudW10 eHFzID0gMTsKbW9kdWxlX3BhcmFtKG51bXR4cXMsIGludCwgMDQ0NCk7Ck1PRFVMRV9QQVJNX0RF U0MobnVtdHhxcywgIk51bWJlciBvZiBUWCBxdWV1ZXMgcGVyIGlmYiIpOwoKc3RhdGljIGludCBp ZmJfdGhyZWFkKHZvaWQgKnByaXYpCnsKCXN0cnVjdCBpZmJfcHJpdmF0ZV9xICpwcSA9IHByaXY7 CglzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHEtPmRldjsKCWludCBudW0gPSBwcSAtICgoc3Ry dWN0IGlmYl9wcml2YXRlICopbmV0ZGV2X3ByaXYoZGV2KSktPnBxOwoJc3RydWN0IG5ldGRldl9x dWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIG51bSk7CglzdHJ1Y3Qgc2tfYnVm ZiAqc2tiOwoJREVGSU5FX1dBSVQod2FpdCk7CgoJd2hpbGUgKDEpIHsKCQkvKiBtb3ZlIHNrYiBm cm9tIHJxIHRvIHRxICovCgkJd2hpbGUgKDEpIHsKCQkJcHJlcGFyZV90b193YWl0KCZwcS0+d3Es ICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CgkJCV9fbmV0aWZfdHhfbG9ja19iaCh0eHEp OwoJCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZwcS0+cnEpKSAhPSBOVUxMKQoJCQkJc2ti X3F1ZXVlX3RhaWwoJnBxLT50cSwgc2tiKTsKCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2 KSkKCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKCQkJX19uZXRpZl90eF91bmxvY2tfYmgodHhx KTsKCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhc2tiX3F1ZXVlX2VtcHR5KCZwcS0+ dHEpKQoJCQkJYnJlYWs7CgkJCXNjaGVkdWxlKCk7CgkJfQoJCWZpbmlzaF93YWl0KCZwcS0+d3Es ICZ3YWl0KTsKCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQoJCQlicmVhazsKCQlpZiAobmVl ZF9yZXNjaGVkKCkpCgkJCXNjaGVkdWxlKCk7CgoJCS8qIHRyYW5zZmVyIHBhY2tldHMgKi8KCQl3 aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZwcS0+dHEpKSAhPSBOVUxMKSB7CgkJCXUzMiBmcm9t ID0gR19UQ19GUk9NKHNrYi0+dGNfdmVyZCk7CgkKCQkJc2tiLT50Y192ZXJkID0gMDsKCQkJc2ti LT50Y192ZXJkID0gU0VUX1RDX05DTFMoc2tiLT50Y192ZXJkKTsKCQkJdHhxLT50eF9wYWNrZXRz Kys7CgkJCXR4cS0+dHhfYnl0ZXMgKz1za2ItPmxlbjsKCgkJCXJjdV9yZWFkX2xvY2soKTsKCQkJ c2tiLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdSgmaW5pdF9uZXQsIHNrYi0+aWlmKTsKCQkJ aWYgKCFza2ItPmRldikgewoJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CgkJCQlkZXZfa2ZyZWVfc2ti KHNrYik7CgkJCQl0eHEtPnR4X2Ryb3BwZWQrKzsKCQkJCWJyZWFrOwoJCQl9CgkJCXJjdV9yZWFk X3VubG9jaygpOwoJCQlza2ItPmlpZiA9IGRldi0+aWZpbmRleDsKCQoJCQlpZiAoZnJvbSAmIEFU X0VHUkVTUykgewoJCQkJZGV2X3F1ZXVlX3htaXQoc2tiKTsKCQkJfSBlbHNlIGlmIChmcm9tICYg QVRfSU5HUkVTUykgewoJCQkJc2tiX3B1bGwoc2tiLCBza2ItPmRldi0+aGFyZF9oZWFkZXJfbGVu KTsKCQkJCW5ldGlmX3J4X25pKHNrYik7CgkJCX0gZWxzZQoJCQkJQlVHKCk7CgkJfQoJfQoKCXJl dHVybiAwOwp9CgpzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogaWZiX2dldF9zdGF0cyhzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KQp7CglzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2 LT5zdGF0czsKCXN0cnVjdCBpZmJfcHJpdmF0ZSAqZHAgPSBuZXRkZXZfcHJpdihkZXYpOwoJc3Ry dWN0IGlmYl9wcml2YXRlX3EgKnBxID0gZHAtPnBxOwoJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhx OwoJaW50IGk7Cgl1bnNpZ25lZCBsb25nIHJ4X3BhY2tldHMgPSAwLCByeF9ieXRlcyA9IDAsIHJ4 X2Ryb3BwZWQgPSAwOwoJdW5zaWduZWQgbG9uZyB0eF9wYWNrZXRzID0gMCwgdHhfYnl0ZXMgPSAw LCB0eF9kcm9wcGVkID0gMDsKCglmb3IgKGkgPSAwOyBpIDwgZGV2LT5yZWFsX251bV90eF9xdWV1 ZXM7IGkrKykgewoJCXJ4X3BhY2tldHMgKz0gcHFbaV0ucnhfcGFja2V0czsKCQlyeF9ieXRlcyAr PSBwcVtpXS5yeF9ieXRlczsKCQlyeF9kcm9wcGVkICs9IHBxW2ldLnJ4X2Ryb3BwZWQ7CgkJdHhx ID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOwoJCXR4X3BhY2tldHMgKz0gdHhxLT50eF9w YWNrZXRzOwoJCXR4X2J5dGVzICs9IHR4cS0+dHhfYnl0ZXM7CgkJdHhfZHJvcHBlZCArPSB0eHEt PnR4X2Ryb3BwZWQ7Cgl9CgoJc3RhdHMtPnJ4X3BhY2tldHMgPSByeF9wYWNrZXRzOwoJc3RhdHMt PnJ4X2J5dGVzID0gcnhfYnl0ZXM7CglzdGF0cy0+cnhfZHJvcHBlZCA9IHJ4X2Ryb3BwZWQ7Cglz dGF0cy0+dHhfcGFja2V0cyA9IHR4X3BhY2tldHM7CglzdGF0cy0+dHhfYnl0ZXMgPSB0eF9ieXRl czsKCXN0YXRzLT50eF9kcm9wcGVkID0gdHhfZHJvcHBlZDsKCglyZXR1cm4gc3RhdHM7Cn0KCnN0 YXRpYyBuZXRkZXZfdHhfdCBpZmJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2KQp7Cgl1MzIgZnJvbSA9IEdfVENfRlJPTShza2ItPnRjX3ZlcmQpOwoJaW50 IG51bSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwoJc3RydWN0IGlmYl9wcml2YXRlICpk cCA9IG5ldGRldl9wcml2KGRldik7CglzdHJ1Y3QgaWZiX3ByaXZhdGVfcSAqcHEgPSBkcC0+cHEg KyBudW07CglzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRl diwgbnVtKTsKCglwcS0+cnhfcGFja2V0cysrOwoJcHEtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwoK CWlmICghKGZyb20gJiAoQVRfSU5HUkVTU3xBVF9FR1JFU1MpKSB8fCAhc2tiLT5paWYpIHsKCQlk ZXZfa2ZyZWVfc2tiKHNrYik7CgkJcHEtPnJ4X2Ryb3BwZWQrKzsKCQlyZXR1cm4gTkVUREVWX1RY X09LOwoJfQoKCXR4cS0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwoJc2tiX3F1ZXVlX3RhaWwoJnBx LT5ycSwgc2tiKTsKCWlmIChza2JfcXVldWVfbGVuKCZwcS0+cnEpID49IGRldi0+dHhfcXVldWVf bGVuKQoJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKCWlmIChza2JfcXVldWVfbGVuKCZwcS0+cnEp ID09IDEpCgkJd2FrZV91cCgmcHEtPndxKTsKCglyZXR1cm4gTkVUREVWX1RYX09LOwp9CgpzdGF0 aWMgaW50IGlmYl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CglzdHJ1Y3QgaWZiX3By aXZhdGUgKmRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKCXN0cnVjdCBpZmJfcHJpdmF0ZV9xICpwcSA9 IGRwLT5wcTsKCWludCBpOwoKCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKCWZvciAoaSA9IDA7IGkg PCBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsgaSsrKSB7CgkJa3RocmVhZF9zdG9wKHBxW2ldLnRh c2spOwoJCXNrYl9xdWV1ZV9wdXJnZSgmcHFbaV0udHEpOwoJCXNrYl9xdWV1ZV9wdXJnZSgmcHFb aV0ucnEpOwoJfQoKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IGlmYl9vcGVuKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpCnsKCXN0cnVjdCBpZmJfcHJpdmF0ZSAqZHAgPSBuZXRkZXZfcHJpdihkZXYp OwoJc3RydWN0IGlmYl9wcml2YXRlX3EgKnBxID0gZHAtPnBxOwoJaW50IGk7CgkKCWZvciAoaSA9 IDA7IGkgPCBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsgaSsrKSB7CgkJcHFbaV0udGFzayA9IGt0 aHJlYWRfcnVuKGlmYl90aHJlYWQsICZwcVtpXSwgIiVzLyVkIiwgZGV2LT5uYW1lLAoJCQkJCSBp KTsKCQlpZiAoSVNfRVJSKHBxW2ldLnRhc2spKSB7CgkJCWludCBlcnIgPSBQVFJfRVJSKHBxW2ld LnRhc2spOwoJCQl3aGlsZSAoLS1pID49IDApCgkJCQlrdGhyZWFkX3N0b3AocHFbaV0udGFzayk7 CgkJCXJldHVybiBlcnI7CgkJfQoJfQoJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKCglyZXR1cm4g MDsKfQoKc3RhdGljIHUzMiBzaW1wbGVfdHhfaGFzaHJuZDsKCnN0YXRpYyB1MTYgaWZiX3NlbGVj dF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7Cgl1 MzIgYWRkcjEsIGFkZHIyOwoJdTMyIGhhc2gsIGlobDsKCXVuaW9uIHsKCQl1MTYgaW4xNlsyXTsK CQl1MzIgaW4zMjsKCX0gcG9ydHM7Cgl1OCBpcF9wcm90bzsKCglpZiAoKGhhc2ggPSBza2Jfcnhf cXVldWVfcmVjb3JkZWQoc2tiKSkpIHsKCQl3aGlsZSAoaGFzaCA+PSBkZXYtPnJlYWxfbnVtX3R4 X3F1ZXVlcykKCQkJaGFzaCAtPSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKCQlyZXR1cm4gaGFz aDsKCX0KCglzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKCWNhc2UgX19jb25zdGFudF9odG9ucyhF VEhfUF9JUCk6CgkJaWYgKCEoaXBfaGRyKHNrYiktPmZyYWdfb2ZmICYgaHRvbnMoSVBfTUYgfCBJ UF9PRkZTRVQpKSkKCQkJaXBfcHJvdG8gPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7CgkJZWxzZQoJ CQlpcF9wcm90byA9IDA7CgkJYWRkcjEgPSBpcF9oZHIoc2tiKS0+c2FkZHI7CgkJYWRkcjIgPSBp cF9oZHIoc2tiKS0+ZGFkZHI7CgkJaWhsID0gaXBfaGRyKHNrYiktPmlobCA8PCAyOwoJCWJyZWFr OwoJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgoJCWlwX3Byb3RvID0gaXB2Nl9o ZHIoc2tiKS0+bmV4dGhkcjsKCQlhZGRyMSA9IGlwdjZfaGRyKHNrYiktPnNhZGRyLnM2X2FkZHIz MlszXTsKCQlhZGRyMiA9IGlwdjZfaGRyKHNrYiktPmRhZGRyLnM2X2FkZHIzMlszXTsKCQlpaGwg PSAxMDsKCQlicmVhazsKCWRlZmF1bHQ6CgkJcmV0dXJuIDA7Cgl9CglpZiAoYWRkcjEgPiBhZGRy MikKCQlzd2FwKGFkZHIxLCBhZGRyMik7CgoJc3dpdGNoIChpcF9wcm90bykgewoJY2FzZSBJUFBS T1RPX1RDUDoKCWNhc2UgSVBQUk9UT19VRFA6CgljYXNlIElQUFJPVE9fRENDUDoKCWNhc2UgSVBQ Uk9UT19FU1A6CgljYXNlIElQUFJPVE9fQUg6CgljYXNlIElQUFJPVE9fU0NUUDoKCWNhc2UgSVBQ Uk9UT19VRFBMSVRFOgoJCXBvcnRzLmluMzIgPSAqKCh1MzIgKikgKHNrYl9uZXR3b3JrX2hlYWRl cihza2IpICsgaWhsKSk7CgkJaWYgKHBvcnRzLmluMTZbMF0gPiBwb3J0cy5pbjE2WzFdKQoJCQlz d2FwKHBvcnRzLmluMTZbMF0sIHBvcnRzLmluMTZbMV0pOwoJCWJyZWFrOwoKCWRlZmF1bHQ6CgkJ cG9ydHMuaW4zMiA9IDA7CgkJYnJlYWs7Cgl9CgoJaGFzaCA9IGpoYXNoXzN3b3JkcyhhZGRyMSwg YWRkcjIsIHBvcnRzLmluMzIsCgkJCSAgICBzaW1wbGVfdHhfaGFzaHJuZCBeIGlwX3Byb3RvKTsK CglyZXR1cm4gKHUxNikgKCgodTY0KSBoYXNoICogZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpID4+ IDMyKTsKfQoKc3RhdGljIGludCBpZmJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7Cglz dHJ1Y3QgaWZiX3ByaXZhdGUgKmRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKCXN0cnVjdCBpZmJfcHJp dmF0ZV9xICpwcSA9IGRwLT5wcTsKCWludCBpOwoKCXBxID0ga21hbGxvYyhzaXplb2YoKnBxKSAq IGRldi0+cmVhbF9udW1fdHhfcXVldWVzLCBHRlBfS0VSTkVMKTsKCWlmIChwcSA9PSBOVUxMKQoJ CXJldHVybiAtRU5PTUVNOwoJZHAtPnBxID0gcHE7CgoJZm9yIChpID0gMDsgaSA8IGRldi0+cmVh bF9udW1fdHhfcXVldWVzOyBpKyspIHsKCQlwcVtpXS5kZXYgPSBkZXY7CgkJc2tiX3F1ZXVlX2hl YWRfaW5pdCgmcHFbaV0ucnEpOwoJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnBxW2ldLnRxKTsKCQlp bml0X3dhaXRxdWV1ZV9oZWFkKCZwcVtpXS53cSk7CgkJcHFbaV0ucnhfcGFja2V0cyA9IDA7CgkJ cHFbaV0ucnhfYnl0ZXMgPSAwOwoJCXBxW2ldLnJ4X2Ryb3BwZWQgPSAwOwoJfQoKCXJldHVybiAw Owp9CgpzdGF0aWMgdm9pZCBpZmJfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCXN0 cnVjdCBpZmJfcHJpdmF0ZSAqZHAgPSBuZXRkZXZfcHJpdihkZXYpOwoKCWtmcmVlKGRwLT5wcSk7 Cn0KCnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWZiX25ldGRldl9vcHMgPSB7 CgkubmRvX2luaXQJCT0gaWZiX2luaXQsCgkubmRvX3VuaW5pdAkJPSBpZmJfdW5pbml0LAoJLm5k b19vcGVuCQk9IGlmYl9vcGVuLAoJLm5kb19zdG9wCQk9IGlmYl9jbG9zZSwKCS5uZG9fc3RhcnRf eG1pdAkJPSBpZmJfeG1pdCwKCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRy LAoJLm5kb19zZWxlY3RfcXVldWUJPSBpZmJfc2VsZWN0X3F1ZXVlLAoJLm5kb19nZXRfc3RhdHMJ CT0gaWZiX2dldF9zdGF0cywKfTsKCnN0YXRpYyB2b2lkIGlmYl9zZXR1cChzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KQp7CgkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwoJZGV2 LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CglkZXYtPm5ldGRldl9vcHMgPSAmaWZiX25ldGRl dl9vcHM7CgoJLyogRmlsbCBpbiBkZXZpY2Ugc3RydWN0dXJlIHdpdGggZXRoZXJuZXQtZ2VuZXJp YyB2YWx1ZXMuICovCglldGhlcl9zZXR1cChkZXYpOwoJZGV2LT50eF9xdWV1ZV9sZW4gPSBUWF9R X0xJTUlUOwoKCWRldi0+ZmxhZ3MgfD0gSUZGX05PQVJQOwoJZGV2LT5mbGFncyAmPSB+SUZGX01V TFRJQ0FTVDsKCWRldi0+cHJpdl9mbGFncyAmPSB+SUZGX1hNSVRfRFNUX1JFTEVBU0U7CglyYW5k b21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKfQoKc3RhdGljIGludCBpZmJfdmFsaWRhdGUo c3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKQp7CglpZiAodGJbSUZM QV9BRERSRVNTXSkgewoJCWlmIChubGFfbGVuKHRiW0lGTEFfQUREUkVTU10pICE9IEVUSF9BTEVO KQoJCQlyZXR1cm4gLUVJTlZBTDsKCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmxhX2RhdGEo dGJbSUZMQV9BRERSRVNTXSkpKQoJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7Cgl9CglyZXR1cm4g MDsKfQoKc3RhdGljIGludCBpZmJfZ2V0X3R4X3F1ZXVlcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVj dCBubGF0dHIgKnRiW10sCgkJCSAgICAgdW5zaWduZWQgaW50ICpudW1fdHhfcXVldWVzLAoJCQkg ICAgIHVuc2lnbmVkIGludCAqcmVhbF9udW1fdHhfcXVldWVzKQp7CgkqbnVtX3R4X3F1ZXVlcyA9 IG51bXR4cXM7CgkqcmVhbF9udW1fdHhfcXVldWVzID0gbnVtdHhxczsKCglyZXR1cm4gMDsKfQoK c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlmYl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0g ewoJLmtpbmQJCT0gImlmYiIsCgkuc2V0dXAJCT0gaWZiX3NldHVwLAoJLnZhbGlkYXRlCT0gaWZi X3ZhbGlkYXRlLAoJLmdldF90eF9xdWV1ZXMJPSBpZmJfZ2V0X3R4X3F1ZXVlcywKCS5wcml2X3Np emUJPSBzaXplb2Yoc3RydWN0IGlmYl9wcml2YXRlKSwKfTsKCnN0YXRpYyBpbnQgX19pbml0IGlm Yl9pbml0X29uZShpbnQgaW5kZXgpCnsKCXN0cnVjdCBuZXRfZGV2aWNlICpkZXZfaWZiOwoJaW50 IGVycjsKCglkZXZfaWZiID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZihzdHJ1Y3QgaWZiX3ByaXZh dGUpLCAiaWZiJWQiLAoJCQkJICBpZmJfc2V0dXAsIG51bXR4cXMpOwoKCWlmICghZGV2X2lmYikK CQlyZXR1cm4gLUVOT01FTTsKCgllcnIgPSBkZXZfYWxsb2NfbmFtZShkZXZfaWZiLCBkZXZfaWZi LT5uYW1lKTsKCWlmIChlcnIgPCAwKQoJCWdvdG8gZXJyOwoKCWRldl9pZmItPnJ0bmxfbGlua19v cHMgPSAmaWZiX2xpbmtfb3BzOwoJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldl9pZmIpOwoJ aWYgKGVyciA8IDApCgkJZ290byBlcnI7CgoJcmV0dXJuIDA7CgplcnI6CglmcmVlX25ldGRldihk ZXZfaWZiKTsKCXJldHVybiBlcnI7Cn0KCnN0YXRpYyBpbnQgX19pbml0IGlmYl9pbml0X21vZHVs ZSh2b2lkKQp7CglpbnQgaSwgZXJyOwoKCWdldF9yYW5kb21fYnl0ZXMoJnNpbXBsZV90eF9oYXNo cm5kLCA0KTsKCXJ0bmxfbG9jaygpOwoJZXJyID0gX19ydG5sX2xpbmtfcmVnaXN0ZXIoJmlmYl9s aW5rX29wcyk7Cglmb3IgKGkgPSAwOyBpIDwgbnVtaWZicyAmJiAhZXJyOyBpKyspCgkJZXJyID0g aWZiX2luaXRfb25lKGkpOwoJaWYgKGVycikKCQlfX3J0bmxfbGlua191bnJlZ2lzdGVyKCZpZmJf bGlua19vcHMpOwoJcnRubF91bmxvY2soKTsKCglyZXR1cm4gZXJyOwp9CgpzdGF0aWMgdm9pZCBf X2V4aXQgaWZiX2NsZWFudXBfbW9kdWxlKHZvaWQpCnsKCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZp ZmJfbGlua19vcHMpOwp9Cgptb2R1bGVfaW5pdChpZmJfaW5pdF9tb2R1bGUpOwptb2R1bGVfZXhp dChpZmJfY2xlYW51cF9tb2R1bGUpOwpNT0RVTEVfTElDRU5TRSgiR1BMIik7Ck1PRFVMRV9BVVRI T1IoIkphbWFsIEhhZGkgU2FsaW0iKTsKTU9EVUxFX0FMSUFTX1JUTkxfTElOSygiaWZiIik7Cg== --00504502cb24a0476b04781290a6--