All of lore.kernel.org
 help / color / mirror / Atom feed
From: Claudio Imbrenda <imbrenda@linux.ibm.com>
To: kvm@vger.kernel.org
Cc: borntraeger@de.ibm.com, frankja@linux.ibm.com, thuth@redhat.com,
	pasic@linux.ibm.com, david@redhat.com,
	linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org,
	scgl@linux.ibm.com
Subject: [PATCH v7 05/17] KVM: s390: pv: usage counter instead of flag
Date: Fri,  4 Feb 2022 16:53:37 +0100	[thread overview]
Message-ID: <20220204155349.63238-6-imbrenda@linux.ibm.com> (raw)
In-Reply-To: <20220204155349.63238-1-imbrenda@linux.ibm.com>

Use the new protected_count field as a counter instead of the old
is_protected flag. This will be used in upcoming patches.

Increment the counter when a secure configuration is created, and
decrement it when it is destroyed. Previously the flag was set when the
set secure parameters UVC was performed.

Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Acked-by: Janosch Frank <frankja@linux.ibm.com>
---
 arch/s390/include/asm/mmu.h         |  2 +-
 arch/s390/include/asm/mmu_context.h |  2 +-
 arch/s390/include/asm/pgtable.h     |  2 +-
 arch/s390/kvm/pv.c                  | 12 +++++++-----
 4 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/arch/s390/include/asm/mmu.h b/arch/s390/include/asm/mmu.h
