From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id F3571C2BD09 for ; Fri, 28 Jun 2024 23:39:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 113886B0089; Fri, 28 Jun 2024 19:39:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 09C386B008A; Fri, 28 Jun 2024 19:39:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E30686B008C; Fri, 28 Jun 2024 19:39:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id BBF066B0089 for ; Fri, 28 Jun 2024 19:39:37 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 6A094A095E for ; Fri, 28 Jun 2024 23:39:37 +0000 (UTC) X-FDA: 82281916794.23.A8CA581 Received: from mail-qt1-f179.google.com (mail-qt1-f179.google.com [209.85.160.179]) by imf04.hostedemail.com (Postfix) with ESMTP id 9FEEE40012 for ; Fri, 28 Jun 2024 23:39:35 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=ITm1vNAT; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf04.hostedemail.com: domain of jthoughton@google.com designates 209.85.160.179 as permitted sender) smtp.mailfrom=jthoughton@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1719617960; a=rsa-sha256; cv=none; b=dF3pQ4X6Dz68+LUh1e6VpuWuhzgHssb2ypi7077f64muI6+1sYGnxQZSkEWM9aBVSLcenX GIhyFlEy34c1FoVaIker4mUDXvgHAKHsLIayBcRm3jvik9vrOHEnX30Su0RBISX6+jqpLl tU5JYurasYqrk2NxfyRuiQu+s0/a9jw= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=ITm1vNAT; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf04.hostedemail.com: domain of jthoughton@google.com designates 209.85.160.179 as permitted sender) smtp.mailfrom=jthoughton@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1719617960; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=7Ca0DA4OYtmu5vjHp6DDkTi8s1JKrMVKIGk5L1tKfRw=; b=NiUQJ0y+lElrZN5EKL7KRC11ASwJOIqK06F9qQaKh+twlWAL+zMJ52lwuRTCtJGZrA42cA A+pROVVMSXjy+ZbICQCjbKPPmPecICij2/squTMWUAWeqg1ZASm5d9LaDuHTdANY0QURAB 3DP7hiRjLvwcrh89pS7XicwSea3V4i4= Received: by mail-qt1-f179.google.com with SMTP id d75a77b69052e-445022f78e1so66731cf.1 for ; Fri, 28 Jun 2024 16:39:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1719617975; x=1720222775; darn=kvack.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=7Ca0DA4OYtmu5vjHp6DDkTi8s1JKrMVKIGk5L1tKfRw=; b=ITm1vNAT5fND0IdZIHQkgIonGRos4V/33b67YD869TobixGnQ7V+kJPtwnM/0pW0en rHt2zpsGXTToLMlwvVEwPmGVgOFkyrdoOuM2wmfFDUwPtnLfSGjZ12OzoCDw1wk/fOCo enHbxpP3Q5UfrgRKdRILFDzQACXseEHOcwQAsNfhuOW5OaivPGh/1K04EwQ7dufJ4vqp w8u9x/faMAqzAzsFw5iYAv/uUT8by9c+ODv+AYx/PaMrFQRsBNkeklUBbqtv3X6Po36s 0/73ZiZYEz/KEqviXrrx+RdojMblyQ4C6mkgdGRF18GEvn1rm4Dfqve9c5E/l34dWFqo FeNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719617975; x=1720222775; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=7Ca0DA4OYtmu5vjHp6DDkTi8s1JKrMVKIGk5L1tKfRw=; b=sw9+NETftqaV9gyUUVaR888PBwQzyGpXfwEVcUrPOObuuvYrNrJkv81fpe/LLwtwoo Px9DQLnliRxzcbcHvcd0I15PJUS13dOOcwyYX+BpO9flpM+YHD2EB52q1AO+PzqdmkGe AS/E3lgsUiWfoEaAJWjqAwWp5DbPhKZCblwYy6IAy5XAs3S5R8V1Ay6ZQevpp40hJT7l Sp0L+oif209+8tLpSQmAi+9JiDshobtu79HKbxaQdVkSECuxftV8mIPAge105LDQrd+e oDk+BPXIl77p+EDIdj1lSTVwkhrzRwbZetEJN9W54PUE3NIsKoPyItbg/yYWvvPe8v1j Kl7Q== X-Forwarded-Encrypted: i=1; AJvYcCVNhfkdNyfUw94QZxSnGGP4LQYMdWvc5bnLxi/juw8V60ndnFOxt+6Cf9qV3f3SwdcTSoZcwv8Ue1wRYx9FWH3epK8= X-Gm-Message-State: AOJu0YypNMMW13Zdnth5pjp1M5adxRMxmU7FtZpi6XJ37nKhhFXrkw5D yDcD54NAymyuRhDXTPDOdvLuj9cJHz3Mll2P/VoZk1tpXay59VQKuK+btjxJCP947gCtiYoT00f 7jEhdzJXRN9NxawkYxf348rzX3fFakT+hMRan X-Google-Smtp-Source: AGHT+IHKkpUk+WD6bTey5Z/OEgEg1zX4EupEIZF89/wKvvk+qrClQWspsS+52Ps7BfIHqkzp7QfwKpYEDXC+Usvf3S0= X-Received: by 2002:a05:622a:4709:b0:444:e9b9:708f with SMTP id d75a77b69052e-4465df8c326mr435621cf.21.1719617974492; Fri, 28 Jun 2024 16:39:34 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: James Houghton Date: Fri, 28 Jun 2024 16:38:57 -0700 Message-ID: Subject: Re: [PATCH v5 4/9] mm: Add test_clear_young_fast_only MMU notifier To: Sean Christopherson Cc: Yu Zhao , Andrew Morton , Paolo Bonzini , Ankit Agrawal , Axel Rasmussen , Catalin Marinas , David Matlack , David Rientjes , James Morse , Jonathan Corbet , Marc Zyngier , Oliver Upton , Raghavendra Rao Ananta , Ryan Roberts , Shaoqin Huang , Suzuki K Poulose , Wei Xu , Will Deacon , Zenghui Yu , kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Content-Type: multipart/mixed; boundary="00000000000085f40d061bfbc2cf" X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 9FEEE40012 X-Stat-Signature: stnpb5y5j8h1gd3fdxrwosbw846iwup7 X-Rspam-User: X-HE-Tag: 1719617975-709794 X-HE-Meta: U2FsdGVkX18vMZQFdT5k0pF2eiJ2LBDh8ivypUDM7GxMsN8v6QCOxEAtVB3brW8Q1vz3/AQtC6wkHQ0rg79tVT8redToAKV3yg4/fcaia/oFua46SacNarCSpJxzRQHCV0Fj/JZ3FtTDLbvHbwHrVUP149Hn7G6/G03WxRbUqZmnpyuWT2Q9HOxr940SlFjHCNR9FvC2N8noRnokAyHasRPyZ82TXHmn+5x1OCN7xMtBWb67K96p4CDxTnSyrbUz0qqi5XpbGP5EZVdI3gXCQaVJwfxoZQrUhfZssO0mkRL4auYSeaMuM9yD+JfTsndxu7y96Y2rc4TU0Pph+6PUUmQSp0xg9DmL9V50ty3oqvvj2SBMwoM0RLW4ei5lcjlop84KcP0Pt/Kjmn09yVS3QsDzE+M3aQwiY8nSQ2/FpvOnZq0zONqyo5z5TH6hCwVk0cGl5dcmEnp5FJ1zhXC7COg6w5fIb0BoI9PrTOHWpDlacc8bSumB/hpnfseCj5zCsHrSW/K102GV+4l0muzsjByo4yLlygUTt4sQRWr+2Uk3btPyZ9JqpwscWfEIEl5InHoZo2zZMU6YPgBkhRiR998eK27Tmi+l8aLRQ4f86FnppEUjFi4Se5I2drB0gS+1RS2U/cyWlVsMqXRulKOXU76OLXzZGSSWwCdEIlSiyPYyBVg4KyOBV9toQshoHxtb7GXtr7a6w1fuCkGjoFmDLiOxslXSkDua3S2/NmCKvVDGzjiCG+T+u6kFSl0guvHJjolIaAerFcZ0CMH9rGCXdYKKL21lwInHfYBWtYy9e67OtlbWj6VXRCjOrFAst3spwGSGzMGVmgGw5q1kguvJlJM5sYgbRKD+oS4Wf7TTyktjZ2SD3CH856cwTqv5quRIR9kfzR1dipaufcjm5aaJXksu2y+M9CGd1SOYL9Mg/Rv2Yvjuf3/E/kkduqwxDQcz6PbYbtWqgT5v1vrO9Rv 8nqAcom0 0+2DrXisYB385Ea9HxNRl43ambFt0Xet1DxG/Cm5rov8OPbBIMs9cFqwsfFwChidnBMvqeP5CjG6LRdec0AcpELbHE50Vn+UbitWWyiy6bk+/lhrfEiRHbTWzdVyMkr4GUjegAxsNHYhFx+aL38uMEB/9Fcy0eXMLs2oVX1QYwtPLWJs7JsuEQQU8cLWwRPf3SOblM7igzEzhlvbkIIprX4Kl4xzoaJVDGYZffbDUEslWOAxElNOn/Dhxbs/UXAPs3+vihirphyN/PyyCXHoLI5NtAubeFAezLWp9V024oGaqpk1MBDgL2Ecmc7wBCKtC14j0ZvKYl5EK8/J/8TivulZQvHFfkXV+qPmXD1iZ8FIZjFY7lK31htbm5awtOneu0zS9nnuACruB9P+myLgwYvYQ3MHTkc1xdq5O3Jo+CkxKnWxvLerx6Y8bxBb4nTRiN/udL88fN46JlvjuOMwKKPuMOfXsImetx7dcH2pOxHIuH7CuNm/CAObpNJuxMSxFUJ0Hwpg+TNJ+TXBzlwIUs/ltYA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: --00000000000085f40d061bfbc2cf Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jun 17, 2024 at 11:37=E2=80=AFAM Sean Christopherson wrote: > > On Mon, Jun 17, 2024, James Houghton wrote: > > On Fri, Jun 14, 2024 at 4:17=E2=80=AFPM Sean Christopherson wrote: > > > Ooh! Actually, after fiddling a bit to see how feasible fast-aging i= n the shadow > > > MMU would be, I'm pretty sure we can do straight there for nested TDP= . Or rather, > > > I suspect/hope we can get close enough for an initial merge, which wo= uld allow > > > aging_is_fast to be a property of the mmu_notifier, i.e. would simpli= fy things > > > because KVM wouldn't need to communicate MMU_NOTIFY_WAS_FAST for each= notification. > > > > > > Walking KVM's rmaps requires mmu_lock because adding/removing rmap en= tries is done > > > in such a way that a lockless walk would be painfully complex. But i= f there is > > > exactly _one_ rmap entry for a gfn, then slot->arch.rmap[...] points = directly at > > > that one SPTE. And with nested TDP, unless L1 is doing something unc= ommon, e.g. > > > mapping the same page into multiple L2s, that overwhelming vast major= ity of rmaps > > > have only one entry. That's not the case for legacy shadow paging be= cause kernels > > > almost always map a pfn using multiple virtual addresses, e.g. Linux'= s direct map > > > along with any userspace mappings. Hi Sean, sorry for taking so long to get back to you. So just to make sure I have this right: if L1 is using TDP, the gfns in L0 will usually only be mapped by a single spte. If L1 is not using TDP, then all bets are off. Is that true? If that is true, given that we don't really have control over whether or not L1 decides to use TDP, the lockless shadow MMU walk will work, but, if L1 is not using TDP, it will often return false negatives (says "old" for an actually-young gfn). So then I don't really understand conditioning the lockless shadow MMU walk on us (L0) using the TDP MMU[1]. We care about L1, right? (Maybe you're saying that, when the TDP MMU is enabled, the only cases where the shadow MMU is used are cases where gfns are practically always mapped by a single shadow PTE. This isn't how I understood your mail, but this is what your hack-a-patch[1] makes me think.) [1] https://lore.kernel.org/linux-mm/ZmzPoW7K5GIitQ8B@google.com/ > > ... > > > Hmm, interesting. I need to spend a little bit more time digesting this= . > > > > Would you like to see this included in v6? (It'd be nice to avoid the > > WAS_FAST stuff....) Should we leave it for a later series? I haven't > > formed my own opinion yet. > > I would say it depends on the viability and complexity of my idea. E.g. = if it > pans out more or less like my rough sketch, then it's probably worth taki= ng on > the extra code+complexity in KVM to avoid the whole WAS_FAST goo. > > Note, if we do go this route, the implementation would need to be tweaked= to > handle the difference in behavior between aging and last-minute checks fo= r eviction, > which I obviously didn't understand when I threw together that hack-a-pat= ch. > > I need to think more about how best to handle that though, e.g. skipping = GFNs with > multiple mappings is probably the worst possible behavior, as we'd risk e= victing > hot pages. But falling back to taking mmu_lock for write isn't all that = desirable > either. I think falling back to the write lock is more desirable than evicting a young page. I've attached what I think could work, a diff on top of this series. It builds at least. It uses rcu_read_lock/unlock() for walk_shadow_page_lockless_begin/end(NULL), and it puts a synchronize_rcu() in kvm_mmu_commit_zap_page(). It doesn't get rid of the WAS_FAST things because it doesn't do exactly what [1] does. It basically makes three calls now: lockless TDP MMU, lockless shadow MMU, locked shadow MMU. It only calls the locked shadow MMU bits if the lockless bits say !young (instead of being conditioned on tdp_mmu_enabled). My choice is definitely questionable for the clear path. Thanks! --00000000000085f40d061bfbc2cf Content-Type: text/x-patch; charset="US-ASCII"; name="shadow-mmu-patch.diff" Content-Disposition: attachment; filename="shadow-mmu-patch.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxzbr9zx0 ZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21t dS5jCmluZGV4IDg0MWNlZTNmMzQ2ZC4uNTQ4ZDFlNDgwZGU5IDEwMDY0NAotLS0gYS9hcmNoL3g4 Ni9rdm0vbW11L21tdS5jCisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTY0MCw2ICs2 NDAsMzcgQEAgc3RhdGljIGJvb2wgbW11X3NwdGVfYWdlKHU2NCAqc3B0ZXApCiAJcmV0dXJuIHRy dWU7CiB9CiAKKy8qCisgKiBTaW1pbGFyIHRvIG1tdV9zcHRlX2FnZSgpLCBidXQgdGhpcyBvbmUg c2hvdWxkIGJlIHVzZWQgZm9yIGxvY2tsZXNzIHNoYWRvdworICogcGFnZSB0YWJsZSB3YWxrcy4K KyAqLworc3RhdGljIGJvb2wgbW11X3NwdGVfYWdlX2xvY2tsZXNzKHU2NCAqc3B0ZXApCit7CisJ dTY0IG9sZF9zcHRlID0gbW11X3NwdGVfZ2V0X2xvY2tsZXNzKHNwdGVwKTsKKwl1NjQgbmV3X3Nw dGU7CisKKwlpZiAoIWlzX2FjY2Vzc2VkX3NwdGUob2xkX3NwdGUpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlpZiAoc3B0ZV9hZF9lbmFibGVkKG9sZF9zcHRlKSkKKwkJY2xlYXJfYml0KChmZnMoc2hh ZG93X2FjY2Vzc2VkX21hc2spIC0gMSksCisJCQkgICh1bnNpZ25lZCBsb25nICopc3B0ZXApOwor CWVsc2UgeworCQluZXdfc3B0ZSA9IG1hcmtfc3B0ZV9mb3JfYWNjZXNzX3RyYWNrKG9sZF9zcHRl KTsKKwkJaWYgKCF0cnlfY21weGNoZzY0KHNwdGVwLCAmb2xkX3NwdGUsIG5ld19zcHRlKSkKKwkJ CS8qCisJCQkgKiBJZiB0aGUgc3B0ZSBjaGFuZ2VkLCBpdCdzIGxpa2VseSB0aGF0IHRoZSBnZm4K KwkJCSAqIGlzIHlvdW5nLgorCQkJICovCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlpZiAoaXNfd3Jp dGFibGVfcHRlKG9sZF9zcHRlKSkKKwkJCWt2bV9zZXRfcGZuX2RpcnR5KHNwdGVfdG9fcGZuKG9s ZF9zcHRlKSk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBp c190ZHBfbW11X2FjdGl2ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJcmV0dXJuIHRkcF9t bXVfZW5hYmxlZCAmJiB2Y3B1LT5hcmNoLm1tdS0+cm9vdF9yb2xlLmRpcmVjdDsKQEAgLTY0Nyw2 ICs2NzgsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3RkcF9tbXVfYWN0aXZlKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIHZvaWQgd2Fsa19zaGFkb3dfcGFnZV9sb2NrbGVzc19i ZWdpbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CisJaWYgKCF2Y3B1KSB7CisJCXJjdV9yZWFk X2xvY2soKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChpc190ZHBfbW11X2FjdGl2ZSh2Y3B1KSkg ewogCQlrdm1fdGRwX21tdV93YWxrX2xvY2tsZXNzX2JlZ2luKCk7CiAJfSBlbHNlIHsKQEAgLTY2 Niw2ICs3MDIsMTEgQEAgc3RhdGljIHZvaWQgd2Fsa19zaGFkb3dfcGFnZV9sb2NrbGVzc19iZWdp bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyB2b2lkIHdhbGtfc2hhZG93X3BhZ2Vf bG9ja2xlc3NfZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKKwlpZiAoIXZjcHUpIHsKKwkJ cmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoaXNfdGRwX21tdV9hY3Rp dmUodmNwdSkpIHsKIAkJa3ZtX3RkcF9tbXVfd2Fsa19sb2NrbGVzc19lbmQoKTsKIAl9IGVsc2Ug ewpAQCAtOTQ5LDE0ICs5OTAsMTQgQEAgc3RhdGljIGludCBwdGVfbGlzdF9hZGQoc3RydWN0IGt2 bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZSwgdTY0ICpzcHRlLAogCWludCBjb3VudCA9IDA7CiAK IAlpZiAoIXJtYXBfaGVhZC0+dmFsKSB7Ci0JCXJtYXBfaGVhZC0+dmFsID0gKHVuc2lnbmVkIGxv bmcpc3B0ZTsKKwkJV1JJVEVfT05DRSgmcm1hcF9oZWFkLT52YWwsICh1bnNpZ25lZCBsb25nKXNw dGUpOwogCX0gZWxzZSBpZiAoIShybWFwX2hlYWQtPnZhbCAmIDEpKSB7CiAJCWRlc2MgPSBrdm1f bW11X21lbW9yeV9jYWNoZV9hbGxvYyhjYWNoZSk7CiAJCWRlc2MtPnNwdGVzWzBdID0gKHU2NCAq KXJtYXBfaGVhZC0+dmFsOwogCQlkZXNjLT5zcHRlc1sxXSA9IHNwdGU7CiAJCWRlc2MtPnNwdGVf Y291bnQgPSAyOwogCQlkZXNjLT50YWlsX2NvdW50ID0gMDsKLQkJcm1hcF9oZWFkLT52YWwgPSAo dW5zaWduZWQgbG9uZylkZXNjIHwgMTsKKwkJV1JJVEVfT05DRSgmcm1hcF9oZWFkLT52YWwsICh1 bnNpZ25lZCBsb25nKWRlc2MgfCAxKTsKIAkJKytjb3VudDsKIAl9IGVsc2UgewogCQlkZXNjID0g KHN0cnVjdCBwdGVfbGlzdF9kZXNjICopKHJtYXBfaGVhZC0+dmFsICYgfjF1bCk7CkBAIC05NzEs NyArMTAxMiw3IEBAIHN0YXRpYyBpbnQgcHRlX2xpc3RfYWRkKHN0cnVjdCBrdm1fbW11X21lbW9y eV9jYWNoZSAqY2FjaGUsIHU2NCAqc3B0ZSwKIAkJCWRlc2MtPm1vcmUgPSAoc3RydWN0IHB0ZV9s aXN0X2Rlc2MgKikocm1hcF9oZWFkLT52YWwgJiB+MXVsKTsKIAkJCWRlc2MtPnNwdGVfY291bnQg PSAwOwogCQkJZGVzYy0+dGFpbF9jb3VudCA9IGNvdW50OwotCQkJcm1hcF9oZWFkLT52YWwgPSAo dW5zaWduZWQgbG9uZylkZXNjIHwgMTsKKwkJCVdSSVRFX09OQ0UoJnJtYXBfaGVhZC0+dmFsLCAo dW5zaWduZWQgbG9uZylkZXNjIHwgMSk7CiAJCX0KIAkJZGVzYy0+c3B0ZXNbZGVzYy0+c3B0ZV9j b3VudCsrXSA9IHNwdGU7CiAJfQpAQCAtMTAwOSw5ICsxMDUwLDEwIEBAIHN0YXRpYyB2b2lkIHB0 ZV9saXN0X2Rlc2NfcmVtb3ZlX2VudHJ5KHN0cnVjdCBrdm0gKmt2bSwKIAkgKiBoZWFkIGF0IHRo ZSBuZXh0IGRlc2NyaXB0b3IsIGkuZS4gdGhlIG5ldyBoZWFkLgogCSAqLwogCWlmICghaGVhZF9k ZXNjLT5tb3JlKQotCQlybWFwX2hlYWQtPnZhbCA9IDA7CisJCVdSSVRFX09OQ0UoJnJtYXBfaGVh ZC0+dmFsLCAwKTsKIAllbHNlCi0JCXJtYXBfaGVhZC0+dmFsID0gKHVuc2lnbmVkIGxvbmcpaGVh ZF9kZXNjLT5tb3JlIHwgMTsKKwkJV1JJVEVfT05DRSgmcm1hcF9oZWFkLT52YWwsCisJCQkJKHVu c2lnbmVkIGxvbmcpaGVhZF9kZXNjLT5tb3JlIHwgMSk7CiAJbW11X2ZyZWVfcHRlX2xpc3RfZGVz YyhoZWFkX2Rlc2MpOwogfQogCkBAIC0xMDI4LDcgKzEwNzAsNyBAQCBzdGF0aWMgdm9pZCBwdGVf bGlzdF9yZW1vdmUoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKnNwdGUsCiAJCWlmIChLVk1fQlVHX09O X0RBVEFfQ09SUlVQVElPTigodTY0ICopcm1hcF9oZWFkLT52YWwgIT0gc3B0ZSwga3ZtKSkKIAkJ CXJldHVybjsKIAotCQlybWFwX2hlYWQtPnZhbCA9IDA7CisJCVdSSVRFX09OQ0UoJnJtYXBfaGVh ZC0+dmFsLCAwKTsKIAl9IGVsc2UgewogCQlkZXNjID0gKHN0cnVjdCBwdGVfbGlzdF9kZXNjICop KHJtYXBfaGVhZC0+dmFsICYgfjF1bCk7CiAJCXdoaWxlIChkZXNjKSB7CkBAIC0xMDc4LDcgKzEx MjAsNyBAQCBzdGF0aWMgYm9vbCBrdm1femFwX2FsbF9ybWFwX3NwdGVzKHN0cnVjdCBrdm0gKmt2 bSwKIAl9CiBvdXQ6CiAJLyogcm1hcF9oZWFkIGlzIG1lYW5pbmdsZXNzIG5vdywgcmVtZW1iZXIg dG8gcmVzZXQgaXQgKi8KLQlybWFwX2hlYWQtPnZhbCA9IDA7CisJV1JJVEVfT05DRSgmcm1hcF9o ZWFkLT52YWwsIDApOwogCXJldHVybiB0cnVlOwogfQogCkBAIC0xNjM0LDE3ICsxNjc2LDY0IEBA IHN0YXRpYyBib29sIGt2bV9oYXNfc2hhZG93X21tdV9zcHRlcyhzdHJ1Y3Qga3ZtICprdm0pCiAJ cmV0dXJuICF0ZHBfbW11X2VuYWJsZWQgfHwgUkVBRF9PTkNFKGt2bS0+YXJjaC5pbmRpcmVjdF9z aGFkb3dfcGFnZXMpOwogfQogCitzdGF0aWMgYm9vbCBrdm1fYWdlX3JtYXBfZmFzdCh1NjQgKnNw dGVwKQoreworCXJldHVybiBtbXVfc3B0ZV9hZ2VfbG9ja2xlc3Moc3B0ZXApOworfQorCitzdGF0 aWMgYm9vbCBrdm1fdGVzdF9hZ2Vfcm1hcF9mYXN0KHU2NCAqc3B0ZXApCit7CisJcmV0dXJuIGlz X2FjY2Vzc2VkX3NwdGUoUkVBRF9PTkNFKCpzcHRlcCkpOworfQorCit0eXBlZGVmIGJvb2wgKCpy bWFwX2xvY2tsZXNzX2hhbmRsZXJfdCkodTY0ICpzcHRlcCk7CisKK3N0YXRpYyBfX2Fsd2F5c19p bmxpbmUgYm9vbCBrdm1faGFuZGxlX2dmbl9yYW5nZV9sb2NrbGVzcygKKwkJc3RydWN0IGt2bSAq a3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UsCisJCXJtYXBfbG9ja2xlc3NfaGFuZGxl cl90IGhhbmRsZXIpCit7CisJc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXA7CisJdTY0ICpzcHRl cDsKKwlnZm5fdCBnZm47CisJaW50IGxldmVsOworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwl3YWxr X3NoYWRvd19wYWdlX2xvY2tsZXNzX2JlZ2luKE5VTEwpOworCisJZm9yIChnZm4gPSByYW5nZS0+ c3RhcnQ7IGdmbiA8IHJhbmdlLT5lbmQ7IGdmbisrKSB7CisJCWZvciAobGV2ZWwgPSBQR19MRVZF TF80SzsgbGV2ZWwgPD0gS1ZNX01BWF9IVUdFUEFHRV9MRVZFTDsKKwkJICAgICBsZXZlbCsrKSB7 CisJCQlybWFwID0gZ2ZuX3RvX3JtYXAoZ2ZuLCBsZXZlbCwgcmFuZ2UtPnNsb3QpOworCQkJc3B0 ZXAgPSAodm9pZCAqKVJFQURfT05DRShybWFwLT52YWwpOworCisJCQkvKiBTa2lwIHRoaXMgZ2Zu IGlmIG11bHRpcGxlIFNQVEVzIG1hcHBpbmcgaXQgKi8KKwkJCWlmICgodW5zaWduZWQgbG9uZylz cHRlcCAmIDEpCisJCQkJY29udGludWU7CisKKwkJCXJldCB8PSBoYW5kbGVyKHNwdGVwKTsKKwkJ fQorCX0KKworCXdhbGtfc2hhZG93X3BhZ2VfbG9ja2xlc3NfZW5kKE5VTEwpOworCisJcmV0dXJu IHJldDsKK30KKwogYm9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1f Z2ZuX3JhbmdlICpyYW5nZSkKIHsKLQlib29sIHlvdW5nID0gZmFsc2U7CisJYm9vbCB5b3VuZyA9 IGZhbHNlLCBzaGFkb3dfeW91bmcgPSBmYWxzZTsKIAotCWlmICh0ZHBfbW11X2VuYWJsZWQpIHsK KwlpZiAodGRwX21tdV9lbmFibGVkKQogCQl5b3VuZyB8PSBrdm1fdGRwX21tdV9hZ2VfZ2ZuX3Jh bmdlKGt2bSwgcmFuZ2UpOwotCQlpZiAoeW91bmcpCi0JCQlyYW5nZS0+YXJnLnJlcG9ydF9mYXN0 ID0gdHJ1ZTsKLQl9CiAKLQlpZiAoIXJhbmdlLT5hcmcuZmFzdF9vbmx5ICYmIGt2bV9oYXNfc2hh ZG93X21tdV9zcHRlcyhrdm0pKSB7CisJc2hhZG93X3lvdW5nID0ga3ZtX2hhbmRsZV9nZm5fcmFu Z2VfbG9ja2xlc3Moa3ZtLCByYW5nZSwKKwkJCQkJICAgICAgIGt2bV9hZ2Vfcm1hcF9mYXN0KTsK Kwl5b3VuZyB8PSBzaGFkb3dfeW91bmc7CisJaWYgKHlvdW5nKQorCQlyYW5nZS0+YXJnLnJlcG9y dF9mYXN0ID0gdHJ1ZTsKKworCWVsc2UgaWYgKCFzaGFkb3dfeW91bmcgJiYgIXJhbmdlLT5hcmcu ZmFzdF9vbmx5ICYmCisJCSBrdm1faGFzX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSkgewogCQl3cml0 ZV9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIAkJeW91bmcgPSBrdm1faGFuZGxlX2dmbl9yYW5nZShr dm0sIHJhbmdlLCBrdm1fYWdlX3JtYXApOwogCQl3cml0ZV91bmxvY2soJmt2bS0+bW11X2xvY2sp OwpAQCAtMTY1NywxMSArMTc0NiwxNSBAQCBib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2 bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpCiB7CiAJYm9vbCB5b3VuZyA9IGZh bHNlOwogCi0JaWYgKHRkcF9tbXVfZW5hYmxlZCkgeworCWlmICh0ZHBfbW11X2VuYWJsZWQpCiAJ CXlvdW5nIHw9IGt2bV90ZHBfbW11X3Rlc3RfYWdlX2dmbihrdm0sIHJhbmdlKTsKLQkJaWYgKHlv dW5nKQotCQkJcmFuZ2UtPmFyZy5yZXBvcnRfZmFzdCA9IHRydWU7Ci0JfQorCisJaWYgKCF5b3Vu ZykKKwkJeW91bmcgfD0ga3ZtX2hhbmRsZV9nZm5fcmFuZ2VfbG9ja2xlc3Moa3ZtLCByYW5nZSwK KwkJCQkJCSAgICAgICBrdm1fdGVzdF9hZ2Vfcm1hcF9mYXN0KTsKKworCWlmICh5b3VuZykKKwkJ cmFuZ2UtPmFyZy5yZXBvcnRfZmFzdCA9IHRydWU7CiAKIAlpZiAoIXlvdW5nICYmICFyYW5nZS0+ YXJnLmZhc3Rfb25seSAmJiBrdm1faGFzX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSkgewogCQl3cml0 ZV9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKQEAgLTI2MzYsNiArMjcyOSwxMiBAQCBzdGF0aWMgdm9p ZCBrdm1fbW11X2NvbW1pdF96YXBfcGFnZShzdHJ1Y3Qga3ZtICprdm0sCiAJICovCiAJa3ZtX2Zs dXNoX3JlbW90ZV90bGJzKGt2bSk7CiAKKwkvKgorCSAqIFdhaXQgZm9yIGFueSBub24tdkNQVSBs b2NrbGVzcyBzaGFkb3cgcGFnZSB0YWJsZSB3YWxrZXJzIHRvIHN0b3AKKwkgKiB1c2luZyB0aGUg c2hhZG93IHBhZ2VzIHdlJ3JlIGFib3V0IHRvIGZyZWUuCisJICovCisJc3luY2hyb25pemVfcmN1 KCk7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3AsIG5zcCwgaW52YWxpZF9saXN0LCBs aW5rKSB7CiAJCVdBUk5fT05fT05DRSghc3AtPnJvbGUuaW52YWxpZCB8fCBzcC0+cm9vdF9jb3Vu dCk7CiAJCWt2bV9tbXVfZnJlZV9zaGFkb3dfcGFnZShzcCk7Cg== --00000000000085f40d061bfbc2cf--