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 7E2F1CCA47C for ; Thu, 23 Jun 2022 20:07:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AAA566B01A7; Thu, 23 Jun 2022 16:07:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A598D8E0188; Thu, 23 Jun 2022 16:07:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 920D38E0187; Thu, 23 Jun 2022 16:07:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 7FA186B01A7 for ; Thu, 23 Jun 2022 16:07:10 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 5047D35871 for ; Thu, 23 Jun 2022 20:07:10 +0000 (UTC) X-FDA: 79610584620.13.C58863F Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by imf06.hostedemail.com (Postfix) with ESMTP id C57391800AC for ; Thu, 23 Jun 2022 20:07:05 +0000 (UTC) Received: by mail-pl1-f181.google.com with SMTP id k14so202227plh.4 for ; Thu, 23 Jun 2022 13:07:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=iv5jva5TUOt2ku2nB7C0OTsUP7d83IExGKqGEiymvsc=; b=e1F6IgK+yYSsHs8pHQthv2V6RjdQQldw5p5m1hjIJdzXou3wx7+X4vB23gfg5Hwmgc AY/p1NkQWT6Xv76NktOc7f49to6KwwLUZsTKaxW8DpsjtfWPo9BjR6HPlgNdE3W0ddvW Z0gwq4RYiXQPgDLn6AO5FUfjWPEpD0JpLU3ydxlfIoOTWVO0zzWvnu8enNYS1jIvQ8G9 Au+Q7jZfh2S2qABO1HrBiXSi23MpL8HpwONA2bwCIwA7C28d5rAjm1Unc7xcJUaQ//ui nAr/4XQUU7S9+1TeBPY39D7mexDzfj95Zi6CWTthGSWUDYIGMbTyzsVkRfLPuGsP71c7 tP5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=iv5jva5TUOt2ku2nB7C0OTsUP7d83IExGKqGEiymvsc=; b=MPasTvTbI4RUOuvjNdZTBqsx6p8+wM8JTtpmGlkqNI69OaCO4nfnpLcg58MFZo9DIS ZiceA+wtMNPdft91aXVmi9lXhbs/VkqL2gWC3PUm8iLaL+SuW2yuXqwWXVdmz0Of6WdZ 4c0AonuSvXn7NQtOGg7PcQujMVGc2PMEIIsd5jSaAJ4qyT8c7geKfyTQ3qfsqa4sTIc3 x3x9bZ/hO8cGQvgCXIhGVuWRSQAved9gvbCk4kJUkfuwCFUwS8lSZaslaauqu7ZQcWTQ 7z5yWeclcNWDwX1HerSQUUSIeJ2OVqLuRawD9GY7N3vNKisAebsrbb6ka+MxtDQm80Zx nwRQ== X-Gm-Message-State: AJIora+UlRrh3Bdeh6dUHLECMTvTd5HWt4qpxZK6Sag+Prf3YlfVe43m EPpV5so65QmzxME5qNr3c71DIg== X-Google-Smtp-Source: AGRyM1t7UmjSfrw8HFzilsNA3C/f4EmxNXPzQ2pS+mk2EDomXk1Yc1oDdfr7iKBQ0z8tLOvc9qqoRw== X-Received: by 2002:a17:90b:4a92:b0:1e8:2c09:d008 with SMTP id lp18-20020a17090b4a9200b001e82c09d008mr5734848pjb.169.1656014824610; Thu, 23 Jun 2022 13:07:04 -0700 (PDT) Received: from google.com (123.65.230.35.bc.googleusercontent.com. [35.230.65.123]) by smtp.gmail.com with ESMTPSA id w16-20020a1709026f1000b0016160b3331bsm168701plk.305.2022.06.23.13.07.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Jun 2022 13:07:04 -0700 (PDT) Date: Thu, 23 Jun 2022 20:07:00 +0000 From: Sean Christopherson To: Peter Xu Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Paolo Bonzini , Andrew Morton , David Hildenbrand , "Dr . David Alan Gilbert" , Andrea Arcangeli , Linux MM Mailing List Subject: Re: [PATCH 4/4] kvm/x86: Allow to respond to generic signals during slow page faults Message-ID: References: <20220622213656.81546-1-peterx@redhat.com> <20220622213656.81546-5-peterx@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1656014825; a=rsa-sha256; cv=none; b=aCR5pishzsOZnk4eddZEUR33sVvI86yOLevcp2MfN2oGE89YsshTKDiIgox20LfB0+0bqR xm+Ia4qFE2ltBUja1dsLUgtyTgjCM7/udxlaH2RhMpGz6AxsR9a5K16okXl9v1kqE4qSvo f9yp/AnbfOL77U8sqifIfRvkKhoJYnY= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=e1F6IgK+; spf=pass (imf06.hostedemail.com: domain of seanjc@google.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=seanjc@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1656014825; 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=iv5jva5TUOt2ku2nB7C0OTsUP7d83IExGKqGEiymvsc=; b=OWAIG1oNvAK4k6gc60HZ2dzPL5BGLuvqVlhWRmlP6VxL3c8BF/xcuLOCBPMUxuZeRE85zm AztCPye98YmYlx7/DxSmszFBa8aNy+SLORRnMadDmJa/4yoNN30McB0zqrAWqGNvaWMBO+ JJKGCliOMjubAX76QMzcbf4tlqbgQPY= X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: C57391800AC Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=e1F6IgK+; spf=pass (imf06.hostedemail.com: domain of seanjc@google.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=seanjc@google.com; dmarc=pass (policy=reject) header.from=google.com X-Rspam-User: X-Stat-Signature: yegk7bb5orfjhtf8ba6ar49yzjwwobyp X-HE-Tag: 1656014825-455543 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: On Thu, Jun 23, 2022, Peter Xu wrote: > Hi, Sean, > > On Thu, Jun 23, 2022 at 02:46:08PM +0000, Sean Christopherson wrote: > > On Wed, Jun 22, 2022, Peter Xu wrote: > > > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c > > > index e92f1ab63d6a..b39acb7cb16d 100644 > > > --- a/arch/x86/kvm/mmu/mmu.c > > > +++ b/arch/x86/kvm/mmu/mmu.c > > > @@ -3012,6 +3012,13 @@ static int kvm_handle_bad_page(struct kvm_vcpu *vcpu, gfn_t gfn, kvm_pfn_t pfn) > > > static int handle_abnormal_pfn(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault, > > > unsigned int access) > > > { > > > + /* NOTE: not all error pfn is fatal; handle intr before the other ones */ > > > + if (unlikely(is_intr_pfn(fault->pfn))) { > > > + vcpu->run->exit_reason = KVM_EXIT_INTR; > > > + ++vcpu->stat.signal_exits; > > > + return -EINTR; > > > + } > > > + > > > /* The pfn is invalid, report the error! */ > > > if (unlikely(is_error_pfn(fault->pfn))) > > > return kvm_handle_bad_page(vcpu, fault->gfn, fault->pfn); > > > @@ -4017,6 +4024,8 @@ static int kvm_faultin_pfn(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault) > > > } > > > } > > > > > > + /* Allow to respond to generic signals in slow page faults */ > > > > "slow" is being overloaded here. The previous call __gfn_to_pfn_memslot() will > > end up in hva_to_pfn_slow(), but because of passing a non-null async it won't wait. > > This code really should have a more extensive comment irrespective of the interruptible > > stuff, now would be a good time to add that. > > Yes I agree, especially the "async" parameter along with "atomic" makes it > even more confusing as you said. But isn't that also means the "slow" here > is spot-on? I mean imho it's the "elsewhere" needs cleanup not this > comment itself since it's really stating the fact that this is the real > slow path? No, because atomic=false here, i.e. KVM will try hva_to_pfn_slow() if hva_to_pfn_fast() fails. So even if we agree that the "wait for IO" path is the true slow path, when reading KVM code the vast, vast majority of developers will associate "slow" with hva_to_pfn_slow(). > Or any other suggestions greatly welcomed on how I should improve this > comment. Something along these lines? /* * Allow gup to bail on pending non-fatal signals when it's also allowed * to wait for IO. Note, gup always bails if it is unable to quickly * get a page and a fatal signal, i.e. SIGKILL, is pending. */ > > > > > Comments aside, isn't this series incomplete from the perspective that there are > > still many flows where KVM will hang if gfn_to_pfn() gets stuck in gup? E.g. if > > KVM is retrieving a page pointed at by vmcs12. > > Right. The thing is I'm not confident I can make it complete easily in one > shot.. > > I mentioned some of that in cover letter or commit message of patch 1, in > that I don't think all the gup call sites are okay with being interrupted > by a non-fatal signal. > > So what I want to do is doing it step by step, at least by introducing > FOLL_INTERRUPTIBLE and having one valid user of it that covers a very valid > use case. I'm also pretty sure the page fault path is really the most > cases that will happen with GUP, so it already helps in many ways for me > when running with a patched kernel. > > So when the complete picture is non-trivial to achieve in one shot, I think > this could be one option we go for. With the facility (and example code on > x86 slow page fault) ready, hopefully we could start to convert many other > call sites to be signal-aware, outside page faults, or even outside x86, > because it's really a more generic problem, which I fully agree. > > Does it sound reasonable to you? Yep. In fact, I'd be totally ok keeping this to just the page fault path. I missed one cruicial detail on my first read through: gup already bails on SIGKILL, it's only these technically-not-fatal signals that gup ignores by default. In other words, using FOLL_INTERRUPTIBLE is purely opportunsitically as userspace can always resort to SIGKILL if the VM really needs to die. It would be very helpful to explicit call that out in the changelog, that way it's (hopefully) clear that KVM uses FOLL_INTERRUPTIBLE to be user friendly when it's easy to do so, and that it's not required for correctness/robustness.