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 7B1ACC32771 for ; Fri, 19 Aug 2022 10:53:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8A3518D0003; Fri, 19 Aug 2022 06:53:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8525D8D0002; Fri, 19 Aug 2022 06:53:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 71B978D0003; Fri, 19 Aug 2022 06:53:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 642628D0002 for ; Fri, 19 Aug 2022 06:53:37 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 3FA331A012A for ; Fri, 19 Aug 2022 10:53:37 +0000 (UTC) X-FDA: 79816031274.15.5A471D7 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) by imf31.hostedemail.com (Postfix) with ESMTP id F30ED20003 for ; Fri, 19 Aug 2022 10:53:36 +0000 (UTC) Received: by mail-ej1-f47.google.com with SMTP id kb8so8102437ejc.4 for ; Fri, 19 Aug 2022 03:53:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:from:to:cc; bh=vBMDaqWDKEZpAM5U5uRDZM2qZ+bVxGPTqcknyPxrAkk=; b=k8KcnyyIO8583kAqR7BJvj8IXFbdS1YtXCbda17OUo/bVOfB2cx7/GIWjS/awQdiz1 rkylTtVS4H3rmfn9WheN+G4itwj4mtcu3HbiejgT45iNa8QeT6uLP3XdvVbYKC44oe2v C1naobgTxqO21F/ry9gV6pkJN/CPBd3HC5VAKe0AqUl6NCESQnv8NEGmo3pkqJU0lvu2 dbIwD/a3aRR8bF4jg4nOL7i/a3IbJLmLDAfpXq7I5iWoIBYOxPwF+Gijjw7TUtVs/d41 WDKZQEQwyTVYoyx9gYxsZrpT6u+iTS3JQZLxhqNThLM6BpWVomUGG4waOqYmo9+WzZ63 uVWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:x-gm-message-state:from:to:cc; bh=vBMDaqWDKEZpAM5U5uRDZM2qZ+bVxGPTqcknyPxrAkk=; b=HfYtZb+3FxJjRb7bsvORKB6aWSaz0YY0rOY0OK1ZH8HQ6zXY2iPPqqzEb3dfdUAFGp JwkmLJKt5UKKX4X699J2TurGc3mAi+pvRfkmu75zvqGlHWjb3oW9rXka8eIQW9Dg8fWc dX7Iw9fmnbPEXSh0RZYvM++taZePRPdrlQEn5N3PeYDqGbVynTZNNkSUVkzhRw9qXNr7 wlG9IxsA924dUN9/PNwGMcdwEU+zArWlgF0OoRM2lMoiO52mkZGtyIK1ZJnRBKyOho8/ ks3WiBiUI+UyiX+699gqeLhJULLJV5g5rcEOUydqy9kaHRTkxrbGp8msCfLhSU/kV3N2 kGZQ== X-Gm-Message-State: ACgBeo09TqVDlsitJtgGdLNj7o5ObKo3oYJVTDsVgw4NsfRPjRc5CIi7 2PUjcczQg2Zmds5hlssRFWA= X-Google-Smtp-Source: AA6agR78DstU7QO1upcnXEjS/dlvS1K8wYT8OsVEOzsKzEO+05sLFlwNtaBG0l/0KREMsAEe6gfA2w== X-Received: by 2002:a17:907:c10:b0:731:58aa:7783 with SMTP id ga16-20020a1709070c1000b0073158aa7783mr4688809ejc.19.1660906415536; Fri, 19 Aug 2022 03:53:35 -0700 (PDT) Received: from pc636 (host-90-235-9-70.mobileonline.telia.com. [90.235.9.70]) by smtp.gmail.com with ESMTPSA id b15-20020a17090630cf00b0073180489522sm2131178ejb.118.2022.08.19.03.53.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Aug 2022 03:53:35 -0700 (PDT) From: Uladzislau Rezki X-Google-Original-From: Uladzislau Rezki Date: Fri, 19 Aug 2022 12:53:32 +0200 To: Matthew Wilcox Cc: Thomas Gleixner , Ira Weiny , "Fabio M. De Francesco" , Luis Chamberlain , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Uladzislau Rezki Subject: Re: [RFC] vmap_folio() Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1660906416; 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:dkim-signature; bh=vBMDaqWDKEZpAM5U5uRDZM2qZ+bVxGPTqcknyPxrAkk=; b=yFVEM1zwukclKFP980XiaYYa6u5R6XxCii/APueGSSkWtx4GG7vqi1+g2Hm+G46FJucSIV 9+4Yp9joDPWh1cVdLEEdC9YuPhIH9hu5UlVpZgWK8yY8xt/54tPS1i4cuKu4rAJI155UfN mNdoq5bYttJTLhWR33LJjIWgoGSWCME= ARC-Authentication-Results: i=1; imf31.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=k8KcnyyI; spf=pass (imf31.hostedemail.com: domain of urezki@gmail.com designates 209.85.218.47 as permitted sender) smtp.mailfrom=urezki@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1660906417; a=rsa-sha256; cv=none; b=pwPwiyio3v5tDQsEPCcjMsd1tNNS0jgOY9FahKm0heaAYNE4uXnHvwPzKsSBV9f2IzRkpt 3g4QXk3fATehZ5L4D/kvelrC553k83sy3s2DiR+LhxzesKliiuLLg8UJOKqqjri7QoVuaM Z51gS2Ml7S0AIiwNyD6hmtrQbDbpTOI= X-Rspam-User: X-Rspamd-Queue-Id: F30ED20003 Authentication-Results: imf31.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=k8KcnyyI; spf=pass (imf31.hostedemail.com: domain of urezki@gmail.com designates 209.85.218.47 as permitted sender) smtp.mailfrom=urezki@gmail.com; dmarc=pass (policy=none) header.from=gmail.com X-Stat-Signature: mbun6qo8jij8e3cea43fz4ifcumxfcag X-Rspamd-Server: rspam10 X-HE-Tag: 1660906416-786635 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, Aug 18, 2022 at 10:10:14PM +0100, Matthew Wilcox wrote: > On Tue, Aug 16, 2022 at 07:08:22PM +0100, Matthew Wilcox wrote: > > For these reasons, I proposing the logical equivalent to this: > > > > +void *folio_map_local(struct folio *folio) > > +{ > > + if (!IS_ENABLED(CONFIG_HIGHMEM)) > > + return folio_address(folio); > > + if (!folio_test_large(folio)) > > + return kmap_local_page(&folio->page); > > + return vmap_folio(folio); > > +} > > > > (where vmap_folio() is a new function that works a lot like vmap(), > > chunks of this get moved out-of-line, etc, etc., but this concept) > > This vmap_folio() compiles but is otherwise untested. Anything I > obviously got wrong here? > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index dd6cdb201195..1867759c33ff 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -2848,6 +2848,42 @@ void *vmap(struct page **pages, unsigned int count, > } > EXPORT_SYMBOL(vmap); > > +#ifdef CONFIG_HIGHMEM > +/** > + * vmap_folio - Map an entire folio into virtually contiguous space > + * @folio: The folio to map. > + * > + * Maps all pages in @folio into contiguous kernel virtual space. This > + * function is only available in HIGHMEM builds; for !HIGHMEM, use > + * folio_address(). The pages are mapped with PAGE_KERNEL permissions. > + * > + * Return: The address of the area or %NULL on failure > + */ > +void *vmap_folio(struct folio *folio) > +{ > + size_t size = folio_size(folio); > + struct vm_struct *area; > + unsigned long addr; > + > + might_sleep(); > + > + area = get_vm_area_caller(size, VM_MAP, __builtin_return_address(0)); > + if (!area) > + return NULL; > + > + addr = (unsigned long)area->addr; > + if (vmap_range_noflush(addr, addr + size, > + folio_pfn(folio) << PAGE_SHIFT, > + PAGE_KERNEL, folio_shift(folio))) { > + vunmap(area->addr); > + return NULL; > + } > + flush_cache_vmap(addr, addr + size); > + > + return area->addr; > +} > +#endif > + Looks pretty straightforward. One thing though, if we can combine it together with vmap(), since it is a copy paste in some sense, say to have something __vmap() to reuse it in the vmap_folio() and vmap(). But that is just a thought. -- Uladzislau Rezki