From patchwork Wed Mar 6 06:00:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suraj Jitindar Singh X-Patchwork-Id: 1052131 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=kvm-ppc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="VjnptcS0"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44Djmh0NRjz9sN8 for ; Wed, 6 Mar 2019 17:00:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726139AbfCFGAv (ORCPT ); Wed, 6 Mar 2019 01:00:51 -0500 Received: from mail-pg1-f196.google.com ([209.85.215.196]:34028 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725268AbfCFGAu (ORCPT ); Wed, 6 Mar 2019 01:00:50 -0500 Received: by mail-pg1-f196.google.com with SMTP id i130so7467383pgd.1; Tue, 05 Mar 2019 22:00:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=dw+c6C+pxMrdy/u99c7nghqAhHljr8ViCLJEDDOXhp0=; b=VjnptcS0rBZLirQVjS7+DKn140YMnFBa3yJfnwqWdMH0wTKpVpgKoySsqGtwQnjfiE uc2RCOszW8oLCf4l52MzhsgIrv9RFeoQqM+MhoAni1KQ33rCpylQ0I+1JfPMCxW5lLEg XfewHZ9pnPD0v3o7OpLCKhvsCVwZS6WTm6IE64iYsQ4ZVHbmZXCiPQ/w/XqvZP3KYKE4 tFesCjASychcxV4T7bOX33Q81FsyoxX1yW0v34SgezWZKcKFF5eCkDv106RM2B91Vjif iBWvs4n16rjeZZjtmtHzQZbMJifXBVjFuo7wz4S+xvH1VqXjkf04dU8l2qTazGCz6Qyg F5Bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=dw+c6C+pxMrdy/u99c7nghqAhHljr8ViCLJEDDOXhp0=; b=MRmNI9hyGGdqe+ij/+kGhgnnyL/ucgLbKYqjT+mRHZkQXz46bOR7aMj3S2ITzjbPkn 8sgzL5DLg5cm0HtquyPUTSKv0OUBMIjMhV6McU3t5TNVsijMrdbyv6SG2SPo35cjXqlh xVa2FLIEGo2BaDbSsv8FJJWYZSuMrfWfwXiwz69pn+Jvmq/ylx+ghv26UDggqQsbXQ4q qtpAkqaXaEvrUEb7GGFTwtuvDik5i4heI7AR0hbNPrxoR3XHWtN+fBtDF/M0Clu2JD3Q Kz+RHjWFWjRljHfZciO/S/3TTeD13B3ZfYj6PZbFZPuRf+p1ypDvjoWevWliY+WzRKJk NbOg== X-Gm-Message-State: APjAAAXfC4xOSLrbOpsZytPl5VMaVxcIGJneWhwK2gicRdBnYtTmzqPq /e2T9eYCZN0Tr8Av1ubEvInkkjad X-Google-Smtp-Source: APXvYqyHVaztV8uq4Ff4ez5ejGBleNnYY6tGU9PqxWDWAbzdf47E9TdTKmfRO4lwFJhZXCGvsRCKjQ== X-Received: by 2002:a63:516:: with SMTP id 22mr4622017pgf.353.1551852049636; Tue, 05 Mar 2019 22:00:49 -0800 (PST) Received: from surajjs2.ozlabs.ibm.com.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id l28sm2027610pfi.186.2019.03.05.22.00.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 05 Mar 2019 22:00:49 -0800 (PST) From: Suraj Jitindar Singh To: kvm-ppc@vger.kernel.org Cc: kvm@vger.kernel.org, paulus@samba.org, Suraj Jitindar Singh Subject: [PATCH 2/2] KVM: PPC: Book3S HV: Implement virtual mode H_PAGE_INIT handler Date: Wed, 6 Mar 2019 17:00:16 +1100 Message-Id: <20190306060016.18733-2-sjitindarsingh@gmail.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20190306060016.18733-1-sjitindarsingh@gmail.com> References: <20190306060016.18733-1-sjitindarsingh@gmail.com> Sender: kvm-ppc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm-ppc@vger.kernel.org Implement a virtual mode handler for the H_CALL H_PAGE_INIT which can be used to zero or copy a guest page. The page is defined to be 4k and must be 4k aligned. The in-kernel handler halves the time to handle this H_CALL compared to handling it in userspace. Signed-off-by: Suraj Jitindar Singh --- arch/powerpc/kvm/book3s_hv.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index 5a066fc299e1..25bf1f3680f2 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c @@ -801,6 +801,38 @@ static int kvmppc_h_set_mode(struct kvm_vcpu *vcpu, unsigned long mflags, } } +static int kvmppc_h_page_init(struct kvm_vcpu *vcpu, unsigned long flags, + unsigned long dest, unsigned long src) +{ + int ret = H_FUNCTION; + u64 pg_sz = 1UL << 12; /* 4K page size */ + u64 pg_mask = pg_sz - 1; + + /* Check for invalid flags (H_PAGE_SET_LOANED covers all CMO flags) */ + if (flags & ~(H_ICACHE_INVALIDATE | H_ICACHE_SYNCHRONIZE | + H_ZERO_PAGE | H_COPY_PAGE | H_PAGE_SET_LOANED)) + return H_PARAMETER; + + /* dest (and src if copy_page flag set) must be page aligned */ + if ((dest & pg_mask) || ((flags & H_COPY_PAGE) && (src & pg_mask))) + return H_PARAMETER; + + /* Either zero or copy the page as determined by the flags */ + if (flags & H_ZERO_PAGE) { + ret = kvm_clear_guest(vcpu->kvm, dest, pg_sz); + if (ret < 0) + return H_PARAMETER; + } else if (flags & H_COPY_PAGE) { + ret = kvm_copy_guest(vcpu->kvm, dest, src, pg_sz); + if (ret < 0) + return H_PARAMETER; + } + + /* We can ignore the remaining flags */ + + return H_SUCCESS; +} + static int kvm_arch_vcpu_yield_to(struct kvm_vcpu *target) { struct kvmppc_vcore *vcore = target->arch.vcore; @@ -1001,6 +1033,11 @@ int kvmppc_pseries_do_hcall(struct kvm_vcpu *vcpu) if (nesting_enabled(vcpu->kvm)) ret = kvmhv_copy_tofrom_guest_nested(vcpu); break; + case H_PAGE_INIT: + ret = kvmppc_h_page_init(vcpu, kvmppc_get_gpr(vcpu, 4), + kvmppc_get_gpr(vcpu, 5), + kvmppc_get_gpr(vcpu, 6)); + break; default: return RESUME_HOST; } @@ -1045,6 +1082,7 @@ static int kvmppc_hcall_impl_hv(unsigned long cmd) case H_IPOLL: case H_XIRR_X: #endif + case H_PAGE_INIT: return 1; }