From owner-freebsd-net@FreeBSD.ORG Mon Sep 5 07:21:04 2011 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 468AC1065676; Mon, 5 Sep 2011 07:21:04 +0000 (UTC) (envelope-from syuu@dokukino.com) Received: from mail-qy0-f175.google.com (mail-qy0-f175.google.com [209.85.216.175]) by mx1.freebsd.org (Postfix) with ESMTP id CBA0C8FC15; Mon, 5 Sep 2011 07:21:03 +0000 (UTC) Received: by qyk4 with SMTP id 4so1881763qyk.13 for ; Mon, 05 Sep 2011 00:21:03 -0700 (PDT) Received: by 10.229.38.34 with SMTP id z34mr2573636qcd.234.1315205532129; Sun, 04 Sep 2011 23:52:12 -0700 (PDT) MIME-Version: 1.0 Received: by 10.229.130.103 with HTTP; Sun, 4 Sep 2011 23:51:32 -0700 (PDT) From: Takuya ASADA Date: Mon, 5 Sep 2011 15:51:32 +0900 Message-ID: To: jfv@freebsd.org, freebsd-net@freebsd.org Content-Type: multipart/mixed; boundary=0016e6d266028c9aa204ac2c26c4 Cc: Subject: Adding Flow Director sysctls to ixgbe(4) X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 05 Sep 2011 07:21:04 -0000 --0016e6d266028c9aa204ac2c26c4 Content-Type: text/plain; charset=UTF-8 Hi, I implemented Ethernet Flow Director sysctls to ixgbe(4), here's a detail: - Adding removing signature filter On linux version of ixgbe driver, it has ability to set/remove perfect filter from userland using ethtool command. I implemented similar feature, but on sysctl, and not perfect filter but signature filter(which means hash collision may occurs). Following command adds a signature filter on ix0 for 10.0.0.2:47390/tcp -> 10.0.0.1:22/tcp, queueing Rx queue 10. $ sysctl dev.ix.0.set_fdir_signature="tcpv4 10.0.0.2:47390 10.0.0.1:22 10" Clearing a filter takes similar values but not includes queue number: $ sysctl dev.ix.0.clear_fdir_signature="tcpv4 10.0.0.2:47390 10.0.0.1:22" - Statistics of Flow Director These sysctls poll fdir statistics register: dev.ix.*.mac_stats.fdirfree_free dev.ix.*.mac_stats.fdirfree_coll dev.ix.*.mac_stats.fdirustat_add dev.ix.*.mac_stats.fdirustat_remove dev.ix.*.mac_stats.fdirfstat_fadd dev.ix.*.mac_stats.fdirfstat_fremove dev.ix.*.mac_stats.fdirmatch dev.ix.*.mac_stats.fdirmiss And I divided "#ifdef IXGBE_FDIR" to "#ifdef IXGBE_FDIR" and "#ifdef IXGBE_FDIR_ATR". If only IXGBE_FDIR is defined, only set_fdir_signature sysctl sets signature filters. If IXGBE_FDIR and IXGBE_FDIR_ATR are defined, ixgbe_atr also sets signature filters automatically. Which means even if you set a filter with specific queue number via sysctl, ixgbe_atr will override the queue number. --0016e6d266028c9aa204ac2c26c4 Content-Type: text/x-patch; charset=US-ASCII; name="ixgbe-head-signature.diff" Content-Disposition: attachment; filename="ixgbe-head-signature.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gs71oy620 SW5kZXg6IGl4Z2JlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaXhnYmUuYwkocmV2aXNpb24gMjI1MDEzKQor KysgaXhnYmUuYwkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTEgQEAKICNpbmNsdWRlICJv cHRfaW5ldDYuaCIKICNlbmRpZgogCisvKgorI2RlZmluZSBJWEdCRV9GRElSIDEKKyNkZWZpbmUg SVhHQkVfRkRJUl9BVFIgMQorKi8KKwogI2luY2x1ZGUgIml4Z2JlLmgiCiAKIC8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKQEAgLTE1Myw2ICsxNTgsOCBAQAogc3RhdGljIGludCAgICAgIGl4Z2JlX3htaXQoc3RydWN0 IHR4X3JpbmcgKiwgc3RydWN0IG1idWYgKiopOwogc3RhdGljIGludAlpeGdiZV9zZXRfZmxvd2Nu dGwoU1lTQ1RMX0hBTkRMRVJfQVJHUyk7CiBzdGF0aWMgaW50CWl4Z2JlX3NldF9hZHZlcnRpc2Uo U1lTQ1RMX0hBTkRMRVJfQVJHUyk7CitzdGF0aWMgaW50CWl4Z2JlX3NldF9mZGlyX3NpZ25hdHVy ZShTWVNDVExfSEFORExFUl9BUkdTKTsKK3N0YXRpYyBpbnQJaXhnYmVfY2xlYXJfZmRpcl9zaWdu YXR1cmUoU1lTQ1RMX0hBTkRMRVJfQVJHUyk7CiBzdGF0aWMgaW50CWl4Z2JlX2RtYV9tYWxsb2Mo c3RydWN0IGFkYXB0ZXIgKiwgYnVzX3NpemVfdCwKIAkJICAgIHN0cnVjdCBpeGdiZV9kbWFfYWxs b2MgKiwgaW50KTsKIHN0YXRpYyB2b2lkICAgICBpeGdiZV9kbWFfZnJlZShzdHJ1Y3QgYWRhcHRl ciAqLCBzdHJ1Y3QgaXhnYmVfZG1hX2FsbG9jICopOwpAQCAtMTkxLDggKzE5OCwxMCBAQAogc3Rh dGljIHZvaWQJaXhnYmVfaGFuZGxlX21zZih2b2lkICosIGludCk7CiBzdGF0aWMgdm9pZAlpeGdi ZV9oYW5kbGVfbW9kKHZvaWQgKiwgaW50KTsKIAorI2lmZGVmIElYR0JFX0ZESVJfQVRSCitzdGF0 aWMgdm9pZAlpeGdiZV9hdHIoc3RydWN0IHR4X3JpbmcgKiwgc3RydWN0IG1idWYgKik7CisjZW5k aWYKICNpZmRlZiBJWEdCRV9GRElSCi1zdGF0aWMgdm9pZAlpeGdiZV9hdHIoc3RydWN0IHR4X3Jp bmcgKiwgc3RydWN0IG1idWYgKik7CiBzdGF0aWMgdm9pZAlpeGdiZV9yZWluaXRfZmRpcih2b2lk ICosIGludCk7CiAjZW5kaWYKIApAQCAtMjkyLDcgKzMwMSw3IEBACiAvKiBLZWVwIHJ1bm5pbmcg dGFiIG9uIHRoZW0gZm9yIHNhbml0eSBjaGVjayAqLwogc3RhdGljIGludCBpeGdiZV90b3RhbF9w b3J0czsKIAotI2lmZGVmIElYR0JFX0ZESVIKKyNpZmRlZiBJWEdCRV9GRElSX0FUUgogLyoKICoq IEZvciBGbG93IERpcmVjdG9yOiB0aGlzIGlzIHRoZQogKiogbnVtYmVyIG9mIFRYIHBhY2tldHMg d2Ugc2FtcGxlCkBAIC0zMDMsNiArMzEyLDggQEAKICoqIHNldHRpbmcgdGhpcyB0byAwLgogKi8K IHN0YXRpYyBpbnQgYXRyX3NhbXBsZV9yYXRlID0gMjA7CisjZW5kaWYKKyNpZmRlZiBJWEdCRV9G RElSCiAvKiAKICoqIEZsb3cgRGlyZWN0b3IgYWN0dWFsbHkgJ3N0ZWFscycKICoqIHBhcnQgb2Yg dGhlIHBhY2tldCBidWZmZXIgYXMgaXRzCkBAIC00MTYsNiArNDI3LDE2IEBACiAJCQlPSURfQVVU TywgImVuYWJsZV9haW0iLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAogCQkJJml4Z2JlX2VuYWJs ZV9haW0sIDEsICJJbnRlcnJ1cHQgTW9kZXJhdGlvbiIpOwogCisJU1lTQ1RMX0FERF9QUk9DKGRl dmljZV9nZXRfc3lzY3RsX2N0eChkZXYpLAorCQkJU1lTQ1RMX0NISUxEUkVOKGRldmljZV9nZXRf c3lzY3RsX3RyZWUoZGV2KSksCisJCQlPSURfQVVUTywgInNldF9mZGlyX3NpZ25hdHVyZSIsIENU TFRZUEVfU1RSSU5HIHwgQ1RMRkxBR19XUiwKKwkJCWFkYXB0ZXIsIDAsIGl4Z2JlX3NldF9mZGly X3NpZ25hdHVyZSwgIkEiLCAiU2V0IEZsb3cgRGlyZWN0b3IgU2lnbmF0dXJlIik7CisKKwlTWVND VExfQUREX1BST0MoZGV2aWNlX2dldF9zeXNjdGxfY3R4KGRldiksCisJCQlTWVNDVExfQ0hJTERS RU4oZGV2aWNlX2dldF9zeXNjdGxfdHJlZShkZXYpKSwKKwkJCU9JRF9BVVRPLCAiY2xlYXJfZmRp cl9zaWduYXR1cmUiLCBDVExUWVBFX1NUUklORyB8IENUTEZMQUdfV1IsCisJCQlhZGFwdGVyLCAw LCBpeGdiZV9jbGVhcl9mZGlyX3NpZ25hdHVyZSwgIkEiLCAiQ2xlYXIgRmxvdyBEaXJlY3RvciBT aWduYXR1cmUiKTsKKwogCS8qIFNldCB1cCB0aGUgdGltZXIgY2FsbG91dCAqLwogCWNhbGxvdXRf aW5pdF9tdHgoJmFkYXB0ZXItPnRpbWVyLCAmYWRhcHRlci0+Y29yZV9tdHgsIDApOwogCkBAIC0x Njg1LDcgKzE3MDYsNyBAQAogICAgICAgICAgICAgICAgIGNtZF90eXBlX2xlbiB8PSBJWEdCRV9B RFZUWERfTUFDX1RTVEFNUDsKICNlbmRpZgogCi0jaWZkZWYgSVhHQkVfRkRJUgorI2lmZGVmIElY R0JFX0ZESVJfQVRSCiAJLyogRG8gdGhlIGZsb3cgZGlyZWN0b3IgbWFnaWMgKi8KIAlpZiAoKHR4 ci0+YXRyX3NhbXBsZSkgJiYgKCFhZGFwdGVyLT5mZGlyX3JlaW5pdCkpIHsKIAkJKyt0eHItPmF0 cl9jb3VudDsKQEAgLTI4MzYsNyArMjg1Nyw3IEBACiAJCXR4YnVmLT5lb3BfaW5kZXggPSAtMTsK ICAgICAgICAgfQogCi0jaWZkZWYgSVhHQkVfRkRJUgorI2lmZGVmIElYR0JFX0ZESVJfQVRSCiAJ LyogU2V0IHRoZSByYXRlIGF0IHdoaWNoIHdlIHNhbXBsZSBwYWNrZXRzICovCiAJaWYgKGFkYXB0 ZXItPmh3Lm1hYy50eXBlICE9IGl4Z2JlX21hY184MjU5OEVCKQogCQl0eHItPmF0cl9zYW1wbGUg PSBhdHJfc2FtcGxlX3JhdGU7CkBAIC0zMjE2LDcgKzMyMzcsNyBAQAogCXJldHVybiBUUlVFOwog fQogCi0jaWZkZWYgSVhHQkVfRkRJUgorI2lmZGVmIElYR0JFX0ZESVJfQVRSCiAvKgogKiogVGhp cyByb3V0aW5lIHBhcnNlcyBwYWNrZXQgaGVhZGVycyBzbyB0aGF0IEZsb3cKICoqIERpcmVjdG9y IGNhbiBtYWtlIGEgaGFzaGVkIGZpbHRlciB0YWJsZSBlbnRyeSAKQEAgLTQxNTEsNyArNDE3Miw3 IEBACiAJCXUzMgkJcnNjLCBwdHlwZTsKIAkJdTE2CQlobGVuLCBwbGVuLCBoZHIsIHZ0YWc7CiAJ CWJvb2wJCWVvcDsKLSAKKwogCQkvKiBTeW5jIHRoZSByaW5nLiAqLwogCQlidXNfZG1hbWFwX3N5 bmMocnhyLT5yeGRtYS5kbWFfdGFnLCByeHItPnJ4ZG1hLmRtYV9tYXAsCiAJCSAgICBCVVNfRE1B U1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5DX1BPU1RXUklURSk7CkBAIC00OTMzLDYgKzQ5NTQs MzAgQEAKIAkJYWRhcHRlci0+c3RhdHMuZmNvZWR3dGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElY R0JFX0ZDT0VEV1RDKTsKIAl9CiAKKwkvKiBPbmx5IHJlYWQgZmRpciBvbiA4MjU5OSAqLworCWlm IChody0+bWFjLnR5cGUgIT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJYWRhcHRlci0+c3RhdHMu ZmRpcmZyZWVfZnJlZSA9CisJCQkoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZESVJGUkVFKSAm IElYR0JFX0ZESVJGUkVFX0ZSRUVfTUFTSykKKwkJCT4+IElYR0JFX0ZESVJGUkVFX0ZSRUVfU0hJ RlQ7CisJCWFkYXB0ZXItPnN0YXRzLmZkaXJmcmVlX2NvbGwgPQorCQkJKElYR0JFX1JFQURfUkVH KGh3LCBJWEdCRV9GRElSRlJFRSkgJiBJWEdCRV9GRElSRlJFRV9DT0xMX01BU0spCisJCQk+PiBJ WEdCRV9GRElSRlJFRV9DT0xMX1NISUZUOworCQlhZGFwdGVyLT5zdGF0cy5mZGlydXN0YXRfYWRk ICs9CisJCQkoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZESVJVU1RBVCkgJiBJWEdCRV9GRElS VVNUQVRfQUREX01BU0spCisJCQk+PiBJWEdCRV9GRElSVVNUQVRfQUREX1NISUZUOworCQlhZGFw dGVyLT5zdGF0cy5mZGlydXN0YXRfcmVtb3ZlICs9CisJCQkoSVhHQkVfUkVBRF9SRUcoaHcsIElY R0JFX0ZESVJVU1RBVCkgJiBJWEdCRV9GRElSVVNUQVRfUkVNT1ZFX01BU0spCisJCQk+PiBJWEdC RV9GRElSVVNUQVRfUkVNT1ZFX1NISUZUOworCQlhZGFwdGVyLT5zdGF0cy5mZGlyZnN0YXRfZmFk ZCArPQorCQkJKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GRElSRlNUQVQpICYgSVhHQkVfRkRJ UkZTVEFUX0ZBRERfTUFTSykKKwkJCT4+IElYR0JFX0ZESVJGU1RBVF9GQUREX1NISUZUOworCQlh ZGFwdGVyLT5zdGF0cy5mZGlyZnN0YXRfZnJlbW92ZSArPQorCQkJKElYR0JFX1JFQURfUkVHKGh3 LCBJWEdCRV9GRElSRlNUQVQpICYgSVhHQkVfRkRJUkZTVEFUX0ZSRU1PVkVfTUFTSykKKwkJCT4+ IElYR0JFX0ZESVJGU1RBVF9GUkVNT1ZFX1NISUZUOworCQlhZGFwdGVyLT5zdGF0cy5mZGlybWF0 Y2ggKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZESVJNQVRDSCk7CisJCWFkYXB0ZXItPnN0 YXRzLmZkaXJtaXNzICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GRElSTUlTUyk7CisJfQor CiAJLyogRmlsbCBvdXQgdGhlIE9TIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCiAJaWZwLT5pZl9p cGFja2V0cyA9IGFkYXB0ZXItPnN0YXRzLmdwcmM7CiAJaWZwLT5pZl9vcGFja2V0cyA9IGFkYXB0 ZXItPnN0YXRzLmdwdGM7CkBAIC01MzAxLDYgKzUzNDYsMzIgQEAKIAlTWVNDVExfQUREX1VRVUFE KGN0eCwgc3RhdF9saXN0LCBPSURfQVVUTywgImZjX2R3b3JkX3R4ZCIsCiAJCUNUTEZMQUdfUkQs ICZzdGF0cy0+ZmNvZWR3dGMsCiAJCSJGQ29FIERXb3JkcyBUcmFuc21pdHRlZCIpOworCisJLyog ZmRpciBzdGF0cyAqLworCVNZU0NUTF9BRERfVVFVQUQoY3R4LCBzdGF0X2xpc3QsIE9JRF9BVVRP LCAiZmRpcmZyZWVfZnJlZSIsCisJCUNUTEZMQUdfUkQsICZzdGF0cy0+ZmRpcmZyZWVfZnJlZSwK KwkJIiIpOworCVNZU0NUTF9BRERfVVFVQUQoY3R4LCBzdGF0X2xpc3QsIE9JRF9BVVRPLCAiZmRp cmZyZWVfY29sbCIsCisJCUNUTEZMQUdfUkQsICZzdGF0cy0+ZmRpcmZyZWVfY29sbCwKKwkJIiIp OworCVNZU0NUTF9BRERfVVFVQUQoY3R4LCBzdGF0X2xpc3QsIE9JRF9BVVRPLCAiZmRpcnVzdGF0 X2FkZCIsCisJCUNUTEZMQUdfUkQsICZzdGF0cy0+ZmRpcnVzdGF0X2FkZCwKKwkJIiIpOworCVNZ U0NUTF9BRERfVVFVQUQoY3R4LCBzdGF0X2xpc3QsIE9JRF9BVVRPLCAiZmRpcnVzdGF0X3JlbW92 ZSIsCisJCUNUTEZMQUdfUkQsICZzdGF0cy0+ZmRpcnVzdGF0X3JlbW92ZSwKKwkJIiIpOworCVNZ U0NUTF9BRERfVVFVQUQoY3R4LCBzdGF0X2xpc3QsIE9JRF9BVVRPLCAiZmRpcmZzdGF0X2ZhZGQi LAorCQlDVExGTEFHX1JELCAmc3RhdHMtPmZkaXJmc3RhdF9mYWRkLAorCQkiIik7CisJU1lTQ1RM X0FERF9VUVVBRChjdHgsIHN0YXRfbGlzdCwgT0lEX0FVVE8sICJmZGlyZnN0YXRfZnJlbW92ZSIs CisJCUNUTEZMQUdfUkQsICZzdGF0cy0+ZmRpcmZzdGF0X2ZyZW1vdmUsCisJCSIiKTsKKwlTWVND VExfQUREX1VRVUFEKGN0eCwgc3RhdF9saXN0LCBPSURfQVVUTywgImZkaXJtYXRjaCIsCisJCUNU TEZMQUdfUkQsICZzdGF0cy0+ZmRpcm1hdGNoLAorCQkiIik7CisJU1lTQ1RMX0FERF9VUVVBRChj dHgsIHN0YXRfbGlzdCwgT0lEX0FVVE8sICJmZGlybWlzcyIsCisJCUNUTEZMQUdfUkQsICZzdGF0 cy0+ZmRpcm1pc3MsCisJCSIiKTsKIH0KIAogLyoKQEAgLTUzOTIsMyArNTQ2MywxMzMgQEAKIAog CXJldHVybiAoZXJyb3IpOwogfQorCitzdGF0aWMgaW50CitpeGdiZV9mZGlyX3BhcnNlX2FkZHJl c3MoY2hhciAqc3RyaW5nLCBzdHJ1Y3QgaW5fYWRkciAqaXAsIGludCAqcG9ydCkKK3sKKwljaGFy ICp0b2tlbjsKKwlpbnQgZXJyb3I7CisKKwl0b2tlbiA9IHN0cnNlcCgmc3RyaW5nLCAiOiIpOwor CWlmICghdG9rZW4pCisJCXJldHVybiAoRUlOVkFMKTsKKworCWVycm9yID0gaW5ldF9hdG9uKHRv a2VuLCBpcCk7CisJaWYgKGVycm9yICE9IDEpCisJCXJldHVybiAoZXJyb3IpOworCisJdG9rZW4g PSBzdHJzZXAoJnN0cmluZywgIjoiKTsKKwlpZiAoIXRva2VuKQorCQlyZXR1cm4gKEVJTlZBTCk7 CisKKwkqcG9ydCA9IHN0cnRvbCh0b2tlbiwgTlVMTCwgMCk7CisJaWYgKCpwb3J0IDw9IDApCisJ CXJldHVybiAoRUlOVkFMKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2l4Z2Jl X2ZkaXJfcGFyc2Vfc3lzY3RsKGNoYXIgKnN0cmluZywgdW5pb24gaXhnYmVfYXRyX2hhc2hfZHdv cmQgKmlucHV0LCAKKwl1bmlvbiBpeGdiZV9hdHJfaGFzaF9kd29yZCAqY29tbW9uLCBpbnQgKnF1 ZV9pbmRleCkKK3sKKwljaGFyICp0b2tlbjsKKwlzdHJ1Y3QgaW5fYWRkciBzcmNfaXAsIGRzdF9p cDsKKwlpbnQgc3JjX3BvcnQgPSAwLCBkc3RfcG9ydCA9IDA7CisJaW50IGVycm9yOworCisJdG9r ZW4gPSBzdHJzZXAoJnN0cmluZywgIiAiKTsKKwlpZiAoIXRva2VuKQorCQlyZXR1cm4gKEVJTlZB TCk7CisKKwlpZiAoIXN0cmNtcCh0b2tlbiwgInRjcHY0IikpCisJCWlucHV0LT5mb3JtYXR0ZWQu Zmxvd190eXBlIF49IElYR0JFX0FUUl9GTE9XX1RZUEVfVENQVjQ7CisJZWxzZSBpZiAoIXN0cmNt cCh0b2tlbiwgInVkcHY0IikpCisJCWlucHV0LT5mb3JtYXR0ZWQuZmxvd190eXBlIF49IElYR0JF X0FUUl9GTE9XX1RZUEVfVURQVjQ7CisJZWxzZQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwl0b2tl biA9IHN0cnNlcCgmc3RyaW5nLCAiICIpOworCWlmICghdG9rZW4pCisJCXJldHVybiAoRUlOVkFM KTsKKworCWVycm9yID0gaXhnYmVfZmRpcl9wYXJzZV9hZGRyZXNzKHRva2VuLCAmc3JjX2lwLCAm c3JjX3BvcnQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChlcnJvcik7CisKKwljb21tb24tPnBv cnQuc3JjIF49IGh0b25zKHNyY19wb3J0KTsKKworCXRva2VuID0gc3Ryc2VwKCZzdHJpbmcsICIg Iik7CisJaWYgKCF0b2tlbikKKwkJcmV0dXJuIChFSU5WQUwpOworCisJZXJyb3IgPSBpeGdiZV9m ZGlyX3BhcnNlX2FkZHJlc3ModG9rZW4sICZkc3RfaXAsICZkc3RfcG9ydCk7CisJaWYgKGVycm9y KQorCQlyZXR1cm4gKGVycm9yKTsKKworCWNvbW1vbi0+cG9ydC5kc3QgXj0gaHRvbnMoZHN0X3Bv cnQpOworCWNvbW1vbi0+ZmxleF9ieXRlcyBePSBodG9ucyhFVEhFUlRZUEVfSVApOworCWNvbW1v bi0+aXAgXj0gc3JjX2lwLnNfYWRkciBeIGRzdF9pcC5zX2FkZHI7CisKKwlpZiAocXVlX2luZGV4 ICE9IE5VTEwpIHsKKwkJdG9rZW4gPSBzdHJzZXAoJnN0cmluZywgIiAiKTsKKwkJaWYgKCF0b2tl bikKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJKnF1ZV9pbmRleCA9IHN0cnRvbCh0b2tlbiwgTlVM TCwgMCk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAoraXhnYmVfc2V0X2Zk aXJfc2lnbmF0dXJlKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJY2hhciBidWZbMTAyNF0gPSB7 MCx9OworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCXVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3 b3JkIGlucHV0ID0gey5kd29yZCA9IDB9OworCXVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGNv bW1vbiA9IHsuZHdvcmQgPSAwfTsKKwlpbnQgcXVlX2luZGV4OworCWludCBlcnJvcjsKKworCWFk YXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikgYXJnMTsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVf c3RyaW5nKG9pZHAsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIHJlcSk7CisJaWYgKGVycm9yKQorCQlyZXR1 cm4gKGVycm9yKTsKKwlpZiAoYnVmWzBdID09ICdcMCcpCisJCXJldHVybiAoMCk7CisKKwllcnJv ciA9IGl4Z2JlX2ZkaXJfcGFyc2Vfc3lzY3RsKGJ1ZiwgJmlucHV0LCAmY29tbW9uLCAmcXVlX2lu ZGV4KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJaXhnYmVfZmRpcl9hZGRf c2lnbmF0dXJlX2ZpbHRlcl84MjU5OSgmYWRhcHRlci0+aHcsCisJICAgIGlucHV0LCBjb21tb24s IHF1ZV9pbmRleCk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitpeGdiZV9jbGVh cl9mZGlyX3NpZ25hdHVyZShTWVNDVExfSEFORExFUl9BUkdTKQoreworCWNoYXIgYnVmWzEwMjRd ID0gezAsfTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKKwl1bmlvbiBpeGdiZV9hdHJfaGFz aF9kd29yZCBpbnB1dCA9IHsuZHdvcmQgPSAwfTsKKwl1bmlvbiBpeGdiZV9hdHJfaGFzaF9kd29y ZCBjb21tb24gPSB7LmR3b3JkID0gMH07CisJaW50IGVycm9yOworCisJYWRhcHRlciA9IChzdHJ1 Y3QgYWRhcHRlciAqKSBhcmcxOworCWVycm9yID0gc3lzY3RsX2hhbmRsZV9zdHJpbmcob2lkcCwg YnVmLCBzaXplb2YoYnVmKSwgcmVxKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOwor CWlmIChidWZbMF0gPT0gJ1wwJykKKwkJcmV0dXJuICgwKTsKKworCWVycm9yID0gaXhnYmVfZmRp cl9wYXJzZV9zeXNjdGwoYnVmLCAmaW5wdXQsICZjb21tb24sIE5VTEwpOworCWlmIChlcnJvcikK KwkJcmV0dXJuIChlcnJvcik7CisKKwlpeGdiZV9mZGlyX2NsZWFyX3NpZ25hdHVyZV9maWx0ZXJf ODI1OTkoJmFkYXB0ZXItPmh3LAorCSAgICBpbnB1dCwgY29tbW9uKTsKKworCXJldHVybiAoMCk7 Cit9CkluZGV4OiBpeGdiZV90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaXhnYmVfdHlwZS5oCShyZXZp c2lvbiAyMjUwMTMpCisrKyBpeGdiZV90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1ODgsNiAr MjU4OCw4IEBACiAJdTY0IHFidGNbMTZdOwogCXU2NCBxcHJkY1sxNl07CiAJdTY0IHB4b24yb2Zm Y1s4XTsKKwl1NjQgZmRpcmZyZWVfZnJlZTsKKwl1NjQgZmRpcmZyZWVfY29sbDsKIAl1NjQgZmRp cnVzdGF0X2FkZDsKIAl1NjQgZmRpcnVzdGF0X3JlbW92ZTsKIAl1NjQgZmRpcmZzdGF0X2ZhZGQ7 CkluZGV4OiBpeGdiZV84MjU5OS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGl4Z2JlXzgyNTk5LmMJKHJldmlz aW9uIDIyNTAxMykKKysrIGl4Z2JlXzgyNTk5LmMJKHdvcmtpbmcgY29weSkKQEAgLTEyNDIsNiAr MTI0Miw3IEBACiAJLyogTW92ZSB0aGUgZmxleGlibGUgYnl0ZXMgdG8gdXNlIHRoZSBldGhlcnR5 cGUgLSBzaGlmdCA2IHdvcmRzICovCiAJZmRpcmN0cmwgfD0gKDB4NiA8PCBJWEdCRV9GRElSQ1RS TF9GTEVYX1NISUZUKTsKIAorCWZkaXJjdHJsIHw9IElYR0JFX0ZESVJDVFJMX1JFUE9SVF9TVEFU VVM7CiAKIAkvKiBQcmltZSB0aGUga2V5cyBmb3IgaGFzaGluZyAqLwogCUlYR0JFX1dSSVRFX1JF RyhodywgSVhHQkVfRkRJUkhLRVksIElYR0JFX0FUUl9CVUNLRVRfSEFTSF9LRVkpOwpAQCAtMTU1 Miw3ICsxNTUzLDcgQEAKIH0KIAogLyoqCi0gKiAgaXhnYmVfYXRyX2FkZF9zaWduYXR1cmVfZmls dGVyXzgyNTk5IC0gQWRkcyBhIHNpZ25hdHVyZSBoYXNoIGZpbHRlcgorICogIGl4Z2JlX2ZkaXJf YWRkX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkgLSBBZGRzIGEgc2lnbmF0dXJlIGhhc2ggZmlsdGVy CiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICogIEBzdHJlYW06IGlu cHV0IGJpdHN0cmVhbQogICogIEBxdWV1ZTogcXVldWUgaW5kZXggdG8gZGlyZWN0IHRyYWZmaWMg dG8KQEAgLTE2MDQsNiArMTYwNSw1NiBAQAogfQogCiAvKioKKyAqICBpeGdiZV9mZGlyX2NsZWFy X3NpZ25hdHVyZV9maWx0ZXJfODI1OTkgLSBBZGRzIGEgc2lnbmF0dXJlIGhhc2ggZmlsdGVyCisg KiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzdHJlYW06IGlucHV0 IGJpdHN0cmVhbQorICogIEBxdWV1ZTogcXVldWUgaW5kZXggdG8gZGlyZWN0IHRyYWZmaWMgdG8K KyAqKi8KK3MzMiBpeGdiZV9mZGlyX2NsZWFyX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkoc3RydWN0 IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgY29tbW9uKQor eworCXU2NCAgZmRpcmhhc2hjbWQ7CisJdTMyICBmZGlyY21kOworCisJREVCVUdGVU5DKCJpeGdi ZV9mZGlyX2NsZWFyX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkiKTsKKworCS8qCisJICogR2V0IHRo ZSBmbG93X3R5cGUgaW4gb3JkZXIgdG8gcHJvZ3JhbSBGRElSQ01EIHByb3Blcmx5CisJICogbG93 ZXN0IDIgYml0cyBhcmUgRkRJUkNNRC5MNFRZUEUsIHRoaXJkIGxvd2VzdCBiaXQgaXMgRkRJUkNN RC5JUFY2CisJICovCisJc3dpdGNoIChpbnB1dC5mb3JtYXR0ZWQuZmxvd190eXBlKSB7CisJY2Fz ZSBJWEdCRV9BVFJfRkxPV19UWVBFX1RDUFY0OgorCWNhc2UgSVhHQkVfQVRSX0ZMT1dfVFlQRV9V RFBWNDoKKwljYXNlIElYR0JFX0FUUl9GTE9XX1RZUEVfU0NUUFY0OgorCWNhc2UgSVhHQkVfQVRS X0ZMT1dfVFlQRV9UQ1BWNjoKKwljYXNlIElYR0JFX0FUUl9GTE9XX1RZUEVfVURQVjY6CisJY2Fz ZSBJWEdCRV9BVFJfRkxPV19UWVBFX1NDVFBWNjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVC VUdPVVQoIiBFcnJvciBvbiBmbG93IHR5cGUgaW5wdXRcbiIpOworCQlyZXR1cm4gSVhHQkVfRVJS X0NPTkZJRzsKKwl9CisKKwkvKiBjb25maWd1cmUgRkRJUkNNRCByZWdpc3RlciAqLworCWZkaXJj bWQgPSBJWEdCRV9GRElSQ01EX0NNRF9SRU1PVkVfRkxPVyB8IAorCSAgICAgICAgICBJWEdCRV9G RElSQ01EX0xBU1QgfCBJWEdCRV9GRElSQ01EX1FVRVVFX0VOOworCWZkaXJjbWQgfD0gaW5wdXQu Zm9ybWF0dGVkLmZsb3dfdHlwZSA8PCBJWEdCRV9GRElSQ01EX0ZMT1dfVFlQRV9TSElGVDsKKwor CS8qCisJICogVGhlIGxvd2VyIDMyLWJpdHMgb2YgZmRpcmhhc2hjbWQgaXMgZm9yIEZESVJIQVNI LCB0aGUgdXBwZXIgMzItYml0cworCSAqIGlzIGZvciBGRElSQ01ELiAgVGhlbiBkbyBhIDY0LWJp dCByZWdpc3RlciB3cml0ZSBmcm9tIEZESVJIQVNILgorCSAqLworCWZkaXJoYXNoY21kID0gKHU2 NClmZGlyY21kIDw8IDMyOworCWZkaXJoYXNoY21kIHw9IGl4Z2JlX2F0cl9jb21wdXRlX3NpZ19o YXNoXzgyNTk5KGlucHV0LCBjb21tb24pOworCUlYR0JFX1dSSVRFX1JFRzY0KGh3LCBJWEdCRV9G RElSSEFTSCwgZmRpcmhhc2hjbWQpOworCisJREVCVUdPVVQxKCJUeCBoYXNoPSV4XG4iLCAodTMy KWZkaXJoYXNoY21kKTsKKworCXJldHVybiBJWEdCRV9TVUNDRVNTOworfQorCisvKioKICAqICBp eGdiZV9nZXRfZmRpcnRjcG1fODI1OTkgLSBnZW5lcmF0ZSBhIHRjcCBwb3J0IGZyb20gYXRyX2lu cHV0X21hc2tzCiAgKiAgQGlucHV0X21hc2s6IG1hc2sgdG8gYmUgYml0IHN3YXBwZWQKICAqCkBA IC0yMTY0LDUgKzIyMTUsMyBAQAogb3V0OgogCXJldHVybiBsZXNtX2VuYWJsZWQ7CiB9Ci0KLQpJ bmRleDogaXhnYmVfYXBpLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaXhnYmVfYXBpLmgJKHJldmlzaW9uIDIy NTAxMykKKysrIGl4Z2JlX2FwaS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDkgQEAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2F0 cl9oYXNoX2R3b3JkIGlucHV0LAogCQkJCQkgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGNv bW1vbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHF1ZXVl KTsKK3MzMiBpeGdiZV9mZGlyX2NsZWFyX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkoc3RydWN0IGl4 Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu aW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5pb24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgY29tbW9uKTsKIHMz MiBpeGdiZV9mZGlyX2FkZF9wZXJmZWN0X2ZpbHRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2F0 cl9pbnB1dCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGl4Z2JlX2F0cl9pbnB1dF9tYXNrcyAqbWFza3MsCg== --0016e6d266028c9aa204ac2c26c4--