From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F1DCF2D12E9; Wed, 13 Aug 2025 04:46:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.29.241.158 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755060381; cv=none; b=Sa+p1CnQwSTv0+K9rNiv3kniJiqLHvfsOK5kSJKYPyQDO+ODPpA0qItmE9nicHgw/UaqQuwfhh2hQNs2H1xmcTEYXuQDahX6AUgWhuCoksHhhvSjaVzz7QC/gL6RRgGllRTcwHy/yy1YUGF+CqMTpzYZjwow4mpz3ruZ9EOOlEw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755060381; c=relaxed/simple; bh=wq36rmO/H2/6uf432YYvJpZUeGI1iB9lTaIQzUTad/M=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: Content-Type:MIME-Version; b=D6HYZwzEaxGMmF0vYPI/++WSh8Vo9y3ZffB217/Vf/kRmN5CYTebYnHqOMNoEFb5zSA52lHhy21kfzhXn49eGzwM/HT+jW8k1YBvkBVNyq6Wq75kkGnOl70xHIVLmTU0IpRSPlqflhuwkHv2DJYQnBvvR4JnPhNWdURUlhh7bxk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codeconstruct.com.au; spf=pass smtp.mailfrom=codeconstruct.com.au; dkim=pass (2048-bit key) header.d=codeconstruct.com.au header.i=@codeconstruct.com.au header.b=UMD23GrY; arc=none smtp.client-ip=203.29.241.158 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codeconstruct.com.au Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=codeconstruct.com.au Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=codeconstruct.com.au header.i=@codeconstruct.com.au header.b="UMD23GrY" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1755060374; bh=wq36rmO/H2/6uf432YYvJpZUeGI1iB9lTaIQzUTad/M=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=UMD23GrYBKw70eclDrL725mIYyq56SJj1l6u8lmCGhvJdRENnmuw5ClUM7ALsFQjF T4EYa0luLMR7ABhfZE2fbeisqULKjp4+9amNUaqbvXp+Nd1agFKMD1wsTJgIERE0ls QzmG5lISGexRF/VwZjCWwcXpTknaOt+cmfKViNLWcDcmWW3+X+vr1+xstpImGsmVWd zD5tskwCT2rb+IHQtTPi/iVy7d6libpMUkmkLvZTM+9rf0X9LXWXkgxZiQaJtqzj/2 xnQsKWwhCR6yMM+brNvD3EtvpWr0qUdurKL/BxyoDC/b5OUpaZsghse/yYSpMSEjjg YHRwKNRdPF/rw== Received: from pecola.lan (unknown [159.196.93.152]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id E85BB6ABED; Wed, 13 Aug 2025 12:46:12 +0800 (AWST) Message-ID: <42643918b686206c97076cf9fd2f02718e85b108.camel@codeconstruct.com.au> Subject: Re: [PATCH v24 1/1] mctp pcc: Implement MCTP over PCC Transport From: Jeremy Kerr To: admiyo@os.amperecomputing.com, Matt Johnston , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Sudeep Holla , Jonathan Cameron , Huisong Li Date: Wed, 13 Aug 2025 12:46:12 +0800 In-Reply-To: <20250811153804.96850-2-admiyo@os.amperecomputing.com> References: <20250811153804.96850-1-admiyo@os.amperecomputing.com> <20250811153804.96850-2-admiyo@os.amperecomputing.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.4-2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 SGkgQWRhbSwKCkZyb20gdGhlIE1DVFAgZGV2aWNlIHNpZGUsIG1vc3RseSBsb29rcyBva2F5LCBi dXQgdGhlcmUgYXJlIHNvbWUgdGhpbmdzCnRoYXQgbWF5IG5lZWQgd29yayBvbiB0aGUgbWFpbGJv eCBpbnRlcmZhY2UuIEFzIEkgaGF2ZSBtZW50aW9uZWQKZWFybGllciwgSSdtIG5vdCBzdXBlciBm YW1pbGlhciB3aXRoIHRoYXQsIHNvIHNvbWUgb2YgdGhlc2UgbWF5IGJlIG1vcmUKY2xhcmlmaWNh dGlvbnMgb24gbXkgc2lkZSByYXRoZXIgdGhhbiBjaGFuZ2VzLi4uCgpJIHNlZSB0aGF0IHRoaXMg aXMgZmFpbGluZyB0byBidWlsZCBvbiBuZXQtbmV4dCwgYXMgdGhlIG1haWxib3ggY2hhbmdlcwph cmUgbm90IHByZXNlbnQgdGhlcmUuIFlvdSBtYXkgbmVlZCB0byBjb29yZGluYXRlIGZvciB0aGUg bWVyZ2UuCgo+ICsjZGVmaW5lIE1DVFBfUEFZTE9BRF9MRU5HVEjCoMKgwqDCoCAyNTYKPiArI2Rl ZmluZSBNQ1RQX0NNRF9MRU5HVEjCoMKgwqDCoMKgwqDCoMKgIDQKPiArI2RlZmluZSBNQ1RQX1BD Q19WRVJTSU9OwqDCoMKgwqDCoMKgwqAgMHgxIC8qIERTUDAyOTIgYSBzaW5nbGUgdmVyc2lvbjog MSAqLwoKUmVnYXJkaW5nIHRoZSBjb21tZW50OiBJIGRvbid0IHRoaW5rIERTUDAyOTIgZG9lcyBk ZWZpbmUgYSB2ZXJzaW9uIGZvcgp0aGUgdHJhbnNwb3J0IGRhdGEgZm9ybWF0PyBUaGVyZSdzIHRo ZSBEU1AwMjM2IGhlYWRlciB2ZXJzaW9uLCBidXQKdGhhdCdzIGRpc3RpbmN0IGZyb20gdGhlIHRy YW5zcG9ydCBpbXBsZW1lbnRhdGlvbi4gWW91IGRvbid0IHNlZW0gdG8KdXNlIHRoZXNlIHRocmVl IG5vdyBhbnl3YXksIHBlcmhhcHMgZHJvcC4KCkFuZCBqdXN0IGNvbmZpcm1pbmc6IHRoZSBwY2Mg aGVhZGVyIGZvcm1hdCBpcyBub3cgYWxsIGhvc3QtZW5kaWFuIC0gb3IKaXMgdGhhdCBhIGZpcm13 YXJlLXNwZWNpZmllZCBlbmRpYW5uZXNzPyAod2hhdCBoYXBwZW5zIGlmIHRoZSBPUyBtYXkKYm9v dCBpbiBlaXRoZXIgQkUgb3IgTEU/IGlzIHRoYXQgYXQgYWxsIHBvc3NpYmxlIGZvciBhbnkgUEND LWNhcGFibGUKaGFyZHdhcmUsIG9yIGFyZSB3ZSBvdGhlcndpc2UgZ3VhcmFudGVlZCB0aGF0IHdl J3JlIHRoZSBzYW1lIGVuZGlhbm5lc3MKYXMgdGhlIGNvbnN1bWVyPykKCj4gK3N0cnVjdCBtY3Rw X3BjY19tYWlsYm94IHsKPiArwqDCoMKgwqDCoMKgwqB1MzIgaW5kZXg7Cj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW47Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG1i b3hfY2xpZW50IGNsaWVudDsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHBh Y2tldHM7CgpJZiB5b3UncmUgZXZlciBhYmxlIHRvIHN0YXNoIGEgY29udGV4dCBwb2ludGVyIGlu IG1haWxib3ggcmVxdWVzdHMsIHRoYXQKd291bGQgZ2l2ZSB5b3UgYSBncmVhdCBvcHBvcnR1bml0 eSB0byByZW1vdmUgdGhlIGNvbXBsZXhpdHkgb2YKbWFpbnRhaW5pbmcgdGhpcyBsaXN0LgoKTm8g Y2hhbmdlIHJlcXVpcmVkIG5vdyBuZWNlc3NhcmlseSwganVzdCBzb21ldGhpbmcgdG8gdHJhY2sg Zm9yIGxhdGVyCnNpbXBsaWZpY2F0aW9uLgoKPiArfTsKPiArCj4gKy8qIFRoZSBuZXRkZXYgc3Ry dWN0dXJlLiBPbmUgb2YgdGhlc2UgcGVyIFBDQyBhZGFwdGVyLiAqLwo+ICtzdHJ1Y3QgbWN0cF9w Y2NfbmRldiB7Cj4gK8KgwqDCoMKgwqDCoMKgLyogc3BpbmxvY2sgdG8gc2VyaWFsaXplIGFjY2Vz cyB0byBQQ0Mgb3V0Ym94IGJ1ZmZlciBhbmQgcmVnaXN0ZXJzCj4gK8KgwqDCoMKgwqDCoMKgICog Tm90ZSB0aGF0IHdoYXQgUENDIGNhbGxzIHJlZ2lzdGVycyBhcmUgbWVtb3J5IGxvY2F0aW9ucywg bm90IENQVQo+ICvCoMKgwqDCoMKgwqDCoCAqIFJlZ2lzdGVycy7CoCBUaGV5IGluY2x1ZGUgdGhl IGZpZWxkcyB1c2VkIHRvIHN5bmNocm9uaXplIGFjY2Vzcwo+ICvCoMKgwqDCoMKgwqDCoCAqIGJl dHdlZW4gdGhlIE9TIGFuZCByZW1vdGUgZW5kcG9pbnRzLgo+ICvCoMKgwqDCoMKgwqDCoCAqCj4g K8KgwqDCoMKgwqDCoMKgICogT25seSB0aGUgT3V0Ym94IG5lZWRzIGEgc3BpbmxvY2ssIHRvIHBy ZXZlbnQgbXVsdGlwbGUKPiArwqDCoMKgwqDCoMKgwqAgKiBzZW50IHBhY2tldHMgdHJpZ2dlcmlu ZyBtdWx0aXBsZSBhdHRlbXB0cyB0byBvdmVyIHdyaXRlCj4gK8KgwqDCoMKgwqDCoMKgICogdGhl IG91dGJveC7CoCBUaGUgSW5ib3ggYnVmZmVyIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHJlbW90ZQo+ ICvCoMKgwqDCoMKgwqDCoCAqIHNlcnZpY2UgYW5kIGEgc3BpbmxvY2sgd291bGQgaGF2ZSBubyBl ZmZlY3QuCj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgc3BpbmxvY2tfdCBs b2NrOwoKWW91IGRvbid0IHVzZSB0aGlzIGFueXdoZXJlLCBidXQgSSB0aGluayB5b3UgZG8gbmVl ZCBzeW5jaHJvbmlzYXRpb24Kc3RpbGwuIFNlZSBteSBjb21tZW50IG9uIHR4X2RvbmUuCgo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2Owo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXZpY2U7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG1j dHBfcGNjX21haWxib3ggaW5ib3g7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG1jdHBfcGNjX21h aWxib3ggb3V0Ym94Owo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgKm1jdHBfcGNjX3J4X2FsbG9j KHN0cnVjdCBtYm94X2NsaWVudCAqYywgaW50IHNpemUpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldiA9Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbWN0cF9wY2NfbmRldiwgaW5ib3gu Y2xpZW50KTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqYm94ID0g Jm1jdHBfcGNjX25kZXYtPmluYm94Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBza19idWZmICpz a2I7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChzaXplID4gbWN0cF9wY2NfbmRldi0+bmRldi0+ bXR1KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiArwqDC oMKgwqDCoMKgwqBza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG1jdHBfcGNjX25kZXYtPm5kZXYsIHNp emUpOwo+ICvCoMKgwqDCoMKgwqDCoGlmICghc2tiKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gTlVMTDsKPiArwqDCoMKgwqDCoMKgwqBza2JfcHV0KHNrYiwgc2l6ZSk7 Cj4gK8KgwqDCoMKgwqDCoMKgc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApOwo+ICsK PiArwqDCoMKgwqDCoMKgwqBza2JfcXVldWVfaGVhZCgmYm94LT5wYWNrZXRzLCBza2IpOwo+ICsK PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gc2tiLT5kYXRhOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBtY3RwX3BjY19jbGllbnRfcnhfY2FsbGJhY2soc3RydWN0IG1ib3hfY2xpZW50ICpjLCB2b2lk ICpidWZmZXIpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0 cF9wY2NfbmRldjsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGNjX2hlYWRlciBwY2NfaGVhZGVy Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7Cj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHNrX2J1ZmYgKnNrYjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbWN0cF9wY2NfbmRl diA9IGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbWN0cF9wY2NfbmRldiwgaW5ib3guY2xpZW50KTsK PiArwqDCoMKgwqDCoMKgwqBpZiAoIWJ1ZmZlcikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkZXZfZHN0YXRzX3J4X2Ryb3BwZWQobWN0cF9wY2NfbmRldi0+bmRldik7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArwqDCoMKgwqDCoMKgwqB9Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoHNrYl9xdWV1ZV93YWxrKCZtY3RwX3BjY19uZGV2LT5pbmJveC5w YWNrZXRzLCBza2IpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHNrYi0+ ZGF0YSAhPSBidWZmZXIpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjb250aW51ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2tiX3Vu bGluayhza2IsICZtY3RwX3BjY19uZGV2LT5pbmJveC5wYWNrZXRzKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZGV2X2RzdGF0c19yeF9hZGQobWN0cF9wY2NfbmRldi0+bmRldiwg c2tiLT5sZW4pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBza2JfcmVzZXRfbWFj X2hlYWRlcihza2IpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBza2JfcHVsbChz a2IsIHNpemVvZihwY2NfaGVhZGVyKSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjYiA9IF9fbWN0cF9jYihza2IpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjYi0+aGFsZW4gPSAwOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuZXRp Zl9yeChza2IpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8Kg wqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoHByX3dhcm4oIlVubWF0Y2hlZCBwYWNrZXQg aW4gbWN0cC1wY2MgaW5ib3ggcGFja2V0IGxpc3QiKTsKCk1pbm9yOiB3b3VsZCBiZSBoZWxwZnVs IHRvIGluY2x1ZGUgdGhlIGRldmljZSBpbnN0YW5jZSBpbmZvIGhlcmUuClBlcmhhcHMgbmV0ZGV2 X3dhcm4oKT8KCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1jdHBfcGNjX3R4X2RvbmUoc3RydWN0 IG1ib3hfY2xpZW50ICpjLCB2b2lkICptc3NnLCBpbnQgcikKPiArewo+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBtY3RwX3BjY19tYWlsYm94ICpib3g7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHNr X2J1ZmYgKnNrYjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgYm94ID0gY29udGFpbmVyX29mKGMsIHN0 cnVjdCBtY3RwX3BjY19tYWlsYm94LCBjbGllbnQpOwo+ICvCoMKgwqDCoMKgwqDCoHNrYl9xdWV1 ZV93YWxrKCZib3gtPnBhY2tldHMsIHNrYikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoc2tiLT5kYXRhID09IG1zc2cpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNrYl91bmxpbmsoc2tiLCAmYm94LT5wYWNrZXRzKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9jb25zdW1l X3NrYl9hbnkoc2tiKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDC oMKgwqDCoMKgfQoKSG93IGFyZSB1cGRhdGVzIHRvIHRoaXMgcXVldWUgc3luY2hyb25pc2VkIGFn YWluc3QgY29uY3VycmVudCBzdGFydF94bWl0PwoKU2ltaWxhcmx5LCBmb3IgdGhlIFJYIHBhdGg6 IHdoYXQgYWJvdXQgZHJhaW5fcGFja2V0cygpIHZzLiBSWAphbGxvYy9jb21wbGV0aW9uIC0gaXMg dGhlcmUgYW55IGd1YXJhbnRlZSB0aGF0IHdlIGhhdmUgcXVpZXNjZWQgdGhlIHJ4CmNoYW5uZWwg YmVmb3JlIG1jdHBfY2xlYW51cF9uZXRkZXYoKSBydW5zPyBJdCBzZWVtcyBsaWtlIHRoaXMgY3Vy cmVudGx5CmRlcGVuZHMgb24gb3JkZXJpbmcgb2YgdGhlIGRldm0gY2xlYW51cCBhY3Rpb25zLgoK PiArfQo+ICsKPiArc3RhdGljIG5ldGRldl90eF90IG1jdHBfcGNjX3R4KHN0cnVjdCBza19idWZm ICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IG1jdHBfcGNjX25kZXYgKm1wbmQgPSBuZXRkZXZfcHJpdihuZGV2KTsKPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgcGNjX2hlYWRlciAqcGNjX2hlYWRlcjsKPiArwqDCoMKgwqDCoMKgwqBpbnQg bGVuID0gc2tiLT5sZW47Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJjOwo+ICsKPiArwqDCoMKgwqDC oMKgwqByYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqcGNjX2hlYWRlcikpOwo+ICvCoMKg wqDCoMKgwqDCoGlmIChyYykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZf ZHN0YXRzX3R4X2Ryb3BwZWQobmRldik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGtmcmVlX3NrYihza2IpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g TkVUREVWX1RYX09LOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcGNj X2hlYWRlciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpwY2NfaGVhZGVyKSk7Cj4gK8KgwqDCoMKg wqDCoMKgcGNjX2hlYWRlci0+c2lnbmF0dXJlID0gUENDX1NJR05BVFVSRSB8IG1wbmQtPm91dGJv eC5pbmRleDsKPiArwqDCoMKgwqDCoMKgwqBwY2NfaGVhZGVyLT5mbGFncyA9IFBDQ19DTURfQ09N UExFVElPTl9OT1RJRlk7Cj4gK8KgwqDCoMKgwqDCoMKgbWVtY3B5KCZwY2NfaGVhZGVyLT5jb21t YW5kLCBNQ1RQX1NJR05BVFVSRSwgTUNUUF9TSUdOQVRVUkVfTEVOR1RIKTsKPiArwqDCoMKgwqDC oMKgwqBwY2NfaGVhZGVyLT5sZW5ndGggPSBsZW4gKyBNQ1RQX1NJR05BVFVSRV9MRU5HVEg7Cj4g K8KgwqDCoMKgwqDCoMKgc2tiX3F1ZXVlX2hlYWQoJm1wbmQtPm91dGJveC5wYWNrZXRzLCBza2Ip Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByYyA9IG1ib3hfc2VuZF9tZXNzYWdlKG1wbmQtPm91dGJv eC5jaGFuLT5tY2hhbiwgc2tiLT5kYXRhKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwg MCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBza2JfdW5saW5rKHNrYiwgJm1w bmQtPm91dGJveC5wYWNrZXRzKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIE5FVERFVl9UWF9CVVNZOwo+ICvCoMKgwqDCoMKgwqDCoH0KCklzIHRoZSBsYWNrIG9mIGZs b3ctY29udHJvbCBoZXJlIGFuIGlzc3VlPyBJcyB0aGVyZSBhbnkgZmFjaWxpdHkgZm9yIHRoZQpt YWlsYm94IEFQSSB0byBnaXZlIHlvdSBhbiBpbmRpY2F0aW9uIG9mIHR4IGF2YWlsYWJpbGl0eSwg b3Igc2hvdWxkIHlvdSBiZQp0cmFja2luZyB0aGF0IGluIHRoZSBudW1iZXIgb2YgcGVuZGluZyBU WCBtZXNzYWdlcz8KCk9yLCBpbiBnZW5lcmFsOiB3aGF0IGFyZSB5b3UgZXhwZWN0YXRpb25zIG9u IHJldHJhbnNtaXQgZm9yIHRoaXMKTkVUREVWX1RYX0JVU1kgY2FzZT8KCgo+ICsKPiArwqDCoMKg wqDCoMKgwqBkZXZfZHN0YXRzX3R4X2FkZChuZGV2LCBsZW4pOwo+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiBORVRERVZfVFhfT0s7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2Rl dmljZV9vcHMgbWN0cF9wY2NfbmV0ZGV2X29wcyA9IHsKPiArwqDCoMKgwqDCoMKgwqAubmRvX3N0 YXJ0X3htaXQgPSBtY3RwX3BjY190eCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg bWN0cF9uZXRkZXZfb3BzIG1jdHBfbmV0ZGV2X29wcyA9IHsKPiArwqDCoMKgwqDCoMKgwqBOVUxM Cj4gK307CgpNaW5vcjogbWN0cF9yZWdpc3Rlcl9uZXRkZXYoKSBhbGxvd3MgcGFzc2luZyBOVUxM IGZvciB0aGUgb3BzIGFyZ3VtZW50LAp5b3UgZG9uJ3QgbmVlZCB0aGlzIGVtcHR5IG9wcyBzdHJ1 Y3QuCgo+ICtzdGF0aWMgdm9pZCBkcmFpbl9wYWNrZXRzKHN0cnVjdCBza19idWZmX2hlYWQgKmxp c3QpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwo+ICsKPiArwqDC oMKgwqDCoMKgwqB3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eShsaXN0KSkgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBza2IgPSBza2JfZGVxdWV1ZShsaXN0KTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2NvbnN1bWVfc2tiX2FueShza2IpOwo+ICvCoMKgwqDC oMKgwqDCoH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWN0cF9jbGVhbnVwX25ldGRldih2b2lk ICpkYXRhKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBf cGNjX25kZXY7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkYXRh Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBtY3RwX3BjY19uZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7 Cj4gK8KgwqDCoMKgwqDCoMKgZHJhaW5fcGFja2V0cygmbWN0cF9wY2NfbmRldi0+b3V0Ym94LnBh Y2tldHMpOwo+ICvCoMKgwqDCoMKgwqDCoGRyYWluX3BhY2tldHMoJm1jdHBfcGNjX25kZXYtPmlu Ym94LnBhY2tldHMpOwoKWW91J3JlIGRyYWluaW5nIHRoZXNlIHF1ZXVlcyBvbiBkZXZpY2UgcmVt b3ZhbC4gSSBzdXNwZWN0IHlvdSBtYXkgd2FudAp0byBkbyB0aGlzIG9uIG5kb19zdG9wIGluc3Rl YWQuCgpUaGlzIHdvdWxkIHByZXZlbnQgc3RhbGUgc2ticyBiZWluZyB0cmFuc2ZlcnJlZCBvdmVy IGEgY2hhbmdlIGluIG5ldHdvcmsKbmFtZXNwYWNlLCB3aGljaCBpcyBwcm9iYWJseSBhIGdvb2Qg dGhpbmcsIGJ1dCBtYXkgZGVwZW5kIG9uIGRldGFpbHMKb2YgdGhlIFBDQyBjaGFubmVsIGJlaGF2 aW91ci4KCkNoZWVycywKCgpKZXJlbXkK