Received: by 2002:a05:6358:5282:b0:b5:90e7:25cb with SMTP id g2csp3750030rwa; Tue, 23 Aug 2022 09:28:34 -0700 (PDT) X-Google-Smtp-Source: AA6agR43IPKwc8z9BIjy0l9FHdzOa4gkd8BMjbjNVxUWD3QQHnWaIxnVVMaCG+wweJ1k29+Qyprc X-Received: by 2002:a17:90b:1d84:b0:1f5:b66:7460 with SMTP id pf4-20020a17090b1d8400b001f50b667460mr4065661pjb.50.1661272114484; Tue, 23 Aug 2022 09:28:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661272114; cv=none; d=google.com; s=arc-20160816; b=edbxbZfa8U0Vs90GVm7ziC5zrK4K2KMfuS1r8lronC0c1dt9VgB4Ww1K6GbtnlDL7f 7qt95DyRaa38u0rlrqzkkcv8WNOIpe1Io3713BrfuefiLiC/mrkcQXCO0SeECUoJLtAF zEAG7sqQ+iAmqWDNJJvAgBsIcrjKkfhRzcT3NUrbfkvsqwMcuhMWfM/B2Qa400WmHBIM HlYo2pbtg147iqqAyhKBVUmJcEJvIJJXO5j391vfHw4ePUDZybejSnWtDOakS3aD3B2n hLmSe7sTEqy+K7YQ+Ck3WmHrP4cC/2AXMicEGXMZASuhcECxKnFKL9UFrr8mu10rdWtu qdIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=JFZpUrH9edUOuu2AArKyngbcz1gI3F8tDFjZRMkRQFs=; b=T27ZdFriVKu1mtb+zlNXvfMKqHF+UZb6IaAw7UrtJV+H1s5ivEAFlJq5LhlLOcYdhV zshww29JmYMyQ8lahorz8417Reunvj6Io6EjEIxbpSu1NawzWKYUVxmaYywOlDBGF1Cp 3BKh4DcKvW6llvSVG7sF8QNLHOsohcOa5FOvSzQL8yIDHwSiCn9IKmR+uWVEtQt1dXq4 Uqe9f88aDwZZeT/0erUxzkqRPOrKrIuXPCP+Z3Uhw7I4BgjscspFjNLycyYZCTHndeg3 nQFGyxRwnxlPEyOCUT3RnOgW6+SV/KHsCLJDdC3y7dCFa6UlOSHVkIARLUhnVflOcXjX ZHPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Ui+eZfqH; 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=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t11-20020a17090ad50b00b001fabf2292d3si15168471pju.63.2022.08.23.09.28.22; Tue, 23 Aug 2022 09:28:34 -0700 (PDT) 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=@redhat.com header.s=mimecast20190719 header.b=Ui+eZfqH; 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=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244286AbiHWQOG (ORCPT + 99 others); Tue, 23 Aug 2022 12:14:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51210 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239750AbiHWQNs (ORCPT ); Tue, 23 Aug 2022 12:13:48 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9BAFA3AE55 for ; Tue, 23 Aug 2022 05:32:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661257970; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JFZpUrH9edUOuu2AArKyngbcz1gI3F8tDFjZRMkRQFs=; b=Ui+eZfqHhvNr5Nv3x+b5NMJVXJCILL/clpbEKfGwsdFqA6TiPc5zWbyvMK/4DJsR177nyz Rc1KAEiwygrI8mUk6lRCtZiq06lFa5FUlS/pn1m1IRlzq1uqp0YYKQxUuY6pmyByXebRnR qy+kSNpYyDMQoByBtrKwN4INyS3GuOo= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-470-cQTcaUiDMyaszofSEUWFVQ-1; Tue, 23 Aug 2022 08:32:47 -0400 X-MC-Unique: cQTcaUiDMyaszofSEUWFVQ-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4C03918E5341; Tue, 23 Aug 2022 12:32:47 +0000 (UTC) Received: from localhost (ovpn-12-31.pek2.redhat.com [10.72.12.31]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F022940C141D; Tue, 23 Aug 2022 12:32:45 +0000 (UTC) Date: Tue, 23 Aug 2022 20:32:42 +0800 From: Baoquan He To: Christophe Leroy Cc: "linux-kernel@vger.kernel.org" , "linux-mm@kvack.org" , "akpm@linux-foundation.org" , "hch@infradead.org" , "agordeev@linux.ibm.com" , "wangkefeng.wang@huawei.com" , "linux-arm-kernel@lists.infradead.org" Subject: Re: [PATCH v2 02/11] mm: ioremap: fixup the physical address and page prot Message-ID: References: <20220820003125.353570-1-bhe@redhat.com> <20220820003125.353570-3-bhe@redhat.com> <54b7afcc-056d-7f33-6858-d451a3222c70@csgroup.eu> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <54b7afcc-056d-7f33-6858-d451a3222c70@csgroup.eu> X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE 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 On 08/23/22 at 05:33am, Christophe Leroy wrote: > > > Le 23/08/2022 ? 03:19, Baoquan He a ?crit?: > > On 08/22/22 at 06:30am, Christophe Leroy wrote: > >> > >> > >> Le 20/08/2022 ? 02:31, Baoquan He a ?crit?: > >>> On some architectures, the physical address need be fixed up before > >>> doing mapping, e.g, parisc. And on architectures, e.g arc, the > >>> parameter 'prot' passed into ioremap_prot() need be adjusted too. > >>> > >>> In oder to convert them to take GENERIC_IOREMAP method, we need wrap > >>> the address fixing up code and page prot adjusting code into arch_ioremap() > >>> and pass the new address and 'prot' out for ioremap_prot() handling. > >> > >> Is it really the best approach ? Wouldn't it be better to have helpers > >> to do that, those helpers being called by the ioremap_prot(), instead of > >> doing it inside the arch_ioremap() function ? > > > > This is suggested too by Alexander during his v1 reviewing. I tried, but > > feel the current way taken in this patchset is better. Because not all > > architecutres need the address fix up, only parisc, and only few need > > adjust the 'prot'. Introducing other helpers seems too much, that only > > increases the complexity of of ioremap() and the generic GENERIC_IOREMAP > > method for people to understand and take. > > I can't understand. Why is it difficult to do something like: > > #ifndef ioremap_adjust_prot > static inline unsigned long ioremap_adjust_prot(unsigned long flags) > { > return flags; > } > #endif > > Then for arc you do > > static inline unsigned long ioremap_adjust_prot(unsigned long flags) > { > return pgprot_val(pgprot_noncached(__pgprot(flags))); > } > #define ioremap_adjust_prot ioremap_adjust_prot My thinking is we have four things to do in the added hookers. 1) check if we should do ioremap on ARCHes. If not, return NULL from ioremap_prot(); 2) handling the mapping io address specifically on ARCHes, e.g arc, ia64, s390; 3) the original physical address passed into ioremap_prot() need be fixed up, e.g arc; 4) the 'prot' passed into ioremap_prot() need be adjusted, e.g on arc and xtensa. With Kefeng's patches, the case 1) is handled with introduced ioremap_allowed()/iounmap_allowed(). In this patchset, what I do is rename the hooks as arch_ioremap() and arch_iounmap(), then put case 1), 2), 3), 4) handling into arch_ioremap(). Adding helpers to cover each case is not difficult from my side. I worry that as time goes by, those several hooks my cause issue, e.g if a new adjustment need be done, should we introduce a new helper or make do with the existed hook; how When I investigated this, one arch_ioremap() looks not complicated since not all ARCHes need cover all above 4 cases. That's why I finally choose one hook. I am open to new idea, please let me know if we should change it to introduce several different helpers. > > > By the way, could be a good opportunity to change ioremap_prot() flags > type from unsigned long to pgprot_t Tend to agree, I will give it a shot.