From patchwork Fri Mar 10 16:29:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Andrzej Siewior X-Patchwork-Id: 67563 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp979643wrd; Fri, 10 Mar 2023 08:51:25 -0800 (PST) X-Google-Smtp-Source: AK7set/t3mQffA/wkR1WpAi9z2Cz+QouV0kldiJU3hy7Fbivur4t2I1DfcXcMA4WpYNlo3Rv6SWF X-Received: by 2002:a17:90b:1b04:b0:237:d2b0:dac6 with SMTP id nu4-20020a17090b1b0400b00237d2b0dac6mr27499050pjb.33.1678467084887; Fri, 10 Mar 2023 08:51:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678467084; cv=none; d=google.com; s=arc-20160816; b=kii6FnlaUTUrcxpM6nd4SvkLt2jAqLVdG2FiJTjjwqxDHC3LwvrXW1uBmi32G/yUq4 kGlKYzdu+dr44dj8hdD0KT5+LNqbOpYh0XQhyM2ohAT9Q41hFIblUVLWiinw+6iBgeiT kUbLEEE7QmC6bNTC6ouAUttHbVJLXlZ651GVvYWk6yUHTmQ9ccDnaJ6SVsMka3b7rHTG c1VrN9AzvWik/Jh0R9uBJVWLeod/oV/TRjVpc8WNKc5NwFqpxnP09+M6GOd7GucH/I9W 1goL2ArRJnaveR9rtsTj6nCCbGsy7PfeXDKX7JIEl2fNFIHTn8T4E3pgOiumL5r4dIdy +szQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-disposition:mime-version:message-id :subject:cc:to:from:dkim-signature:dkim-signature:date; bh=uBAEWUyZKwUmKqqazL7gQLTZOP1jiWdjfH5fZ0edGUU=; b=U8PQjFgrApithY26Jbqi3gKnPEVcredXJ3fKzAOj2fKH32HNLiZeAC/nPWrtzierQi P/si+6Au6oF+q/S+56l4LLSPr9Q7zbXthfrXBO1cUaXKyjFfOiyi3anutoTniYYlH7h+ O9myxDlq7wezv33sdg1fHWAHed32NHfSSlKjngGeZCW/uNaWgN8b41gO46H+ObF6n2FM Gc1KuqrjyTeDSP7HRXbat+krbxJeX5mnk9PQXMXdPeU/+yZvqvv/mqkfHrZa/VDOHA0X gc+b144Q+vAYHnmf+C9RAL+igBDASfWj5O01IZv7zzyt3IDiOQsWrc9M+YGXrnRTRnZV l87g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=NNSiKyB5; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kk4-20020a17090b4a0400b002375a3ccf51si294532pjb.9.2023.03.10.08.51.10; Fri, 10 Mar 2023 08:51:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=NNSiKyB5; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231478AbjCJQgn (ORCPT + 99 others); Fri, 10 Mar 2023 11:36:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58626 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231578AbjCJQgH (ORCPT ); Fri, 10 Mar 2023 11:36:07 -0500 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 11B791194C5 for ; Fri, 10 Mar 2023 08:34:10 -0800 (PST) Date: Fri, 10 Mar 2023 17:29:05 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1678465747; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=uBAEWUyZKwUmKqqazL7gQLTZOP1jiWdjfH5fZ0edGUU=; b=NNSiKyB5IHTrbMB6dmMGiaJR/tftZeADFMcbX6qlAmPMVpm4BNi+71bCAY99Fu5GianfuH qqPCjRR402JCDU/QYbl7b4ccm0S7dljJ2zAPiSYSKNVmawQyXBLlWxynf2Hg1wedOgNVMC J6zIk+EP4Y9tHMztNCeFEgLRCurwqVDEPP2x/+q8larNso2hwgfYkZsmzMX37tysq1+PTL FtLEc5rjUXrTMYlgrLBJZUPj7rGiaKmrT9jhMRH83fkWQOsB460ziWx+Q952ScHQdTIs04 n2UxtsrZziUQBS5ULb94KRqsReshl0en9jRXMU3vYVEf5xQYn53seuSeFw6+gQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1678465747; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=uBAEWUyZKwUmKqqazL7gQLTZOP1jiWdjfH5fZ0edGUU=; b=1m605YEJfNMKkZvmYF5/huSgj0u4P+9jWQI0PxQVSk46rYUwrfXNs1X5gf1+WyTNPcUIgV qcP6tOSAO91Vs5Cg== From: Sebastian Andrzej Siewior To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Andrew Morton , Thomas Gleixner , Richard Weinberger Subject: [PATCH] io-mapping: Don't disable preempt on RT in io_mapping_map_atomic_wc(). Message-ID: <20230310162905.O57Pj7hh@linutronix.de> MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760000301951226271?= X-GMAIL-MSGID: =?utf-8?q?1760000301951226271?= io_mapping_map_atomic_wc() disables preemption and pagefaults for historical reasons. The conversion to io_mapping_map_local_wc(), which only disables migration, cannot be done wholesale because quite some call sites need to be updated to accommodate with the changed semantics. On PREEMPT_RT enabled kernels the io_mapping_map_atomic_wc() semantics are problematic due to the implicit disabling of preemption which makes it impossible to acquire 'sleeping' spinlocks within the mapped atomic sections. PREEMPT_RT replaces the preempt_disable() with a migrate_disable() for more than a decade. It could be argued that this is a justification to do this unconditionally, but PREEMPT_RT covers only a limited number of architectures and it disables some functionality which limits the coverage further. Limit the replacement to PREEMPT_RT for now. This is also done kmap_atomic(). Reported-by: Richard Weinberger Link: https://lore.kernel.org/CAFLxGvw0WMxaMqYqJ5WgvVSbKHq2D2xcXTOgMCpgq9nDC-MWTQ@mail.gmail.com Signed-off-by: Sebastian Andrzej Siewior --- Richard reported it against the i915 driver. I got offlist another report and this reporter confirmed that it fixes the issue while no glitches or other problems were observed (in the kernel log and on screen). include/linux/io-mapping.h | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h index 09d4f17c8d3b6..7376c1df9c901 100644 --- a/include/linux/io-mapping.h +++ b/include/linux/io-mapping.h @@ -69,7 +69,10 @@ io_mapping_map_atomic_wc(struct io_mapping *mapping, BUG_ON(offset >= mapping->size); phys_addr = mapping->base + offset; - preempt_disable(); + if (!IS_ENABLED(CONFIG_PREEMPT_RT)) + preempt_disable(); + else + migrate_disable(); pagefault_disable(); return __iomap_local_pfn_prot(PHYS_PFN(phys_addr), mapping->prot); } @@ -79,7 +82,10 @@ io_mapping_unmap_atomic(void __iomem *vaddr) { kunmap_local_indexed((void __force *)vaddr); pagefault_enable(); - preempt_enable(); + if (!IS_ENABLED(CONFIG_PREEMPT_RT)) + preempt_enable(); + else + migrate_enable(); } static inline void __iomem * @@ -162,7 +168,10 @@ static inline void __iomem * io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset) { - preempt_disable(); + if (!IS_ENABLED(CONFIG_PREEMPT_RT)) + preempt_disable(); + else + migrate_disable(); pagefault_disable(); return io_mapping_map_wc(mapping, offset, PAGE_SIZE); } @@ -172,7 +181,10 @@ io_mapping_unmap_atomic(void __iomem *vaddr) { io_mapping_unmap(vaddr); pagefault_enable(); - preempt_enable(); + if (!IS_ENABLED(CONFIG_PREEMPT_RT)) + preempt_enable(); + else + migrate_enable(); } static inline void __iomem *