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 3C974E69E81 for ; Mon, 2 Dec 2024 19:26:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AA62D6B007B; Mon, 2 Dec 2024 14:26:12 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A56596B0083; Mon, 2 Dec 2024 14:26:12 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 91D946B0085; Mon, 2 Dec 2024 14:26:12 -0500 (EST) 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 717D66B007B for ; Mon, 2 Dec 2024 14:26:12 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 20C78ACC8D for ; Mon, 2 Dec 2024 19:26:12 +0000 (UTC) X-FDA: 82850999196.19.92244D6 Received: from mail-qv1-f53.google.com (mail-qv1-f53.google.com [209.85.219.53]) by imf06.hostedemail.com (Postfix) with ESMTP id B2A1D18000A for ; Mon, 2 Dec 2024 19:26:01 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Zrqt0STh; spf=pass (imf06.hostedemail.com: domain of yosryahmed@google.com designates 209.85.219.53 as permitted sender) smtp.mailfrom=yosryahmed@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1733167564; 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=9kWp+b2vAKxwZc2Adf1FEMAvh7npem3wGK6470DLZVY=; b=Rm751lthzGR/JJOvaX4DsAgksg+8XYFRThrP94Q48gGkLP1RK6rwsa5ZewlxpOSRzLCRBp h+JrJ8CfZIB8pc9D2dqry1tYf/CnORb1ldgcmBm88NZ5JHSAV+UAXWMVOXGrtuKTMcs5Cd qyuXxdVuh/MsnUUYIrA2UYm6ERKoR2s= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Zrqt0STh; spf=pass (imf06.hostedemail.com: domain of yosryahmed@google.com designates 209.85.219.53 as permitted sender) smtp.mailfrom=yosryahmed@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1733167564; a=rsa-sha256; cv=none; b=vJRJnXVcD9cLt0s3tTaCLhLAuk7wLX5TdL7ySoVImxXlvt/r05c1OCBRNnn+Tbwk5xQwAa piQpDTdAMFTNWhFzFwhGwpIuu3hgdueKkKWYNbXTLZsiSZ50yB6E3vqCXxzB23t/8oSBbT idAXKw6TzYPKGnQ0rqqVFrVFrHJtOnM= Received: by mail-qv1-f53.google.com with SMTP id 6a1803df08f44-6d87f7f2f5bso31036646d6.1 for ; Mon, 02 Dec 2024 11:26:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1733167569; x=1733772369; 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=9kWp+b2vAKxwZc2Adf1FEMAvh7npem3wGK6470DLZVY=; b=Zrqt0SThT1kyCSUBymUn5srNZwwng49Xdmib4osJhw2k6qtPMmjnF5b4f9wUEsNpnk Sm2v03gfHNhS4+wl4bIMaBipxK+a1UgM5F37km3hFC7cWKAP3ckJRFI7fwILMuOh5x4C JERqR2UzDO78zgRbQR6bGfweTHS8pUx56Wh4t5VMsBvpBxP3p7R2ctCoA5ADLxS/cArJ Km2lnFyQUibRq9wW+Zar0ZjvOkzk8rDiNmI3/8pyrN+BVku/QtL4d3gPce2p3T5NoRxa Iq1ZVDPZa8gtlharjizXCRnnDmDI2YgWnJWt1wbeOGoUQVDJk3Cmv4c/QPD02V3ckkZO 3KtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733167569; x=1733772369; 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=9kWp+b2vAKxwZc2Adf1FEMAvh7npem3wGK6470DLZVY=; b=pkgqHGw6R+fyiWdScgw2WCN0Lu5QcOFdrGBMHLpPXGGswKp57xYZ0yVqBY8D6UIluF t7aTwBV2NXlMFs0ypNwXYws6QE1ComXTcCBPalSRvTmwX1sH4UV87ARR4BCZmCsZ5TBw RpC24TSct+++Om+tu88YzK1MURmpq+UEE1JuCdY+nD16fLVIjenqbo+wyZtMiyMbCP99 QEs51dsBG4NQQcJQcGO3PREmTfl4y+sRIVicomOZCCmmzyFeluVhfLczaa42V6TwBS+S Y9fWW7k40/+1jg7tVckEpiRKBNDqwRJQNIl8GaV+glMCeOLBZqCyUNyKBzPdNH9KTBbT Mybw== X-Gm-Message-State: AOJu0YxdskDBUa4dEZgkoNs02cAi8iIlorP76GfZCoR17k1EgPHm/dwd XCdHU1RtAIyJk/orq3ToRu7wHcD0Fo8KcWJozN3hmcECqF49lkiKb65xZoEHc8FlANZgA8P+DAx DlS9DEj6C5lYb9XC2dwuf4vWsJihtLjgAk1tu X-Gm-Gg: ASbGncv/lUHUuzieWkSrrZz7muUT4osSPj9Cyp+f+8jJOFPYCpbwKE8NTKbCSJ3ISiS hgMx787zhiwWigdydhi5b74jc06Ws X-Google-Smtp-Source: AGHT+IH63gD0V9cyca6pGe0rkEWNUsWMypkh7ldUNn7dEp9D+W12/cWnl/an8g4+ohud5nI3LvTbL6azXYZGZT9KKjY= X-Received: by 2002:a05:6214:482:b0:6d4:1f86:b1e6 with SMTP id 6a1803df08f44-6d864d44715mr350526716d6.22.1733167569122; Mon, 02 Dec 2024 11:26:09 -0800 (PST) MIME-Version: 1.0 References: <20241202184154.19321-1-ryncsn@gmail.com> <20241202184154.19321-4-ryncsn@gmail.com> In-Reply-To: <20241202184154.19321-4-ryncsn@gmail.com> From: Yosry Ahmed Date: Mon, 2 Dec 2024 11:25:32 -0800 Message-ID: Subject: Re: [PATCH 3/4] mm/swap_cgroup: simplify swap cgroup definitions To: Kairui Song Cc: linux-mm@kvack.org, Andrew Morton , Chris Li , Hugh Dickins , "Huang, Ying" , Roman Gushchin , Shakeel Butt , Johannes Weiner , Barry Song , Michal Hocko , linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: B2A1D18000A X-Stat-Signature: nshq8efh3jdqefmqdyz9rnkmic379xiy X-Rspam-User: X-Rspamd-Server: rspam11 X-HE-Tag: 1733167561-137793 X-HE-Meta: U2FsdGVkX1/w4kdd9uxVmQz8s0mJYEAnVOOPWjxpbDInDOOvqca/KSRqDCzgbWrQCauOt3P7CnIqV6MGih0qOnMDPL7h8P/E/tq9V//H8t6BBIUrKFDIYz1MpkZtB+fLtJ+AWaDB96TDkHNuaQrqbbllp7HcJO453GfZLhwFacv3HwoPu7rFTbUx3eJeHLpGXfbrp3tLW/SA6SO7NOW48u2xJYS+FHqc/Si2FfOswrIlkX2NP8HTZtExqAw3Z+HdBURyU/SJFmc6DFIZ6V/fc6IED6mDf/RVlNOHtsTfy6wvThJ/1va79VYDx5ATtMsknGix7zp3nxJDE9RECCJmFCWu8gbosn7LX2NQ0uDcul9P0m7tXlbM0sVInQ60M2LpCTS0nTFR3LnbDld6vxN5GLh4ZwjqeyJRbtrBSwbCrxXqBnFZoY889FqVq/wGQzqEsWmTiWbf2zc4PTwo5uSBPr7+m3LNhPsDf9BkQSwm/kYL+wvEXegZy/c1eMHXHHhxtmaKarIacM9R+newGN+cTiBke1cfkcBFWPV95hpi7usNywyr+qQiuYWTGfd03MFbsihCSgY4xz8vXYQ1WntXrG6r838UJ6ryDR8s3ksuiNn+kccgCwsqRfYJd7jmJdIQa9CWHDvJCK81uzw/S1nDWyaJwsfuslvb+3pTFpsmCSb6WdnVk6/gS65ZKzlsNtLigyQerka/lH/diWDUsMZaVZpPur7tgbfXqdSpwou98vJH6WoXEUuqAGhvRPqFAbcb4bBm97QNWsfHiAkTaa5n5srY5Y+ud5AvzWmRGHGllE9gC3lc7oEt837HqjQYzwZ/ERMKlCA6pTZfq8yWCXoXaz/DsnIFjaSjvYNc35vPl07J+nKqUjQNLdr6fBWGsCCerhGHwNVzy3S2Mi7VkXExU0A3CJWGAzDDinkO9aW5dcPQqMihS8WhP6Dpec+ftpUqfWH0+eWaGYNpfmtPzlN 07tQfi32 lK/SboD9aiIeNGXAY2w/tNqrRYK9Sj/BP2RXNLSwlIh+eeNwSbAks0VS6ylSRi3N6+OqKSGKXM2TjyKpYATbJkSLuyIe2nvuE56KGBjUVS/ROPjjQX59bxtV/caD7XgsgXeLswSO6YUCBorbyFCacUE1keeVhrk65j5DlbfSHnQi7uXlxLCCz85J3XtaEIA77sfRRyzpYXr/97O5q0cLt88+yrcUKhz5xBRkzikXRfKbyi/dg7aLGqacKnO/WojnLHrhcnNYSyatsk6QXJa/6u6wA9/pM3jAq8K53 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 Mon, Dec 2, 2024 at 10:42=E2=80=AFAM Kairui Song wrot= e: > > From: Kairui Song > > Remove the intermediate struct swap_cgroup, it just a unsigned short > wrapper, simplify the code. Did you actually remove the struct? It doesn't seem like it. > > Also zero the map on initialization to prevent unexpected behaviour as > swap cgroup helpers are suppose to return 0 on error. All the callers lookup the id of an already swapped out page, so it should never be uninitialized. Maybe we should WARN if the result of the lookup is 0 in this case? > > Signed-off-by: Kairui Song > --- > mm/swap_cgroup.c | 45 +++++++++++++++++++-------------------------- > 1 file changed, 19 insertions(+), 26 deletions(-) > > diff --git a/mm/swap_cgroup.c b/mm/swap_cgroup.c > index 1770b076f6b7..a76afdc3666a 100644 > --- a/mm/swap_cgroup.c > +++ b/mm/swap_cgroup.c > @@ -12,14 +12,12 @@ struct swap_cgroup { > }; > > struct swap_cgroup_ctrl { > - struct swap_cgroup *map; > + unsigned short *map; > spinlock_t lock; > }; > > static struct swap_cgroup_ctrl swap_cgroup_ctrl[MAX_SWAPFILES]; > > -#define SC_PER_PAGE (PAGE_SIZE/sizeof(struct swap_cgroup)) > - > /* > * SwapCgroup implements "lookup" and "exchange" operations. > * In typical usage, this swap_cgroup is accessed via memcg's charge/unc= harge > @@ -33,18 +31,6 @@ static struct swap_cgroup_ctrl swap_cgroup_ctrl[MAX_SW= APFILES]; > * > * TODO: we can push these buffers out to HIGHMEM. > */ > -static struct swap_cgroup *lookup_swap_cgroup(swp_entry_t ent, > - struct swap_cgroup_ctrl **ctrlp) > -{ > - pgoff_t offset =3D swp_offset(ent); > - struct swap_cgroup_ctrl *ctrl; > - > - ctrl =3D &swap_cgroup_ctrl[swp_type(ent)]; > - if (ctrlp) > - *ctrlp =3D ctrl; > - return &ctrl->map[offset]; > -} > - > /** > * swap_cgroup_record - record mem_cgroup for a set of swap entries > * @ent: the first swap entry to be recorded into > @@ -58,20 +44,21 @@ unsigned short swap_cgroup_record(swp_entry_t ent, un= signed short id, > unsigned int nr_ents) > { > struct swap_cgroup_ctrl *ctrl; > - struct swap_cgroup *sc; > + unsigned short *map; > unsigned short old; > unsigned long flags; > pgoff_t offset =3D swp_offset(ent); > pgoff_t end =3D offset + nr_ents; > > - sc =3D lookup_swap_cgroup(ent, &ctrl); > + ctrl =3D &swap_cgroup_ctrl[swp_type(ent)]; > + map =3D ctrl->map; > > spin_lock_irqsave(&ctrl->lock, flags); > - old =3D sc->id; > - for (; offset < end; offset++, sc++) { > - VM_BUG_ON(sc->id !=3D old); > - sc->id =3D id; > - } > + old =3D map[offset]; > + do { > + VM_BUG_ON(map[offset] !=3D old); > + map[offset] =3D id; > + } while (++offset !=3D end); Why did you change the for loop here? > spin_unlock_irqrestore(&ctrl->lock, flags); > > return old; > @@ -85,20 +72,26 @@ unsigned short swap_cgroup_record(swp_entry_t ent, un= signed short id, > */ > unsigned short lookup_swap_cgroup_id(swp_entry_t ent) > { > + struct swap_cgroup_ctrl *ctrl; > + > if (mem_cgroup_disabled()) > return 0; > - return lookup_swap_cgroup(ent, NULL)->id; > + > + ctrl =3D &swap_cgroup_ctrl[swp_type(ent)]; > + pgoff_t offset =3D swp_offset(ent); > + > + return READ_ONCE(ctrl->map[offset]); The READ_ONCE() does not exist today in lookup_swap_cgroup(). Why is it nee= ded? > } > > int swap_cgroup_swapon(int type, unsigned long max_pages) > { > - struct swap_cgroup *map; > + void *map; > struct swap_cgroup_ctrl *ctrl; > > if (mem_cgroup_disabled()) > return 0; > > - map =3D vcalloc(max_pages, sizeof(struct swap_cgroup)); > + map =3D vzalloc(max_pages * sizeof(unsigned short)); > if (!map) > goto nomem; > > @@ -117,7 +110,7 @@ int swap_cgroup_swapon(int type, unsigned long max_pa= ges) > > void swap_cgroup_swapoff(int type) > { > - struct swap_cgroup *map; > + void *map; Why void? > struct swap_cgroup_ctrl *ctrl; > > if (mem_cgroup_disabled()) > -- > 2.47.0 >