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 38B1BC43334 for ; Mon, 11 Jul 2022 13:36:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A39686B00E5; Mon, 11 Jul 2022 09:36:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9EA156B00E6; Mon, 11 Jul 2022 09:36:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8D8576B00E7; Mon, 11 Jul 2022 09:36:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 7FE856B00E5 for ; Mon, 11 Jul 2022 09:36:33 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 5941120D17 for ; Mon, 11 Jul 2022 13:36:33 +0000 (UTC) X-FDA: 79674918666.30.1E36428 Received: from mout.kundenserver.de (mout.kundenserver.de [217.72.192.73]) by imf16.hostedemail.com (Postfix) with ESMTP id BDB9818007F for ; Mon, 11 Jul 2022 13:36:32 +0000 (UTC) Received: from mail-yb1-f172.google.com ([209.85.219.172]) by mrelayeu.kundenserver.de (mreue106 [213.165.67.113]) with ESMTPSA (Nemesis) id 1Miqvq-1nf9GU3waC-00esZS for ; Mon, 11 Jul 2022 15:36:31 +0200 Received: by mail-yb1-f172.google.com with SMTP id 136so8740203ybl.5 for ; Mon, 11 Jul 2022 06:36:30 -0700 (PDT) X-Gm-Message-State: AJIora8tMoCc8AKgmjx0mwCcolafaqJD2mkhiN+zqDhXOJE/SEf+djCH AKR3HkJtWvMtH0CKJfu52B5gf+PiNr8ScixcgLE= X-Google-Smtp-Source: AGRyM1tvmyWfjf82f5DfzmUlldR8SOU5epceJ5HO7+gjgCpS/5zLrbpHMFqt2IKVqyew31oGn0XpM/p2gIWyEDNyGSY= X-Received: by 2002:a5b:b47:0:b0:66e:3617:d262 with SMTP id b7-20020a5b0b47000000b0066e3617d262mr16460264ybr.106.1657546589339; Mon, 11 Jul 2022 06:36:29 -0700 (PDT) MIME-Version: 1.0 References: <20220711122459.13773-1-me@linux.beauty> <20220711122459.13773-2-me@linux.beauty> In-Reply-To: <20220711122459.13773-2-me@linux.beauty> From: Arnd Bergmann Date: Mon, 11 Jul 2022 15:36:12 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 1/4] of: add struct page support to rmem To: Li Chen Cc: Catalin Marinas , Will Deacon , Rob Herring , Frank Rowand , Andrew Morton , Li Chen , Linux ARM , Linux Kernel Mailing List , DTML , Linux-MM Content-Type: text/plain; charset="UTF-8" X-Provags-ID: V03:K1:DDPwXlXxQ84Mjd1YacYXXUy5pbuya30MbLbwcwrHyRg7y/6iAoS 3PZTWkN8cej2oh353Qx1ouH5yXK/sOWIygP8cq6akrcCs7mnajeeub2wadJHWa5fXIhNHvA 5JAsMKNovPuzzlwvqzcjMj93xAx4KyPTwbT9xkkqTspDrl+S7BawGeCQThIgAUpFkFN3g52 BbeZIMiALAhwSeJYjOEeA== X-UI-Out-Filterresults: notjunk:1;V03:K0:V7lynmC32ls=:yCTWH2wR4KgQhsUlbnIT3h wZGjULMDgiizaB5i6Ne1FQvRJMffEbcpFl3jbZRLWKmYIFImYxfppy/1WWrcj1KPJW4Q/G78c 26+L1qLAjMlCPeuiXdRwOV3skyx81/sgEE8tvWbPYENGoVWc7q+6vot677EOQuQcktuZckIV7 5HtszXlki+QVx1HyHGK3hRkyUgbykmftAc6ushtOzUBNwKeesh6Lo+ArUqJ8Y26EpDNbuXPs3 mSs7U9rT2uz3Rpp2HniG2Bh5tjeDGHIzkia11KiE6ZspeZn4JT73KKkv/sHj4tko4i4jpskXl ayvLBLgvdRtRFTh3nJFQ41Xv1O+1TKPOSRGk6KabAQpanB1qMdkyqEkc0FonLCIRu8fEoAPkT EPMrKNXLHa1cgHMnnDtVx+EEAkro1zHbxvs2FlQMO7axxybkzhqg3MaHd3EudBClHHxlhEh0b l1FGLFElSapXSBqn0nZyL25fL6VLUQDtL1QoiuqehB5GYsBBP4V5T9Njfqz1OQpQYIn0/dOeT tTUwdDIeR1Gr0eP02/dAcEJWNeUaIUrfJK94KIAb9egqCusEWX4ATojF+Xo/AGCMZGGmoI5le 42iV6OtB/WNBQgy8Qa3NZJCag/J1L1pUE5Lgi0gOASbW7iu1qDMAWhOxP8PJ1l8Y7gF+V/fil ndCEG5UlqkVK+zHQOmWZtwt4C5x37OHMQ0Ukb4M+pJv7lc9kichysenmMOcOoOzKV7eIkn9oJ x6fOEbQyXY24tz4TuYQ8iVOxCVLx8x6vtTuYiHj1KMuqmH4VZpXwE9OkoNpaUnbSC7ip2ftbm zxV12nTulPXHAinSia96bI4zYBuahGuUtycEnpKVk6Qm41uXYSWzSw5wTf6IVqFDsuHSl/+Bh SECAx0hnRr+uMzdVs2Aw== ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1657546593; a=rsa-sha256; cv=none; b=FaDtIfUezQKVYIyrAZZb3UNH3p4nOuL7hw8wf3EszbcOOKCBQFXNNUZBjSCIUy9VP+Z/6E MJz2lYghaKludZDlCV5AQRu0/SKSg4SrXatbDMzSj6bjecGFHS7B5Xiak0szdaoXrIEuwM 5f/CqJQ/skEwXrtEgsKDolrg+l+10mc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1657546593; 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: in-reply-to:in-reply-to:references:references; bh=tpHj6plP1BsjCKpsN4+HTHNAUnVv396qyxALZ5k8Tlk=; b=7aaxrooSDKL71DXD1hqAAZVUzsKosTrT5KtOeqZ2jkkSmqs6xWQojdVJO6/uvszNp3DxfG jh1oqvTC5aX+it7XEWN1h1PKD+BPuFADVNzsr7RslZK927Qfp9QUf4K63Ka2l9U7m8DkW4 /QY/prv1nH2S+OlHaDd9shAo6rdt0Sk= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=none; dmarc=none; spf=none (imf16.hostedemail.com: domain of arnd@arndb.de has no SPF policy when checking 217.72.192.73) smtp.mailfrom=arnd@arndb.de Authentication-Results: imf16.hostedemail.com; dkim=none; dmarc=none; spf=none (imf16.hostedemail.com: domain of arnd@arndb.de has no SPF policy when checking 217.72.192.73) smtp.mailfrom=arnd@arndb.de X-Rspamd-Server: rspam03 X-Stat-Signature: jbuzddbqzucatacmhg337ak6a4jidcpk X-Rspamd-Queue-Id: BDB9818007F X-Rspam-User: X-HE-Tag: 1657546592-600823 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 Mon, Jul 11, 2022 at 2:24 PM Li Chen wrote: > +config OF_RESERVED_MEM_DIO_SUPPORT > + bool "add Direct I/O support to reserved_mem" > + depends on ZONE_DEVICE && ARCH_KEEP_MEMBLOCK > + help > + By default, reserved memory don't get struct page support, which > + means you cannot do Direct I/O from this region. This config takes > + uses of ZONE_DEVICE and treats rmem as hotplug mem to get struct > + page and DIO support. This probably does not need to be user visible, it's enough to select it from the drivers that need it. > @@ -72,7 +72,6 @@ void __init fdt_reserved_mem_save_node(unsigned long node, const char *uname, > rmem->size = size; > > reserved_mem_count++; > - return; > } This change is not wrong, but it does not belong into the same patch as the rest, just drop it. > +/** > + * get_reserved_mem_from_dev() - get reserved_mem from a device node > + * @dev: device pointer > + * > + * This function look for reserved_mem from given device. > + * > + * Returns a reserved_mem pointer, or NULL on error. > + */ > +struct reserved_mem *get_reserved_mem_from_dev(struct device *dev) > +{ > + struct device_node *np = dev_of_node(dev); > + struct device_node *rmem_np; > + struct reserved_mem *rmem = NULL; > + > + rmem_np = of_parse_phandle(np, "memory-region", 0); > + if (!rmem_np) { > + dev_err(dev, "failed to get memory region node\n"); > + return ERR_PTR(-ENODEV); > + } > + > + rmem = of_reserved_mem_lookup(rmem_np); > + if (!rmem) { > + dev_err(dev, "Failed to lookup reserved memory\n"); > + return ERR_PTR(EINVAL); This needs to be a negative error code rather than the positive EINVAL. No need to initialize rmem=NULL first if you override it here. > + if (likely(reserved_mem_dio_in_region(pfn << PAGE_SHIFT, PAGE_SIZE, rmem) < > + 0)) > + goto out; It's not performance critical, so just drop the 'likely()' and put the rest into one line. > + if (page) { > + *page = pfn_to_page(pfn); > + get_page(*page); > + } > + > + ret = 0; > + > +out: > + pte_unmap(pte); > + return ret; > +} Should you perhaps return an error when 'page' is NULL? > +#ifdef CONFIG_OF_RESERVED_MEM_DIO_SUPPORT > +int reserved_mem_dio_mmap(struct file *file, struct vm_area_struct *vma, struct reserved_mem *rmem); > +void *reserved_mem_memremap_pages(struct device *dev, struct reserved_mem *rmem); > +#endif The '#ifdef' check can be dropped here, declarations are normally not hidden like this. Arnd