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 CD0F9C02183 for ; Thu, 16 Jan 2025 20:07:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2DBAB6B0082; Thu, 16 Jan 2025 15:07:43 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 28BBA6B0083; Thu, 16 Jan 2025 15:07:43 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 12C936B0085; Thu, 16 Jan 2025 15:07:43 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id E8F216B0082 for ; Thu, 16 Jan 2025 15:07:42 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 605311611F4 for ; Thu, 16 Jan 2025 20:07:42 +0000 (UTC) X-FDA: 83014400364.18.011DE01 Received: from mail-yb1-f179.google.com (mail-yb1-f179.google.com [209.85.219.179]) by imf10.hostedemail.com (Postfix) with ESMTP id 66F30C0018 for ; Thu, 16 Jan 2025 20:07:40 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=WNQQeDBO; spf=pass (imf10.hostedemail.com: domain of joshua.hahnjy@gmail.com designates 209.85.219.179 as permitted sender) smtp.mailfrom=joshua.hahnjy@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=1737058060; 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=MMzocZGufmY08ORRryuT3l3f/0QKdj5Gq8ab9u9GUIU=; b=Qsyr752eQFKk76NlQQRu2UHXh5b2V4MnWzEGp/TwPaExEGeUuqi1bHv9CSC2eWtzKW6bKU RXK7f4/LQSyL2QuN/xNkJFjw7kaWphpbXxJkLK8BGyrxhPvwiivjjEisAAe/iPqPpyAvmI oLYRAc79hQbimY+vYzgZK5NqxtLmaew= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1737058060; a=rsa-sha256; cv=none; b=vVszxFGXrNXbXQgRgQT+YpI8ozqnwj3hnAWfOYdQRaGMnl4xim/hKyvLbD7c05Y4VXw6Xn iYij836JzyzDhrAJa3AhrVF5xtT91KoPhzd/ZEhy4j4PPuBlipBLp8Mv0iohw471dQcMYT vNhEMDqDhYyJd22+aE8aB/WXI3gyWCE= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=WNQQeDBO; spf=pass (imf10.hostedemail.com: domain of joshua.hahnjy@gmail.com designates 209.85.219.179 as permitted sender) smtp.mailfrom=joshua.hahnjy@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-yb1-f179.google.com with SMTP id 3f1490d57ef6-e46ebe19368so2195363276.0 for ; Thu, 16 Jan 2025 12:07:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1737058059; x=1737662859; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MMzocZGufmY08ORRryuT3l3f/0QKdj5Gq8ab9u9GUIU=; b=WNQQeDBOjpCywZRnDmJRuLLypcjgwTjZbcYy1EKN6GSABhlMJ+pFS7nhuVTmNbJNVx kQRsH/GL8NczdMBK0P2G699nYvfQTNMfeFHWogrw2+Thaa0ZBOICGg3D+O2xSpvU5uCW oWbTbL+vLTthGqNmGxiaFM3z15kQOIP1JVk6bkMHnpdE7iVndX8mWscLtTVQXchuj64/ ER2+1Nh2ufAZUk1WFteSjlxVZZENus8dLHKEZkjFcLrtmJxkveRa+ax91RdCivfNLPV/ Zf8UaCcvJgL4OBqL3nGgH1nGIZms/mijkVZJkZe0Yk8pW1xrIrHvuZgrBo55leSEiIpl FHPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737058059; x=1737662859; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MMzocZGufmY08ORRryuT3l3f/0QKdj5Gq8ab9u9GUIU=; b=CAYcHN7AZHOeZKMLhXwNnD+fx+iiP26OOddmGTOFYyUT47DjbWAjEwx9WIxyVGJUPb xOVIwtSEyBq1PU5Kex4g8SwjGS9Bm/RCec/GVF/mM12Ii55FcGJG++MOgzWMKEukgyg9 hK5ClWiGQoqy8+xtxwDANqO6ar2uWKICq7TMCMhQ5aINmPQvDXifLEMVWcCULc32WqQp nAYCFoG6xVSuMEK1d/yJ7BMe+AexvWQmBabPiyJXe/i57FcfZqdyHGxeLrZ9+A4oLMpq vGrpDiHgRbo/RCCn24RFbx4T8jpYDAoueX7CFhtxfrZny3ApV1C/GMzpUOw7k1N2Yuu0 lx4A== X-Forwarded-Encrypted: i=1; AJvYcCUxVjR9jlvsHhAMO8RtWQoSpj8QOLsZKCBU3IAY0FFRX6aEgIJcTWuDI6kYugk0n+j+hmiZQxtbUQ==@kvack.org X-Gm-Message-State: AOJu0YzgunPekmaq2rBuhOAFkQK+p2Eo8ikgpVrsPCGeMHlWd2T4iohW i00U7pNmxsdvMIyi57DLyS2w/K87hiap3+PEWSauMqZ3KYxxee3S X-Gm-Gg: ASbGncs2Pb28FlibyJ+sTYg4o8VbU8NjpUJrLTg6WkmDYurgyVoMYFLBR5wH+PTuZGl iYFRSgG1dSmJ8x6uO37VhVEXsFrWuz0/2sBBRIteMXEnq/kX6xIlO2sj65NWnlvOf8Qdc94NzQX yuojKXdADHcawF751vjTH6AO0FGtrkSxT7ffCGz4rfCBM7JShpoPLEa5TxQcGi4eI9MPyfu5goV j93rQ9O678L6ziPHj9/Hh/4n2Iv2k0WC2wKZIpLI/9Gz0fzv9OYwws= X-Google-Smtp-Source: AGHT+IElAOjOznvnPvhDbeipx3/9fXEkL2L8b0Or+haAxTNXi+6R4va6QdSxmB3SVSM9UpUWzjq9nA== X-Received: by 2002:a05:690c:f0c:b0:6ec:b74d:a013 with SMTP id 00721157ae682-6f531245e89mr305922467b3.19.1737058059236; Thu, 16 Jan 2025 12:07:39 -0800 (PST) Received: from localhost ([2a03:2880:25ff:b::]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f6e63fd397sm1761737b3.36.2025.01.16.12.07.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jan 2025 12:07:38 -0800 (PST) From: Joshua Hahn To: Alexei Starovoitov Cc: Shakeel Butt , joshua.hahnjy@gmail.com, Muchun Song , Andrew Morton , SeongJae Park , "open list:CONTROL GROUP (CGROUP)" , linux-mm , bpf , Andrii Nakryiko , Kumar Kartikeya Dwivedi , Peter Zijlstra , Vlastimil Babka , Sebastian Sewior , Steven Rostedt , Hou Tao , Johannes Weiner , Michal Hocko , Matthew Wilcox , Thomas Gleixner , Jann Horn , Tejun Heo , Kernel Team Subject: Re: [PATCH bpf-next v5 4/7] memcg: Use trylock to access memcg stock_lock. Date: Thu, 16 Jan 2025 12:07:28 -0800 Message-ID: <20250116200736.1258733-1-joshua.hahnjy@gmail.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 66F30C0018 X-Stat-Signature: m5x4kbp1wkqqk57mdmhtarako9fmy9b1 X-Rspam-User: X-Rspamd-Server: rspam12 X-HE-Tag: 1737058060-808767 X-HE-Meta: U2FsdGVkX1/qNQTXbZuC/ICWAZY9S1wpCm4g+Krd/rnSV5FA7QV1jdgqi0O5UfnTGzj2DNTcZtcWWsEEWbGfa2ptBXSA5vHWHPcaDddIOa4komaVoVQf1MJRRGgXoZ2xurfYmXoaAy/xkx3LQtULr15bMsTWWANf1TX18hQSn4U3sLVtADbUf3xtu1FlaOxFtjHHnCPch4QWHv3/jSrj8a3Y4NCeodEEoBu7R7ANuhhwAPq0oj4DRYcw3xMVJ9RK6excXg+E/LkDDyD58usbyI4uYJBJmBFlFrVCkMkY4MSuHjlB7CGImWNYIh152i85Pm7D8L+GLOxMOjkV+WH9VrfPpqVasHTFkJJWm5sv7JDYL++f+O+Pf7S505Hp7cBw9VKur5fYdgncTrO2AC97pSWeiTw98p7/+8n94KfvtNr7JVwa3d19Bhuix4f+v7hZ0dsTylIRx4hLv+q92EG/gpIYDLjVA/kyglo/OPhyD6ogJS+EiDB0MHg2Eor5l/jPNH81t/8PFLKd/L+qnFSKKiZXVnbc3LKF9K5iTtiEumCbu2sk7iIEgNaoolkLRTFzOyFQNlgBwN/wZy083bLHtB+YyecD6Ll5wyZoxTeKk5OzpJWmG9KsQJ9T1atdueQwrjGjgVXgZPFlkUXGEchT+tivsLun9Y5VyYrYVcDq/EwQdVtAAMvZijDp6jOBnRpewofufav8tER3o6uJKavitIjSKDl9YVhrVMzXmmDwmg0yD2x/2IFsE58YM6qW9gDnqLcmPzeuX0GXiJogvGCjy8KPntxAW3VlvKmIMGYavX11qM9L1l0ZekUREDxOanGG1otcwmIp/HrY5/TGNEpBXsHk6mTEy0bu/LXFQlHxTXHiwtNi/UI3stLjlzbFg98VS4TN6kpzkGOs8Qz1b4afmJXv6sLD70QTu7PBBIcgcayUfBcompPzA07XDrK9IAhBvP/78waHSOo7co3sX0C Qt+VlDKP vMCdDNKiv7iX301thO1ED/LNwcwTIKtd6PNQ4gI5lI18MSgOi24FZhlR29a/utPrj9faUmCER6JrbkCLdPT6euCGq03Nnvj6XEsVzv3xpdZGnIRfGkcIYCb5XIlaIyXr710MtPDmMSu9NnTCk9VwOwsVJCwx+tJLQcRYanAm+gKO66kV54N/Yw+CnE8tfSTq5Uqn805n6UK1dtMvnGHaLQk+n60VZKdvDqXTsyk42fwW8SyjTQ4T/Kyuqueh/BLMK6U4SJnukCyRIdPErsFI0oObkVeqAwjGTmGq8UdnPAaGFksKokTq2vm9VS7Z8Wsy7G4p95RtQeUZu+4207UxWaxvVen6y7i+ZoDu5owzWmDNz1q30CW42LZflDlHqSVfcAzBHTJTetyPsHlWuyD+rs0wm8DOAuCymPdwSMyLJIVi/EkBW7tUGim0klaIs25tP1cdh7XR1kTwYLte4x9ebk5au8+D/ol2mEtEpuscUcZmFUq/Y3jaE8CZic1/roJZYVVabajDDgNQcbbR1emKwl2AD8lhOYRx9n05Jj7rwvYFSRSbMn0/mpjmbEeJKtWLT/apYW2xB68QeE9jOqH6jgqvC9lJexWfaa2WLH7d0d7tLg9Yn6lyAP56Zn82ozJ8ijhQpd4/piJnAerzNEp8rHOOurciC+5ofirkp+ZpG9mLoF/mdZQMl7HuFRmSVqX7jbqEiGWGS+8LL4H5Jvxddl7EvkgJqoh42/+8X4tM214c3nu8= 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 Wed, 15 Jan 2025 18:22:28 -0800 Alexei Starovoitov wrote: > On Wed, Jan 15, 2025 at 4:12 PM Shakeel Butt wrote: > > > > On Tue, Jan 14, 2025 at 06:17:43PM -0800, Alexei Starovoitov wrote: > > > From: Alexei Starovoitov > > > > > > Teach memcg to operate under trylock conditions when spinning locks > > > cannot be used. > > > > > > local_trylock might fail and this would lead to charge cache bypass if > > > the calling context doesn't allow spinning (gfpflags_allow_spinning). > > > In those cases charge the memcg counter directly and fail early if > > > that is not possible. This might cause a pre-mature charge failing > > > but it will allow an opportunistic charging that is safe from > > > try_alloc_pages path. > > > > > > Acked-by: Michal Hocko > > > Signed-off-by: Alexei Starovoitov > > > > Acked-by: Shakeel Butt > > > > > @@ -1851,7 +1856,14 @@ static void refill_stock(struct mem_cgroup *memcg, unsigned int nr_pages) > > > { > > > unsigned long flags; > > > > > > - local_lock_irqsave(&memcg_stock.stock_lock, flags); > > > + if (!local_trylock_irqsave(&memcg_stock.stock_lock, flags)) { > > > + /* > > > + * In case of unlikely failure to lock percpu stock_lock > > > + * uncharge memcg directly. > > > + */ > > > + mem_cgroup_cancel_charge(memcg, nr_pages); > > > > mem_cgroup_cancel_charge() has been removed by a patch in mm-tree. Maybe > > we can either revive mem_cgroup_cancel_charge() or simply inline it > > here. > > Ouch. > > this one? > https://lore.kernel.org/all/20241211203951.764733-4-joshua.hahnjy@gmail.com/ > > Joshua, > > could you hold on to that clean up? > Or leave mem_cgroup_cancel_charge() in place ? Hi Alexei, Yes, that makes sense to me. The goal of the patch was to remove the last users and remove it, but if there are users of the function, I don't think the patch makes any sense : -) Have a great day! Joshua Hi Andrew, I think that the patch was moved into mm-stable earlier this week. I was wondering if it would be possible to revert the patch and replace it with this one below. The only difference is that I leave mem_cgroup_cancel_charge untouched in this version. I'm also not sure if this is the best way to send the revised patch. Please let me know if there is another way I should do this to make it easiest for you! Thank you for your time! Joshua diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index d1ee98dc3a38..c8d0554e5490 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -620,8 +620,6 @@ static inline bool mem_cgroup_below_min(struct mem_cgroup *target, page_counter_read(&memcg->memory); } -void mem_cgroup_commit_charge(struct folio *folio, struct mem_cgroup *memcg); - int __mem_cgroup_charge(struct folio *folio, struct mm_struct *mm, gfp_t gfp); /** @@ -646,9 +644,6 @@ static inline int mem_cgroup_charge(struct folio *folio, struct mm_struct *mm, return __mem_cgroup_charge(folio, mm, gfp); } -int mem_cgroup_hugetlb_try_charge(struct mem_cgroup *memcg, gfp_t gfp, - long nr_pages); - int mem_cgroup_charge_hugetlb(struct folio* folio, gfp_t gfp); int mem_cgroup_swapin_charge_folio(struct folio *folio, struct mm_struct *mm, @@ -1137,23 +1132,12 @@ static inline bool mem_cgroup_below_min(struct mem_cgroup *target, return false; } -static inline void mem_cgroup_commit_charge(struct folio *folio, - struct mem_cgroup *memcg) -{ -} - static inline int mem_cgroup_charge(struct folio *folio, struct mm_struct *mm, gfp_t gfp) { return 0; } -static inline int mem_cgroup_hugetlb_try_charge(struct mem_cgroup *memcg, - gfp_t gfp, long nr_pages) -{ - return 0; -} - static inline int mem_cgroup_swapin_charge_folio(struct folio *folio, struct mm_struct *mm, gfp_t gfp, swp_entry_t entry) { diff --git a/mm/memcontrol.c b/mm/memcontrol.c index dd171bdf1bcc..aeff2af8d722 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2402,18 +2402,6 @@ static void commit_charge(struct folio *folio, struct mem_cgroup *memcg) folio->memcg_data = (unsigned long)memcg; } -/** - * mem_cgroup_commit_charge - commit a previously successful try_charge(). - * @folio: folio to commit the charge to. - * @memcg: memcg previously charged. - */ -void mem_cgroup_commit_charge(struct folio *folio, struct mem_cgroup *memcg) -{ - css_get(&memcg->css); - commit_charge(folio, memcg); - memcg1_commit_charge(folio, memcg); -} - static inline void __mod_objcg_mlstate(struct obj_cgroup *objcg, struct pglist_data *pgdat, enum node_stat_item idx, int nr) @@ -4501,7 +4489,9 @@ static int charge_memcg(struct folio *folio, struct mem_cgroup *memcg, if (ret) goto out; - mem_cgroup_commit_charge(folio, memcg); + css_get(&memcg->css); + commit_charge(folio, memcg); + memcg1_commit_charge(folio, memcg); out: return ret; } @@ -4527,40 +4517,6 @@ bool memcg_accounts_hugetlb(void) #endif } -/** - * mem_cgroup_hugetlb_try_charge - try to charge the memcg for a hugetlb folio - * @memcg: memcg to charge. - * @gfp: reclaim mode. - * @nr_pages: number of pages to charge. - * - * This function is called when allocating a huge page folio to determine if - * the memcg has the capacity for it. It does not commit the charge yet, - * as the hugetlb folio itself has not been obtained from the hugetlb pool. - * - * Once we have obtained the hugetlb folio, we can call - * mem_cgroup_commit_charge() to commit the charge. If we fail to obtain the - * folio, we should instead call mem_cgroup_cancel_charge() to undo the effect - * of try_charge(). - * - * Returns 0 on success. Otherwise, an error code is returned. - */ -int mem_cgroup_hugetlb_try_charge(struct mem_cgroup *memcg, gfp_t gfp, - long nr_pages) -{ - /* - * If hugetlb memcg charging is not enabled, do not fail hugetlb allocation, - * but do not attempt to commit charge later (or cancel on error) either. - */ - if (mem_cgroup_disabled() || !memcg || - !cgroup_subsys_on_dfl(memory_cgrp_subsys) || !memcg_accounts_hugetlb()) - return -EOPNOTSUPP; - - if (try_charge(memcg, gfp, nr_pages)) - return -ENOMEM; - - return 0; -} - int mem_cgroup_charge_hugetlb(struct folio *folio, gfp_t gfp) { struct mem_cgroup *memcg = get_mem_cgroup_from_current();