From patchwork Mon Oct 23 22:36:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 157127 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:ce89:0:b0:403:3b70:6f57 with SMTP id p9csp1591722vqx; Mon, 23 Oct 2023 15:37:35 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE2AXiNiOrCwwvtoiH+EpdfiaXq2GN4xP/PljPSI4BQ0oysr/tZXyAaLqeE5p401NGGb0i7 X-Received: by 2002:a17:903:32d2:b0:1c6:d0a:cf01 with SMTP id i18-20020a17090332d200b001c60d0acf01mr19060218plr.11.1698100655269; Mon, 23 Oct 2023 15:37:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698100655; cv=none; d=google.com; s=arc-20160816; b=RIkdCiJ+YQvwFdsOqHeDmy1kncMBro5XkVg1Dwa2fYcUtVNYYNjeLoAx0h5NluxUR6 jXgRp1CfURzt9K4NupjwK8O0Lu5nRGjPA42MBKe+d3LNB52a1pgd0C+tr7fkRi8mmpe5 rvTAqoxgcKrmpUWY2V2lhJ+sgX8hV1Sq5kfjpceAdBN4gQjVzZHCQdyRgFfLsIj+6z8U CcTA4INzgbY83aNQxKvepS9qrH/6X2AVcuOY/jahGO2RVnzGpN96xEIRwqLJl8WlUGBp OyAXwuzsVvKEXG4iIf7lQx+UNyZDaZjF85ezK7zZ8wM9QXIII15/zPYu9mSOYg8tT79B nDFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:mime-version:date :reply-to:dkim-signature; bh=ttWGlrffBrwY7IhgV2y0g5weERvwNo5srcxQizfmW8s=; fh=dogxdQWc7Q2U5Ekp9F18wEHwMgE3kRwQ/60KgTj3654=; b=fTK4TKPu55fUkloufbmubnxg0wpHzoHrOxPF0EBGtqhZPkz36iak+px2YdyMzN62AG 1Z0dNoZTnNX646oAaQALcRITZpk7ssYjEZ1pz74rCsvGDcqfzPaSvv6PUE9APL47kvVt FRD/pA5c5fxsMRbSxpvMWHAZZCaVf9Av7GUBx6WhL/WaS1uHWv097lBKlpGL3tque4yK 2eQlyaoSKOLf3fpedHxdpvAPeRNqvitx6UX5Z4KGojmy/KHnK4ZhShgLnwqHkf0M193X JpHA5rMwpZrzR3yOYaJEzRcDdB3z2nc8M3y9wTbkldH+ddAUj+JgAg6qRlignSPHYs47 5q4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=htgYpHLb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id l13-20020a170902f68d00b001c9eed814dbsi7399681plg.562.2023.10.23.15.37.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Oct 2023 15:37:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=htgYpHLb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 39B9280622A4; Mon, 23 Oct 2023 15:37:32 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231788AbjJWWgs (ORCPT + 27 others); Mon, 23 Oct 2023 18:36:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57580 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231880AbjJWWgq (ORCPT ); Mon, 23 Oct 2023 18:36:46 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AB20510CF for ; Mon, 23 Oct 2023 15:36:42 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-d815354ea7fso3602452276.1 for ; Mon, 23 Oct 2023 15:36:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1698100602; x=1698705402; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:reply-to:from:to:cc :subject:date:message-id:reply-to; bh=ttWGlrffBrwY7IhgV2y0g5weERvwNo5srcxQizfmW8s=; b=htgYpHLbBqReVr6QGS1hlLZgrLnXOTw+AUtddS3d2zSfr1XcY/OJ2a2KhwPwMhOj4S H4ipgYOfA8iGhHQGXzFTzVhYoKdl6MsaZpxwAxhGNQrHCEEVQs1wOLKgdy1xiDwf/5r+ LWLl85SoGETcAGHuee1RrFFJ+V/xdQ0CnYfRvOLUJbiYESX1R5UtRYotWtmU5t/CD3o5 y6gG6qp5wf1pikHmkkVTpT7HHCtKRD43g5D7caqdo1ILDYj1nWlN9gtF9nAAlM1se1CY OUvjZuTYQ4qn+5QdIHyXIcD8lBifr0HkVDZyO0SpCSClfkpM3wSXqFbrYs1kwxwwZpNt WtJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698100602; x=1698705402; h=cc:to:from:subject:message-id:mime-version:date:reply-to :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ttWGlrffBrwY7IhgV2y0g5weERvwNo5srcxQizfmW8s=; b=Aq2B1HMnmlRTrNnUiQuOxnpn3YGFncwaUj98tTRD35+iZ8b7MRFkkvNbXPk+4oU9oC TIFAr1qqYS3Nj1xfKd8yw6WHphFkbTuNsefz4IM2FOJZohQBiDbetT19kIdgP2OgnRKM 5s8l4aXbM1P8XuKk3KEXy8TaWFE1kJnDsoa/KoOpDae1Pz/luN4GO8w0dtsESMWz4xdi mvEZmL1ZIZTRT9/fVc6DiZBpti4HaWwlZKF1wmeirSni2EkJuHgY+Zlj88jX9uW9o0tJ NC9zBaAmXKk5NSRKBqRkjIRH9JxQJlEckJG+oHekV2L/asC8vqLYtj0Hbw+J8mS/xibH wggg== X-Gm-Message-State: AOJu0Yyf4KalybsAnjDLLSeaPRGPCQY/+wBjxzIc3azC8CM2BFT+McU3 1HM4AoEd2ja3AML4NFvrl3KE/fAMSbM= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:b322:0:b0:d86:5644:5d12 with SMTP id l34-20020a25b322000000b00d8656445d12mr208242ybj.4.1698100601818; Mon, 23 Oct 2023 15:36:41 -0700 (PDT) Reply-To: Sean Christopherson Date: Mon, 23 Oct 2023 15:36:39 -0700 Mime-Version: 1.0 X-Mailer: git-send-email 2.42.0.758.gaed0368e0e-goog Message-ID: <20231023223639.2487832-1-seanjc@google.com> Subject: [PATCH gmem] KVM: guest_memfd: Point .owner at the module that exposes /dev/kvm From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Sean Christopherson X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Mon, 23 Oct 2023 15:37:32 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1780587592598888702 X-GMAIL-MSGID: 1780587592598888702 Set .owner for guest_memfd file operations so that the KVM module(s) is is pinned until any files with callbacks back into KVM are completely freed. Note, file types that can call into sub-module code, e.g. kvm-intel.ko or kvm-amd.ko on x86, must use the module pointer passed to kvm_init(), not THIS_MODULE (which points at kvm.ko). KVM assumes that if /dev/kvm is reachable, e.g. VMs are active, then the vendor module is loaded. Opportunistically clean up the kvm_gmem_{init,exit}() mess that got left behind by commit 0f7e60a5f42a ("kvm: guestmem: do not use a file system"). Link: https://lore.kernel.org/all/20231018204624.1905300-2-seanjc@google.com Signed-off-by: Sean Christopherson --- See the link for details. I'm going to eventually squash this so I put the bare minimum copy+paste effort into the changelog. virt/kvm/guest_memfd.c | 7 ++++++- virt/kvm/kvm_main.c | 2 ++ virt/kvm/kvm_mm.h | 10 ++-------- 3 files changed, 10 insertions(+), 9 deletions(-) base-commit: 911b515af3ec5f53992b9cc162cf7d3893c2fbe2 diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 9ffce54555ae..94bc478c26f3 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -285,12 +285,17 @@ static struct file *kvm_gmem_get_file(struct kvm_memory_slot *slot) return file; } -static const struct file_operations kvm_gmem_fops = { +static struct file_operations kvm_gmem_fops = { .open = generic_file_open, .release = kvm_gmem_release, .fallocate = kvm_gmem_fallocate, }; +void kvm_gmem_init(struct module *module) +{ + kvm_gmem_fops.owner = module; +} + static int kvm_gmem_migrate_folio(struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 959e866c84f0..357b9d9d0225 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -6459,6 +6459,8 @@ int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *module) if (WARN_ON_ONCE(r)) goto err_vfio; + kvm_gmem_init(module); + /* * Registration _must_ be the very last thing done, as this exposes * /dev/kvm to userspace, i.e. all infrastructure must be setup! diff --git a/virt/kvm/kvm_mm.h b/virt/kvm/kvm_mm.h index 798f20d612bb..cca5372b9d5d 100644 --- a/virt/kvm/kvm_mm.h +++ b/virt/kvm/kvm_mm.h @@ -38,19 +38,13 @@ static inline void gfn_to_pfn_cache_invalidate_start(struct kvm *kvm, #endif /* HAVE_KVM_PFNCACHE */ #ifdef CONFIG_KVM_PRIVATE_MEM -int kvm_gmem_init(void); -void kvm_gmem_exit(void); +void kvm_gmem_init(struct module *module); int kvm_gmem_create(struct kvm *kvm, struct kvm_create_guest_memfd *args); int kvm_gmem_bind(struct kvm *kvm, struct kvm_memory_slot *slot, unsigned int fd, loff_t offset); void kvm_gmem_unbind(struct kvm_memory_slot *slot); #else -static inline int kvm_gmem_init(void) -{ - return 0; -} - -static inline void kvm_gmem_exit(void) +static inline void kvm_gmem_init(struct module *module) { }