From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E954ACDB482 for ; Thu, 12 Oct 2023 14:06:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7F5AE8D012C; Thu, 12 Oct 2023 10:06:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7A6368D0002; Thu, 12 Oct 2023 10:06:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6949C8D012C; Thu, 12 Oct 2023 10:06:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 599E98D0002 for ; Thu, 12 Oct 2023 10:06:48 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id B28A9B52D6 for ; Thu, 12 Oct 2023 14:06:47 +0000 (UTC) X-FDA: 81336985254.27.7D72710 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf27.hostedemail.com (Postfix) with ESMTP id F0CAA402A1 for ; Thu, 12 Oct 2023 14:05:04 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=JnYKQQ0W; spf=none (imf27.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1697119506; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ZBo794QmPX3OSdLUZmZOt9sFww07PNz5cEeadQ3oMTs=; b=3qUCkXDuQeSogPG7m/BOQs+yiEbApCVGfPJAf37aE+6ohBXJ5MV+6LMIf3wmqf9mWoGU+n 0A2Tphfp9aHdBkPBk1GbPZqpLhxICfDWYYKu+wTAChN0SMCILDfqkC6O4LF8y3b1mptV9a 3PB1vP3eiSrLNioBqnosltM+MtHV3fY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1697119506; a=rsa-sha256; cv=none; b=BIGsD9+gu2v+wZ8YoKVcOUd48p0WZFpZgCjk4oAVJPQ9L7yc6ljdtWCoDWnWsUKuo4irzv NxX5lQn1incre9G9jbOVe2jWmYcpPqGAG4s7S5DMzge+OZYO37cTQp6boPsg55Ucp2RmwD aYOjkfPM/wzE2p8ItMPNVFl5jwGZC64= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=JnYKQQ0W; spf=none (imf27.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Transfer-Encoding: Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=ZBo794QmPX3OSdLUZmZOt9sFww07PNz5cEeadQ3oMTs=; b=JnYKQQ0WWPVh7MTBsIeRXAwbLL 3Mwulrlk764uN7k72IIbGXPlnVNdxd3DuP4FTtyqiQnYS/iJYcdNTemsLwfEgOqlceI9dvtMMyEHs tfsBcDwsfLzDTytRS+2uDlOzsYKG5vky7nyWiDPxhzrcUkNDlNEsbpRfSRlD91Ay1avH0/H8No0jf H6IApE3ZYsLteuzasQpZf0ILGJ8UT1mtlrE1sUqLngnW6ErDWU11lQn0s0bwMhqjlgdDLhALloRuP FdW1bavmsQroJdnauzfu0g4F4zr+DwIUpGvdzdq6oMChW9V6z73MZ7kHeFDwH58leQykL0PKBuaHJ SyuSi4IQ==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qqwJA-00HHti-AI; Thu, 12 Oct 2023 14:05:00 +0000 Date: Thu, 12 Oct 2023 15:05:00 +0100 From: Matthew Wilcox To: David Woodhouse Cc: Andrew Morton , linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mike Rapoport , xen-devel Subject: Re: [PATCH v6 06/38] mm: Add default definition of set_ptes() Message-ID: References: <20230802151406.3735276-1-willy@infradead.org> <20230802151406.3735276-7-willy@infradead.org> <4c63ee3634ccfed7d687fcbdd9db60663bce481f.camel@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <4c63ee3634ccfed7d687fcbdd9db60663bce481f.camel@infradead.org> X-Rspamd-Queue-Id: F0CAA402A1 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: pzgbe1wgzy3jau6j31gxskpab6city6z X-HE-Tag: 1697119504-252317 X-HE-Meta: U2FsdGVkX1+E27meokm4QRBtIOvqgPRFG+T5VxyAk8HuRNYvyfo33BvhpGW76wfp+R4DLWpBx6OWvgYWv1ePxc81AogZbim1z+z2BbfAHgA4mWxNkKmVz0mPoK5nAbCzDwCrDtPvaQbjB/9tA5LYBuVmhBbLvv6fo3BbY67QyfPz5cVQtjO1yjnQCHS+1jjslyAsWlNQztuYxV5JCs7f6kuCJw7fqLrAxxcgmPPxyDSaxg+z9K1hUq0VK725ESr+hwRTC8od2aCnqVR1hyo+EJCLc1pgQTAthjsvMay+2yGjshLJnvaoShpbNKmHNDsFJHixNsZsHERxkkxKYdMnwKRwoctVPgnZ8LgbK1vUNcnqhvT79eOjOxv7v3vg+akzcZr+V5cVBv7NazqBFb5PR9cYKHf9/x2jVMCjvEC4R4w12LtYecWKWs7IgkpBPfWO4IWUZPbzHOvYBgrbnj4+9FWSFO169qPB38+RjvpfnyuhquTG2orlgWMXWPWUp91UI6LpoxT164c/a8PFW4+vQWUa//QctFDs5Psv2I2cxsFfDo65l0Rqziv+uILgYSdSsPbBbVXNpa3qjCqCzWPmaK3GTPYh8MnD1+tHTrof8jLV1nC0rIw2csktdjI7QoYcKX6bttGbjemNG5RXtAs3SPrLHhTEY3+vAUw1VWYIRvy6gD5SUNBDh8XbRnF1Fhvw1NENy3+4xM/olq1hPkiXTE7S+yAPwyvIW2Z234kBtW9Zn39dCFok4eufl2XMXlbI6jnSmkclJAScWJqI1bSYhjl/xkFU7awM90/FnTiND4WwaP3O734tR+Ov/qLotk8AoID7JJv1ndb8xpJakeOgqx42WOU4VtSUB4ULxUbqWvVsH0JGB++lKRyxXPQ4cni6KDtiu0WP585V9sR7e4mTsA+RTsrcDAA1/KRY18/4oFrgSgCEY+NnKTdU+9bCMua67ooOL1SJkD9vZA72Myu sAtPAHHa TKiBLElm1WfIA2BKKKtO+jsMFvQSFZHoZGiD4Z5vL5IAcho+lVv1D6oKOo14cfxKCJjbQpMu5noTGD6Yn08SYjO1tsOqMHxK01jo3idXxZAUWGYDdW/oIobT9H4ALTdymW8ZmLEplhaYbqjB/YxveC6yjyHQzGJunon2fp4HBh4L4vR8OHQIudcEvVA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Thu, Oct 12, 2023 at 02:53:05PM +0100, David Woodhouse wrote: > > +       arch_enter_lazy_mmu_mode(); > > +       for (;;) { > > +               set_pte(ptep, pte); > > +               if (--nr == 0) > > +                       break; > > +               ptep++; > > +               pte = __pte(pte_val(pte) + (1UL << PFN_PTE_SHIFT)); > > +       } > > +       arch_leave_lazy_mmu_mode(); > > This breaks the Xen PV guest. > > In move_ptes() in mm/mremap.c we arch_enter_lazy_mmu_mode() and then > loop calling set_pte_at(). Which now (or at least in a few commits time > when you wire it up for x86 in commit a3e1c9372c9b959) ends up in your > implementation of set_ptes(), calls arch_enter_lazy_mmu_mode() again, > and: > > [ 0.628700] ------------[ cut here ]------------ > [ 0.628718] kernel BUG at arch/x86/kernel/paravirt.c:144! Easy fix ... don't do that ;-) diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h index af7639c3b0a3..f3da8836f689 100644 --- a/include/linux/pgtable.h +++ b/include/linux/pgtable.h @@ -231,9 +231,11 @@ static inline pte_t pte_next_pfn(pte_t pte) static inline void set_ptes(struct mm_struct *mm, unsigned long addr, pte_t *ptep, pte_t pte, unsigned int nr) { + bool multiple = nr > 1; page_table_check_ptes_set(mm, ptep, pte, nr); - arch_enter_lazy_mmu_mode(); + if (multiple) + arch_enter_lazy_mmu_mode(); for (;;) { set_pte(ptep, pte); if (--nr == 0) @@ -241,7 +243,8 @@ static inline void set_ptes(struct mm_struct *mm, unsigned long addr, ptep++; pte = pte_next_pfn(pte); } - arch_leave_lazy_mmu_mode(); + if (multiple) + arch_leave_lazy_mmu_mode(); } #endif #define set_pte_at(mm, addr, ptep, pte) set_ptes(mm, addr, ptep, pte, 1) I think long-term, we should make lazy_mmu_mode nestable. But this is a reasonable quick fix.