index e12ff0f29d1a..2c4cbc254604 100644
--- a/arch/s390/include/asm/mmu.h
+++ b/arch/s390/include/asm/mmu.h
@@ -17,7 +17,7 @@ typedef struct {
 	unsigned long asce_limit;
 	unsigned long vdso_base;
 	/* The mmu context belongs to a secure guest. */
-	atomic_t is_protected;
+	atomic_t protected_count;
 	/*
 	 * The following bitfields need a down_write on the mm
 	 * semaphore when they are written to. As they are only
diff --git a/arch/s390/include/asm/mmu_context.h b/arch/s390/include/asm/mmu_context.h
index c7937f369e62..2a38af5a00c2 100644
--- a/arch/s390/include/asm/mmu_context.h
+++ b/arch/s390/include/asm/mmu_context.h
@@ -26,7 +26,7 @@ static inline int init_new_context(struct task_struct *tsk,
 	INIT_LIST_HEAD(&mm->context.gmap_list);
 	cpumask_clear(&mm->context.cpu_attach_mask);
 	atomic_set(&mm->context.flush_count, 0);
-	atomic_set(&mm->context.is_protected, 0);
+	atomic_set(&mm->context.protected_count, 0);
 	mm->context.gmap_asce = 0;
 	mm->context.flush_mm = 0;
 #ifdef CONFIG_PGSTE
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
index 008a6c856fa4..23ca0d8e058a 100644
--- a/arch/s390/include/asm/pgtable.h
+++ b/arch/s390/include/asm/pgtable.h
@@ -523,7 +523,7 @@ static inline int mm_has_pgste(struct mm_struct *mm)
 static inline int mm_is_protected(struct mm_struct *mm)
 {
 #ifdef CONFIG_PGSTE
-	if (unlikely(atomic_read(&mm->context.is_protected)))
+	if (unlikely(atomic_read(&mm->context.protected_count)))
 		return 1;
 #endif
 	return 0;
diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/pv.c
index 2ab22500e092..9e900ce7387d 100644
--- a/arch/s390/kvm/pv.c
+++ b/arch/s390/kvm/pv.c
@@ -171,7 +171,8 @@ int kvm_s390_pv_deinit_vm(struct kvm *kvm, u16 *rc, u16 *rrc)
 	cc = uv_cmd_nodata(kvm_s390_pv_get_handle(kvm),
 			   UVC_CMD_DESTROY_SEC_CONF, rc, rrc);
 	WRITE_ONCE(kvm->arch.gmap->guest_handle, 0);
-	atomic_set(&kvm->mm->context.is_protected, 0);
+	if (!cc)
+		atomic_dec(&kvm->mm->context.protected_count);
 	KVM_UV_EVENT(kvm, 3, "PROTVIRT DESTROY VM: rc %x rrc %x", *rc, *rrc);
 	WARN_ONCE(cc, "protvirt destroy vm failed rc %x rrc %x", *rc, *rrc);
 	/* Intended memory leak on "impossible" error */
@@ -213,11 +214,14 @@ int kvm_s390_pv_init_vm(struct kvm *kvm, u16 *rc, u16 *rrc)
 	/* Outputs */
 	kvm->arch.pv.handle = uvcb.guest_handle;
 
+	atomic_inc(&kvm->mm->context.protected_count);
 	if (cc) {
-		if (uvcb.header.rc & UVC_RC_NEED_DESTROY)
+		if (uvcb.header.rc & UVC_RC_NEED_DESTROY) {
 			kvm_s390_pv_deinit_vm(kvm, &dummy, &dummy);
-		else
+		} else {
+			atomic_dec(&kvm->mm->context.protected_count);
 			kvm_s390_pv_dealloc_vm(kvm);
+		}
 		return -EIO;
 	}
 	kvm->arch.gmap->guest_handle = uvcb.guest_handle;
@@ -240,8 +244,6 @@ int kvm_s390_pv_set_sec_parms(struct kvm *kvm, void *hdr, u64 length, u16 *rc,
 	*rrc = uvcb.header.rrc;
 	KVM_UV_EVENT(kvm, 3, "PROTVIRT VM SET PARMS: rc %x rrc %x",
 		     *rc, *rrc);
-	if (!cc)
-		atomic_set(&kvm->mm->context.is_protected, 1);
 	return cc ? -EINVAL : 0;
 }
 
-- 
2.34.1


  parent reply	other threads:[~2022-02-04 15:54 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-04 15:53 [PATCH v7 00/17] KVM: s390: pv: implement lazy destroy for reboot Claudio Imbrenda
2022-02-04 15:53 ` [PATCH v7 01/17] KVM: s390: pv: leak the topmost page table when destroy fails Claudio Imbrenda
2022-02-07  8:56   ` Janosch Frank
2022-02-07  9:02     ` Claudio Imbrenda
2022-02-07 14:33     ` Heiko Carstens
2022-02-07 14:49       ` Claudio Imbrenda
2022-02-04 15:53 ` [PATCH v7 02/17] KVM: s390: pv: handle secure storage violations for protected guests Claudio Imbrenda
2022-02-04 15:53 ` [PATCH v7 03/17] KVM: s390: pv: handle secure storage exceptions for normal guests Claudio Imbrenda
2022-02-04 19:51   ` kernel test robot
2022-02-04 19:51     ` kernel test robot
2022-02-07  9:40   ` Janosch Frank
2022-02-04 15:53 ` [PATCH v7 04/17] KVM: s390: pv: refactor s390_reset_acc Claudio Imbrenda
2022-02-07 10:02   ` Janosch Frank
2022-02-07 10:47     ` Claudio Imbrenda
2022-02-07 10:56       ` Janosch Frank
2022-02-07 11:01         ` Claudio Imbrenda
2022-02-04 15:53 ` Claudio Imbrenda [this message]
2022-02-04 15:53 ` [PATCH v7 06/17] KVM: s390: pv: add export before import Claudio Imbrenda
2022-02-04 15:53 ` [PATCH v7 07/17] KVM: s390: pv: module parameter to fence lazy destroy Claudio Imbrenda
2022-02-04 15:53 ` [PATCH v7 08/17] KVM: s390: pv: make kvm_s390_cpus_from_pv global Claudio Imbrenda
2022-02-07 10:15   ` Janosch Frank
2022-02-04 15:53 ` [PATCH v7 09/17] KVM: s390: pv: clear the state without memset Claudio Imbrenda
2022-02-07 10:09   ` Janosch Frank
2022-02-04 15:53 ` [PATCH v7 10/17] KVM: s390: pv: add mmu_notifier Claudio Imbrenda
2022-02-04 21:22   ` kernel test robot
2022-02-04 21:22     ` kernel test robot
2022-02-04 21:22   ` kernel test robot
2022-02-04 21:22     ` kernel test robot
2022-02-07 11:04   ` Janosch Frank
2022-02-07 12:16     ` Claudio Imbrenda
2022-02-04 15:53 ` [PATCH v7 11/17] s390/mm: KVM: pv: when tearing down, try to destroy protected pages Claudio Imbrenda
2022-02-04 15:53 ` [PATCH v7 12/17] KVM: s390: pv: refactoring of kvm_s390_pv_deinit_vm Claudio Imbrenda
2022-02-07 11:06   ` Janosch Frank
2022-02-04 15:53 ` [PATCH v7 13/17] KVM: s390: pv: cleanup leftover protected VMs if needed Claudio Imbrenda
2022-02-04 15:53 ` [PATCH v7 14/17] KVM: s390: pv: asynchronous destroy for reboot Claudio Imbrenda
2022-02-04 15:53 ` [PATCH v7 15/17] KVM: s390: pv: api documentation for asynchronous destroy Claudio Imbrenda
2022-02-07 14:52   ` Janosch Frank
2022-02-07 15:17     ` Claudio Imbrenda
2022-02-04 15:53 ` [PATCH v7 16/17] KVM: s390: pv: add KVM_CAP_S390_PROT_REBOOT_ASYNC Claudio Imbrenda
2022-02-07 14:37   ` Janosch Frank
2022-02-07 15:19     ` Claudio Imbrenda
2022-02-07 15:40       ` Janosch Frank
2022-02-04 15:53 ` [PATCH v7 17/17] KVM: s390: pv: avoid export before import if possible Claudio Imbrenda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220204155349.63238-6-imbrenda@linux.ibm.com \
    --to=imbrenda@linux.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=pasic@linux.ibm.com \
    --cc=scgl@linux.ibm.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.