All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org,
	David Hildenbrand <david@redhat.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Alexander Gordeev <agordeev@linux.ibm.com>,
	Christian Borntraeger <borntraeger@linux.ibm.com>,
	Sven Schnelle <svens@linux.ibm.com>,
	Janosch Frank <frankja@linux.ibm.com>,
	Claudio Imbrenda <imbrenda@linux.ibm.com>,
	Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
	Matthew Wilcox <willy@infradead.org>,
	Thomas Huth <thuth@redhat.com>
Subject: [PATCH v2 01/10] s390/uv: don't call folio_wait_writeback() without a folio reference
Date: Fri, 12 Apr 2024 16:21:11 +0200	[thread overview]
Message-ID: <20240412142120.220087-2-david@redhat.com> (raw)
In-Reply-To: <20240412142120.220087-1-david@redhat.com>

folio_wait_writeback() requires that no spinlocks are held and that
a folio reference is held, as documented. After we dropped the PTL, the
folio could get freed concurrently. So grab a temporary reference.

Fixes: 214d9bbcd3a6 ("s390/mm: provide memory management functions for protected KVM guests")
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
 arch/s390/kernel/uv.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/s390/kernel/uv.c b/arch/s390/kernel/uv.c
index 265fea37e030..016993e9eb72 100644
--- a/arch/s390/kernel/uv.c
+++ b/arch/s390/kernel/uv.c
@@ -318,6 +318,13 @@ int gmap_make_secure(struct gmap *gmap, unsigned long gaddr, void *uvcb)
 			rc = make_folio_secure(folio, uvcb);
 			folio_unlock(folio);
 		}
+
+		/*
+		 * Once we drop the PTL, the folio may get unmapped and
+		 * freed immediately. We need a temporary reference.
+		 */
+		if (rc == -EAGAIN)
+			folio_get(folio);
 	}
 unlock:
 	pte_unmap_unlock(ptep, ptelock);
@@ -330,6 +337,7 @@ int gmap_make_secure(struct gmap *gmap, unsigned long gaddr, void *uvcb)
 		 * completion, this is just a useless check, but it is safe.
 		 */
 		folio_wait_writeback(folio);
+		folio_put(folio);
 	} else if (rc == -EBUSY) {
 		/*
 		 * If we have tried a local drain and the folio refcount
-- 
2.44.0


  reply	other threads:[~2024-04-12 14:21 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-12 14:21 [PATCH v2 00/10] s390: PG_arch_1+folio cleanups for uv+hugetlb David Hildenbrand
2024-04-12 14:21 ` David Hildenbrand [this message]
2024-04-12 14:21 ` [PATCH v2 02/10] s390/uv: gmap_make_secure() cleanups for further changes David Hildenbrand
2024-05-07 15:27   ` Claudio Imbrenda
2024-04-12 14:21 ` [PATCH v2 03/10] s390/uv: split large folios in gmap_make_secure() David Hildenbrand
2024-05-07 15:43   ` Claudio Imbrenda
2024-04-12 14:21 ` [PATCH v2 04/10] s390/uv: convert PG_arch_1 users to only work on small folios David Hildenbrand
2024-05-07 15:49   ` Claudio Imbrenda
2024-04-12 14:21 ` [PATCH v2 05/10] s390/uv: update PG_arch_1 comment David Hildenbrand
2024-04-12 14:21 ` [PATCH v2 06/10] s390/uv: make uv_convert_from_secure() a static function David Hildenbrand
2024-05-07 15:53   ` Claudio Imbrenda
2024-04-12 14:21 ` [PATCH v2 07/10] s390/uv: convert uv_destroy_owned_page() to uv_destroy_(folio|pte)() David Hildenbrand
2024-05-07 16:25   ` Claudio Imbrenda
2024-04-12 14:21 ` [PATCH v2 08/10] s390/uv: convert uv_convert_owned_from_secure() to uv_convert_from_secure_(folio|pte)() David Hildenbrand
2024-05-07 16:26   ` Claudio Imbrenda
2024-04-12 14:21 ` [PATCH v2 09/10] s390/uv: implement HAVE_ARCH_MAKE_FOLIO_ACCESSIBLE David Hildenbrand
2024-05-07 16:29   ` Claudio Imbrenda
2024-04-12 14:21 ` [PATCH v2 10/10] s390/hugetlb: convert PG_arch_1 code to work on folio->flags David Hildenbrand
2024-05-07 16:33   ` Claudio Imbrenda
2024-05-08 18:08     ` David Hildenbrand
2024-05-10  8:45       ` Claudio Imbrenda
2024-04-30 18:49 ` [PATCH v2 00/10] s390: PG_arch_1+folio cleanups for uv+hugetlb David Hildenbrand
2024-05-06  8:38   ` Heiko Carstens
2024-05-07 16:34     ` 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=20240412142120.220087-2-david@redhat.com \
    --to=david@redhat.com \
    --cc=agordeev@linux.ibm.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=frankja@linux.ibm.com \
    --cc=gerald.schaefer@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=svens@linux.ibm.com \
    --cc=thuth@redhat.com \
    --cc=willy@infradead.org \
    /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.