From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-ie0-f179.google.com ([209.85.223.179]:35600 "EHLO mail-ie0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759704AbbFBSVl convert rfc822-to-8bit (ORCPT ); Tue, 2 Jun 2015 14:21:41 -0400 Received: by iesa3 with SMTP id a3so139632192ies.2 for ; Tue, 02 Jun 2015 11:21:41 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: <1433187843-20698-1-git-send-email-cfliu.tw@gmail.com> From: "Liu CF/TW" Date: Tue, 2 Jun 2015 11:21:00 -0700 Message-ID: (sfid-20150602_202146_221414_E1AC11C1) Subject: Re: [PATCH 1/2] ath10k: add cryptmode param to support sw crypto and raw tx injection. To: Michal Kazior Cc: "ath10k@lists.infradead.org" , linux-wireless , Kalle Valo Content-Type: text/plain; charset=UTF-8 Sender: linux-wireless-owner@vger.kernel.org List-ID: On Tue, Jun 2, 2015 at 12:17 AM, Michal Kazior wrote: > On 1 June 2015 at 21:44, David Liu wrote: > [...] >> --- a/drivers/net/wireless/ath/ath10k/core.h >> +++ b/drivers/net/wireless/ath/ath10k/core.h >> @@ -91,6 +91,7 @@ struct ath10k_skb_cb { >> u8 tid; >> u16 freq; >> bool is_offchan; >> + bool nohwcrypt; >> struct ath10k_htt_txbuf *txbuf; >> u32 txbuf_paddr; >> } __packed htt; >> @@ -349,6 +350,7 @@ struct ath10k_vif { >> } u; >> >> bool use_cts_prot; >> + bool nohwcrypt; > > So this is a bit confusing. This is used only for tx policy only, > right? It should be named accordingly then. The other nohwcrypt in > skb_cb pretty much implies Tx already. > No, it's also for Rx. In this patch, in mac.c, if arvif->nohwcrypt is set, ath10k_send_key() won't install the actual key to hardware, but a clear key is installed. This makes all matching STA's encrypted frame passthrough HW and mac80211 can take care of decryption later in host. (in patch V2 I will take care of the IEEE80211_HW_SW_CRYPTO_CONTROL setting) > > [...] >> @@ -484,6 +491,12 @@ enum ath10k_dev_flags { >> * waiters should immediately cancel instead of waiting for a time out. >> */ >> ATH10K_FLAG_CRASH_FLUSH, >> + >> + /* Use Raw mode for Tx and Rx */ >> + ATH10K_RAW_MODE, >> + >> + /* Disable HW crypto engine */ >> + ATH10K_HW_CRYPTO_DISABLED, > > You're missing the _FLAG prefix. Also this isn't documented well > enough. RAW_MODE implies sw crypto rx, no? Perhaps a more fine grained > approach would be better: Thanks. Will fix. Raw mode doesn't imply SW crypto only. Indeed Raw mode is the only way to get sw crypto support, but it also supports HW crypto. I just tested both HW/SW crypto cases working fine in raw mode. So my plan for the new cryptmode parameter has 3 values: 0 Use HW crypto engine only. This uses native WiFi mode Tx/Rx encap 1 Use SW crypto engine only. This uses raw mode Tx/Rx encap 2 Supports both SW & HW crypto engine. This uses raw mode Tx/Rx encap. Once this patch is in, I guess people would only use cryptmode=0 or 1. For cryptmode=2, I have subsequent changes to allow per BSS based control of HW/SW crypto selection. Plan is to make make arvif->nohwcrypt configurable via debugfs or nl80211 (subject to review feedback) > > ATH10K_FLAG_RAW_TX, > ATH10K_FLAG_RAW_RX, > ATH10K_FLAG_SW_TX_CRYPTO, > ATH10K_FLAG_SW_RX_CRYPTO, > > Obviously not all combinations are valid/doable but I think this will > make the code look more obvious. > That would be too many flags and too complex. I'd suggest keep the proposed ATH10K_RAW_MODE and ATH10K_HW_CRYPTO_DISABLED. Let's make Tx/Rx HW crypto always both enabled or both disabled AFA driver is concerned. Ben's CT 10.1 FW is a special use case and would fit into cryptmode=0 where his FW internally does the magic to disable HW Rx which is independent to the driver. Once Ben's FW is ready for raw mode, driver then can switch to use cryptmode=1 or 2. > >> }; >> >> enum ath10k_cal_mode { >> @@ -492,6 +505,15 @@ enum ath10k_cal_mode { >> ATH10K_CAL_MODE_DT, >> }; >> >> +enum ath10k_crypt_mode { >> + /* Use HW crypto engine only */ >> + ATH10K_CRYPT_MODE_HW, >> + /* HW SW crypto engine only (ie. HW crypto engine disabled) */ >> + ATH10K_CRYPT_MODE_SW, >> + /* Both SW & HW crypto engine supported */ >> + ATH10K_CRYPT_MODE_HW_SW, > > I don't think this is clear enough (and the comments don't help at all): > > ATH10K_CRYPT_MODE_HW, > ATH10K_CRYPT_MODE_SW, > ATH10K_CRYPT_MODE_SW_RX_HW_TX, > > It would also be nice to have some sort of indication in driver > logs/dmesg (without any debug_masks) as to what crypto mode driver > uses so that if someone reports a bug we can quickly see their base > configuration. Having it completely configurable during runtime is a > bit of a pain in this regard though.. but most people will likely just > set cryptmode in modprobe.conf or something. Thoughts? I will add a log line to print the cryptmode param value. > > >> +}; >> + >> static inline const char *ath10k_cal_mode_str(enum ath10k_cal_mode mode) >> { >> switch (mode) { >> diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c >> index 89eb16b..a7df05d 100644 >> --- a/drivers/net/wireless/ath/ath10k/htt_rx.c >> +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c >> @@ -1018,8 +1018,7 @@ static void ath10k_htt_rx_h_undecap_raw(struct ath10k *ar, >> >> /* In most cases this will be true for sniffed frames. It makes sense >> * to deliver them as-is without stripping the crypto param. This would >> - * also make sense for software based decryption (which is not >> - * implemented in ath10k). >> + * also make sense for software based decryption. > > I guess you should update the comment even more. The "would" doesn't > fit anymore. Instead: "This is necessary for software crypto too. " will do. > > Nonetheless kudos for taking care to update comments. > > > [...] >> diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h >> index 85cca29..37fd2f83 100644 >> --- a/drivers/net/wireless/ath/ath10k/hw.h >> +++ b/drivers/net/wireless/ath/ath10k/hw.h >> @@ -296,7 +296,7 @@ enum ath10k_hw_rate_cck { >> #define TARGET_10X_RX_SKIP_DEFRAG_TIMEOUT_DUP_DETECTION_CHECK 1 >> #define TARGET_10X_VOW_CONFIG 0 >> #define TARGET_10X_NUM_MSDU_DESC (1024 + 400) >> -#define TARGET_10X_MAX_FRAG_ENTRIES 0 >> +#define TARGET_10X_MAX_FRAG_ENTRIES 10 > > This is probably enough at "2" (ath10k doesn't send more than 2 tx > fragments now). I assume fw crashes with raw tx if this isn't fixed, > correct? > > Sidenote: I guess TARGET_MAX_FRAG_ENTRIES could be fixed as well. It > might make sense for QCA61X4 hw2.1 which still uses the old Rx > indication event and might be able to do raw txrx + swcrypto. But I'm > a bit reluctant to change this without any testing. > Sure. I change it to 10 because the document I got from QCA says so. Since this is a global setting, I will remove this and keep it =0 for now so it doesn't affect existing HW based datapath. Per QCA, the main issue not changing this would be SW crypto then won't be able to handle large Rx AMSDU. When HW is not doing Rx decryption, the whole AMSDU needs to be DMA to host for SW based decryption & AMSDU subframe deaggregation. > > [...] >> diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c >> index 77220b0..1202150 100644 >> --- a/drivers/net/wireless/ath/ath10k/wmi.c >> +++ b/drivers/net/wireless/ath/ath10k/wmi.c >> @@ -508,7 +508,7 @@ static struct wmi_vdev_param_map wmi_10x_vdev_param_map = { >> .txbf = WMI_VDEV_PARAM_UNSUPPORTED, >> .packet_powersave = WMI_VDEV_PARAM_UNSUPPORTED, >> .drop_unencry = WMI_VDEV_PARAM_UNSUPPORTED, >> - .tx_encap_type = WMI_VDEV_PARAM_UNSUPPORTED, >> + .tx_encap_type = WMI_10X_VDEV_PARAM_TX_ENCAP_TYPE, > > Hmm.. > > Technically this isn't correct because 10.1 doesn't support this vdev > parameter. Practically this might not matter since 10.1 won't ever > have the appropriate fw_feature set > (ATH10K_FW_FEATURE_RAW_MODE_SUPPORT).. unless Ben implements it in his > 10.1 CT fork. > Good point. Actually I think I will leave tx_encap_type as WMI_VDEV_PARAM_UNSUPPORTED since I don't really need to use/change it. I used to set the per VDEV Tx encap type, but I found just use the finer grained per Tx frame descriptor encap type control is sufficient. David > Ideally you should create wmi_10_2_vdev_param_map and use it for the > 10.2 op_version. Also you should probably update > wmi_10_2_4_vdev_param_map as well - if 10.2 works then 10.2.4 will > mostly like do too. > > I would actually even suggest for this tx_encap_type to be done in a > separate patch as it'll change ath10k behaviour on its own. It'll be > easier to bisect the driver later in case something will have gone > wrong. > > > MichaƂ From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-ie0-x22c.google.com ([2607:f8b0:4001:c03::22c]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Yzqp8-0004cw-GD for ath10k@lists.infradead.org; Tue, 02 Jun 2015 18:22:04 +0000 Received: by iesa3 with SMTP id a3so139632193ies.2 for ; Tue, 02 Jun 2015 11:21:41 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: <1433187843-20698-1-git-send-email-cfliu.tw@gmail.com> From: "Liu CF/TW" Date: Tue, 2 Jun 2015 11:21:00 -0700 Message-ID: Subject: Re: [PATCH 1/2] ath10k: add cryptmode param to support sw crypto and raw tx injection. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "ath10k" Errors-To: ath10k-bounces+kvalo=adurom.com@lists.infradead.org To: Michal Kazior Cc: Kalle Valo , linux-wireless , "ath10k@lists.infradead.org" T24gVHVlLCBKdW4gMiwgMjAxNSBhdCAxMjoxNyBBTSwgTWljaGFsIEthemlvciA8bWljaGFsLmth emlvckB0aWV0by5jb20+IHdyb3RlOgo+IE9uIDEgSnVuZSAyMDE1IGF0IDIxOjQ0LCBEYXZpZCBM aXUgPGNmbGl1LnR3QGdtYWlsLmNvbT4gd3JvdGU6Cj4gWy4uLl0KPj4gLS0tIGEvZHJpdmVycy9u ZXQvd2lyZWxlc3MvYXRoL2F0aDEway9jb3JlLmgKPj4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxl c3MvYXRoL2F0aDEway9jb3JlLmgKPj4gQEAgLTkxLDYgKzkxLDcgQEAgc3RydWN0IGF0aDEwa19z a2JfY2Igewo+PiAgICAgICAgICAgICAgICAgdTggdGlkOwo+PiAgICAgICAgICAgICAgICAgdTE2 IGZyZXE7Cj4+ICAgICAgICAgICAgICAgICBib29sIGlzX29mZmNoYW47Cj4+ICsgICAgICAgICAg ICAgICBib29sIG5vaHdjcnlwdDsKPj4gICAgICAgICAgICAgICAgIHN0cnVjdCBhdGgxMGtfaHR0 X3R4YnVmICp0eGJ1ZjsKPj4gICAgICAgICAgICAgICAgIHUzMiB0eGJ1Zl9wYWRkcjsKPj4gICAg ICAgICB9IF9fcGFja2VkIGh0dDsKPj4gQEAgLTM0OSw2ICszNTAsNyBAQCBzdHJ1Y3QgYXRoMTBr X3ZpZiB7Cj4+ICAgICAgICAgfSB1Owo+Pgo+PiAgICAgICAgIGJvb2wgdXNlX2N0c19wcm90Owo+ PiArICAgICAgIGJvb2wgbm9od2NyeXB0Owo+Cj4gU28gdGhpcyBpcyBhIGJpdCBjb25mdXNpbmcu IFRoaXMgaXMgdXNlZCBvbmx5IGZvciB0eCBwb2xpY3kgb25seSwKPiByaWdodD8gSXQgc2hvdWxk IGJlIG5hbWVkIGFjY29yZGluZ2x5IHRoZW4uIFRoZSBvdGhlciBub2h3Y3J5cHQgaW4KPiBza2Jf Y2IgcHJldHR5IG11Y2ggaW1wbGllcyBUeCBhbHJlYWR5Lgo+CgpObywgaXQncyBhbHNvIGZvciBS eC4KSW4gdGhpcyBwYXRjaCwgaW4gbWFjLmMsIGlmIGFydmlmLT5ub2h3Y3J5cHQgaXMgc2V0LCBh dGgxMGtfc2VuZF9rZXkoKQp3b24ndCBpbnN0YWxsIHRoZSBhY3R1YWwga2V5IHRvIGhhcmR3YXJl LCBidXQgYSBjbGVhciBrZXkgaXMKaW5zdGFsbGVkLiBUaGlzIG1ha2VzIGFsbCBtYXRjaGluZyBT VEEncyBlbmNyeXB0ZWQgZnJhbWUgcGFzc3Rocm91Z2gKSFcgYW5kIG1hYzgwMjExIGNhbiB0YWtl IGNhcmUgb2YgZGVjcnlwdGlvbiBsYXRlciBpbiBob3N0LgooaW4gcGF0Y2ggVjIgSSB3aWxsIHRh a2UgY2FyZSBvZiB0aGUgSUVFRTgwMjExX0hXX1NXX0NSWVBUT19DT05UUk9MIHNldHRpbmcpCgo+ Cj4gWy4uLl0KPj4gQEAgLTQ4NCw2ICs0OTEsMTIgQEAgZW51bSBhdGgxMGtfZGV2X2ZsYWdzIHsK Pj4gICAgICAgICAgKiB3YWl0ZXJzIHNob3VsZCBpbW1lZGlhdGVseSBjYW5jZWwgaW5zdGVhZCBv ZiB3YWl0aW5nIGZvciBhIHRpbWUgb3V0Lgo+PiAgICAgICAgICAqLwo+PiAgICAgICAgIEFUSDEw S19GTEFHX0NSQVNIX0ZMVVNILAo+PiArCj4+ICsgICAgICAgLyogVXNlIFJhdyBtb2RlIGZvciBU eCBhbmQgUnggKi8KPj4gKyAgICAgICBBVEgxMEtfUkFXX01PREUsCj4+ICsKPj4gKyAgICAgICAv KiBEaXNhYmxlIEhXIGNyeXB0byBlbmdpbmUgKi8KPj4gKyAgICAgICBBVEgxMEtfSFdfQ1JZUFRP X0RJU0FCTEVELAo+Cj4gWW91J3JlIG1pc3NpbmcgdGhlIF9GTEFHIHByZWZpeC4gQWxzbyB0aGlz IGlzbid0IGRvY3VtZW50ZWQgd2VsbAo+IGVub3VnaC4gUkFXX01PREUgaW1wbGllcyBzdyBjcnlw dG8gcngsIG5vPyBQZXJoYXBzIGEgbW9yZSBmaW5lIGdyYWluZWQKPiBhcHByb2FjaCB3b3VsZCBi ZSBiZXR0ZXI6CgpUaGFua3MuIFdpbGwgZml4LgoKUmF3IG1vZGUgZG9lc24ndCBpbXBseSBTVyBj cnlwdG8gb25seS4KSW5kZWVkIFJhdyBtb2RlIGlzIHRoZSBvbmx5IHdheSB0byBnZXQgc3cgY3J5 cHRvIHN1cHBvcnQsIGJ1dCBpdCBhbHNvCnN1cHBvcnRzIEhXIGNyeXB0by4KSSBqdXN0IHRlc3Rl ZCBib3RoIEhXL1NXIGNyeXB0byBjYXNlcyB3b3JraW5nIGZpbmUgaW4gcmF3IG1vZGUuCgpTbyBt eSBwbGFuIGZvciB0aGUgbmV3IGNyeXB0bW9kZSBwYXJhbWV0ZXIgaGFzIDMgdmFsdWVzOgoKICAg ICAgIDAgICAgVXNlIEhXIGNyeXB0byBlbmdpbmUgb25seS4gVGhpcyB1c2VzIG5hdGl2ZSBXaUZp IG1vZGUgVHgvUnggZW5jYXAKCiAgICAgICAxICAgIFVzZSBTVyBjcnlwdG8gZW5naW5lIG9ubHku IFRoaXMgdXNlcyByYXcgbW9kZSBUeC9SeCBlbmNhcAoKICAgICAgIDIgICAgU3VwcG9ydHMgYm90 aCBTVyAmIEhXIGNyeXB0byBlbmdpbmUuIFRoaXMgdXNlcyByYXcgbW9kZSBUeC9SeCBlbmNhcC4K Ck9uY2UgdGhpcyBwYXRjaCBpcyBpbiwgSSBndWVzcyBwZW9wbGUgd291bGQgb25seSB1c2UgY3J5 cHRtb2RlPTAgb3IgMS4KRm9yIGNyeXB0bW9kZT0yLCBJIGhhdmUgc3Vic2VxdWVudCBjaGFuZ2Vz IHRvIGFsbG93IHBlciBCU1MgYmFzZWQKY29udHJvbCBvZiBIVy9TVyBjcnlwdG8gc2VsZWN0aW9u LgpQbGFuIGlzIHRvIG1ha2UgbWFrZSBhcnZpZi0+bm9od2NyeXB0IGNvbmZpZ3VyYWJsZSB2aWEg ZGVidWdmcyBvcgpubDgwMjExIChzdWJqZWN0IHRvIHJldmlldyBmZWVkYmFjaykKCj4KPiAgQVRI MTBLX0ZMQUdfUkFXX1RYLAo+ICBBVEgxMEtfRkxBR19SQVdfUlgsCj4gIEFUSDEwS19GTEFHX1NX X1RYX0NSWVBUTywKPiAgQVRIMTBLX0ZMQUdfU1dfUlhfQ1JZUFRPLAo+Cj4gT2J2aW91c2x5IG5v dCBhbGwgY29tYmluYXRpb25zIGFyZSB2YWxpZC9kb2FibGUgYnV0IEkgdGhpbmsgdGhpcyB3aWxs Cj4gbWFrZSB0aGUgY29kZSBsb29rIG1vcmUgb2J2aW91cy4KPgoKVGhhdCB3b3VsZCBiZSB0b28g bWFueSBmbGFncyBhbmQgdG9vIGNvbXBsZXguCkknZCBzdWdnZXN0IGtlZXAgdGhlIHByb3Bvc2Vk IEFUSDEwS19SQVdfTU9ERSBhbmQgQVRIMTBLX0hXX0NSWVBUT19ESVNBQkxFRC4KTGV0J3MgbWFr ZSBUeC9SeCBIVyBjcnlwdG8gYWx3YXlzIGJvdGggZW5hYmxlZCBvciBib3RoIGRpc2FibGVkIEFG QQpkcml2ZXIgaXMgY29uY2VybmVkLgpCZW4ncyBDVCAxMC4xIEZXIGlzIGEgc3BlY2lhbCB1c2Ug Y2FzZSBhbmQgd291bGQgZml0IGludG8gY3J5cHRtb2RlPTAKd2hlcmUgaGlzIEZXIGludGVybmFs bHkgZG9lcyB0aGUgbWFnaWMgdG8gZGlzYWJsZSBIVyBSeCB3aGljaCBpcwppbmRlcGVuZGVudCB0 byB0aGUgZHJpdmVyLgpPbmNlIEJlbidzIEZXIGlzIHJlYWR5IGZvciByYXcgbW9kZSwgZHJpdmVy IHRoZW4gY2FuIHN3aXRjaCB0byB1c2UKY3J5cHRtb2RlPTEgb3IgMi4KCj4KPj4gIH07Cj4+Cj4+ ICBlbnVtIGF0aDEwa19jYWxfbW9kZSB7Cj4+IEBAIC00OTIsNiArNTA1LDE1IEBAIGVudW0gYXRo MTBrX2NhbF9tb2RlIHsKPj4gICAgICAgICBBVEgxMEtfQ0FMX01PREVfRFQsCj4+ICB9Owo+Pgo+ PiArZW51bSBhdGgxMGtfY3J5cHRfbW9kZSB7Cj4+ICsgICAgICAgLyogVXNlIEhXIGNyeXB0byBl bmdpbmUgb25seSAqLwo+PiArICAgICAgIEFUSDEwS19DUllQVF9NT0RFX0hXLAo+PiArICAgICAg IC8qIEhXIFNXIGNyeXB0byBlbmdpbmUgb25seSAoaWUuIEhXIGNyeXB0byBlbmdpbmUgZGlzYWJs ZWQpICovCj4+ICsgICAgICAgQVRIMTBLX0NSWVBUX01PREVfU1csCj4+ICsgICAgICAgLyogQm90 aCBTVyAmIEhXIGNyeXB0byBlbmdpbmUgc3VwcG9ydGVkICovCj4+ICsgICAgICAgQVRIMTBLX0NS WVBUX01PREVfSFdfU1csCj4KPiBJIGRvbid0IHRoaW5rIHRoaXMgaXMgY2xlYXIgZW5vdWdoIChh bmQgdGhlIGNvbW1lbnRzIGRvbid0IGhlbHAgYXQgYWxsKToKPgo+ICBBVEgxMEtfQ1JZUFRfTU9E RV9IVywKPiAgQVRIMTBLX0NSWVBUX01PREVfU1csCj4gIEFUSDEwS19DUllQVF9NT0RFX1NXX1JY X0hXX1RYLAo+Cj4gSXQgd291bGQgYWxzbyBiZSBuaWNlIHRvIGhhdmUgc29tZSBzb3J0IG9mIGlu ZGljYXRpb24gaW4gZHJpdmVyCj4gbG9ncy9kbWVzZyAod2l0aG91dCBhbnkgZGVidWdfbWFza3Mp IGFzIHRvIHdoYXQgY3J5cHRvIG1vZGUgZHJpdmVyCj4gdXNlcyBzbyB0aGF0IGlmIHNvbWVvbmUg cmVwb3J0cyBhIGJ1ZyB3ZSBjYW4gcXVpY2tseSBzZWUgdGhlaXIgYmFzZQo+IGNvbmZpZ3VyYXRp b24uIEhhdmluZyBpdCBjb21wbGV0ZWx5IGNvbmZpZ3VyYWJsZSBkdXJpbmcgcnVudGltZSBpcyBh Cj4gYml0IG9mIGEgcGFpbiBpbiB0aGlzIHJlZ2FyZCB0aG91Z2guLiBidXQgbW9zdCBwZW9wbGUg d2lsbCBsaWtlbHkganVzdAo+IHNldCBjcnlwdG1vZGUgaW4gbW9kcHJvYmUuY29uZiBvciBzb21l dGhpbmcuIFRob3VnaHRzPwoKSSB3aWxsIGFkZCBhIGxvZyBsaW5lIHRvIHByaW50IHRoZSBjcnlw dG1vZGUgcGFyYW0gdmFsdWUuCgo+Cj4KPj4gK307Cj4+ICsKPj4gIHN0YXRpYyBpbmxpbmUgY29u c3QgY2hhciAqYXRoMTBrX2NhbF9tb2RlX3N0cihlbnVtIGF0aDEwa19jYWxfbW9kZSBtb2RlKQo+ PiAgewo+PiAgICAgICAgIHN3aXRjaCAobW9kZSkgewo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0 aC9hdGgxMGsvaHR0X3J4LmMKPj4gaW5kZXggODllYjE2Yi4uYTdkZjA1ZCAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYwo+PiArKysgYi9kcml2 ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jCj4+IEBAIC0xMDE4LDggKzEwMTgs NyBAQCBzdGF0aWMgdm9pZCBhdGgxMGtfaHR0X3J4X2hfdW5kZWNhcF9yYXcoc3RydWN0IGF0aDEw ayAqYXIsCj4+Cj4+ICAgICAgICAgLyogSW4gbW9zdCBjYXNlcyB0aGlzIHdpbGwgYmUgdHJ1ZSBm b3Igc25pZmZlZCBmcmFtZXMuIEl0IG1ha2VzIHNlbnNlCj4+ICAgICAgICAgICogdG8gZGVsaXZl ciB0aGVtIGFzLWlzIHdpdGhvdXQgc3RyaXBwaW5nIHRoZSBjcnlwdG8gcGFyYW0uIFRoaXMgd291 bGQKPj4gLSAgICAgICAgKiBhbHNvIG1ha2Ugc2Vuc2UgZm9yIHNvZnR3YXJlIGJhc2VkIGRlY3J5 cHRpb24gKHdoaWNoIGlzIG5vdAo+PiAtICAgICAgICAqIGltcGxlbWVudGVkIGluIGF0aDEwayku Cj4+ICsgICAgICAgICogYWxzbyBtYWtlIHNlbnNlIGZvciBzb2Z0d2FyZSBiYXNlZCBkZWNyeXB0 aW9uLgo+Cj4gSSBndWVzcyB5b3Ugc2hvdWxkIHVwZGF0ZSB0aGUgY29tbWVudCBldmVuIG1vcmUu IFRoZSAid291bGQiIGRvZXNuJ3QKPiBmaXQgYW55bW9yZS4gSW5zdGVhZDogIlRoaXMgaXMgbmVj ZXNzYXJ5IGZvciBzb2Z0d2FyZSBjcnlwdG8gdG9vLiAiCgp3aWxsIGRvLgoKPgo+IE5vbmV0aGVs ZXNzIGt1ZG9zIGZvciB0YWtpbmcgY2FyZSB0byB1cGRhdGUgY29tbWVudHMuCj4KPgo+IFsuLi5d Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h3LmggYi9k cml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h3LmgKPj4gaW5kZXggODVjY2EyOS4uMzdm ZDJmODMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHcu aAo+PiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h3LmgKPj4gQEAgLTI5 Niw3ICsyOTYsNyBAQCBlbnVtIGF0aDEwa19od19yYXRlX2NjayB7Cj4+ICAjZGVmaW5lIFRBUkdF VF8xMFhfUlhfU0tJUF9ERUZSQUdfVElNRU9VVF9EVVBfREVURUNUSU9OX0NIRUNLIDEKPj4gICNk ZWZpbmUgVEFSR0VUXzEwWF9WT1dfQ09ORklHICAgICAgICAgICAgICAgICAgMAo+PiAgI2RlZmlu ZSBUQVJHRVRfMTBYX05VTV9NU0RVX0RFU0MgICAgICAgICAgICAgICAoMTAyNCArIDQwMCkKPj4g LSNkZWZpbmUgVEFSR0VUXzEwWF9NQVhfRlJBR19FTlRSSUVTICAgICAgICAgICAgMAo+PiArI2Rl ZmluZSBUQVJHRVRfMTBYX01BWF9GUkFHX0VOVFJJRVMgICAgICAgICAgICAxMAo+Cj4gVGhpcyBp cyBwcm9iYWJseSBlbm91Z2ggYXQgIjIiIChhdGgxMGsgZG9lc24ndCBzZW5kIG1vcmUgdGhhbiAy IHR4Cj4gZnJhZ21lbnRzIG5vdykuIEkgYXNzdW1lIGZ3IGNyYXNoZXMgd2l0aCByYXcgdHggaWYg dGhpcyBpc24ndCBmaXhlZCwKPiBjb3JyZWN0Pwo+Cj4gU2lkZW5vdGU6IEkgZ3Vlc3MgVEFSR0VU X01BWF9GUkFHX0VOVFJJRVMgY291bGQgYmUgZml4ZWQgYXMgd2VsbC4gSXQKPiBtaWdodCBtYWtl IHNlbnNlIGZvciBRQ0E2MVg0IGh3Mi4xIHdoaWNoIHN0aWxsIHVzZXMgdGhlIG9sZCBSeAo+IGlu ZGljYXRpb24gZXZlbnQgYW5kIG1pZ2h0IGJlIGFibGUgdG8gZG8gcmF3IHR4cnggKyBzd2NyeXB0 by4gQnV0IEknbQo+IGEgYml0IHJlbHVjdGFudCB0byBjaGFuZ2UgdGhpcyB3aXRob3V0IGFueSB0 ZXN0aW5nLgo+CgpTdXJlLiBJIGNoYW5nZSBpdCB0byAxMCBiZWNhdXNlIHRoZSBkb2N1bWVudCBJ IGdvdCBmcm9tIFFDQSBzYXlzIHNvLgpTaW5jZSB0aGlzIGlzIGEgZ2xvYmFsIHNldHRpbmcsIEkg d2lsbCByZW1vdmUgdGhpcyBhbmQga2VlcCBpdCA9MCBmb3IKbm93IHNvIGl0IGRvZXNuJ3QgYWZm ZWN0IGV4aXN0aW5nIEhXIGJhc2VkIGRhdGFwYXRoLgpQZXIgUUNBLCB0aGUgbWFpbiBpc3N1ZSBu b3QgY2hhbmdpbmcgdGhpcyB3b3VsZCBiZSBTVyBjcnlwdG8gdGhlbgp3b24ndCBiZSBhYmxlIHRv IGhhbmRsZSBsYXJnZSBSeCBBTVNEVS4KV2hlbiBIVyBpcyBub3QgZG9pbmcgUnggZGVjcnlwdGlv biwgdGhlIHdob2xlIEFNU0RVIG5lZWRzIHRvIGJlIERNQSB0bwpob3N0IGZvciBTVyBiYXNlZCBk ZWNyeXB0aW9uICYgQU1TRFUgc3ViZnJhbWUgZGVhZ2dyZWdhdGlvbi4KCgo+Cj4gWy4uLl0KPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmMgYi9kcml2 ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS5jCj4+IGluZGV4IDc3MjIwYjAuLjEyMDIx NTAgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmMK Pj4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuYwo+PiBAQCAtNTA4 LDcgKzUwOCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgd21pX3ZkZXZfcGFyYW1fbWFwIHdtaV8xMHhfdmRl dl9wYXJhbV9tYXAgPSB7Cj4+ICAgICAgICAgLnR4YmYgPSBXTUlfVkRFVl9QQVJBTV9VTlNVUFBP UlRFRCwKPj4gICAgICAgICAucGFja2V0X3Bvd2Vyc2F2ZSA9IFdNSV9WREVWX1BBUkFNX1VOU1VQ UE9SVEVELAo+PiAgICAgICAgIC5kcm9wX3VuZW5jcnkgPSBXTUlfVkRFVl9QQVJBTV9VTlNVUFBP UlRFRCwKPj4gLSAgICAgICAudHhfZW5jYXBfdHlwZSA9IFdNSV9WREVWX1BBUkFNX1VOU1VQUE9S VEVELAo+PiArICAgICAgIC50eF9lbmNhcF90eXBlID0gV01JXzEwWF9WREVWX1BBUkFNX1RYX0VO Q0FQX1RZUEUsCj4KPiBIbW0uLgo+Cj4gVGVjaG5pY2FsbHkgdGhpcyBpc24ndCBjb3JyZWN0IGJl Y2F1c2UgMTAuMSBkb2Vzbid0IHN1cHBvcnQgdGhpcyB2ZGV2Cj4gcGFyYW1ldGVyLiBQcmFjdGlj YWxseSB0aGlzIG1pZ2h0IG5vdCBtYXR0ZXIgc2luY2UgMTAuMSB3b24ndCBldmVyCj4gaGF2ZSB0 aGUgYXBwcm9wcmlhdGUgZndfZmVhdHVyZSBzZXQKPiAoQVRIMTBLX0ZXX0ZFQVRVUkVfUkFXX01P REVfU1VQUE9SVCkuLiB1bmxlc3MgQmVuIGltcGxlbWVudHMgaXQgaW4gaGlzCj4gMTAuMSBDVCBm b3JrLgo+CgpHb29kIHBvaW50LiBBY3R1YWxseSBJIHRoaW5rIEkgd2lsbCBsZWF2ZSB0eF9lbmNh cF90eXBlIGFzCldNSV9WREVWX1BBUkFNX1VOU1VQUE9SVEVEIHNpbmNlIEkgZG9uJ3QgcmVhbGx5 IG5lZWQgdG8gdXNlL2NoYW5nZSBpdC4KSSB1c2VkIHRvIHNldCB0aGUgcGVyIFZERVYgVHggZW5j YXAgdHlwZSwgYnV0IEkgZm91bmQganVzdCB1c2UgdGhlCmZpbmVyIGdyYWluZWQgcGVyIFR4IGZy YW1lIGRlc2NyaXB0b3IgZW5jYXAgdHlwZSBjb250cm9sIGlzCnN1ZmZpY2llbnQuCgoKRGF2aWQK Cj4gSWRlYWxseSB5b3Ugc2hvdWxkIGNyZWF0ZSB3bWlfMTBfMl92ZGV2X3BhcmFtX21hcCBhbmQg dXNlIGl0IGZvciB0aGUKPiAxMC4yIG9wX3ZlcnNpb24uIEFsc28geW91IHNob3VsZCBwcm9iYWJs eSB1cGRhdGUKPiB3bWlfMTBfMl80X3ZkZXZfcGFyYW1fbWFwIGFzIHdlbGwgLSBpZiAxMC4yIHdv cmtzIHRoZW4gMTAuMi40IHdpbGwKPiBtb3N0bHkgbGlrZSBkbyB0b28uCj4KPiBJIHdvdWxkIGFj dHVhbGx5IGV2ZW4gc3VnZ2VzdCBmb3IgdGhpcyB0eF9lbmNhcF90eXBlIHRvIGJlIGRvbmUgaW4g YQo+IHNlcGFyYXRlIHBhdGNoIGFzIGl0J2xsIGNoYW5nZSBhdGgxMGsgYmVoYXZpb3VyIG9uIGl0 cyBvd24uIEl0J2xsIGJlCj4gZWFzaWVyIHRvIGJpc2VjdCB0aGUgZHJpdmVyIGxhdGVyIGluIGNh c2Ugc29tZXRoaW5nIHdpbGwgaGF2ZSBnb25lCj4gd3JvbmcuCj4KPgo+IE1pY2hhxYIKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmF0aDEwayBtYWlsaW5n IGxpc3QKYXRoMTBrQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9hdGgxMGsK