From owner-freebsd-current@FreeBSD.ORG Wed Jan 28 19:17:36 2009 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5E8D01065670 for ; Wed, 28 Jan 2009 19:17:36 +0000 (UTC) (envelope-from asmrookie@gmail.com) Received: from mail-ew0-f21.google.com (mail-ew0-f21.google.com [209.85.219.21]) by mx1.freebsd.org (Postfix) with ESMTP id 87F708FC24 for ; Wed, 28 Jan 2009 19:17:35 +0000 (UTC) (envelope-from asmrookie@gmail.com) Received: by ewy14 with SMTP id 14so4602280ewy.19 for ; Wed, 28 Jan 2009 11:17:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=O64Jr5QDYaIyN4CwRjJELJ4n28tG0qDqzpCDQDWgWyo=; b=d9T2Y1iwgUCxGRQtapFCRdNTjJrLpAYJes8taCsvzEkbaHWWbMsnNxGvoktrmjfsDI 0t5iGOx5Q7H7bPBIkzpJ/VL6TEKFKHkvmMtUW7DoDo6wYNQEhhL3br2Hj6OJCYzyI7p3 Xa+sW9i5lcNZRTXpC2HBO07dgwHPfh32gNtjo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:cc:content-type; b=cUfVBmRjlHMGReahDnr4UBbmt++fA+GjU1aL7QnUTVD8pl/4rtWDL/utxmaeAd3eF3 2PXe+DFTPr3BUZXUoCmAydZ63VWF6rum0dADM1n+mM80xSEwCcohvTaOkCoI9CFhGrl7 JcF/3hw2gBobZ1ecpUsZKJtJI7baxHPOoAuM0= MIME-Version: 1.0 Sender: asmrookie@gmail.com Received: by 10.86.26.11 with SMTP id 11mr238187fgz.40.1233168300745; Wed, 28 Jan 2009 10:45:00 -0800 (PST) Date: Wed, 28 Jan 2009 19:45:00 +0100 X-Google-Sender-Auth: 000fc2ed6eadc845 Message-ID: <3bbf2fe10901281045s7e3280dep5a26df6541595cfe@mail.gmail.com> From: Attilio Rao To: FreeBSD Current , freebsd-fs@freebsd.org Content-Type: multipart/mixed; boundary=000e0cd286e283a38b04618f5e64 Cc: bp@freebsd.org, Robert Watson Subject: [PATCH] improving netncp locking X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 28 Jan 2009 19:17:37 -0000 --000e0cd286e283a38b04618f5e64 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Attached there is a patch that fixes netncp locking. Actually, netncp tries to drain connections without any protection for the nc_id field (which is supposed to discriminate between a valid connection and one under draining). Also, the drain still uses loose ending LK_DRAIN. This patch adds correct locking for draining path adding an interlock, control flags, a refcount and using it accordingly. Ultimately 2 locks are switched to be sx as they don't rely on any particular lockmgr feature. The patch compiles and boots ok, but if someone could test and review it I would appreciate a lot. Thanks, Attilio -- Peace can only be achieved by understanding - A. Einstein --000e0cd286e283a38b04618f5e64 Content-Type: text/x-diff; charset=US-ASCII; name="netncp.diff" Content-Disposition: attachment; filename="netncp.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fqickktn0 LS0tIC91c3Ivc3JjL3N5cy9uZXRuY3AvbmNwX2Nvbm4uYwkyMDA5LTAxLTEwIDEzOjM5OjQ4LjAw MDAwMDAwMCArMDEwMAorKysgc3lzL25ldG5jcC9uY3BfY29ubi5jCTIwMDktMDEtMjggMTk6MjA6 MDIuMDAwMDAwMDAwICswMTAwCkBAIC0zOCwxMSArMzgsMTMgQEAKICNpbmNsdWRlIDxzeXMvcGFy YW0uaD4KICNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KICNpbmNsdWRlIDxzeXMva2VybmVsLmg+Cisj aW5jbHVkZSA8c3lzL2xvY2suaD4KICNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8 c3lzL211dGV4Lmg+CiAjaW5jbHVkZSA8c3lzL3ByaXYuaD4KICNpbmNsdWRlIDxzeXMvcHJvYy5o PgotI2luY2x1ZGUgPHN5cy9sb2NrLmg+CiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1 ZGUgPHN5cy9zeC5oPgogCiAjaW5jbHVkZSA8bmV0bmNwL25jcC5oPgogI2luY2x1ZGUgPG5ldG5j cC9ud2Vycm9yLmg+CkBAIC01MSw2ICs1MywxNyBAQAogI2luY2x1ZGUgPG5ldG5jcC9uY3Bfc29j ay5oPgogI2luY2x1ZGUgPG5ldG5jcC9uY3BfbmNwLmg+CiAKKyNkZWZpbmUJTkNQX1JFRkxDTlQo bmNwKQkoKG5jcCktPm5jX2xvY2tjbnQrKykKKyNkZWZpbmUJTkNQX1JFTExDTlQobmNwKSBkbyB7 CQkJCQkJXAorCShuY3ApLT5uY19sb2NrY250LS07CQkJCQkJXAorCWlmICgobmNwKS0+bmNfbG9j a2NudCA9PSAwICYmCQkJCQlcCisJICAgICgobmNwKS0+ZmxhZ3MgJiBOQ1BGTF9EUkFJTklORykg IT0gMCkgewkJCVwKKwkJTVBBU1MoKG5jcCktPm5jX2lkID09IDApOwkJCQlcCisJCShuY3ApLT5m bGFncyAmPSB+TkNQRkxfRFJBSU5JTkc7CQkJXAorCQl3YWtldXAoJihuY3ApLT5uY19sb2NrY250 KTsJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUoMCkKKwogU0xJU1RfSEVBRChuY3BfaGFuZGxl X2hlYWQsbmNwX2hhbmRsZSk7CiAKIGludCBuY3BfYnVyc3RfZW5hYmxlZCA9IDE7CkBAIC01OCwx NSArNzEsMTYgQEAKIHN0cnVjdCBuY3BfY29ubl9oZWFkIGNvbm5fbGlzdD17TlVMTH07CiBzdGF0 aWMgaW50IG5jcF9jb25uX2NudCA9IDA7CiBzdGF0aWMgaW50IG5jcF9uZXh0X3JlZiA9IDE7Ci1z dGF0aWMgc3RydWN0IGxvY2sgbGlzdGxvY2s7CitzdGF0aWMgc3RydWN0IHN4IGxpc3Rsb2NrOwog CiBzdHJ1Y3QgbmNwX2hhbmRsZV9oZWFkIGxobGlzdD17TlVMTH07CiBzdGF0aWMgaW50IG5jcF9u ZXh0X2hhbmRsZSA9IDE7Ci1zdGF0aWMgc3RydWN0IGxvY2sgbGhsb2NrOworc3RhdGljIHN0cnVj dCBzeCBsaGxvY2s7CiAKIHN0YXRpYyBpbnQgbmNwX3N5c2N0bF9jb25uc3RhdChTWVNDVExfSEFO RExFUl9BUkdTKTsKIHN0YXRpYyBpbnQgbmNwX2Nvbm5fbG9ja19hbnkoc3RydWN0IG5jcF9jb25u ICpjb25uLCBzdHJ1Y3QgdGhyZWFkICp0ZCwKICAgICBzdHJ1Y3QgdWNyZWQgKmNyZWQpOworc3Rh dGljIHZvaWQgbmNwX2Nvbm5fbG9ja19hc3NlcnQoc3RydWN0IG5jcF9jb25uICpjb25uLCBpbnQg d2hhdCk7CiAKIFNZU0NUTF9ERUNMKF9uZXRfbmNwKTsKIFNZU0NUTF9JTlQgKF9uZXRfbmNwLCBP SURfQVVUTywgYnVyc3RfZW5hYmxlZCwgQ1RMRkxBR19SRCwgJm5jcF9idXJzdF9lbmFibGVkLCAw LCAiIik7CkBAIC03OSw4ICs5Myw4IEBACiBpbnQKIG5jcF9jb25uX2luaXQodm9pZCkKIHsKLQls b2NraW5pdCgmbGlzdGxvY2ssIFBTT0NLLCAibmNwbGwiLCAwLCAwKTsKLQlsb2NraW5pdCgmbGhs b2NrLCBQU09DSywgIm5jcGxoIiwgMCwgMCk7CisJc3hfaW5pdF9mbGFncygmbGlzdGxvY2ssICJu Y3BsbCIsIFNYX1JFQ1VSU0UpOworCXN4X2luaXQoJmxobG9jaywgIm5jcGxoIik7CiAJcmV0dXJu IDA7CiB9CiAKQEAgLTkxLDIxICsxMDUsNTEgQEAKIAkJTkNQRVJST1IoIlRoZXJlIGFyZSAlZCBj b25uZWN0aW9ucyBhY3RpdmVcbiIsIG5jcF9jb25uX2NudCk7CiAJCXJldHVybiBFQlVTWTsKIAl9 Ci0JbG9ja2Rlc3Ryb3koJmxpc3Rsb2NrKTsKLQlsb2NrZGVzdHJveSgmbGhsb2NrKTsKKwlzeF9k ZXN0cm95KCZsaXN0bG9jayk7CisJc3hfZGVzdHJveSgmbGhsb2NrKTsKIAlyZXR1cm4gMDsKIH0K IAordm9pZAorbmNwX2Nvbm5fc2xvY2tsaXN0KCkKK3sKKworCXN4X3Nsb2NrKCZsaXN0bG9jayk7 Cit9CisKK3ZvaWQKK25jcF9jb25uX3hsb2NrbGlzdCgpCit7CisKKwlzeF94bG9jaygmbGlzdGxv Y2spOworfQorCiBpbnQKLW5jcF9jb25uX2xvY2tsaXN0KGludCBmbGFncywgc3RydWN0IHRocmVh ZCAqdGQpCituY3BfY29ubl90cnlfc2xvY2tsaXN0KCkKIHsKLQlyZXR1cm4gbG9ja21ncigmbGlz dGxvY2ssIGZsYWdzIHwgTEtfQ0FOUkVDVVJTRSwgMCk7CisKKwlyZXR1cm4gKHN4X3RyeV9zbG9j aygmbGlzdGxvY2spKTsKK30KKworaW50CituY3BfY29ubl90cnlfeGxvY2tsaXN0KCkKK3sKKwor CXJldHVybiAoc3hfdHJ5X3hsb2NrKCZsaXN0bG9jaykpOwogfQogCiB2b2lkCi1uY3BfY29ubl91 bmxvY2tsaXN0KHN0cnVjdCB0aHJlYWQgKnRkKQorbmNwX2Nvbm5fc3VubG9ja2xpc3QoKQogewot CWxvY2ttZ3IoJmxpc3Rsb2NrLCBMS19SRUxFQVNFLCAwKTsKKworCXN4X3N1bmxvY2soJmxpc3Rs b2NrKTsKK30KKwordm9pZAorbmNwX2Nvbm5feHVubG9ja2xpc3QoKQoreworCisJc3hfeHVubG9j aygmbGlzdGxvY2spOwogfQogCiBpbnQKQEAgLTEyOCwxNyArMTcyLDMxIEBACiB7CiAJaW50IGVy cm9yOwogCi0JaWYgKGNvbm4tPm5jX2lkID09IDApIHJldHVybiBFQUNDRVM7Ci0JZXJyb3IgPSBs b2NrbWdyKCZjb25uLT5uY19sb2NrLCBMS19FWENMVVNJVkUgfCBMS19DQU5SRUNVUlNFLCAwKTsK LQlpZiAoZXJyb3IgPT0gRVJFU1RBUlQpCisJTkNQX0lMT0NLKGNvbm4pOworCWlmIChjb25uLT5u Y19pZCA9PSAwKQorCQlyZXR1cm4gRUFDQ0VTOworCU5DUF9SRUZMQ05UKGNvbm4pOworCWVycm9y ID0gbG9ja21ncigmY29ubi0+bmNfbG9jaywgTEtfRVhDTFVTSVZFIHwgTEtfQ0FOUkVDVVJTRSB8 CisJICAgIExLX0lOVEVSTE9DSywgTkNQX01UWChjb25uKSk7CisJaWYgKGVycm9yID09IEVSRVNU QVJUKSB7CisJCU5DUF9JTE9DSyhjb25uKTsKKwkJTkNQX1JFTExDTlQoY29ubik7CisJCU5DUF9J VU5MT0NLKGNvbm4pOwogCQlyZXR1cm4gRUlOVFI7CisJfQogCWVycm9yID0gbmNwX2Noa2ludHIo Y29ubiwgdGQpOwogCWlmIChlcnJvcikgeworCQlOQ1BfSUxPQ0soY29ubik7CisJCU5DUF9SRUxM Q05UKGNvbm4pOworCQlOQ1BfSVVOTE9DSyhjb25uKTsKIAkJbG9ja21ncigmY29ubi0+bmNfbG9j aywgTEtfUkVMRUFTRSwgMCk7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKIAlpZiAoY29ubi0+bmNf aWQgPT0gMCkgeworCQlOQ1BfSUxPQ0soY29ubik7CisJCU5DUF9SRUxMQ05UKGNvbm4pOworCQlO Q1BfSVVOTE9DSyhjb25uKTsKIAkJbG9ja21ncigmY29ubi0+bmNfbG9jaywgTEtfUkVMRUFTRSwg MCk7CiAJCXJldHVybiBFQUNDRVM7CiAJfQpAQCAtMTQ3LDYgKzIwNSwxMyBAQAogCXJldHVybiAw OwogfQogCitzdGF0aWMgdm9pZAorbmNwX2Nvbm5fbG9ja19hc3NlcnQoc3RydWN0IG5jcF9jb25u ICpjb25uLCBpbnQgd2hhdCkKK3sKKworCWxvY2ttZ3JfYXNzZXJ0KCZjb25uLT5uY19sb2NrLCB3 aGF0KTsKK30KKwogaW50CiBuY3BfY29ubl9sb2NrKHN0cnVjdCBuY3BfY29ubiAqY29ubiwgc3Ry dWN0IHRocmVhZCAqdGQsIHN0cnVjdCB1Y3JlZCAqY3JlZCwgaW50IG1vZGUpCiB7CkBAIC0xNjcs MTEgKzIzMiwxMSBAQAogCiAJZXJyb3IgPSBuY3BfY29ubl9hY2Nlc3MoY29ubiwgY3JlZCwgbW9k ZSk7CiAJaWYgKGVycm9yKSB7Ci0JCW5jcF9jb25uX3VubG9ja2xpc3QodGQpOworCQluY3BfY29u bl9zdW5sb2NrbGlzdCgpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCWNvbm4tPm5jX2x3YW50Kys7 Ci0JbmNwX2Nvbm5fdW5sb2NrbGlzdCh0ZCk7CisJbmNwX2Nvbm5fc3VubG9ja2xpc3QoKTsKIAll cnJvciA9IG5jcF9jb25uX2xvY2tfYW55KGNvbm4sIHRkLCBjcmVkKTsKIAljb25uLT5uY19sd2Fu dC0tOwogCWlmIChjb25uLT5uY19sd2FudCA9PSAwKSB7CkBAIC0xODMsMTkgKzI0OCwxMSBAQAog dm9pZAogbmNwX2Nvbm5fdW5sb2NrKHN0cnVjdCBuY3BfY29ubiAqY29ubiwgc3RydWN0IHRocmVh ZCAqdGQpCiB7Ci0JLyoKLQkgKiBub3RlLCB0aGF0IExLX1JFTEFTRSB3aWxsIGRvIHdha2V1cCgp IGluc3RlYWQgb2Ygd2FrZXVwX29uZSgpLgotCSAqIHRoaXMgd2lsbCBkbyBhIGxpdHRsZSBvdmVy aGVhZAotCSAqLwotCWxvY2ttZ3IoJmNvbm4tPm5jX2xvY2ssIExLX1JFTEVBU0UsIDApOwotfQog Ci1pbnQKLW5jcF9jb25uX2Fzc2VydF9sb2NrZWQoc3RydWN0IG5jcF9jb25uICpjb25uLCBjb25z dCBjaGFyICpjaGVja2VyLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKLXsKLQlpZiAobG9ja3N0YXR1cygm Y29ubi0+bmNfbG9jaykgPT0gTEtfRVhDTFVTSVZFKSByZXR1cm4gMDsKLQlwcmludGYoIiVzOiBj b25uZWN0aW9uIGlzbid0IGxvY2tlZCFcbiIsIGNoZWNrZXIpOwotCXJldHVybiBFSU87CisJTkNQ X0lMT0NLKGNvbm4pOworCU5DUF9SRUxMQ05UKGNvbm4pOworCU5DUF9JVU5MT0NLKGNvbm4pOwor CWxvY2ttZ3IoJmNvbm4tPm5jX2xvY2ssIExLX1JFTEVBU0UsIDApOwogfQogCiB2b2lkCkBAIC0y NDIsNyArMjk5LDkgQEAKIAkgICAgTV9OQ1BEQVRBLCBNX1dBSVRPSyB8IE1fWkVSTyk7CiAJZXJy b3IgPSAwOwogCWxvY2tpbml0KCZuY3AtPm5jX2xvY2ssIFBaRVJPLCAibmNwbGNrIiwgMCwgMCk7 CisJbXR4X2luaXQoJm5jcC0+bmNfaWxvY2ssICJuY3BpbGNrIiwgTlVMTCwgMCk7CiAJbmNwX2Nv bm5fY250Kys7CisJbmNwLT5uY19sb2NrY250ID0gMDsKIAluY3AtPm5jX2lkID0gbmNwX25leHRf cmVmKys7CiAJbmNwLT5uY19vd25lciA9IG93bmVyOwogCW5jcC0+c2VxID0gMDsKQEAgLTI1Nyw5 ICszMTYsOSBAQAogCQluY3AtPmxpLnRpbWVvdXQgPSBOQ1BfUkVUUllfVElNRU9VVDsKIAluY3Bf Y29ubl9sb2NrX2FueShuY3AsIHRkLCBuY3AtPm5jX293bmVyKTsKIAkqY29ubiA9IG5jcDsKLQlu Y3BfY29ubl9sb2NrbGlzdChMS19FWENMVVNJVkUsIHRkKTsKKwluY3BfY29ubl94bG9ja2xpc3Qo KTsKIAlTTElTVF9JTlNFUlRfSEVBRCgmY29ubl9saXN0LG5jcCxuY19uZXh0KTsKLQluY3BfY29u bl91bmxvY2tsaXN0KHRkKTsKKwluY3BfY29ubl94dW5sb2NrbGlzdCgpOwogCXJldHVybiAoZXJy b3IpOwogfQogCkBAIC0yNzAsMjAgKzMyOSwxMiBAQAogbmNwX2Nvbm5fZnJlZShzdHJ1Y3QgbmNw X2Nvbm4gKm5jcCkKIHsKIAlzdHJ1Y3QgdGhyZWFkICp0ZDsKLQlpbnQgZXJyb3I7CiAKLQlpZiAo bmNwID09IE5VTEwpIHsKLQkJTkNQRkFUQUwoIm5jcCA9PSBOVUxMXG4iKTsKLQkJcmV0dXJuIDA7 Ci0JfQotCWlmIChuY3AtPm5jX2lkID09IDApIHsKLQkJTkNQRVJST1IoIm5jX2lkID09IDBcbiIp OwotCQlyZXR1cm4gRUFDQ0VTOwotCX0KKwlNUEFTUyhuY3AgIT0gTlVMTCk7CisJTVBBU1MobmNw LT5uY19pZCAhPSAwKTsKKwluY3BfY29ubl9sb2NrX2Fzc2VydChuY3AsIEtBX1hMT0NLRUQpOwor CiAJdGQgPSBuY3AtPnRkOwotCWVycm9yID0gbmNwX2Nvbm5fYXNzZXJ0X2xvY2tlZChuY3AsIF9f ZnVuY19fLCB0ZCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CiAJaWYgKG5jcC0+cmVm X2NudCAhPSAwIHx8IChuY3AtPmZsYWdzICYgTkNQRkxfUEVSTUFORU5UKSkKIAkJcmV0dXJuIEVC VVNZOwogCWlmIChuY3BfY29ubl9hY2Nlc3MobmNwLCBuY3AtPnVjcmVkLCBOQ1BNX1dSSVRFKSkK QEAgLTI5MiwyNiArMzQzLDI4IEBACiAJaWYgKG5jcC0+ZmxhZ3MgJiBOQ1BGTF9BVFRBQ0hFRCkK IAkJbmNwX25jcF9kaXNjb25uZWN0KG5jcCk7CiAJbmNwX3NvY2tfZGlzY29ubmVjdChuY3ApOwor CW5jcF9jb25uX3VubG9jayhuY3AsIHRkKTsKIAogCS8qCiAJICogTWFyayBjb25uIGFzIGRlYWQg YW5kIHdhaXQgZm9yIG90aGVyIHByb2Nlc3MKIAkgKi8KKwlOQ1BfSUxPQ0sobmNwKTsKIAluY3At Pm5jX2lkID0gMDsKLQluY3BfY29ubl91bmxvY2sobmNwLCB0ZCk7Ci0JLyoKLQkgKiBpZiBzaWdu YWwgaXMgcmFpc2VkIC0gaG93IEkgZG8gcmVhY3QgPwotCSAqLwotCWxvY2ttZ3IoJm5jcC0+bmNf bG9jaywgTEtfRFJBSU4sIDApOwotCWxvY2ttZ3IoJm5jcC0+bmNfbG9jaywgTEtfUkVMRUFTRSwg MCk7CisJaWYgKG5jcC0+bmNfbG9ja2NudCAhPSAwKSB7CisJCW5jcC0+ZmxhZ3MgfD0gTkNQRkxf RFJBSU5JTkc7CisJCW1zbGVlcCgmbmNwLT5uY19sb2NrY250LCBOQ1BfTVRYKG5jcCksIFBTT0NL LAorCQkgICAgIm5jcCBjb25uZWN0aW9uIGRyYWluIiwgMCk7CisJfQorCU5DUF9JVU5MT0NLKG5j cCk7CiAJbG9ja2Rlc3Ryb3koJm5jcC0+bmNfbG9jayk7CiAJd2hpbGUgKG5jcC0+bmNfbHdhbnQp IHsKIAkJcHJpbnRmKCJsd2FudCA9ICVkXG4iLCBuY3AtPm5jX2x3YW50KTsKIAkJdHNsZWVwKCZu Y3AtPm5jX2x3YW50LCBQWkVSTywibmNwZHIiLDIqaHopOwogCX0KLQluY3BfY29ubl9sb2NrbGlz dChMS19FWENMVVNJVkUsIHRkKTsKKwluY3BfY29ubl94bG9ja2xpc3QoKTsKIAlTTElTVF9SRU1P VkUoJmNvbm5fbGlzdCwgbmNwLCBuY3BfY29ubiwgbmNfbmV4dCk7CiAJbmNwX2Nvbm5fY250LS07 Ci0JbmNwX2Nvbm5fdW5sb2NrbGlzdCh0ZCk7CisJbmNwX2Nvbm5feHVubG9ja2xpc3QoKTsKIAlp ZiAobmNwLT5saS51c2VyKQogCQlmcmVlKG5jcC0+bGkudXNlciwgTV9OQ1BEQVRBKTsKIAlpZiAo bmNwLT5saS5wYXNzd29yZCkKQEAgLTM5MCwxMSArNDQzLDExIEBACiAJc3RydWN0IG5jcF9jb25u ICpuY3A7CiAJaW50IGVycm9yID0gMDsKIAotCW5jcF9jb25uX2xvY2tsaXN0KExLX1NIQVJFRCwg dGQpOworCW5jcF9jb25uX3Nsb2NrbGlzdCgpOwogCVNMSVNUX0ZPUkVBQ0gobmNwLCAmY29ubl9s aXN0LCBuY19uZXh0KQogCQlpZiAobmNwLT5uY19pZCA9PSByZWYpIGJyZWFrOwogCWlmIChuY3Ag PT0gTlVMTCkgewotCQluY3BfY29ubl91bmxvY2tsaXN0KHRkKTsKKwkJbmNwX2Nvbm5fc3VubG9j a2xpc3QoKTsKIAkJcmV0dXJuKEVCQURGKTsKIAl9CiAJZXJyb3IgPSBuY3BfY29ubl9sb2NrMihu Y3AsIHRkLCBjcmVkLCBtb2RlKTsKQEAgLTQxMiw3ICs0NjUsNyBAQAogCXN0cnVjdCBuY3BfY29u biAqbmNwLCAqbmNwMiA9IE5VTEw7CiAJaW50IGVycm9yID0gMDsKIAotCW5jcF9jb25uX2xvY2ts aXN0KExLX1NIQVJFRCwgdGQpOworCW5jcF9jb25uX3Nsb2NrbGlzdCgpOwogCVNMSVNUX0ZPUkVB Q0gobmNwLCAmY29ubl9saXN0LCBuY19uZXh0KSB7CiAJCWlmICgobmNwLT5mbGFncyAmIE5DUEZM X0xPR0dFRCkgIT0gMCB8fAogCQkgICAgc3RyY21wKG5jcC0+bGkuc2VydmVyLGxpLT5zZXJ2ZXIp ICE9IDAgfHwKQEAgLTQyOCw3ICs0ODEsNyBAQAogCX0KIAlpZiAobmNwID09IE5VTEwpIG5jcCA9 IG5jcDI7CiAJaWYgKG5jcCA9PSBOVUxMKSB7Ci0JCW5jcF9jb25uX3VubG9ja2xpc3QodGQpOwor CQluY3BfY29ubl9zdW5sb2NrbGlzdCgpOwogCQlyZXR1cm4oRUJBREYpOwogCX0KIAllcnJvciA9 IG5jcF9jb25uX2xvY2syKG5jcCwgdGQsIGNyZWQsIG1vZGUpOwpAQCAtNDU2LDcgKzUwOSw3IEBA CiAKIAlwYXJ0aWFsID0gKGxpID09IE5VTEwgfHwgbGktPnNlcnZlclswXSA9PSAwIHx8IGxpLT51 c2VyID09IE5VTEwpOwogCWhhdmVzZXJ2ID0gKGxpICYmIGxpLT5zZXJ2ZXJbMF0pOwotCW5jcF9j b25uX2xvY2tsaXN0KExLX1NIQVJFRCwgdGQpOworCW5jcF9jb25uX3Nsb2NrbGlzdCgpOwogCVNM SVNUX0ZPUkVBQ0gobmNwLCAmY29ubl9saXN0LCBuY19uZXh0KSB7CiAJCWlmIChwYXJ0aWFsKSB7 CiAJCQlpZiAoY3JlZC0+Y3JfdWlkID09IG5jcC0+bmNfb3duZXItPmNyX3VpZCkgewpAQCAtNDg2 LDcgKzUzOSw3IEBACiAJfQogCWlmIChuY3AgPT0gTlVMTCkgbmNwID0gbmNwMjsKIAlpZiAobmNw ID09IE5VTEwpIHsKLQkJbmNwX2Nvbm5fdW5sb2NrbGlzdCh0ZCk7CisJCW5jcF9jb25uX3N1bmxv Y2tsaXN0KCk7CiAJCXJldHVybihFQkFERik7CiAJfQogCWVycm9yID0gbmNwX2Nvbm5fbG9jazIo bmNwLCB0ZCwgY3JlZCxtb2RlKTsKQEAgLTUwNywxMiArNTYwLDEyIEBACiAKIAlpZiAoY29ubi0+ dWNyZWQtPmNyX3VpZCAhPSBjb25uLT5uY19vd25lci0+Y3JfdWlkKQogCQlyZXR1cm4gRUFDQ0VT OwotCW5jcF9jb25uX2xvY2tsaXN0KExLX1NIQVJFRCwgY29ubi0+dGQpOworCW5jcF9jb25uX3Ns b2NrbGlzdCgpOwogCVNMSVNUX0ZPUkVBQ0gobmNwLCAmY29ubl9saXN0LCBuY19uZXh0KSB7CiAJ CWlmIChjb25uLT51Y3JlZC0+Y3JfdWlkID09IG5jcC0+bmNfb3duZXItPmNyX3VpZCkKIAkJCW5j cC0+ZmxhZ3MgJj0gfk5DUEZMX1BSSU1BUlk7CiAJfQotCW5jcF9jb25uX3VubG9ja2xpc3QoY29u bi0+dGQpOworCW5jcF9jb25uX3N1bmxvY2tsaXN0KCk7CiAJaWYgKG9uKQogCQljb25uLT5mbGFn cyB8PSBOQ1BGTF9QUklNQVJZOwogCXJldHVybiAwOwpAQCAtNTI2LDE0ICs1NzksMTQgQEAKIHsK IAlzdHJ1Y3QgbmNwX2hhbmRsZSAqcmVmcDsKIAotCWxvY2ttZ3IoJmxobG9jaywgTEtfRVhDTFVT SVZFLCAwKTsKKwlzeF94bG9jaygmbGhsb2NrKTsKIAlTTElTVF9GT1JFQUNIKHJlZnAsICZsaGxp c3QsIG5oX25leHQpCiAJCWlmIChyZWZwLT5uaF9jb25uID09IGNvbm4gJiYgdGQgPT0gcmVmcC0+ bmhfdGQpIGJyZWFrOwogCWlmIChyZWZwKSB7CiAJCWNvbm4tPnJlZl9jbnQrKzsKIAkJcmVmcC0+ bmhfcmVmKys7CiAJCSpoYW5kbGUgPSByZWZwOwotCQlsb2NrbWdyKCZsaGxvY2ssIExLX1JFTEVB U0UsIDApOworCQlzeF94dW5sb2NrKCZsaGxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAJcmVmcCA9 IG1hbGxvYyhzaXplb2Yoc3RydWN0IG5jcF9oYW5kbGUpLE1fTkNQREFUQSwKQEAgLTU0NSw3ICs1 OTgsNyBAQAogCXJlZnAtPm5oX2lkID0gbmNwX25leHRfaGFuZGxlKys7CiAJKmhhbmRsZSA9IHJl ZnA7CiAJY29ubi0+cmVmX2NudCsrOwotCWxvY2ttZ3IoJmxobG9jaywgTEtfUkVMRUFTRSwgMCk7 CisJc3hfeHVubG9jaygmbGhsb2NrKTsKIAlyZXR1cm4gMDsKIH0KIC8qCkBAIC01NTYsNyArNjA5 LDcgQEAKIHsKIAlzdHJ1Y3QgbmNwX2hhbmRsZSAqcmVmcCA9IGhhbmRsZTsKIAotCWxvY2ttZ3Io JmxobG9jaywgTEtfRVhDTFVTSVZFLCAwKTsKKwlzeF94bG9jaygmbGhsb2NrKTsKIAlyZWZwLT5u aF9yZWYtLTsKIAlyZWZwLT5uaF9jb25uLT5yZWZfY250LS07CiAJaWYgKGZvcmNlKSB7CkBAIC01 NjcsNyArNjIwLDcgQEAKIAkJU0xJU1RfUkVNT1ZFKCZsaGxpc3QsIHJlZnAsIG5jcF9oYW5kbGUs IG5oX25leHQpOwogCQlmcmVlKHJlZnAsIE1fTkNQREFUQSk7CiAJfQotCWxvY2ttZ3IoJmxobG9j aywgTEtfUkVMRUFTRSwgMCk7CisJc3hfeHVubG9jaygmbGhsb2NrKTsKIAlyZXR1cm4gMDsKIH0K IC8qCkBAIC01NzcsMTAgKzYzMCwxMCBAQAogbmNwX2Nvbm5fZmluZGhhbmRsZShpbnQgY29ubkhh bmRsZSwgc3RydWN0IHRocmVhZCAqdGQsIHN0cnVjdCBuY3BfaGFuZGxlICoqaGFuZGxlKSB7CiAJ c3RydWN0IG5jcF9oYW5kbGUgKnJlZnA7CiAKLQlsb2NrbWdyKCZsaGxvY2ssIExLX1NIQVJFRCwg MCk7CisJc3hfc2xvY2soJmxobG9jayk7CiAJU0xJU1RfRk9SRUFDSChyZWZwLCAmbGhsaXN0LCBu aF9uZXh0KQogCQlpZiAocmVmcC0+bmhfdGQgPT0gdGQgJiYgcmVmcC0+bmhfaWQgPT0gY29ubkhh bmRsZSkgYnJlYWs7Ci0JbG9ja21ncigmbGhsb2NrLCBMS19SRUxFQVNFLCAwKTsKKwlzeF9zdW5s b2NrKCZsaGxvY2spOwogCWlmIChyZWZwID09IE5VTEwpIHsKIAkJcmV0dXJuIEVCQURGOwogCX0K QEAgLTU5Niw3ICs2NDksNyBAQAogCXN0cnVjdCBuY3BfaGFuZGxlICpocCwgKm5ocDsKIAlpbnQg aGF2ZW9uZSA9IDA7CiAKLQlsb2NrbWdyKCZsaGxvY2ssIExLX0VYQ0xVU0lWRSwgMCk7CisJc3hf eGxvY2soJmxobG9jayk7CiAJZm9yIChocCA9IFNMSVNUX0ZJUlNUKCZsaGxpc3QpOyBocDsgaHAg PSBuaHApIHsKIAkJbmhwID0gU0xJU1RfTkVYVChocCwgbmhfbmV4dCk7CiAJCWlmIChocC0+bmhf dGQgIT0gdGQpIGNvbnRpbnVlOwpAQCAtNjA1LDcgKzY1OCw3IEBACiAJCVNMSVNUX1JFTU9WRSgm bGhsaXN0LCBocCwgbmNwX2hhbmRsZSwgbmhfbmV4dCk7CiAJCWZyZWUoaHAsIE1fTkNQREFUQSk7 CiAJfQotCWxvY2ttZ3IoJmxobG9jaywgTEtfUkVMRUFTRSwgMCk7CisJc3hfeHVubG9jaygmbGhs b2NrKTsKIAlyZXR1cm4gaGF2ZW9uZTsKIH0KIC8qCkBAIC02MTYsMTEgKzY2OSwxMSBAQAogbmNw X2Nvbm5fbGlzdF9ybV9yZWYocGlkX3QgcGlkKSB7CiAJc3RydWN0IG5jcF9jb25uICpuY3A7CiAK LQluY3BfY29ubl9sb2NrbGlzdChMS19TSEFSRUQsIE5VTEwpOworCW5jcF9jb25uX3Nsb2NrbGlz dCgpOwogCVNMSVNUX0ZPUkVBQ0gobmNwLCAmY29ubl9saXN0LCBuY19uZXh0KSB7CiAJCW5jcF9j b25uX3JtX3JlZihuY3AscGlkLDEpOwogCX0KLQluY3BfY29ubl91bmxvY2tsaXN0KE5VTEwpOwor CW5jcF9jb25uX3N1bmxvY2tsaXN0KCk7CiAJcmV0dXJuOwogfQogKi8KQEAgLTY1Myw3ICs3MDYs NyBAQAogCWVycm9yID0gc3lzY3RsX3dpcmVfb2xkX2J1ZmZlcihyZXEsIDApOwogCWlmIChlcnJv ciAhPSAwKQogCQlyZXR1cm4gKGVycm9yKTsKLQluY3BfY29ubl9sb2NrbGlzdChMS19TSEFSRUQs IHJlcS0+dGQpOworCW5jcF9jb25uX3Nsb2NrbGlzdCgpOwogCWVycm9yID0gU1lTQ1RMX09VVChy ZXEsICZuY3BfY29ubl9jbnQsIHNpemVvZihuY3BfY29ubl9jbnQpKTsKIAlTTElTVF9GT1JFQUNI KG5jcCwgJmNvbm5fbGlzdCwgbmNfbmV4dCkgewogCQlpZiAoZXJyb3IpIGJyZWFrOwpAQCAtNjYz LDYgKzcxNiw2IEBACiAJCW5jcC0+bmNfbHdhbnQtLTsKIAkJZXJyb3IgPSBTWVNDVExfT1VUKHJl cSwgJm5jcywgc2l6ZW9mKG5jcykpOwogCX0KLQluY3BfY29ubl91bmxvY2tsaXN0KHJlcS0+dGQp OworCW5jcF9jb25uX3N1bmxvY2tsaXN0KCk7CiAJcmV0dXJuKGVycm9yKTsKIH0KLS0tIC91c3Iv c3JjL3N5cy9uZXRuY3AvbmNwX2Nvbm4uaAkyMDA4LTAzLTEyIDE0OjU1OjQwLjAwMDAwMDAwMCAr MDEwMAorKysgc3lzL25ldG5jcC9uY3BfY29ubi5oCTIwMDktMDEtMjggMTk6MjA6MDIuMDAwMDAw MDAwICswMTAwCkBAIC02Myw2ICs2Myw3IEBACiAjZGVmaW5lCU5DUEZMX1dBU0xPR0dFRAkJMHgw MjAwCS8qIHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgc3VjY2Vzc2Z1bGwgbG9naW4gKi8KICNkZWZp bmUJTkNQRkxfU0lHTkFDVElWRQkweDEwMDAJLyogcGFja2V0IHNpZ25pbmcgYWN0aXZlICovCiAj ZGVmaW5lCU5DUEZMX1NJR05XQU5URUQJMHgyMDAwCS8qIHNpZ25pbmcgc2hvdWxkIHN0YXJ0ICov CisjZGVmaW5lCU5DUEZMX0RSQUlOSU5HCQkweDQwMDAJLyogc3RydWN0dXJlIHVuZGVyIGRyYWlu aW5nICovCiAKIC8qIGFjY2VzcyBtb2RlIGZvciBjb25uZWN0aW9uICovCiAjZGVmaW5lCU5DUE1f UkVBRAkJMDQwMAkvKiBhYmxlIHRvIGZldGNoIGNvbm4gcGFyYW1zICovCkBAIC03Miw2ICs3Myw5 IEBACiAjZGVmaW5lCU5DUF9ERUZBVUxUX09XTkVSCSgodWlkX3QpLTEpCiAjZGVmaW5lCU5DUF9E RUZBVUxUX0dST1VQCSgodWlkX3QpLTEpCiAKKyNkZWZpbmUJTkNQX0lMT0NLKG5jcCkJCW10eF9s b2NrKCYobmNwKS0+bmNfaWxvY2spCisjZGVmaW5lCU5DUF9JVU5MT0NLKG5jcCkJbXR4X3VubG9j aygmKG5jcCktPm5jX2lsb2NrKQorI2RlZmluZQlOQ1BfTVRYKG5jcCkJCSgmKG5jcCktPm5jX2ls b2NrKQogCiAvKiBhcmdzIHVzZWQgdG8gY3JlYXRlIGNvbm5lY3Rpb24gKi8KICNkZWZpbmUJbmNw X2Nvbm5fbG9naW5mbwluY3BfY29ubl9hcmdzCkBAIC0xNzMsNiArMTc3LDggQEAKIAlpbnQgCQly ZWZfY250OwkJLyogaG93IG1hbnkgaGFuZGxlcyBsZWFzZWQgKi8KIAlTTElTVF9IRUFEKG5jcF9y ZWZfaGQsbmNwX3JlZikgcmVmX2xpc3Q7LyogbGlzdCBvZiBoYW5kbGVzICovCiAJc3RydWN0IGxv Y2sJbmNfbG9jazsJCS8qIGV4Y2wgbG9ja3MgKi8KKwlzdHJ1Y3QgbXR4CW5jX2lsb2NrOwkJLyog Y29ubmVjdGlvbiBpbnRlcmxvY2sgKi8KKwlpbnQJCW5jX2xvY2tjbnQ7CQkvKiBsb2NrIHJlZmNv dW50ICovCiAJaW50CQluY19sd2FudDsJCS8qIG51bWJlciBvZiB3YW50ZWQgbG9ja3MgKi8KIAlz dHJ1Y3QgdGhyZWFkCSp0ZDsJCQkvKiBwaWQgY3VycmVudGx5IG9wZXJhdGVzICovCiAJc3RydWN0 IHVjcmVkCSp1Y3JlZDsJCQkvKiB1c3IgY3VycmVudGx5IG9wZXJhdGVzICovCkBAIC0yMDEsNyAr MjA3LDYgQEAKIGludCAgbmNwX2Nvbm5fYWNjZXNzKHN0cnVjdCBuY3BfY29ubiAqY29ubixzdHJ1 Y3QgdWNyZWQgKmNyZWQsbW9kZV90IG1vZGUpOwogaW50ICBuY3BfY29ubl9sb2NrKHN0cnVjdCBu Y3BfY29ubiAqY29ubixzdHJ1Y3QgdGhyZWFkICp0ZCwgc3RydWN0IHVjcmVkICpjcmVkLGludCBt b2RlKTsKIHZvaWQgbmNwX2Nvbm5fdW5sb2NrKHN0cnVjdCBuY3BfY29ubiAqY29ubixzdHJ1Y3Qg dGhyZWFkICp0ZCk7Ci1pbnQgIG5jcF9jb25uX2Fzc2VydF9sb2NrZWQoc3RydWN0IG5jcF9jb25u ICpjb25uLGNvbnN0IGNoYXIgKmNoZWNrZXIsc3RydWN0IHRocmVhZCAqdGQpOwogdm9pZCBuY3Bf Y29ubl9pbnZhbGlkYXRlKHN0cnVjdCBuY3BfY29ubiAqbmNwKTsKIGludCAgbmNwX2Nvbm5faW52 YWxpZChzdHJ1Y3QgbmNwX2Nvbm4gKm5jcCk7CiAvKmludCAgbmNwX2Nvbm5fcmVmKHN0cnVjdCBu Y3BfY29ubiAqY29ubiwgcGlkX3QgcGlkKTsKQEAgLTIxMiw4ICsyMTcsMTIgQEAKIGludCAgbmNw X2Nvbm5fZ2V0YnlsaShzdHJ1Y3QgbmNwX2Nvbm5fbG9naW5mbyAqbGksc3RydWN0IHRocmVhZCAq dGQsIHN0cnVjdCB1Y3JlZCAqY3JlZCwgCiAJaW50IG1vZGUsIHN0cnVjdCBuY3BfY29ubiAqKmNv bm5wcCk7CiBpbnQgIG5jcF9jb25uX3NldHByaW1hcnkoc3RydWN0IG5jcF9jb25uICpjb25uLCBp bnQgb24pOwotaW50ICBuY3BfY29ubl9sb2NrbGlzdChpbnQgZmxhZ3MsIHN0cnVjdCB0aHJlYWQg KnRkKTsKLXZvaWQgbmNwX2Nvbm5fdW5sb2NrbGlzdChzdHJ1Y3QgdGhyZWFkICp0ZCk7Cit2b2lk IG5jcF9jb25uX3Nsb2NrbGlzdCh2b2lkKTsKK3ZvaWQgbmNwX2Nvbm5feGxvY2tsaXN0KHZvaWQp OworaW50ICBuY3BfY29ubl90cnlfc2xvY2tsaXN0KHZvaWQpOworaW50ICBuY3BfY29ubl90cnlf eGxvY2tsaXN0KHZvaWQpOwordm9pZCBuY3BfY29ubl9zdW5sb2NrbGlzdCh2b2lkKTsKK3ZvaWQg bmNwX2Nvbm5feHVubG9ja2xpc3Qodm9pZCk7CiBpbnQgIG5jcF9jb25uX2dldGhhbmRsZShzdHJ1 Y3QgbmNwX2Nvbm4gKmNvbm4sIHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3QgbmNwX2hhbmRsZSAq KmhhbmRsZSk7CiBpbnQgIG5jcF9jb25uX3B1dGhhbmRsZShzdHJ1Y3QgbmNwX2hhbmRsZSAqaGFu ZGxlLCBzdHJ1Y3QgdGhyZWFkICp0ZCwgaW50IGZvcmNlKTsKIGludCAgbmNwX2Nvbm5fZmluZGhh bmRsZShpbnQgY29ubkhhbmRsZSwgc3RydWN0IHRocmVhZCAqdGQsIHN0cnVjdCBuY3BfaGFuZGxl ICoqaGFuZGxlKTsKLS0tIC91c3Ivc3JjL3N5cy9uZXRuY3AvbmNwX3N1YnIuYwkyMDA5LTAxLTEw IDEzOjM5OjQ4LjAwMDAwMDAwMCArMDEwMAorKysgc3lzL25ldG5jcC9uY3Bfc3Vici5jCTIwMDkt MDEtMjggMTk6MjQ6MDguMDAwMDAwMDAwICswMTAwCkBAIC05MCw3ICs5MCw3IEBACiAJCWlmIChu Y3BfY29ubl9wdXRwcm9jaGFuZGxlcyh0ZCkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCW5jcF9j b25uX2xvY2tsaXN0KExLX0VYQ0xVU0lWRSwgdGQpOworCQluY3BfY29ubl94bG9ja2xpc3QoKTsK IAkJZm9yIChuY3AgPSBTTElTVF9GSVJTVCgmY29ubl9saXN0KTsgbmNwOyBuY3AgPSBubmNwKSB7 CiAJCQlubmNwID0gU0xJU1RfTkVYVChuY3AsIG5jX25leHQpOwogCQkJaWYgKG5jcF9jb25uX2xv Y2sobmNwLCB0ZCwgdGQtPnRkX3VjcmVkLApAQCAtOTksNyArOTksNyBAQAogCQkJaWYgKG5jcF9j b25uX2ZyZWUobmNwKSAhPSAwKQogCQkJCW5jcF9jb25uX3VubG9jayhuY3AsIHRkKTsKIAkJfQot CQluY3BfY29ubl91bmxvY2tsaXN0KHRkKTsKKwkJbmNwX2Nvbm5feHVubG9ja2xpc3QoKTsKIAl9 CiAJbXR4X3VubG9jaygmR2lhbnQpOwogfQpAQCAtMTM0LDEwICsxMzQsMTAgQEAKIHsKIAlzdHJ1 Y3QgbmNwX2Nvbm4gKmNvbm47CiAKLQlpZihuY3BfY29ubl9sb2NrbGlzdChMS19TSEFSRUQgfCBM S19OT1dBSVQsIE5VTEwpID09IDApIHsKKwlpZiAobmNwX2Nvbm5fdHJ5X3Nsb2NrbGlzdCgpKSB7 CiAJCVNMSVNUX0ZPUkVBQ0goY29ubiwgJmNvbm5fbGlzdCwgbmNfbmV4dCkKIAkJCW5jcF9jaGVj a19jb25uKGNvbm4pOwotCQluY3BfY29ubl91bmxvY2tsaXN0KE5VTEwpOworCQluY3BfY29ubl9z dW5sb2NrbGlzdCgpOwogCX0KIAluY3BfdGltZXJfaGFuZGxlID0gdGltZW91dChuY3BfdGltZXIs IE5VTEwsIE5DUF9USU1FUl9USUNLKTsKIH0K --000e0cd286e283a38b04618f5e64--