From patchwork Wed Dec 7 06:00:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Saurabh Singh Sengar X-Patchwork-Id: 13066643 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 7575DC352A1 for ; Wed, 7 Dec 2022 06:01:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0D5BE8E0003; Wed, 7 Dec 2022 01:01:01 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0855F8E0001; Wed, 7 Dec 2022 01:01:01 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E8F138E0003; Wed, 7 Dec 2022 01:01:00 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id D64628E0001 for ; Wed, 7 Dec 2022 01:01:00 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id AFAA1160E16 for ; Wed, 7 Dec 2022 06:01:00 +0000 (UTC) X-FDA: 80214461880.04.63DF1A8 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by imf17.hostedemail.com (Postfix) with ESMTP id 1946840006 for ; Wed, 7 Dec 2022 06:00:59 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b=nkQQDTss; spf=pass (imf17.hostedemail.com: domain of ssengar@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=ssengar@linux.microsoft.com; dmarc=pass (policy=none) header.from=linux.microsoft.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1670392860; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references:dkim-signature; bh=k8jVNADG7Oh2jsOUifOR+G61iy9ityYsT6Hp6c/5wPU=; b=V5SoABzNN+5knczxJ4s+2cxBdzKbj1am602VjnG+KkjDaV3U2N/r2+HCpMKY5e46Luo1cK WuUYCA3/8cbDuRMPfc+lohuR/miMi5/v9QM/djdI9Y10aDTNG8LkmjlYFumyAy/yjzkCRA f4CoI3JGnVbcgpWFA6Rh12jmgf+ZVTk= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b=nkQQDTss; spf=pass (imf17.hostedemail.com: domain of ssengar@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=ssengar@linux.microsoft.com; dmarc=pass (policy=none) header.from=linux.microsoft.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1670392860; a=rsa-sha256; cv=none; b=ZvPLcKipl4ZRbaWhRTJI7WSbK29bfYgjGwvb8hmAv9zxTzXz68gFxslqweOn7T4LTSHNtk xtDSoUQBMHRsLNEcHDIqxI+4/Sv+6+xqGrz71onZ83b7FX1P37iRE8Pz8/t5gSWBz4dKEN uaBwFgs3FfYDTtSHXSrgcrZzwiDVnso= Received: from linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net (linux.microsoft.com [13.77.154.182]) by linux.microsoft.com (Postfix) with ESMTPSA id 1FA4920B83CB; Tue, 6 Dec 2022 22:00:59 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 1FA4920B83CB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1670392859; bh=k8jVNADG7Oh2jsOUifOR+G61iy9ityYsT6Hp6c/5wPU=; h=From:To:Subject:Date:From; b=nkQQDTssSXUvelqnG5aFSVw+pJekwS7MLXWYJxyaT0u8TzGB9UEru80O5TFiwB1CV jhW/e02xbSEITDGUo5N0JJJ1Fy93ApzvPui1ZtfOwfZaEtphBVtlQ2vl0GxOr4Knzj qqJv6+iOe/Yx9RGowI7qn45UitbxyKKjk/p+aJQ0= From: Saurabh Sengar To: ssengar@microsoft.com, akpm@linux-foundation.org, yuzhao@google.com, jack@suse.cz, linux-mm@kvack.org, linux-kernel@vger.kernel.org, jostarks@microsoft.com Subject: [PATCH v2] mm/gup: fix gup_pud_range() for dax Date: Tue, 6 Dec 2022 22:00:53 -0800 Message-Id: <1670392853-28252-1-git-send-email-ssengar@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 X-Stat-Signature: y6o63boydinx3qfk36qrytrb1xq9mimp X-Rspam-User: X-Spamd-Result: default: False [-4.72 / 9.00]; BAYES_HAM(-5.82)[99.61%]; SUBJECT_HAS_UNDERSCORES(1.00)[]; MID_CONTAINS_FROM(1.00)[]; DMARC_POLICY_ALLOW(-0.50)[linux.microsoft.com,none]; R_DKIM_ALLOW(-0.20)[linux.microsoft.com:s=default]; R_SPF_ALLOW(-0.20)[+ip4:13.77.154.182]; ONCE_RECEIVED(0.10)[]; MIME_GOOD(-0.10)[text/plain]; RCVD_COUNT_ONE(0.00)[1]; FROM_EQ_ENVFROM(0.00)[]; RCVD_TLS_ALL(0.00)[]; MIME_TRACE(0.00)[0:+]; RCPT_COUNT_SEVEN(0.00)[7]; TO_MATCH_ENVRCPT_SOME(0.00)[]; ARC_SIGNED(0.00)[hostedemail.com:s=arc-20220608:i=1]; ARC_NA(0.00)[]; DKIM_TRACE(0.00)[linux.microsoft.com:+]; FROM_HAS_DN(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: 1946840006 X-Rspamd-Server: rspam06 X-HE-Tag: 1670392859-360267 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: From: John Starks For dax pud, pud_huge() returns true on x86. So the function works as long as hugetlb is configured. However, dax doesn't depend on hugetlb. Commit 414fd080d125 ("mm/gup: fix gup_pmd_range() for dax") fixed devmap-backed huge PMDs, but missed devmap-backed huge PUDs. Fix this as well. This fixes the below kernel panic: general protection fault, probably for non-canonical address 0x69e7c000cc478: 0000 [#1] SMP < snip > Call Trace: get_user_pages_fast+0x1f/0x40 iov_iter_get_pages+0xc6/0x3b0 ? mempool_alloc+0x5d/0x170 bio_iov_iter_get_pages+0x82/0x4e0 ? bvec_alloc+0x91/0xc0 ? bio_alloc_bioset+0x19a/0x2a0 blkdev_direct_IO+0x282/0x480 ? __io_complete_rw_common+0xc0/0xc0 ? filemap_range_has_page+0x82/0xc0 generic_file_direct_write+0x9d/0x1a0 ? inode_update_time+0x24/0x30 __generic_file_write_iter+0xbd/0x1e0 blkdev_write_iter+0xb4/0x150 ? io_import_iovec+0x8d/0x340 io_write+0xf9/0x300 io_issue_sqe+0x3c3/0x1d30 ? sysvec_reschedule_ipi+0x6c/0x80 __io_queue_sqe+0x33/0x240 ? fget+0x76/0xa0 io_submit_sqes+0xe6a/0x18d0 ? __fget_light+0xd1/0x100 __x64_sys_io_uring_enter+0x199/0x880 ? __context_tracking_enter+0x1f/0x70 ? irqentry_exit_to_user_mode+0x24/0x30 ? irqentry_exit+0x1d/0x30 ? __context_tracking_exit+0xe/0x70 do_syscall_64+0x3b/0x90 entry_SYSCALL_64_after_hwframe+0x61/0xcb RIP: 0033:0x7fc97c11a7be < snip > ---[ end trace 48b2e0e67debcaeb ]--- RIP: 0010:internal_get_user_pages_fast+0x340/0x990 < snip > Kernel panic - not syncing: Fatal exception Kernel Offset: disabled Fixes: 414fd080d125 ("mm/gup: fix gup_pmd_range() for dax") Signed-off-by: John Starks Signed-off-by: Saurabh Sengar --- mm/gup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/gup.c b/mm/gup.c index c2c2c6d..e776540 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -2765,7 +2765,7 @@ static int gup_pud_range(p4d_t *p4dp, p4d_t p4d, unsigned long addr, unsigned lo next = pud_addr_end(addr, end); if (unlikely(!pud_present(pud))) return 0; - if (unlikely(pud_huge(pud))) { + if (unlikely(pud_huge(pud) || pud_devmap(pud))) { if (!gup_huge_pud(pud, pudp, addr, next, flags, pages, nr)) return 0;