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 37B34C3DA61 for ; Sun, 21 Jul 2024 17:59:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A259E6B0083; Sun, 21 Jul 2024 13:59:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9D5396B0085; Sun, 21 Jul 2024 13:59:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 89E2A6B0088; Sun, 21 Jul 2024 13:59:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 6C7B16B0083 for ; Sun, 21 Jul 2024 13:59:01 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id DB9541C2FAF for ; Sun, 21 Jul 2024 17:59:00 +0000 (UTC) X-FDA: 82364520840.28.6E5BF4B Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) by imf28.hostedemail.com (Postfix) with ESMTP id 14B6EC0007 for ; Sun, 21 Jul 2024 17:58:58 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="Kf/W60V6"; spf=pass (imf28.hostedemail.com: domain of alexander.duyck@gmail.com designates 209.85.221.41 as permitted sender) smtp.mailfrom=alexander.duyck@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1721584716; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=vuucJBZjxT13NBnA+XGQcHrdAK4apS6ULN3Imcv4PZg=; b=RL2LzMZ1/LtNxuwBdfGpe+2Yex5EuiKUb3KP4eGI6DDcsTvowGgTiBwnhdmT+Rh35Qo4Nm a5TlYHrI0oNwv3XuUY4lPaYkqej6RQ5mdNy86bP/cGXNaKbbPRiiPmdWMsr0tx2V1zCc87 UlGzySjswprruh+hjxUjHMQO6Emgd+4= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="Kf/W60V6"; spf=pass (imf28.hostedemail.com: domain of alexander.duyck@gmail.com designates 209.85.221.41 as permitted sender) smtp.mailfrom=alexander.duyck@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721584716; a=rsa-sha256; cv=none; b=H4mDVQ5ThwthSt40yDNOfUrjc6ov73FQCRTbz1xpipY0LHTr+VIN7Vy36f4YqnvdGmRk6d 3kV7GbIxbzihxefxB0btKBQfNC4qfDaaYUsHPFlSrPOoDfPFNoz5rAQ/7Lpy4TTZL7qbvY DHsFq7hs4elye+DE7Gbl9BGNuFA/4mE= Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3685b3dbcdcso1733904f8f.3 for ; Sun, 21 Jul 2024 10:58:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721584737; x=1722189537; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=vuucJBZjxT13NBnA+XGQcHrdAK4apS6ULN3Imcv4PZg=; b=Kf/W60V6Z6xK8jbFYK9qfRCW8ENc+wyBKizAVXh9aByY6k3qk8shW5BVVPlCPm4oQU dJTEtb5WksDo6Zudu1lqGRWYPVJ5m67ik1slP7d4fa69/fYPLsOCSzCHQNTLJkz+Si8N Khg2b5A708YYeGKM+NkuMHfjorKsYUXJj38j7nQUyWlXP2VrodXVOxkZ0quH/6h5EVJs VxObDzPLq9yb5iW1LAU6dIBPyZl26f6Zfz1fM+vYGi9SVLoFGbJJMK4uHw3xTR1ZIZ7A 8nIgezIAs78Medgjan+uV+rQK3E7ZVQbn5ZsUEd+7iWxBbeF+6SVdbxwcGhr0YmRUyMT TtyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721584737; x=1722189537; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vuucJBZjxT13NBnA+XGQcHrdAK4apS6ULN3Imcv4PZg=; b=iDIRLUzD0eb4Vd1u93Knil4FMZuDzXpk/krrybygk7r4TH/JsCwBWurw90OteHI5TQ pIUugalK9MOxl0ezzMrujTfHxIpq50xxw/nCEJjk1tYc4KbVK6R4tkEilmtpszJAW3DK NcnIA4US0j3sqPtlgHYuF+g1tepHBYWI1MbBLBRY/ptgp8iPZg3uYPAzIoAw9slf5gWp 5B6hna/DGWjzV6TB/Yp0RElS5RDKkk2MT12lSdvCbcP2ejKLCx58CM3C/6lTBZ2jNEjp BlnJ3WcwbyTlNLO8gdwZx2jDSTYARE7GJi4FF3eQY6ZXCGj/KYG3ljD+lCpgL3ECkfSF hJeQ== X-Forwarded-Encrypted: i=1; AJvYcCX6qWNlX1svREs21wC1F51u6tRYJ9r58SBkXw1PadRCMW14olnmjaNIj31Y7XzKnRhchg8I4W/6OH1623Vg9HvflI8= X-Gm-Message-State: AOJu0YzTcZGaupigMoqMi3t4dXg+bUyY5b/FzKTdPGYSyFjByb3eCtgh TJvXfFEk4WpVtSpPGe4WlwBZalf+oS7og8KWb6/rh76G4YPEqzSb3CNg+O9X+3R6Mprbd7NmDyY ggjCH+ju5sxzT8wmT4xeg5PtE+NI= X-Google-Smtp-Source: AGHT+IHyfeVOFnNjAZlWNZW5IgjcIak0nSqY1PbLswws8Vpau308enwVu85wB509FQHD23lMTExJg8AP/yearQWWSHY= X-Received: by 2002:a05:6000:2a2:b0:364:3ba5:c5af with SMTP id ffacd0b85a97d-369bb336d3bmr3622830f8f.61.1721584737268; Sun, 21 Jul 2024 10:58:57 -0700 (PDT) MIME-Version: 1.0 References: <20240719093338.55117-1-linyunsheng@huawei.com> <20240719093338.55117-3-linyunsheng@huawei.com> In-Reply-To: <20240719093338.55117-3-linyunsheng@huawei.com> From: Alexander Duyck Date: Sun, 21 Jul 2024 10:58:21 -0700 Message-ID: Subject: Re: [RFC v11 02/14] mm: move the page fragment allocator from page_alloc into its own file To: Yunsheng Lin Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, David Howells , Andrew Morton , linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 14B6EC0007 X-Stat-Signature: 6n5zyunghccybymrc6ubh677fjos5jdz X-Rspam-User: X-HE-Tag: 1721584738-553950 X-HE-Meta: U2FsdGVkX18e86FgrcHoQuqrJsbanrbd2AXD38hq5Cu0Qkron2knYZoOk182NqXuChG8CIk6Ltwbhv6TeTBHYhmjBmGaZfwO+fWH06QHS4bZi9wViDFmPspeNodS68OIxx6+pHceSN7U3fthRuTmDf5apSWq6WT5l1LoIwLZroCPN5lFrVPfZm/bSz3L7WvHLWHH7ujA7UtuDRPiI+0rtcmL5l4lNWJxFp3zu0tQiOvTzIpT6doR78QuHO6/z3mLIAQgX3qyBAsKj6M0SA8dShb5riGBtf3DVit4J0BFJzHXH/7yZ4ZYTUDEERhbiDsFHPjZn3a8HIXqIsOu1pid5SVlm8FJcv5I5O2QvP7G9LJzAV7I6zvEIuLZ9RERi9iUjo2Ze+1LAFDSGWWwcbwjDwb4e9uEzHEQtWSw1g2nGGPjmCrVoc0dbGW+hxy0GHBoNIw2BVJ76iinfZVfcIu7szrEELzMZGN6ZRKjqWToHKZ968Lb1fSnIfiH9vD9x1PJFWHpiF3/hdeMLIxvgvXdsZh6AOiKsjXQ+FIreScSem6V8IdYxNHTUtUoNOSYHYKhqbeb0b8VXy8LsDTy5DrsnBdbIWkaodFlW4EKjByWOh26PsZx2jzMUJ8cxnL3hdhH2g6BF9bJdsdEGBdWMX2LFN7qv1vobhbVRN4+A7SHYfgwfE1ir4+/OdfiQX15MkPoz9qHhz3v0Y6zomt9uD4Wv2niF+v7HzsgbahP10O++r9O0RyGZZakC1XLvF6RsYRXRu3OOGMjWoZCNRmciyygv9/tG+Er2HburFh6usYJJ7fKNbsKVO6RAy2TR85AAqsXXhz78WRxsxXCVRhDwnDI8jBuhmjJpeQdQQGW1DZWeYcv3d0OcmKB+NlCBQJrHMb9Ec8YpYIBqW2kDyl9aDH6/qR+mhU/6COZ9Cxav8uArSmCGFabudNnRqA45hsZtbsxyDzxAArBJSox8qI3h0p 9TD2ZpQh JpLCyy0r5j4FALfs0JDzwYQRfUGRkWQc/7335sVSgcS6wVt5moJPak7/8gEbQ5CUJUTQQJzqgGdY18hFhzNn3Ljr7CEOCvgkXNTSNW83zQUrFQYz+d8aFh1g8iNfAR5My+9BedEOR1wLwWuF4UG0dY/m06fYdn+eQR3qcl9fZ4QZmPUys8FtCYdZjN6Sb5R2Yh5qvpQAfjHR/1IxI4v2OEjvkXqN8RNSoAbGfZj/VO1llP1VphNhyYsdLwTwdFhQgAYOZSi6HC8Ad5W8mgag8XR7L/20/ZmtEqwWlNxhWk+3RawznAIBLSSsHobxqSLFwcdpJS1qsDGZH89Z4smKHosfR/1sOZH5sDzBgIIoFN8yMgU6v/ACcPbQpPAYFtnJTB4Mgd7NPIccsPjeau15UAACggkLxOlvMAlK6b6GSUNHSiftc+AAtdMgQhub/jzU6UJPIqtnes8lJXDf3uDZCX3wONGM0S+GGw7t4yFt1A4kLgP1aTmvologERPbM81GBuN0hbAWtfQGRhtMvVA6cdXeBp3OaGdg2J5BuLcLrRR76VodrN+QHJkr3NutUTNCrn5H+rdbM101Yp48= 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: List-Subscribe: List-Unsubscribe: On Fri, Jul 19, 2024 at 2:37=E2=80=AFAM Yunsheng Lin wrote: > > Inspired by [1], move the page fragment allocator from page_alloc > into its own c file and header file, as we are about to make more > change for it to replace another page_frag implementation in > sock.c > > As this patchset is going to replace 'struct page_frag' with > 'struct page_frag_cache' in sched.h, including page_frag_cache.h > in sched.h has a compiler error caused by interdependence between > mm_types.h and mm.h for asm-offsets.c, see [2]. So avoid the compiler > error by moving 'struct page_frag_cache' to mm_types_task.h as > suggested by Alexander, see [3]. > > 1. https://lore.kernel.org/all/20230411160902.4134381-3-dhowells@redhat.c= om/ > 2. https://lore.kernel.org/all/15623dac-9358-4597-b3ee-3694a5956920@gmail= .com/ > 3. https://lore.kernel.org/all/CAKgT0UdH1yD=3DLSCXFJ=3DYM_aiA4OomD-2wXykO= 42bizaWMt_HOA@mail.gmail.com/ > CC: David Howells > CC: Alexander Duyck > Signed-off-by: Yunsheng Lin > --- > include/linux/gfp.h | 22 ----- > include/linux/mm_types.h | 18 ---- > include/linux/mm_types_task.h | 18 ++++ > include/linux/page_frag_cache.h | 32 +++++++ > include/linux/skbuff.h | 1 + > mm/Makefile | 1 + > mm/page_alloc.c | 136 ------------------------------ > mm/page_frag_cache.c | 145 ++++++++++++++++++++++++++++++++ > mm/page_frag_test.c | 2 +- > 9 files changed, 198 insertions(+), 177 deletions(-) > create mode 100644 include/linux/page_frag_cache.h > create mode 100644 mm/page_frag_cache.c > ... > diff --git a/include/linux/mm_types_task.h b/include/linux/mm_types_task.= h > index a2f6179b672b..cdc1e3696439 100644 > --- a/include/linux/mm_types_task.h > +++ b/include/linux/mm_types_task.h > @@ -8,6 +8,7 @@ > * (These are defined separately to decouple sched.h from mm_types.h as = much as possible.) > */ > > +#include > #include > > #include > @@ -46,6 +47,23 @@ struct page_frag { > #endif > }; > > +#define PAGE_FRAG_CACHE_MAX_SIZE __ALIGN_MASK(32768, ~PAGE_MASK) > +#define PAGE_FRAG_CACHE_MAX_ORDER get_order(PAGE_FRAG_CACHE_MAX_SIZ= E) > +struct page_frag_cache { > + void *va; > +#if (PAGE_SIZE < PAGE_FRAG_CACHE_MAX_SIZE) > + __u16 offset; > + __u16 size; > +#else > + __u32 offset; > +#endif > + /* we maintain a pagecount bias, so that we dont dirty cache line > + * containing page->_refcount every time we allocate a fragment. > + */ > + unsigned int pagecnt_bias; > + bool pfmemalloc; > +}; > + > /* Track pages that require TLB flushes */ > struct tlbflush_unmap_batch { > #ifdef CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH > diff --git a/include/linux/page_frag_cache.h b/include/linux/page_frag_ca= che.h > new file mode 100644 > index 000000000000..43afb1bbcac9 > --- /dev/null > +++ b/include/linux/page_frag_cache.h > @@ -0,0 +1,32 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > + > +#ifndef _LINUX_PAGE_FRAG_CACHE_H > +#define _LINUX_PAGE_FRAG_CACHE_H > + > +#include > +#include > +#include You don't need to include mm_types_task.h here. You can just use declare "struct page_frag_cache;" as we did before in gfp.h. Technically this should be included in mm_types.h so any callers making use of these functions would need to make sure to include that like we did for gfp.h before anyway. > +#include > + Not sure why this is included here either. From what I can tell there isn't anything here using the contents of page.h. I suspect you should only need it for the get_order call which would be used in other files. > +void page_frag_cache_drain(struct page_frag_cache *nc); > +void __page_frag_cache_drain(struct page *page, unsigned int count); > +void *__page_frag_alloc_align(struct page_frag_cache *nc, unsigned int f= ragsz, > + gfp_t gfp_mask, unsigned int align_mask); > + > +static inline void *page_frag_alloc_align(struct page_frag_cache *nc, > + unsigned int fragsz, gfp_t gfp_= mask, > + unsigned int align) > +{ > + WARN_ON_ONCE(!is_power_of_2(align)); > + return __page_frag_alloc_align(nc, fragsz, gfp_mask, -align); > +} > + > +static inline void *page_frag_alloc(struct page_frag_cache *nc, > + unsigned int fragsz, gfp_t gfp_mask) > +{ > + return __page_frag_alloc_align(nc, fragsz, gfp_mask, ~0u); > +} > + > +void page_frag_free(void *addr); > + > +#endif ... > diff --git a/mm/page_frag_test.c b/mm/page_frag_test.c > index cf2691f60b67..b7a5affb92f2 100644 > --- a/mm/page_frag_test.c > +++ b/mm/page_frag_test.c > @@ -6,7 +6,6 @@ > * Copyright: linyunsheng@huawei.com > */ > > -#include > #include > #include > #include > @@ -16,6 +15,7 @@ > #include > #include > #include > +#include > > #define OBJPOOL_NR_OBJECT_MAX BIT(24) Rather than making users have to include page_frag_cache.h I think it would be better for us to just maintain the code as being accessible from mm.h. So it might be better to just add page_frag_cache.h to the includes there.