From patchwork Mon Jun 18 13:19:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Cao, Lei" X-Patchwork-Id: 10471361 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D35A16020C for ; Mon, 18 Jun 2018 13:19:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C18A4289C0 for ; Mon, 18 Jun 2018 13:19:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B650D289CC; Mon, 18 Jun 2018 13:19:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5E337289C0 for ; Mon, 18 Jun 2018 13:19:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933947AbeFRNT0 (ORCPT ); Mon, 18 Jun 2018 09:19:26 -0400 Received: from us-smtp-delivery-131.mimecast.com ([216.205.24.131]:35386 "EHLO us-smtp-delivery-131.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933279AbeFRNTZ (ORCPT ); Mon, 18 Jun 2018 09:19:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=StratusTechnologies.onmicrosoft.com; s=selector1-stratus-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LFgCXQZFM4X6Z3Fhis6COGfx72XSog2qheKNFGTerrw=; b=ySaJnOHkwbrB/BiOJTydODkY6+c3jGhKVxkwQkiWUVRp0IfZdzL7fVv/dA7PQdMxPff6/jH4FpB30IN+cyfbKGlhtTag+D8pxk0XWCHpDmYBu6jwJSFDhN80XfXo/0WV62PVYZRYHJSaKhnJxxcsqzEr9NPJiJAxGNQgG1XqPeI= Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02lp0050.outbound.protection.outlook.com [207.46.163.50]) (Using TLS) by us-smtp-1.mimecast.com with ESMTP id us-mta-139-rOVmyjiwNly86q3Dx5kvRw-1; Mon, 18 Jun 2018 09:19:23 -0400 Received: from BYAPR08MB3973.namprd08.prod.outlook.com (52.135.194.143) by BYAPR08MB3877.namprd08.prod.outlook.com (52.135.193.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.863.19; Mon, 18 Jun 2018 13:19:21 +0000 Received: from BYAPR08MB3973.namprd08.prod.outlook.com ([fe80::a8c6:d203:dc46:b5ec]) by BYAPR08MB3973.namprd08.prod.outlook.com ([fe80::a8c6:d203:dc46:b5ec%3]) with mapi id 15.20.0863.016; Mon, 18 Jun 2018 13:19:21 +0000 From: "Cao, Lei" To: "kvm@vger.kernel.org" Subject: [PATCH v3 1/6] KVM: make KVM_CAP_ENABLE_CAP_VM architecture agnostic Thread-Topic: [PATCH v3 1/6] KVM: make KVM_CAP_ENABLE_CAP_VM architecture agnostic Thread-Index: AQHUBwb4Hs6/JoQG2UKEp/oeYuPgTg== Date: Mon, 18 Jun 2018 13:19:21 +0000 Message-ID: References: <201806181256.w5ICu9vH024372@dev1.evr.stratus.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [198.97.42.5] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BYAPR08MB3877; 7:u7C/16NguSm5xKfOdC9lcvSkGGK1R/RB4az3uhXLynVSYUOUFVPBaaVEh4xybYbKQZ7BK15JZ+TTajdJWS5dzAY9yOw91N4C1SYxgSRPcHBVU/X/OMeawLIgAHLCcHtx57gTKsKQglGTcDD8/W14VwXWVY985cfEqvpoF5IAYf9fig445QScLSy+AJX2FQ41Jg2CuTlf8P41J+EWPw64myMwMi5FZ8cmrZrxZciH1q2IB9Ycf13nNoP0QhYxBSnN; 20:KY7hQU4xu4AbNOgC84dTJWG9z1LUKklNiioH7Mj/ag4Pt8JE0rBBG4EtR8nI8E5MOtevbgprTTzIp0qJwCV8rkX+vZMBlfpQdGaHuYIWzB2mkGxHBaRha+EhQOJuctJGJzpqT806TTJU4vtG9DoBPKlrtTOfxjz1nn1lQlhBsNo= x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: a952f67f-9755-4d2d-bf65-08d5d51e1aa7 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(711020)(2017052603328)(7153060)(7193020); SRVR:BYAPR08MB3877; x-ms-traffictypediagnostic: BYAPR08MB3877: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:BYAPR08MB3877; BCL:0; PCL:0; RULEID:; SRVR:BYAPR08MB3877; x-forefront-prvs: 0707248B64 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(396003)(39850400004)(346002)(376002)(366004)(39380400002)(189003)(199004)(55016002)(68736007)(3846002)(6116002)(33656002)(66066001)(5640700003)(53936002)(9686003)(25786009)(6916009)(105586002)(106356001)(6436002)(97736004)(2351001)(5660300001)(7696005)(478600001)(2900100001)(8676002)(5250100002)(486006)(476003)(76176011)(81166006)(1730700003)(81156014)(102836004)(99286004)(2906002)(26005)(446003)(186003)(14454004)(3280700002)(2501003)(72206003)(575784001)(305945005)(3660700001)(74316002)(7736002)(316002)(6506007)(86362001)(8936002); DIR:OUT; SFP:1102; SCL:1; SRVR:BYAPR08MB3877; H:BYAPR08MB3973.namprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; x-microsoft-antispam-message-info: THDbo/XMrIkNQr71OHgYrtu13qts8f1eW15z0P60LGu+PSKDRUnPhOuxI25VBg/Wxmwa47RnM12/q5pxh8GcAhmFIqm5MXcRW/D9HaZgAZ//36juo41LiCGecwZ+b00+SlSFA6zDDGp2/j26pxfrKOcM6jOJCAVQziwQGJ4Cn09A7cOkjgSruMntgOXNXQaBtRMzfrKK4kiTZI/A6SfprA/+fcFSpdxGCNaeSYE/rTQ7+7VFsLP6HpUUwvHB0eVnBMC4lHxWkem0wReJdqgocG4iYw81J7+g+4p6TOw6OHKG0Sl2g9YMP2oVJPh/6nrJOB3heDIXRBigrTUghQzknQ== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: stratus.com X-MS-Exchange-CrossTenant-Network-Message-Id: a952f67f-9755-4d2d-bf65-08d5d51e1aa7 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jun 2018 13:19:21.4792 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: de36b473-b8ad-46ff-837f-9da16b8d1b77 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR08MB3877 X-MC-Unique: rOVmyjiwNly86q3Dx5kvRw-1 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The first such capability to be handled in virt/kvm/ will be the dirty page ring buffer. Signed-off-by: Paolo Bonzini --- Documentation/virtual/kvm/api.txt | 13 +++++++++---- arch/powerpc/kvm/powerpc.c | 14 ++------------ arch/s390/kvm/kvm-s390.c | 11 +---------- arch/x86/kvm/x86.c | 14 ++------------ include/linux/kvm_host.h | 2 ++ virt/kvm/kvm_main.c | 16 ++++++++++++++++ 6 files changed, 32 insertions(+), 38 deletions(-) diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt index 57d3ee9..fc7fd75 100644 --- a/Documentation/virtual/kvm/api.txt +++ b/Documentation/virtual/kvm/api.txt @@ -1011,10 +1011,15 @@ documentation when it pops into existence). 4.37 KVM_ENABLE_CAP -Capability: KVM_CAP_ENABLE_CAP, KVM_CAP_ENABLE_CAP_VM -Architectures: x86 (only KVM_CAP_ENABLE_CAP_VM), - mips (only KVM_CAP_ENABLE_CAP), ppc, s390 -Type: vcpu ioctl, vm ioctl (with KVM_CAP_ENABLE_CAP_VM) +Capability: KVM_CAP_ENABLE_CAP +Architectures: mips, ppc, s390 +Type: vcpu ioctl +Parameters: struct kvm_enable_cap (in) +Returns: 0 on success; -1 on error + +Capability: KVM_CAP_ENABLE_CAP_VM +Architectures: all +Type: vcpu ioctl Parameters: struct kvm_enable_cap (in) Returns: 0 on success; -1 on error diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index 66a3107..2696bd0 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c @@ -515,7 +515,6 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) case KVM_CAP_PPC_UNSET_IRQ: case KVM_CAP_PPC_IRQ_LEVEL: case KVM_CAP_ENABLE_CAP: - case KVM_CAP_ENABLE_CAP_VM: case KVM_CAP_ONE_REG: case KVM_CAP_IOEVENTFD: case KVM_CAP_DEVICE_CTRL: @@ -1728,8 +1727,8 @@ int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_event, } -static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, - struct kvm_enable_cap *cap) +int kvm_vm_ioctl_enable_cap(struct kvm *kvm, + struct kvm_enable_cap *cap) { int r; @@ -1791,15 +1790,6 @@ long kvm_arch_vm_ioctl(struct file *filp, break; } - case KVM_ENABLE_CAP: - { - struct kvm_enable_cap cap; - r = -EFAULT; - if (copy_from_user(&cap, argp, sizeof(cap))) - goto out; - r = kvm_vm_ioctl_enable_cap(kvm, &cap); - break; - } #ifdef CONFIG_SPAPR_TCE_IOMMU case KVM_CREATE_SPAPR_TCE_64: { struct kvm_create_spapr_tce_64 create_tce_64; diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 40f0ae5..9e85143 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -379,7 +379,6 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) case KVM_CAP_S390_CSS_SUPPORT: case KVM_CAP_IOEVENTFD: case KVM_CAP_DEVICE_CTRL: - case KVM_CAP_ENABLE_CAP_VM: case KVM_CAP_S390_IRQCHIP: case KVM_CAP_VM_ATTRIBUTES: case KVM_CAP_MP_STATE: @@ -503,7 +502,7 @@ static void icpt_operexc_on_all_vcpus(struct kvm *kvm) } } -static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap) +int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap) { int r; @@ -1684,14 +1683,6 @@ long kvm_arch_vm_ioctl(struct file *filp, r = kvm_s390_inject_vm(kvm, &s390int); break; } - case KVM_ENABLE_CAP: { - struct kvm_enable_cap cap; - r = -EFAULT; - if (copy_from_user(&cap, argp, sizeof(cap))) - break; - r = kvm_vm_ioctl_enable_cap(kvm, &cap); - break; - } case KVM_CREATE_IRQCHIP: { struct kvm_irq_routing_entry routing; diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index daa1918..0f5e89d 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -2755,7 +2755,6 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) case KVM_CAP_HYPERV_TIME: case KVM_CAP_IOAPIC_POLARITY_IGNORED: case KVM_CAP_TSC_DEADLINE_TIMER: - case KVM_CAP_ENABLE_CAP_VM: case KVM_CAP_DISABLE_QUIRKS: case KVM_CAP_SET_BOOT_CPU_ID: case KVM_CAP_SPLIT_IRQCHIP: @@ -4034,8 +4033,8 @@ int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_event, return 0; } -static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, - struct kvm_enable_cap *cap) +int kvm_vm_ioctl_enable_cap(struct kvm *kvm, + struct kvm_enable_cap *cap) { int r; @@ -4345,15 +4344,6 @@ long kvm_arch_vm_ioctl(struct file *filp, r = 0; break; } - case KVM_ENABLE_CAP: { - struct kvm_enable_cap cap; - - r = -EFAULT; - if (copy_from_user(&cap, argp, sizeof(cap))) - goto out; - r = kvm_vm_ioctl_enable_cap(kvm, &cap); - break; - } default: r = -ENOTTY; } diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index ac0062b..cd2f52d 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -756,6 +756,8 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level, bool line_status); +int kvm_vm_ioctl_enable_cap(struct kvm *kvm, + struct kvm_enable_cap *cap); long kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg); diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index b441484..f8af0d9 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2927,6 +2927,7 @@ static long kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg) #endif case KVM_CAP_IOEVENTFD_ANY_LENGTH: case KVM_CAP_CHECK_EXTENSION_VM: + case KVM_CAP_ENABLE_CAP_VM: return 1; #ifdef CONFIG_KVM_MMIO case KVM_CAP_COALESCED_MMIO: @@ -2948,6 +2949,12 @@ static long kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg) return kvm_vm_ioctl_check_extension(kvm, arg); } +int __attribute__((weak)) kvm_vm_ioctl_enable_cap(struct kvm *kvm, + struct kvm_enable_cap *cap) +{ + return -EINVAL; +} + static long kvm_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) { @@ -2961,6 +2968,15 @@ static long kvm_vm_ioctl(struct file *filp, case KVM_CREATE_VCPU: r = kvm_vm_ioctl_create_vcpu(kvm, arg); break; + case KVM_ENABLE_CAP: { + struct kvm_enable_cap cap; + + r = -EFAULT; + if (copy_from_user(&cap, argp, sizeof(cap))) + goto out; + r = kvm_vm_ioctl_enable_cap(kvm, &cap); + break; + } case KVM_SET_USER_MEMORY_REGION: { struct kvm_userspace_memory_region kvm_userspace_mem;