From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752531Ab3LXOrV (ORCPT ); Tue, 24 Dec 2013 09:47:21 -0500 Received: from mail-pa0-f49.google.com ([209.85.220.49]:56029 "EHLO mail-pa0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752307Ab3LXOrU (ORCPT ); Tue, 24 Dec 2013 09:47:20 -0500 Message-ID: <52B99BB9.9030201@gmail.com> Date: Tue, 24 Dec 2013 22:35:37 +0800 From: Ding Tianhong User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: Joe Perches , Ding Tianhong CC: "David S. Miller" , Netdev , "linux-kernel@vger.kernel.org" , e1000-devel@lists.sourceforge.net Subject: Re: [PATCH v2 01/20] net: slight optimization of addr compare for some modules References: <52B96F9B.4020806@huawei.com> <1387894944.2259.31.camel@joe-AO722> In-Reply-To: <1387894944.2259.31.camel@joe-AO722> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 于 2013/12/24 22:22, Joe Perches 写道: > On Tue, 2013-12-24 at 19:27 +0800, Ding Tianhong wrote: >> Use possibly more efficient ether_addr_equal_unaligned >> and ether_addr_equal to instead of memcmp. > > A negative of adding so many different drivers in a single > patch is that you miss sending patches to the named maintainers. > > Most of these below have separate individual maintainers. > (a suggested patch below this too) > you mean that I should send below by separate patch? It seemed that I misunderstood, I use the ./script/getmainter and found the only maintainer is David, and others are support, so maybe I was wrong, but it really a big patchset, could I send them by seperate patchset? I think it could be more clearly. >> drivers/net/bonding/bond_3ad.c | 2 +- >> drivers/net/ethernet/3com/3c509.c | 3 +-- >> drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c | 10 ++++------ >> drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c | 2 +- >> drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c | 2 +- >> drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c | 2 +- >> drivers/net/ethernet/chelsio/cxgb3/l2t.c | 2 +- >> drivers/net/ethernet/cisco/enic/enic_pp.c | 2 +- >> drivers/net/ethernet/emulex/benet/be_main.c | 2 +- >> drivers/net/ethernet/intel/igbvf/netdev.c | 2 +- >> drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 3 +-- >> drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 4 ++-- >> drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | 2 +- >> drivers/net/ethernet/micrel/ksz884x.c | 9 ++++----- >> drivers/net/ethernet/neterion/vxge/vxge-main.c | 2 +- >> drivers/net/ethernet/packetengines/yellowfin.c | 8 ++------ >> drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c | 2 +- >> drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 4 ++-- >> drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 4 ++-- >> drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 4 ++-- >> drivers/net/ethernet/renesas/sh_eth.c | 2 +- >> drivers/net/ethernet/seeq/sgiseeq.c | 2 +- >> drivers/net/ethernet/sun/sunvnet.c | 2 +- >> drivers/net/ethernet/ti/cpsw_ale.c | 2 +- >> drivers/net/fddi/skfp/fplustm.c | 3 ++- >> drivers/net/plip/plip.c | 2 +- >> net/caif/cfrfml.c | 2 +- >> 27 files changed, 39 insertions(+), 47 deletions(-) > > Also for bonding, my preference would be to rename > the macro and use ether_addr_equal as it seems that > all references are u16 aligned. > Agree, I make it in the early patchset, as same as yours, [PATCH net-next 1/6] bonding: use ether_addr_equal_unaligned for bond addr compare in my opinion, I think it would be better in the bonding patchset, because I am making a patchset for bonding. Regards Ding > I also removed some superfluous parentheses. > --- > drivers/net/bonding/bond_3ad.c | 23 ++++++++++++----------- > 1 file changed, 12 insertions(+), 11 deletions(-) > > diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c > index 187b1b7..ae56983 100644 > --- a/drivers/net/bonding/bond_3ad.c > +++ b/drivers/net/bonding/bond_3ad.c > @@ -91,7 +91,8 @@ > //endalloun > > // compare MAC addresses > -#define MAC_ADDRESS_COMPARE(A, B) memcmp(A, B, ETH_ALEN) > +#define MAC_ADDRESS_EQUAL(A, B) \ > + ether_addr_equal((const u8 *)A, (const u8 *)B) > > static struct mac_addr null_mac_addr = { { 0, 0, 0, 0, 0, 0 } }; > static u16 ad_ticks_per_sec; > @@ -419,7 +420,7 @@ static void __choose_matched(struct lacpdu *lacpdu, struct port *port) > // check if all parameters are alike > if (((ntohs(lacpdu->partner_port) == port->actor_port_number) && > (ntohs(lacpdu->partner_port_priority) == port->actor_port_priority) && > - !MAC_ADDRESS_COMPARE(&(lacpdu->partner_system), &(port->actor_system)) && > + MAC_ADDRESS_EQUAL(&lacpdu->partner_system, &port->actor_system) && > (ntohs(lacpdu->partner_system_priority) == port->actor_system_priority) && > (ntohs(lacpdu->partner_key) == port->actor_oper_port_key) && > ((lacpdu->partner_state & AD_STATE_AGGREGATION) == (port->actor_oper_port_state & AD_STATE_AGGREGATION))) || > @@ -509,7 +510,7 @@ static void __update_selected(struct lacpdu *lacpdu, struct port *port) > // check if any parameter is different > if (ntohs(lacpdu->actor_port) != partner->port_number || > ntohs(lacpdu->actor_port_priority) != partner->port_priority || > - MAC_ADDRESS_COMPARE(&lacpdu->actor_system, &partner->system) || > + !MAC_ADDRESS_EQUAL(&lacpdu->actor_system, &partner->system) || > ntohs(lacpdu->actor_system_priority) != partner->system_priority || > ntohs(lacpdu->actor_key) != partner->key || > (lacpdu->actor_state & AD_STATE_AGGREGATION) != (partner->port_state & AD_STATE_AGGREGATION)) { > @@ -540,7 +541,7 @@ static void __update_default_selected(struct port *port) > // check if any parameter is different > if (admin->port_number != oper->port_number || > admin->port_priority != oper->port_priority || > - MAC_ADDRESS_COMPARE(&admin->system, &oper->system) || > + !MAC_ADDRESS_EQUAL(&admin->system, &oper->system) || > admin->system_priority != oper->system_priority || > admin->key != oper->key || > (admin->port_state & AD_STATE_AGGREGATION) > @@ -570,7 +571,7 @@ static void __update_ntt(struct lacpdu *lacpdu, struct port *port) > // check if any parameter is different > if ((ntohs(lacpdu->partner_port) != port->actor_port_number) || > (ntohs(lacpdu->partner_port_priority) != port->actor_port_priority) || > - MAC_ADDRESS_COMPARE(&(lacpdu->partner_system), &(port->actor_system)) || > + !MAC_ADDRESS_EQUAL(&lacpdu->partner_system, &port->actor_system) || > (ntohs(lacpdu->partner_system_priority) != port->actor_system_priority) || > (ntohs(lacpdu->partner_key) != port->actor_oper_port_key) || > ((lacpdu->partner_state & AD_STATE_LACP_ACTIVITY) != (port->actor_oper_port_state & AD_STATE_LACP_ACTIVITY)) || > @@ -1072,7 +1073,7 @@ static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port) > break; > case AD_RX_CURRENT: > // detect loopback situation > - if (!MAC_ADDRESS_COMPARE(&(lacpdu->actor_system), &(port->actor_system))) { > + if (MAC_ADDRESS_EQUAL(&lacpdu->actor_system, &port->actor_system)) { > // INFO_RECEIVED_LOOPBACK_FRAMES > pr_err("%s: An illegal loopback occurred on adapter (%s).\n" > "Check the configuration to verify that all adapters are connected to 802.3ad compliant switch ports\n", > @@ -1278,11 +1279,11 @@ static void ad_port_selection_logic(struct port *port) > } > // check if current aggregator suits us > if (((aggregator->actor_oper_aggregator_key == port->actor_oper_port_key) && // if all parameters match AND > - !MAC_ADDRESS_COMPARE(&(aggregator->partner_system), &(port->partner_oper.system)) && > + MAC_ADDRESS_EQUAL(&aggregator->partner_system, &port->partner_oper.system) && > (aggregator->partner_system_priority == port->partner_oper.system_priority) && > (aggregator->partner_oper_aggregator_key == port->partner_oper.key) > ) && > - ((MAC_ADDRESS_COMPARE(&(port->partner_oper.system), &(null_mac_addr)) && // partner answers > + ((!MAC_ADDRESS_EQUAL(&port->partner_oper.system, &null_mac_addr) && // partner answers > !aggregator->is_individual) // but is not individual OR > ) > ) { > @@ -1696,7 +1697,7 @@ static void ad_enable_collecting_distributing(struct port *port) > */ > static void ad_disable_collecting_distributing(struct port *port) > { > - if (port->aggregator && MAC_ADDRESS_COMPARE(&(port->aggregator->partner_system), &(null_mac_addr))) { > + if (port->aggregator && !MAC_ADDRESS_EQUAL(&port->aggregator->partner_system, &null_mac_addr)) { > pr_debug("Disabling port %d(LAG %d)\n", > port->actor_port_number, > port->aggregator->aggregator_identifier); > @@ -1818,8 +1819,8 @@ static u16 aggregator_identifier; > void bond_3ad_initialize(struct bonding *bond, u16 tick_resolution) > { > // check that the bond is not initialized yet > - if (MAC_ADDRESS_COMPARE(&(BOND_AD_INFO(bond).system.sys_mac_addr), > - bond->dev->dev_addr)) { > + if (!MAC_ADDRESS_EQUAL(&BOND_AD_INFO(bond).system.sys_mac_addr, > + bond->dev->dev_addr)) { > > aggregator_identifier = 0; > > > > -- > To unsubscribe from this list: send the line "unsubscribe netdev" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ding Tianhong Subject: Re: [PATCH v2 01/20] net: slight optimization of addr compare for some modules Date: Tue, 24 Dec 2013 22:35:37 +0800 Message-ID: <52B99BB9.9030201@gmail.com> References: <52B96F9B.4020806@huawei.com> <1387894944.2259.31.camel@joe-AO722> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: e1000-devel@lists.sourceforge.net, Netdev , "David S. Miller" , "linux-kernel@vger.kernel.org" To: Joe Perches , Ding Tianhong Return-path: In-Reply-To: <1387894944.2259.31.camel@joe-AO722> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: e1000-devel-bounces@lists.sourceforge.net List-Id: netdev.vger.kernel.org 5LqOIDIwMTMvMTIvMjQgMjI6MjIsIEpvZSBQZXJjaGVzIOWGmemBkzoKPiBPbiBUdWUsIDIwMTMt MTItMjQgYXQgMTk6MjcgKzA4MDAsIERpbmcgVGlhbmhvbmcgd3JvdGU6Cj4+IFVzZSBwb3NzaWJs eSBtb3JlIGVmZmljaWVudCBldGhlcl9hZGRyX2VxdWFsX3VuYWxpZ25lZAo+PiBhbmQgZXRoZXJf YWRkcl9lcXVhbCB0byBpbnN0ZWFkIG9mIG1lbWNtcC4KPiAKPiBBIG5lZ2F0aXZlIG9mIGFkZGlu ZyBzbyBtYW55IGRpZmZlcmVudCBkcml2ZXJzIGluIGEgc2luZ2xlCj4gcGF0Y2ggaXMgdGhhdCB5 b3UgbWlzcyBzZW5kaW5nIHBhdGNoZXMgdG8gdGhlIG5hbWVkIG1haW50YWluZXJzLgo+IAo+IE1v c3Qgb2YgdGhlc2UgYmVsb3cgaGF2ZSBzZXBhcmF0ZSBpbmRpdmlkdWFsIG1haW50YWluZXJzLgo+ IChhIHN1Z2dlc3RlZCBwYXRjaCBiZWxvdyB0aGlzIHRvbykKPiAKCnlvdSBtZWFuIHRoYXQgSSBz aG91bGQgc2VuZCBiZWxvdyBieSBzZXBhcmF0ZSBwYXRjaD8gSXQgc2VlbWVkIHRoYXQgSSAKbWlz dW5kZXJzdG9vZCwgSSB1c2UgdGhlIC4vc2NyaXB0L2dldG1haW50ZXIgYW5kIGZvdW5kIHRoZSBv bmx5IG1haW50YWluZXIKaXMgRGF2aWQsIGFuZCBvdGhlcnMgYXJlIHN1cHBvcnQsIHNvIG1heWJl IEkgd2FzIHdyb25nLCBidXQgaXQgcmVhbGx5IGEgYmlnCnBhdGNoc2V0LCBjb3VsZCBJIHNlbmQg dGhlbSBieSBzZXBlcmF0ZSBwYXRjaHNldD8gSSB0aGluayBpdCBjb3VsZCBiZSBtb3JlCmNsZWFy bHkuCgo+PiAgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMiArLQo+PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS8zYzUwOS5jICAgICAg ICAgICAgICAgICAgICAgfCAgMyArLS0KPj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29t L2JueDJ4L2JueDJ4X3NwLmMgICAgICAgIHwgMTAgKysrKy0tLS0tLQo+PiAgZHJpdmVycy9uZXQv ZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54Mnhfc3Jpb3YuYyAgICAgfCAgMiArLQo+PiAgZHJp dmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfdmZwZi5jICAgICAgfCAgMiAr LQo+PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmMg ICAgfCAgMiArLQo+PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9sMnQuYyAg ICAgICAgICAgICAgfCAgMiArLQo+PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9l bmljX3BwLmMgICAgICAgICAgICAgfCAgMiArLQo+PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11 bGV4L2JlbmV0L2JlX21haW4uYyAgICAgICAgICAgfCAgMiArLQo+PiAgZHJpdmVycy9uZXQvZXRo ZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmMgICAgICAgICAgICAgfCAgMiArLQo+PiAgZHJpdmVy cy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYyAgICAgICAgfCAgMyArLS0K Pj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fbmV0ZGV2LmMgICAgICAg IHwgIDQgKystLQo+PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9yZXNvdXJj ZV90cmFja2VyLmMgfCAgMiArLQo+PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzejg4 NHguYyAgICAgICAgICAgICAgICAgfCAgOSArKysrLS0tLS0KPj4gIGRyaXZlcnMvbmV0L2V0aGVy bmV0L25ldGVyaW9uL3Z4Z2UvdnhnZS1tYWluLmMgICAgICAgIHwgIDIgKy0KPj4gIGRyaXZlcnMv bmV0L2V0aGVybmV0L3BhY2tldGVuZ2luZXMveWVsbG93ZmluLmMgICAgICAgIHwgIDggKystLS0t LS0KPj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19ody5j ICAgIHwgIDIgKy0KPj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmlj X2h3LmMgICAgICAgIHwgIDQgKystLQo+PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3Fs Y25pYy9xbGNuaWNfaW8uYyAgICAgICAgfCAgNCArKy0tCj4+ICBkcml2ZXJzL25ldC9ldGhlcm5l dC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMgICAgICB8ICA0ICsrLS0KPj4gIGRyaXZlcnMv bmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KPj4g IGRyaXZlcnMvbmV0L2V0aGVybmV0L3NlZXEvc2dpc2VlcS5jICAgICAgICAgICAgICAgICAgIHwg IDIgKy0KPj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9zdW52bmV0LmMgICAgICAgICAgICAg ICAgICAgIHwgIDIgKy0KPj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfYWxlLmMgICAg ICAgICAgICAgICAgICAgIHwgIDIgKy0KPj4gIGRyaXZlcnMvbmV0L2ZkZGkvc2tmcC9mcGx1c3Rt LmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDMgKystCj4+ICBkcml2ZXJzL25ldC9wbGlwL3Bs aXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCj4+ICBuZXQvY2FpZi9j ZnJmbWwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCj4+ICAy NyBmaWxlcyBjaGFuZ2VkLCAzOSBpbnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMoLSkKPiAKPiBB bHNvIGZvciBib25kaW5nLCBteSBwcmVmZXJlbmNlIHdvdWxkIGJlIHRvIHJlbmFtZQo+IHRoZSBt YWNybyBhbmQgdXNlIGV0aGVyX2FkZHJfZXF1YWwgYXMgaXQgc2VlbXMgdGhhdAo+IGFsbCByZWZl cmVuY2VzIGFyZSB1MTYgYWxpZ25lZC4KPiAKCkFncmVlLCBJIG1ha2UgaXQgaW4gdGhlIGVhcmx5 IHBhdGNoc2V0LCBhcyBzYW1lIGFzIHlvdXJzLAoKW1BBVENIIG5ldC1uZXh0IDEvNl0gYm9uZGlu ZzogdXNlIGV0aGVyX2FkZHJfZXF1YWxfdW5hbGlnbmVkIGZvciBib25kIGFkZHIgY29tcGFyZQoK aW4gbXkgb3BpbmlvbiwgSSB0aGluayBpdCB3b3VsZCBiZSBiZXR0ZXIgaW4gdGhlIGJvbmRpbmcg cGF0Y2hzZXQsCmJlY2F1c2UgSSBhbSBtYWtpbmcgYSBwYXRjaHNldCBmb3IgYm9uZGluZy4KClJl Z2FyZHMKRGluZyAKCj4gSSBhbHNvIHJlbW92ZWQgc29tZSBzdXBlcmZsdW91cyBwYXJlbnRoZXNl cy4KPiAtLS0KPiAgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jIHwgMjMgKysrKysrKysr KysrLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDExIGRl bGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2Fk LmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKPiBpbmRleCAxODdiMWI3Li5hZTU2 OTgzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwo+ICsrKyBi L2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwo+IEBAIC05MSw3ICs5MSw4IEBACj4gIC8v ZW5kYWxsb3VuCj4gIAo+ICAvLyBjb21wYXJlIE1BQyBhZGRyZXNzZXMKPiAtI2RlZmluZSBNQUNf QUREUkVTU19DT01QQVJFKEEsIEIpIG1lbWNtcChBLCBCLCBFVEhfQUxFTikKPiArI2RlZmluZSBN QUNfQUREUkVTU19FUVVBTChBLCBCKQkJCQkJXAo+ICsJZXRoZXJfYWRkcl9lcXVhbCgoY29uc3Qg dTggKilBLCAoY29uc3QgdTggKilCKQo+ICAKPiAgc3RhdGljIHN0cnVjdCBtYWNfYWRkciBudWxs X21hY19hZGRyID0geyB7IDAsIDAsIDAsIDAsIDAsIDAgfSB9Owo+ICBzdGF0aWMgdTE2IGFkX3Rp Y2tzX3Blcl9zZWM7Cj4gQEAgLTQxOSw3ICs0MjAsNyBAQCBzdGF0aWMgdm9pZCBfX2Nob29zZV9t YXRjaGVkKHN0cnVjdCBsYWNwZHUgKmxhY3BkdSwgc3RydWN0IHBvcnQgKnBvcnQpCj4gIAkvLyBj aGVjayBpZiBhbGwgcGFyYW1ldGVycyBhcmUgYWxpa2UKPiAgCWlmICgoKG50b2hzKGxhY3BkdS0+ cGFydG5lcl9wb3J0KSA9PSBwb3J0LT5hY3Rvcl9wb3J0X251bWJlcikgJiYKPiAgCSAgICAgKG50 b2hzKGxhY3BkdS0+cGFydG5lcl9wb3J0X3ByaW9yaXR5KSA9PSBwb3J0LT5hY3Rvcl9wb3J0X3By aW9yaXR5KSAmJgo+IC0JICAgICAhTUFDX0FERFJFU1NfQ09NUEFSRSgmKGxhY3BkdS0+cGFydG5l cl9zeXN0ZW0pLCAmKHBvcnQtPmFjdG9yX3N5c3RlbSkpICYmCj4gKwkgICAgIE1BQ19BRERSRVNT X0VRVUFMKCZsYWNwZHUtPnBhcnRuZXJfc3lzdGVtLCAmcG9ydC0+YWN0b3Jfc3lzdGVtKSAmJgo+ ICAJICAgICAobnRvaHMobGFjcGR1LT5wYXJ0bmVyX3N5c3RlbV9wcmlvcml0eSkgPT0gcG9ydC0+ YWN0b3Jfc3lzdGVtX3ByaW9yaXR5KSAmJgo+ICAJICAgICAobnRvaHMobGFjcGR1LT5wYXJ0bmVy X2tleSkgPT0gcG9ydC0+YWN0b3Jfb3Blcl9wb3J0X2tleSkgJiYKPiAgCSAgICAgKChsYWNwZHUt PnBhcnRuZXJfc3RhdGUgJiBBRF9TVEFURV9BR0dSRUdBVElPTikgPT0gKHBvcnQtPmFjdG9yX29w ZXJfcG9ydF9zdGF0ZSAmIEFEX1NUQVRFX0FHR1JFR0FUSU9OKSkpIHx8Cj4gQEAgLTUwOSw3ICs1 MTAsNyBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9zZWxlY3RlZChzdHJ1Y3QgbGFjcGR1ICpsYWNw ZHUsIHN0cnVjdCBwb3J0ICpwb3J0KQo+ICAJCS8vIGNoZWNrIGlmIGFueSBwYXJhbWV0ZXIgaXMg ZGlmZmVyZW50Cj4gIAkJaWYgKG50b2hzKGxhY3BkdS0+YWN0b3JfcG9ydCkgIT0gcGFydG5lci0+ cG9ydF9udW1iZXIgfHwKPiAgCQkgICAgbnRvaHMobGFjcGR1LT5hY3Rvcl9wb3J0X3ByaW9yaXR5 KSAhPSBwYXJ0bmVyLT5wb3J0X3ByaW9yaXR5IHx8Cj4gLQkJICAgIE1BQ19BRERSRVNTX0NPTVBB UkUoJmxhY3BkdS0+YWN0b3Jfc3lzdGVtLCAmcGFydG5lci0+c3lzdGVtKSB8fAo+ICsJCSAgICAh TUFDX0FERFJFU1NfRVFVQUwoJmxhY3BkdS0+YWN0b3Jfc3lzdGVtLCAmcGFydG5lci0+c3lzdGVt KSB8fAo+ICAJCSAgICBudG9ocyhsYWNwZHUtPmFjdG9yX3N5c3RlbV9wcmlvcml0eSkgIT0gcGFy dG5lci0+c3lzdGVtX3ByaW9yaXR5IHx8Cj4gIAkJICAgIG50b2hzKGxhY3BkdS0+YWN0b3Jfa2V5 KSAhPSBwYXJ0bmVyLT5rZXkgfHwKPiAgCQkgICAgKGxhY3BkdS0+YWN0b3Jfc3RhdGUgJiBBRF9T VEFURV9BR0dSRUdBVElPTikgIT0gKHBhcnRuZXItPnBvcnRfc3RhdGUgJiBBRF9TVEFURV9BR0dS RUdBVElPTikpIHsKPiBAQCAtNTQwLDcgKzU0MSw3IEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2Rl ZmF1bHRfc2VsZWN0ZWQoc3RydWN0IHBvcnQgKnBvcnQpCj4gIAkJLy8gY2hlY2sgaWYgYW55IHBh cmFtZXRlciBpcyBkaWZmZXJlbnQKPiAgCQlpZiAoYWRtaW4tPnBvcnRfbnVtYmVyICE9IG9wZXIt PnBvcnRfbnVtYmVyIHx8Cj4gIAkJICAgIGFkbWluLT5wb3J0X3ByaW9yaXR5ICE9IG9wZXItPnBv cnRfcHJpb3JpdHkgfHwKPiAtCQkgICAgTUFDX0FERFJFU1NfQ09NUEFSRSgmYWRtaW4tPnN5c3Rl bSwgJm9wZXItPnN5c3RlbSkgfHwKPiArCQkgICAgIU1BQ19BRERSRVNTX0VRVUFMKCZhZG1pbi0+ c3lzdGVtLCAmb3Blci0+c3lzdGVtKSB8fAo+ICAJCSAgICBhZG1pbi0+c3lzdGVtX3ByaW9yaXR5 ICE9IG9wZXItPnN5c3RlbV9wcmlvcml0eSB8fAo+ICAJCSAgICBhZG1pbi0+a2V5ICE9IG9wZXIt PmtleSB8fAo+ICAJCSAgICAoYWRtaW4tPnBvcnRfc3RhdGUgJiBBRF9TVEFURV9BR0dSRUdBVElP TikKPiBAQCAtNTcwLDcgKzU3MSw3IEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX250dChzdHJ1Y3Qg bGFjcGR1ICpsYWNwZHUsIHN0cnVjdCBwb3J0ICpwb3J0KQo+ICAJCS8vIGNoZWNrIGlmIGFueSBw YXJhbWV0ZXIgaXMgZGlmZmVyZW50Cj4gIAkJaWYgKChudG9ocyhsYWNwZHUtPnBhcnRuZXJfcG9y dCkgIT0gcG9ydC0+YWN0b3JfcG9ydF9udW1iZXIpIHx8Cj4gIAkJICAgIChudG9ocyhsYWNwZHUt PnBhcnRuZXJfcG9ydF9wcmlvcml0eSkgIT0gcG9ydC0+YWN0b3JfcG9ydF9wcmlvcml0eSkgfHwK PiAtCQkgICAgTUFDX0FERFJFU1NfQ09NUEFSRSgmKGxhY3BkdS0+cGFydG5lcl9zeXN0ZW0pLCAm KHBvcnQtPmFjdG9yX3N5c3RlbSkpIHx8Cj4gKwkJICAgICFNQUNfQUREUkVTU19FUVVBTCgmbGFj cGR1LT5wYXJ0bmVyX3N5c3RlbSwgJnBvcnQtPmFjdG9yX3N5c3RlbSkgfHwKPiAgCQkgICAgKG50 b2hzKGxhY3BkdS0+cGFydG5lcl9zeXN0ZW1fcHJpb3JpdHkpICE9IHBvcnQtPmFjdG9yX3N5c3Rl bV9wcmlvcml0eSkgfHwKPiAgCQkgICAgKG50b2hzKGxhY3BkdS0+cGFydG5lcl9rZXkpICE9IHBv cnQtPmFjdG9yX29wZXJfcG9ydF9rZXkpIHx8Cj4gIAkJICAgICgobGFjcGR1LT5wYXJ0bmVyX3N0 YXRlICYgQURfU1RBVEVfTEFDUF9BQ1RJVklUWSkgIT0gKHBvcnQtPmFjdG9yX29wZXJfcG9ydF9z dGF0ZSAmIEFEX1NUQVRFX0xBQ1BfQUNUSVZJVFkpKSB8fAo+IEBAIC0xMDcyLDcgKzEwNzMsNyBA QCBzdGF0aWMgdm9pZCBhZF9yeF9tYWNoaW5lKHN0cnVjdCBsYWNwZHUgKmxhY3BkdSwgc3RydWN0 IHBvcnQgKnBvcnQpCj4gIAkJCWJyZWFrOwo+ICAJCWNhc2UgQURfUlhfQ1VSUkVOVDoKPiAgCQkJ Ly8gZGV0ZWN0IGxvb3BiYWNrIHNpdHVhdGlvbgo+IC0JCQlpZiAoIU1BQ19BRERSRVNTX0NPTVBB UkUoJihsYWNwZHUtPmFjdG9yX3N5c3RlbSksICYocG9ydC0+YWN0b3Jfc3lzdGVtKSkpIHsKPiAr CQkJaWYgKE1BQ19BRERSRVNTX0VRVUFMKCZsYWNwZHUtPmFjdG9yX3N5c3RlbSwgJnBvcnQtPmFj dG9yX3N5c3RlbSkpIHsKPiAgCQkJCS8vIElORk9fUkVDRUlWRURfTE9PUEJBQ0tfRlJBTUVTCj4g IAkJCQlwcl9lcnIoIiVzOiBBbiBpbGxlZ2FsIGxvb3BiYWNrIG9jY3VycmVkIG9uIGFkYXB0ZXIg KCVzKS5cbiIKPiAgCQkJCSAgICAgICAiQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdmVyaWZ5 IHRoYXQgYWxsIGFkYXB0ZXJzIGFyZSBjb25uZWN0ZWQgdG8gODAyLjNhZCBjb21wbGlhbnQgc3dp dGNoIHBvcnRzXG4iLAo+IEBAIC0xMjc4LDExICsxMjc5LDExIEBAIHN0YXRpYyB2b2lkIGFkX3Bv cnRfc2VsZWN0aW9uX2xvZ2ljKHN0cnVjdCBwb3J0ICpwb3J0KQo+ICAJCX0KPiAgCQkvLyBjaGVj ayBpZiBjdXJyZW50IGFnZ3JlZ2F0b3Igc3VpdHMgdXMKPiAgCQlpZiAoKChhZ2dyZWdhdG9yLT5h Y3Rvcl9vcGVyX2FnZ3JlZ2F0b3Jfa2V5ID09IHBvcnQtPmFjdG9yX29wZXJfcG9ydF9rZXkpICYm IC8vIGlmIGFsbCBwYXJhbWV0ZXJzIG1hdGNoIEFORAo+IC0JCSAgICAgIU1BQ19BRERSRVNTX0NP TVBBUkUoJihhZ2dyZWdhdG9yLT5wYXJ0bmVyX3N5c3RlbSksICYocG9ydC0+cGFydG5lcl9vcGVy LnN5c3RlbSkpICYmCj4gKwkJICAgICBNQUNfQUREUkVTU19FUVVBTCgmYWdncmVnYXRvci0+cGFy dG5lcl9zeXN0ZW0sICZwb3J0LT5wYXJ0bmVyX29wZXIuc3lzdGVtKSAmJgo+ICAJCSAgICAgKGFn Z3JlZ2F0b3ItPnBhcnRuZXJfc3lzdGVtX3ByaW9yaXR5ID09IHBvcnQtPnBhcnRuZXJfb3Blci5z eXN0ZW1fcHJpb3JpdHkpICYmCj4gIAkJICAgICAoYWdncmVnYXRvci0+cGFydG5lcl9vcGVyX2Fn Z3JlZ2F0b3Jfa2V5ID09IHBvcnQtPnBhcnRuZXJfb3Blci5rZXkpCj4gIAkJICAgICkgJiYKPiAt CQkgICAgKChNQUNfQUREUkVTU19DT01QQVJFKCYocG9ydC0+cGFydG5lcl9vcGVyLnN5c3RlbSks ICYobnVsbF9tYWNfYWRkcikpICYmIC8vIHBhcnRuZXIgYW5zd2Vycwo+ICsJCSAgICAoKCFNQUNf QUREUkVTU19FUVVBTCgmcG9ydC0+cGFydG5lcl9vcGVyLnN5c3RlbSwgJm51bGxfbWFjX2FkZHIp ICYmIC8vIHBhcnRuZXIgYW5zd2Vycwo+ICAJCSAgICAgICFhZ2dyZWdhdG9yLT5pc19pbmRpdmlk dWFsKSAgLy8gYnV0IGlzIG5vdCBpbmRpdmlkdWFsIE9SCj4gIAkJICAgICkKPiAgCQkgICApIHsK PiBAQCAtMTY5Niw3ICsxNjk3LDcgQEAgc3RhdGljIHZvaWQgYWRfZW5hYmxlX2NvbGxlY3Rpbmdf ZGlzdHJpYnV0aW5nKHN0cnVjdCBwb3J0ICpwb3J0KQo+ICAgKi8KPiAgc3RhdGljIHZvaWQgYWRf ZGlzYWJsZV9jb2xsZWN0aW5nX2Rpc3RyaWJ1dGluZyhzdHJ1Y3QgcG9ydCAqcG9ydCkKPiAgewo+ IC0JaWYgKHBvcnQtPmFnZ3JlZ2F0b3IgJiYgTUFDX0FERFJFU1NfQ09NUEFSRSgmKHBvcnQtPmFn Z3JlZ2F0b3ItPnBhcnRuZXJfc3lzdGVtKSwgJihudWxsX21hY19hZGRyKSkpIHsKPiArCWlmIChw b3J0LT5hZ2dyZWdhdG9yICYmICFNQUNfQUREUkVTU19FUVVBTCgmcG9ydC0+YWdncmVnYXRvci0+ cGFydG5lcl9zeXN0ZW0sICZudWxsX21hY19hZGRyKSkgewo+ICAJCXByX2RlYnVnKCJEaXNhYmxp bmcgcG9ydCAlZChMQUcgJWQpXG4iLAo+ICAJCQkgcG9ydC0+YWN0b3JfcG9ydF9udW1iZXIsCj4g IAkJCSBwb3J0LT5hZ2dyZWdhdG9yLT5hZ2dyZWdhdG9yX2lkZW50aWZpZXIpOwo+IEBAIC0xODE4 LDggKzE4MTksOCBAQCBzdGF0aWMgdTE2IGFnZ3JlZ2F0b3JfaWRlbnRpZmllcjsKPiAgdm9pZCBi b25kXzNhZF9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCB1MTYgdGlja19yZXNvbHV0 aW9uKQo+ICB7Cj4gIAkvLyBjaGVjayB0aGF0IHRoZSBib25kIGlzIG5vdCBpbml0aWFsaXplZCB5 ZXQKPiAtCWlmIChNQUNfQUREUkVTU19DT01QQVJFKCYoQk9ORF9BRF9JTkZPKGJvbmQpLnN5c3Rl bS5zeXNfbWFjX2FkZHIpLAo+IC0JCQkJYm9uZC0+ZGV2LT5kZXZfYWRkcikpIHsKPiArCWlmICgh TUFDX0FERFJFU1NfRVFVQUwoJkJPTkRfQURfSU5GTyhib25kKS5zeXN0ZW0uc3lzX21hY19hZGRy LAo+ICsJCQkgICAgICAgYm9uZC0+ZGV2LT5kZXZfYWRkcikpIHsKPiAgCj4gIAkJYWdncmVnYXRv cl9pZGVudGlmaWVyID0gMDsKPiAgCj4gCj4gCj4gLS0KPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRo aXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbmV0ZGV2IiBpbgo+IHRoZSBib2R5 IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCj4gTW9yZSBtYWpvcmRv bW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCj4g CgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClJhcGlkbHkgdHJvdWJsZXNob290IHByb2JsZW1zIGJl Zm9yZSB0aGV5IGFmZmVjdCB5b3VyIGJ1c2luZXNzLiBNb3N0IElUIApvcmdhbml6YXRpb25zIGRv bid0IGhhdmUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBhcHBsaWNhdGlvbiBwZXJmb3JtYW5jZSAK YWZmZWN0cyB0aGVpciByZXZlbnVlLiBXaXRoIEFwcER5bmFtaWNzLCB5b3UgZ2V0IDEwMCUgdmlz aWJpbGl0eSBpbnRvIHlvdXIgCkphdmEsLk5FVCwgJiBQSFAgYXBwbGljYXRpb24uIFN0YXJ0IHlv dXIgMTUtZGF5IEZSRUUgVFJJQUwgb2YgQXBwRHluYW1pY3MgUHJvIQpodHRwOi8vcHViYWRzLmcu ZG91YmxlY2xpY2submV0L2dhbXBhZC9jbGs/aWQ9ODQzNDk4MzEmaXU9LzQxNDAvb3N0Zy5jbGt0 cmsKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRTEwMDAt ZGV2ZWwgbWFpbGluZyBsaXN0CkUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApodHRw czovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9lMTAwMC1kZXZlbApUbyBs ZWFybiBtb3JlIGFib3V0IEludGVsJiMxNzQ7IEV0aGVybmV0LCB2aXNpdCBodHRwOi8vY29tbXVu aXRpZXMuaW50ZWwuY29tL2NvbW11bml0eS93aXJlZAo=