Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4316657pxj; Wed, 12 May 2021 02:57:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwc+Q9rIaKYskjkqxN/oQ9+bfObo1z6KLtpO2JENRD2mAs/4MZX7yltvWZp1dOVc36MYMMn X-Received: by 2002:a05:6638:101a:: with SMTP id r26mr31480639jab.15.1620813470257; Wed, 12 May 2021 02:57:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620813470; cv=none; d=google.com; s=arc-20160816; b=xbwqUPCT+JPMpRJORW++Q5857KuhG/4fRUxrxZ02w+cEVPXEjNvxLIG4cuiX8+xdtI B+N49FDWVTZ06/nwMJB+mJAdmnOMBYP3rU7KCQstKe630un0fegwPVN0oPcyu8VbzmWp aycUPdyK/DcT6B6sg01+pZeMAfY5qlLsBrsRZa2tlG4D66xxFGlHaMaihYVzA2TPeXEZ UqOgJWmKVonaj1ewXWP1wuaY+dfBPnyKaIw8/ADD3cozqvmcD8BX4vpGX8PTub7vAvX+ mBofpYC3nPW50+ucd961gOwx2L6nQCK0B9COcXeeMbzitPuPXThj3pxPxGyAOgDx61Ia TMqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=/D881QeA89HN91EmoAyWabN225+C+qI3ZFNPGAFk7d4=; b=Gg2PCbkdBYxAVxH5S1ZEd922NgPVxgsYnsrXW04aQxLecVD1DfHrcqEZ33Qu8gqyDx BVoUmmYGsPLH0n84/iExYLTzYt+1xaer5eW/50pyCslU0Taafm8vScUW2qBHT63iwggE eLCOegxojnqxKn6phGqmb1PbTQl/r1K2pBGDa+dQ5rAlMFojIiKw7IojMqf/2QjLM+od Z3pOfYAtIbivRd/jLMpOA5++96wUCPjsLNxpbrkTV4ZjdEEDhw8uzkbYPXNyFDL/f2bO doixJvtH8tm0s9monj5jc6B4VI9yHfEL8D995yo6cjGTRbv5tRVJnztpq5o6W3vyW2g/ Pyig== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q26si22436802iog.20.2021.05.12.02.57.37; Wed, 12 May 2021 02:57:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230403AbhELJ5c (ORCPT + 99 others); Wed, 12 May 2021 05:57:32 -0400 Received: from outbound-smtp31.blacknight.com ([81.17.249.62]:44915 "EHLO outbound-smtp31.blacknight.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230202AbhELJ5b (ORCPT ); Wed, 12 May 2021 05:57:31 -0400 Received: from mail.blacknight.com (pemlinmail01.blacknight.ie [81.17.254.10]) by outbound-smtp31.blacknight.com (Postfix) with ESMTPS id D81FBC0B50 for ; Wed, 12 May 2021 10:56:21 +0100 (IST) Received: (qmail 30019 invoked from network); 12 May 2021 09:56:21 -0000 Received: from unknown (HELO stampy.112glenside.lan) (mgorman@techsingularity.net@[84.203.23.168]) by 81.17.254.9 with ESMTPA; 12 May 2021 09:56:21 -0000 From: Mel Gorman To: Andrew Morton Cc: Chuck Lever , Jesper Dangaard Brouer , Thomas Gleixner , Sebastian Andrzej Siewior , Peter Zijlstra , Ingo Molnar , Michal Hocko , Vlastimil Babka , Linux-MM , Linux-RT-Users , LKML , Mel Gorman Subject: [PATCH 7/9] mm/page_alloc: Explicitly acquire the zone lock in __free_pages_ok Date: Wed, 12 May 2021 10:54:56 +0100 Message-Id: <20210512095458.30632-8-mgorman@techsingularity.net> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210512095458.30632-1-mgorman@techsingularity.net> References: <20210512095458.30632-1-mgorman@techsingularity.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org __free_pages_ok() disables IRQs before calling a common helper free_one_page() that acquires the zone lock. This is not safe according to Documentation/locking/locktypes.rst and in this context, IRQ disabling is not protecting a per_cpu_pages structure either or a local_lock would be used. This patch explicitly acquires the lock with spin_lock_irqsave instead of relying on a helper. This removes the last instance of local_irq_save() in page_alloc.c. Signed-off-by: Mel Gorman Acked-by: Vlastimil Babka --- mm/page_alloc.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 5879b595b74b..7da70b404f4e 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1579,21 +1579,21 @@ static void __free_pages_ok(struct page *page, unsigned int order, unsigned long flags; int migratetype; unsigned long pfn = page_to_pfn(page); + struct zone *zone = page_zone(page); if (!free_pages_prepare(page, order, true, fpi_flags)) return; migratetype = get_pfnblock_migratetype(page, pfn); - /* - * TODO FIX: Disable IRQs before acquiring IRQ-safe zone->lock - * and protect vmstat updates. - */ - local_irq_save(flags); + spin_lock_irqsave(&zone->lock, flags); __count_vm_events(PGFREE, 1 << order); - free_one_page(page_zone(page), page, pfn, order, migratetype, - fpi_flags); - local_irq_restore(flags); + if (unlikely(has_isolate_pageblock(zone) || + is_migrate_isolate(migratetype))) { + migratetype = get_pfnblock_migratetype(page, pfn); + } + __free_one_page(page, pfn, zone, order, migratetype, fpi_flags); + spin_unlock_irqrestore(&zone->lock, flags); } void __free_pages_core(struct page *page, unsigned int order) -- 2.26.2