From nobody Mon Dec 15 21:47:51 2025 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 49450235349 for ; Thu, 6 Feb 2025 16:44:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738860285; cv=none; b=kkwFhIO5FA7f5dlfkns6HeYVUKh3Ystf9Q4UH4M13fCRia01jELudQMMyQZVStNWhXstCVBdr4o2qeZ0cJL5wox/nYSg1TSTdHqZKyHsUGBBKB7l5mHum/pIkW/IJLUfxtO/h7Q4/WlTJu9ZriVDuEAbThoZJfY1+Arxm9eR+vs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738860285; c=relaxed/simple; bh=Ehkkm8SvzLiNVcUEOgh02K8NEyr2KGKAhsMhKKTBK84=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UtcSbfe7FkXm5L5crqzQE5o9Ey8NbjtQrz/IONDS86j702BoNtGzYoSK2NPXkjn3V7++348JqBQk4G1FGr0dKv2ghrKbKaWAh+fGD7ZZt/raQJYRj6PrmTJ/GrDD+9GgTTtitNidqeP39XkX1UCb9yV3je1De/zd1skT1QhLufQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UI6mFRpb; arc=none smtp.client-ip=209.85.208.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UI6mFRpb" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5dcdb56c9d3so1884245a12.0 for ; Thu, 06 Feb 2025 08:44:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738860280; x=1739465080; darn=vger.kernel.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=jf/Ds4EpZUGln/+eimumnU7Eb7n31Z+gn7W8LB7GHWo=; b=UI6mFRpbUgszlsmUAcUBOEzMIST58kb2LVE35ZLeu91N/qrR1FdUgj2MozvX2sjLF3 GpRptReP01ADXKXQJUmPDCtQv1Er7Gkcfyr7f9yJGirW9dlZEAa+cF6bnzWWdxc5dWT+ 80jKhm/UHElxt68ihlYR4iVVddCQcYmDNPv9TChVM+/xcb6kd6yh95bcfFpzFQ3kZQfg ShFO19BhSYDZ8OKRmBpOlad8fkXfAjtp3B3CA8oJc5T2n2s/40alXzmeJy+SxTvAyNLv FUP33X5Zq4pt/LqC7v/oHmU95JN3Mnw0T+cVJb/9vXbuFEgC/xnZJz4V/ikYwLp0kWZd OKnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738860280; x=1739465080; 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=jf/Ds4EpZUGln/+eimumnU7Eb7n31Z+gn7W8LB7GHWo=; b=tqm5S/HB8FAf67+moEMQAPOSfTY/04sr5QPUlJFhLEeQAq9ldqmreLxMQpnKJ1qrfV c2F6ti1mHAQ5TS7/EUx70zSfob3lZau6jNgbGaoTKZAq11NMl6mD76Q1NH/QADZJAz1v dzDqgY5HFQ5lyLYcdzV7OyqMOK1Mj9L6PnqbLWxaLCuMmpshnxRHzSgapSL3seSwSjbi KdI/+WzLDduR/GDOMUV7qfvYO0AQ3/NUnIKyiI77Gz0WVq/e9jtIC70yUCntDASaYObV xqjTVAgFVTMHvRhQlMf2/LurX64lcdGM+bdc/JlXph3muE6SWG9aANPZX6kk1NMFBo0q ukEw== X-Forwarded-Encrypted: i=1; AJvYcCXQrdKVN0ehLZyTmy6vdGXRmk7zgInqYcDnrItaDjm8yb9ZO1yvI/N1rcfRUJFKw0UAU61xf+S033Oro7M=@vger.kernel.org X-Gm-Message-State: AOJu0YxXEYWUDloe1ESh6CKMGcS0gJJT/JFHg8GwMhE7spIyTTdRAv6m /rW9AjTFZd4+gJrxBDx5HcYiZ2nVu8UkGiWaV1sMSOblKsJw0e3P X-Gm-Gg: ASbGncujbPRRRCySPrN/y5Kkmg6t+0d9KWmYrdH067avMusFV1oz79zxEe5ozfUE3kM GA3tMzw/NswncjY5FRasAT092BzVp/JVQYglRyhI/oR1sSRRTr9o/zFIAfEznwSSZVuN2yk3Wfl JOxLPg4uLG7LOMCWTT26pD+0DLQVnyzvOuWO++kgzUiBG3h2fPY7UtTTrl3JUc84XvJA9CTyuup oBPAlSgPGD1ora2G4PXDpFcc9EzYZGGpv1rwcifxIxR162Q2lP5gTltAAPdGIHAY7El0/pXIF2g 2pSOSCnqSydP/oMu69BEpBjVca3RSEg= X-Google-Smtp-Source: AGHT+IGUUhXS1Xy6V74CnOay0lFyzNYrTzkXE8bZO/qHXUnqshtztRLnAUNY+RXEWfr45Z3TlVQ1qw== X-Received: by 2002:a05:6402:a00e:b0:5de:39fd:b309 with SMTP id 4fb4d7f45d1cf-5de44fe9488mr248523a12.4.1738860280257; Thu, 06 Feb 2025 08:44:40 -0800 (PST) Received: from f.. (cst-prg-95-94.cust.vodafone.cz. [46.135.95.94]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dcf9f6fa69sm1121849a12.73.2025.02.06.08.44.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 08:44:39 -0800 (PST) From: Mateusz Guzik To: ebiederm@xmission.com, oleg@redhat.com Cc: brauner@kernel.org, akpm@linux-foundation.org, Liam.Howlett@oracle.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mateusz Guzik Subject: [PATCH v6 1/5] exit: perform add_device_randomness() without tasklist_lock Date: Thu, 6 Feb 2025 17:44:10 +0100 Message-ID: <20250206164415.450051-2-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250206164415.450051-1-mjguzik@gmail.com> References: <20250206164415.450051-1-mjguzik@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Parallel calls to add_device_randomness() contend on their own. The clone side aleady runs outside of tasklist_lock, which in turn means any caller on the exit side extends the tasklist_lock hold time while contending on the random-private lock. Reviewed-by: Oleg Nesterov Signed-off-by: Mateusz Guzik Acked-by: Liam R. Howlett --- kernel/exit.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/kernel/exit.c b/kernel/exit.c index 3485e5fc499e..9d7acd7b0040 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -174,9 +174,6 @@ static void __exit_signal(struct task_struct *tsk) sig->curr_target =3D next_thread(tsk); } =20 - add_device_randomness((const void*) &tsk->se.sum_exec_runtime, - sizeof(unsigned long long)); - /* * Accumulate here the counters for all threads as they die. We could * skip the group leader because it is the last user of signal_struct, @@ -278,6 +275,8 @@ void release_task(struct task_struct *p) write_unlock_irq(&tasklist_lock); proc_flush_pid(thread_pid); put_pid(thread_pid); + add_device_randomness(&p->se.sum_exec_runtime, + sizeof(p->se.sum_exec_runtime)); release_thread(p); put_task_struct_rcu_user(p); =20 --=20 2.43.0 From nobody Mon Dec 15 21:47:51 2025 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E88D235346 for ; Thu, 6 Feb 2025 16:44:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738860287; cv=none; b=FyUVVV6AXy4qsXEeEZLXSUmk0ZFXN+qRM9hjOkYoRzsZWed36a8YLZupBLDNx4a52DDx701o0a0UhOjNjqi0WxDuSZLDbu8acO1KSMETU06uM+j410IQ+I8Rr6jTiEDS2L3MU3CHD+qf5GSwTWdG7JmRnh18ibfFjzWGy1D8lzI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738860287; c=relaxed/simple; bh=r62co9mNJfiSNGFb+F4LeTY0HEmILYURR/osDdzL9lA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uiXHTdz7CZxPREMhprOtbMEEeUrDVy7u3XzzglmgMqPfP7FT52NWVzlnqfv4hdHQu3AevQmZRNv15XOeuhxrMZ64JOQ7YO3wB6GIABIzdY7/AaCzfnPCQf8zkhYPgGCKz4sHA54hyatGzIfv5Ndxi202Mm5ysXfVclgEOTQGTGk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UzQTIg0V; arc=none smtp.client-ip=209.85.208.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UzQTIg0V" Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-5dcedee4f7bso1799194a12.0 for ; Thu, 06 Feb 2025 08:44:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738860284; x=1739465084; darn=vger.kernel.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=1IRsUl1DoWd6JSRMlZTMDFPeNqR08JYH5OecHzvHDUA=; b=UzQTIg0VrmFxV6ef4vCcqlMhqT+o/S54AtmD7Go9Cjf1R2NEOkYYv4TuTleIE/6NwS +wMUBkHL5KbFH3P9WozAARyuFE9Nrw2Ph9HtJ34+G6ceWDMYyTmsFSmBVsCsDce6kekb dXA7Z3pzxDWxcL9HPSUhSbEPL2i3U3u1nmZyrQDKbfbRf5GynMPE0OdDAE0mt3CksQsl JIf3Xsl1EVqg1oOLXQwVxY8jMlSg3kjp2zB6ua1rIfS7i4tVGLC1qdWmGUHp2g2qXF0p AwLBSV1kGAoXI2OWQeR1e96DsCpM3YSgYsnHkDBit8lOcpz3fPi5UogvQQpMpbl5S/z9 OwLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738860284; x=1739465084; 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=1IRsUl1DoWd6JSRMlZTMDFPeNqR08JYH5OecHzvHDUA=; b=O/40t/576sV9WWwvNwgBEo+jTono1Vjne/qqgBaG3OAdRje7hahGGN4Iu20EFfepq2 IPmCaxU/+9GjVuS3jkJc9b6MH+1BQssSqxjSOB9haKHKAEbAsNzonHGSS7RB97xl03/M aZGPjM5snYsf1wloGp2T8J0Q73umh85S1Pe7nl3g5e94byTHKmeqtrPW1j52O8HOwmTG GlIetJhAbYuXW6Oksvzco7WC4oS5kEGbjrpoCTCiFSaWDST+n2w4bSBgX1EduWYimsA+ H3xu9Ezu+LXGHHn6NQrNgn7Eq39620ui7NjUckubI4ELOTBme5CIfdS9dRZMP6gTABUi TPyg== X-Forwarded-Encrypted: i=1; AJvYcCU05ShQ0IaBUcm7ZCWP5RLFM0zAM9PBVczKxSMKWQRXWbXzKK7fGbkaEQO61mlNQrVv5CRH7/thpLo+Rbg=@vger.kernel.org X-Gm-Message-State: AOJu0Yzoa/wqiqn2q1D3sfVgOUqw920RL8YHuzrTeExqGtys4lHdDrCO bEcoq4bO/+6Cd0LU/b4EKFAsof//Uz2hBdVLipJy12B0NfL3XEHN X-Gm-Gg: ASbGncsyCgMsyymJ2GLdLPx09eoxV74ZiuubD1trx9sy0M7aky+lFDCuBNmhOnMNZrk ivkz17yDinoAumGTOKYfqRZr3QlqMC2EUsjmJbJf84T0n07MyLKMzgNr2y4b6VInmGIV5m8jZ+W /69RxC8yFmMjrNO45LUHxXz/GND1OwTto+bDWyG4HXBqCnXF5+KA0USV2d0iBTDQ74o5QUuAEUA qjOi06vU9uNGIdAf6bNMWjhqQvR+C8uq7OXGeTekBZltCyKJ5jGE7NsjdSJAmN0ScCQ1ANg+MGh 3Z5NuiqPA1IKwQFfggYfEcWZ/ymt95U= X-Google-Smtp-Source: AGHT+IF/fkxqlN5OD7wxB5fphZ/GLCgzWGcUDbg3a/MqrOJlCn7w1iI57Nqc7rlNQEyIj4tGWAicDQ== X-Received: by 2002:a17:907:3d8e:b0:ab3:875f:a246 with SMTP id a640c23a62f3a-ab75e21dd12mr838335166b.7.1738860283449; Thu, 06 Feb 2025 08:44:43 -0800 (PST) Received: from f.. (cst-prg-95-94.cust.vodafone.cz. [46.135.95.94]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dcf9f6fa69sm1121849a12.73.2025.02.06.08.44.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 08:44:42 -0800 (PST) From: Mateusz Guzik To: ebiederm@xmission.com, oleg@redhat.com Cc: brauner@kernel.org, akpm@linux-foundation.org, Liam.Howlett@oracle.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mateusz Guzik Subject: [PATCH v6 2/5] exit: hoist get_pid() in release_task() outside of tasklist_lock Date: Thu, 6 Feb 2025 17:44:11 +0100 Message-ID: <20250206164415.450051-3-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250206164415.450051-1-mjguzik@gmail.com> References: <20250206164415.450051-1-mjguzik@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Reduces hold time as get_pid() contains an atomic. Reviewed-by: Oleg Nesterov Signed-off-by: Mateusz Guzik Acked-by: Liam R. Howlett --- kernel/exit.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/exit.c b/kernel/exit.c index 9d7acd7b0040..8c39c84582b7 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -248,9 +248,10 @@ void release_task(struct task_struct *p) =20 cgroup_release(p); =20 + thread_pid =3D get_pid(p->thread_pid); + write_lock_irq(&tasklist_lock); ptrace_release_task(p); - thread_pid =3D get_pid(p->thread_pid); __exit_signal(p); =20 /* --=20 2.43.0 From nobody Mon Dec 15 21:47:51 2025 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 765081F416F for ; Thu, 6 Feb 2025 16:44:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738860291; cv=none; b=eJ8Oh0/rj6jKjKzwGXGa1ebK4LPTNMKynA7JFBzl3ioafjKzsVfRwxpUWKs/HcXOqe12r+WGVZrV3O2+QhAR8w9GUzSkpUG65cwxjRCdToRODDtuKxLwJ55Pg4QRD0PrqXAmluwWx6R7yA1r7KdY5F/Vlyi8E9ZbDNzWN2aeB5U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738860291; c=relaxed/simple; bh=yWz5z+gHwV9XUNY6VnUyv8CsSXjlXfVJclxvnwu6d88=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WMAxBmcNa0Swk2dlMzDiilB2VNuqyIwHA5KDlX/Zip/ZhO9EJAtBwXK6o6Ikcre2yCnxCMnC5wt0Hn8NEJBUsuY7XpsaGW34IRqE2Mdi02+XRkgnlh2EzKCXTV5U2LY1o6KKutfhSbGTud+utJZeHFueAmdefDyF05hj0qaXnEY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NkKIdRWJ; arc=none smtp.client-ip=209.85.208.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NkKIdRWJ" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5dc89df7eccso2325289a12.3 for ; Thu, 06 Feb 2025 08:44:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738860288; x=1739465088; darn=vger.kernel.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=1rFXKBN/0DtbqyDMME4x+DYY2VQCCVBBL1fksWymTmA=; b=NkKIdRWJTGN6u4sOspY7pMms1ZwegzfrbmnHBYQ7LvqRcxVImeJEJC6Yon+cXlwLre NeoY/sk2Vfme9LrKRprTXDMb57xdh6fmQhZ7UE0qnsGn9d/RfjDt0MpHWR8j2F//ILpm BlUGlKGm6DYILckOxAIO1xhsB8rOKaJ/Mm3oBZT7YbyvMO7rri+Y8CFAsFZ6OM0h5MYq 0snNzm7xDfJK/SxrZ4NvD/jrZeOXTC+iegT3rFo6NQI7iSRKhVi6/8kn35kysC5cz9aq Pz1WKB7C4hFtIK/W0CiG0kd5Shqxo4RweQAXcejjTIaAncSuHiD8g4nTTmOl06uVcaCr xLQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738860288; x=1739465088; 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=1rFXKBN/0DtbqyDMME4x+DYY2VQCCVBBL1fksWymTmA=; b=uI8Mk/XP82Wd1sutGLB0KY/L5PLVo7lrgEJykPyLCxl5DOtOKWrk5buV9PZlmFjbQR 2Ak+BM2+PMrU51FATGth1DsYjIFy04N2AicWY/31hbf2sOuOc4ay4ibQLxlMeunwIwHB TaOvEUpBhyKAcadwmWtAanrsfwU+47AnNNNPujmVV9luJrpSuetG4ChALjG6IBuJkifu 7TKkOWUHTttE4PDSDvn9HwihE1/S4bMvwWKrpoqX8TTtZ7y+u/hbNeXxq0zJv5PT49Zy 5xyqxkxST/cfOdklxtfbTHRvLLRplRc+41ybhUlBb+sdW2rS9ijtsT96DNCXx/IOOuSB WDpQ== X-Forwarded-Encrypted: i=1; AJvYcCUr08+KlaYHhMUUNKggBxoR6V8d/zw1XgkkncfPykSlJclcV43ei0rxJTARt6KYi5vLUm7Lb0jPpr+PO0o=@vger.kernel.org X-Gm-Message-State: AOJu0Yxsxdusn5N+speb030f0dtsUnu2LOMoG3P+oY7Dk7D8cyh5WG/P QiMHDM1hxQXZj/mzg6Jd2SuzoFTwL564/22PjAe31ZhwMwcOomDU X-Gm-Gg: ASbGncvEMRPJrMwFzdmkdEree1Pl16ve3+rE3pO2wUMeEK0ZeFqs8ex6Uw8ltR8/Q2+ esP1mGS9bcZNBzDIKjNHVDr+DzrckcijVI9Y8/wxjwgWpkbDGWO6Ha0tX6bES6RAAZSzwxi22MH 6CbzbVgUV3o0g0d59LSRBJdyHesvekyujuh5UsDF3Hnkdquoz2k5uJAV+jSSaBCyR/c30sTFhT/ Kamwr9n1rA+X+QkSVWA5uZz7WRy3lqUCp8lXT2cPKNeduHqBZfuelOMfl8hxTx+xNUrR+tc9ddO 0vuQMPA1+36TAuElkJUhNoVYw8Kk5u4= X-Google-Smtp-Source: AGHT+IEx3kN8qow07VpklbA04AmzqZOSoDCkjH+xrLCKw+n2wur1ISoraFYcVGyB09Stod4R1SRwNg== X-Received: by 2002:a05:6402:e83:b0:5d0:bcdd:ffa1 with SMTP id 4fb4d7f45d1cf-5de4504014cmr104976a12.2.1738860286170; Thu, 06 Feb 2025 08:44:46 -0800 (PST) Received: from f.. (cst-prg-95-94.cust.vodafone.cz. [46.135.95.94]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dcf9f6fa69sm1121849a12.73.2025.02.06.08.44.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 08:44:45 -0800 (PST) From: Mateusz Guzik To: ebiederm@xmission.com, oleg@redhat.com Cc: brauner@kernel.org, akpm@linux-foundation.org, Liam.Howlett@oracle.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mateusz Guzik Subject: [PATCH v6 3/5] pid: sprinkle tasklist_lock asserts Date: Thu, 6 Feb 2025 17:44:12 +0100 Message-ID: <20250206164415.450051-4-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250206164415.450051-1-mjguzik@gmail.com> References: <20250206164415.450051-1-mjguzik@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" They cost nothing on production kernels and document the requirement of holding the tasklist_lock lock in respective routines. Reviewed-by: Oleg Nesterov Signed-off-by: Mateusz Guzik Acked-by: Liam R. Howlett --- kernel/pid.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/kernel/pid.c b/kernel/pid.c index 924084713be8..2ae872f689a7 100644 --- a/kernel/pid.c +++ b/kernel/pid.c @@ -339,17 +339,23 @@ static struct pid **task_pid_ptr(struct task_struct *= task, enum pid_type type) */ void attach_pid(struct task_struct *task, enum pid_type type) { - struct pid *pid =3D *task_pid_ptr(task, type); + struct pid *pid; + + lockdep_assert_held_write(&tasklist_lock); + + pid =3D *task_pid_ptr(task, type); hlist_add_head_rcu(&task->pid_links[type], &pid->tasks[type]); } =20 static void __change_pid(struct task_struct *task, enum pid_type type, struct pid *new) { - struct pid **pid_ptr =3D task_pid_ptr(task, type); - struct pid *pid; + struct pid **pid_ptr, *pid; int tmp; =20 + lockdep_assert_held_write(&tasklist_lock); + + pid_ptr =3D task_pid_ptr(task, type); pid =3D *pid_ptr; =20 hlist_del_rcu(&task->pid_links[type]); @@ -386,6 +392,8 @@ void exchange_tids(struct task_struct *left, struct tas= k_struct *right) struct hlist_head *head1 =3D &pid1->tasks[PIDTYPE_PID]; struct hlist_head *head2 =3D &pid2->tasks[PIDTYPE_PID]; =20 + lockdep_assert_held_write(&tasklist_lock); + /* Swap the single entry tid lists */ hlists_swap_heads_rcu(head1, head2); =20 @@ -403,6 +411,7 @@ void transfer_pid(struct task_struct *old, struct task_= struct *new, enum pid_type type) { WARN_ON_ONCE(type =3D=3D PIDTYPE_PID); + lockdep_assert_held_write(&tasklist_lock); hlist_replace_rcu(&old->pid_links[type], &new->pid_links[type]); } =20 --=20 2.43.0 From nobody Mon Dec 15 21:47:51 2025 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 100E21E5B6B for ; Thu, 6 Feb 2025 16:44:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738860294; cv=none; b=JO5S2nnsSjbNG0RsdDp0b3tCCpe4DgKSXmcPn5Mzt53eVC974LlMgjEtNpOiLr2fFb3vjo9k5exazA6hE3phtAFjTWbcKD3tvAXwgYgeQje7cR/lOqhRgslaik1tYuZ3/grS/0z2ewbxpThobaLWbqqnukayqo5NvHk/wbhYNyc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738860294; c=relaxed/simple; bh=aUDgw+gSk0MwQBw13jGt4EmThRoxY02/Q/06X2KM2hU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mYBGC0iJ22GUlFp+YV42Cdku6b2ePnv3UaRjbB9+3FcQbrcqNWyspLmU2cqAXfs23RXYzrNxjMwuskBW67BlNbJsw5NJzVkXM/LDZvUPwNjyl60evfLMHuGVJpHIhtg78hNWhRHzadf9ni37115QpSScF+Ie7jiMHH49lKsmDLU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PIcERYkB; arc=none smtp.client-ip=209.85.208.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PIcERYkB" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-5de3c29e9b3so521445a12.3 for ; Thu, 06 Feb 2025 08:44:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738860290; x=1739465090; darn=vger.kernel.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=P1tcF++dbHlub2RYbrz+kvADf5ajR/p1WCoTi4SqY9k=; b=PIcERYkBV8Ivx9sugo8mVbbNJ8XbjSD+ZHBZqsAnkIa9pmAE9WRhdhcP5WZ+iTxhCT CAFTRf8VijRXh/XG0I7CCNuUSbRkWF2bkF09IxJOBkwmhTLyfnRZKMRfvNQJg+I0//zc KtCRCb9qiVubjek90WZcKl0vicHbsoMApDq+xZtnSH66XTiYKDRsfiOmVZhIu+2yss7j fT2zPOv2lIGXrvtZqMmlHFn62WsHC3PweFRWu8U2dAgLc5bKhE0DIDFQ9lkv/d+0iatD Jlqg1jmgpsRVy+8/zmwjBYIzAcxzd3Bf3WSILTli66rmsKG529FC+t78mEJHFROG5xkv EK3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738860290; x=1739465090; 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=P1tcF++dbHlub2RYbrz+kvADf5ajR/p1WCoTi4SqY9k=; b=uykpsc17/sbaa13QCurp90Mu9DGMBv+hQWRZEHnrxK3sJ43/5k2EgueIEDaFi0jEu2 MMrAqE0r6AdgcIfqws7fb+IwXMhZolVNkhrWwNt6IifWOW1ZV58yl0wT2sMbLtsJiWNc P3d8l/uLEbztbBnLuz+rcebLtjLnPfBdSWgfvdDAV/9aA5taQOBugJY4r3tiNIN/w7/H c141620zKv3MRUa3mCULPf+6n+bsHmSNgaayASs7i/11KH5Eu5L2gwL4Ew5PymmsSYia zJJQLk8/sOzFGiR4gYTrF8yhteBB3HVuKqEZhm1xC8u6uXV1CQ64u2pJUjG2Jg6piDEv q28g== X-Forwarded-Encrypted: i=1; AJvYcCUmZb3AYyEvFJYDpuXhIokAqFnmG7NrZC69y59hM+nbdv6o1FNfmkmZibJhWPGR+cg/eOC2dvBWgxWYQQI=@vger.kernel.org X-Gm-Message-State: AOJu0YyOWApUN74uEIqRtoGfzo2jR75CIiOhgwAKSGK/GZ9KPlUm+zaz ez3AviMJGHYkA7fl1eQPeTq9SCSBbdApzIKVFbVZFdN/pC6JPT9n X-Gm-Gg: ASbGncthAkoATGocmOVdI6JVSpxG29wFvHQ99iexyr+MeB7N5t5ze1ChyWUXlMV7jn5 l7U1zfJCm5vdm6zBs7mLm3oXYKdwOzBAWMHo6JEAWC8HjY/sj4DOszDK7R6N4qE/U3Tfm+Uh4To YdfWWqLmqvgbU7Y+Ag4UG4nNtSsfw+j1XQvGtlgE6PY6PdheFIcIkfXxjQTRZ9mQRsw0GqOr+eA FvsORcrRtAV9CCNipgX7cOB5y/Cfm/rSdU1A2czU76qza3CKBuw98zboHCMdNYO48iKWLKEn2QS Fj4OsC34MrocmcmBO1utl3I9NUHxFHg= X-Google-Smtp-Source: AGHT+IE4X6Gh7ABr/CAabaJiQHTc3ksfl4DHOZdtIehrJhW32+PzJmv296KghHaD7mifNH3wlAlW+g== X-Received: by 2002:a17:906:5594:b0:ab7:7482:a11 with SMTP id a640c23a62f3a-ab774820b25mr252379466b.12.1738860289978; Thu, 06 Feb 2025 08:44:49 -0800 (PST) Received: from f.. (cst-prg-95-94.cust.vodafone.cz. [46.135.95.94]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dcf9f6fa69sm1121849a12.73.2025.02.06.08.44.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 08:44:48 -0800 (PST) From: Mateusz Guzik To: ebiederm@xmission.com, oleg@redhat.com Cc: brauner@kernel.org, akpm@linux-foundation.org, Liam.Howlett@oracle.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mateusz Guzik Subject: [PATCH v6 4/5] pid: perform free_pid() calls outside of tasklist_lock Date: Thu, 6 Feb 2025 17:44:13 +0100 Message-ID: <20250206164415.450051-5-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250206164415.450051-1-mjguzik@gmail.com> References: <20250206164415.450051-1-mjguzik@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As the clone side already executes pid allocation with only pidmap_lock held, issuing free_pid() while still holding tasklist_lock exacerbates total hold time of the latter. More things may show up later which require initial clean up with the lock held and allow finishing without it. For that reason a struct to collect such work is added instead of merely passing the pid array. Reviewed-by: Oleg Nesterov Signed-off-by: Mateusz Guzik Acked-by: Liam R. Howlett --- include/linux/pid.h | 7 ++++--- kernel/exit.c | 28 ++++++++++++++++++++-------- kernel/pid.c | 44 ++++++++++++++++++++++---------------------- kernel/sys.c | 14 +++++++++----- 4 files changed, 55 insertions(+), 38 deletions(-) diff --git a/include/linux/pid.h b/include/linux/pid.h index 98837a1ff0f3..311ecebd7d56 100644 --- a/include/linux/pid.h +++ b/include/linux/pid.h @@ -101,9 +101,9 @@ extern struct pid *get_task_pid(struct task_struct *tas= k, enum pid_type type); * these helpers must be called with the tasklist_lock write-held. */ extern void attach_pid(struct task_struct *task, enum pid_type); -extern void detach_pid(struct task_struct *task, enum pid_type); -extern void change_pid(struct task_struct *task, enum pid_type, - struct pid *pid); +void detach_pid(struct pid **pids, struct task_struct *task, enum pid_type= ); +void change_pid(struct pid **pids, struct task_struct *task, enum pid_type, + struct pid *pid); extern void exchange_tids(struct task_struct *task, struct task_struct *ol= d); extern void transfer_pid(struct task_struct *old, struct task_struct *new, enum pid_type); @@ -129,6 +129,7 @@ extern struct pid *find_ge_pid(int nr, struct pid_names= pace *); extern struct pid *alloc_pid(struct pid_namespace *ns, pid_t *set_tid, size_t set_tid_size); extern void free_pid(struct pid *pid); +void free_pids(struct pid **pids); extern void disable_pid_allocation(struct pid_namespace *ns); =20 /* diff --git a/kernel/exit.c b/kernel/exit.c index 8c39c84582b7..0d6df671c8a8 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -122,14 +122,22 @@ static __init int kernel_exit_sysfs_init(void) late_initcall(kernel_exit_sysfs_init); #endif =20 -static void __unhash_process(struct task_struct *p, bool group_dead) +/* + * For things release_task() would like to do *after* tasklist_lock is rel= eased. + */ +struct release_task_post { + struct pid *pids[PIDTYPE_MAX]; +}; + +static void __unhash_process(struct release_task_post *post, struct task_s= truct *p, + bool group_dead) { nr_threads--; - detach_pid(p, PIDTYPE_PID); + detach_pid(post->pids, p, PIDTYPE_PID); if (group_dead) { - detach_pid(p, PIDTYPE_TGID); - detach_pid(p, PIDTYPE_PGID); - detach_pid(p, PIDTYPE_SID); + detach_pid(post->pids, p, PIDTYPE_TGID); + detach_pid(post->pids, p, PIDTYPE_PGID); + detach_pid(post->pids, p, PIDTYPE_SID); =20 list_del_rcu(&p->tasks); list_del_init(&p->sibling); @@ -141,7 +149,7 @@ static void __unhash_process(struct task_struct *p, boo= l group_dead) /* * This function expects the tasklist_lock write-locked. */ -static void __exit_signal(struct task_struct *tsk) +static void __exit_signal(struct release_task_post *post, struct task_stru= ct *tsk) { struct signal_struct *sig =3D tsk->signal; bool group_dead =3D thread_group_leader(tsk); @@ -194,7 +202,7 @@ static void __exit_signal(struct task_struct *tsk) task_io_accounting_add(&sig->ioac, &tsk->ioac); sig->sum_sched_runtime +=3D tsk->se.sum_exec_runtime; sig->nr_threads--; - __unhash_process(tsk, group_dead); + __unhash_process(post, tsk, group_dead); write_sequnlock(&sig->stats_lock); =20 /* @@ -236,10 +244,13 @@ void __weak release_thread(struct task_struct *dead_t= ask) =20 void release_task(struct task_struct *p) { + struct release_task_post post; struct task_struct *leader; struct pid *thread_pid; int zap_leader; repeat: + memset(&post, 0, sizeof(post)); + /* don't need to get the RCU readlock here - the process is dead and * can't be modifying its own credentials. But shut RCU-lockdep up */ rcu_read_lock(); @@ -252,7 +263,7 @@ void release_task(struct task_struct *p) =20 write_lock_irq(&tasklist_lock); ptrace_release_task(p); - __exit_signal(p); + __exit_signal(&post, p); =20 /* * If we are the last non-leader member of the thread @@ -278,6 +289,7 @@ void release_task(struct task_struct *p) put_pid(thread_pid); add_device_randomness(&p->se.sum_exec_runtime, sizeof(p->se.sum_exec_runtime)); + free_pids(post.pids); release_thread(p); put_task_struct_rcu_user(p); =20 diff --git a/kernel/pid.c b/kernel/pid.c index 2ae872f689a7..73625f28c166 100644 --- a/kernel/pid.c +++ b/kernel/pid.c @@ -88,20 +88,6 @@ struct pid_namespace init_pid_ns =3D { }; EXPORT_SYMBOL_GPL(init_pid_ns); =20 -/* - * Note: disable interrupts while the pidmap_lock is held as an - * interrupt might come in and do read_lock(&tasklist_lock). - * - * If we don't disable interrupts there is a nasty deadlock between - * detach_pid()->free_pid() and another cpu that does - * spin_lock(&pidmap_lock) followed by an interrupt routine that does - * read_lock(&tasklist_lock); - * - * After we clean up the tasklist_lock and know there are no - * irq handlers that take it we can leave the interrupts enabled. - * For now it is easier to be safe than to prove it can't happen. - */ - static __cacheline_aligned_in_smp DEFINE_SPINLOCK(pidmap_lock); seqcount_spinlock_t pidmap_lock_seq =3D SEQCNT_SPINLOCK_ZERO(pidmap_lock_s= eq, &pidmap_lock); =20 @@ -128,10 +114,11 @@ static void delayed_put_pid(struct rcu_head *rhp) =20 void free_pid(struct pid *pid) { - /* We can be called with write_lock_irq(&tasklist_lock) held */ int i; unsigned long flags; =20 + lockdep_assert_not_held(&tasklist_lock); + spin_lock_irqsave(&pidmap_lock, flags); for (i =3D 0; i <=3D pid->level; i++) { struct upid *upid =3D pid->numbers + i; @@ -160,6 +147,18 @@ void free_pid(struct pid *pid) call_rcu(&pid->rcu, delayed_put_pid); } =20 +void free_pids(struct pid **pids) +{ + int tmp; + + /* + * This can batch pidmap_lock. + */ + for (tmp =3D PIDTYPE_MAX; --tmp >=3D 0; ) + if (pids[tmp]) + free_pid(pids[tmp]); +} + struct pid *alloc_pid(struct pid_namespace *ns, pid_t *set_tid, size_t set_tid_size) { @@ -347,8 +346,8 @@ void attach_pid(struct task_struct *task, enum pid_type= type) hlist_add_head_rcu(&task->pid_links[type], &pid->tasks[type]); } =20 -static void __change_pid(struct task_struct *task, enum pid_type type, - struct pid *new) +static void __change_pid(struct pid **pids, struct task_struct *task, + enum pid_type type, struct pid *new) { struct pid **pid_ptr, *pid; int tmp; @@ -370,18 +369,19 @@ static void __change_pid(struct task_struct *task, en= um pid_type type, if (pid_has_task(pid, tmp)) return; =20 - free_pid(pid); + WARN_ON(pids[type]); + pids[type] =3D pid; } =20 -void detach_pid(struct task_struct *task, enum pid_type type) +void detach_pid(struct pid **pids, struct task_struct *task, enum pid_type= type) { - __change_pid(task, type, NULL); + __change_pid(pids, task, type, NULL); } =20 -void change_pid(struct task_struct *task, enum pid_type type, +void change_pid(struct pid **pids, struct task_struct *task, enum pid_type= type, struct pid *pid) { - __change_pid(task, type, pid); + __change_pid(pids, task, type, pid); attach_pid(task, type); } =20 diff --git a/kernel/sys.c b/kernel/sys.c index cb366ff8703a..4efca8a97d62 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1085,6 +1085,7 @@ SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid) { struct task_struct *p; struct task_struct *group_leader =3D current->group_leader; + struct pid *pids[PIDTYPE_MAX] =3D { 0 }; struct pid *pgrp; int err; =20 @@ -1142,13 +1143,14 @@ SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid) goto out; =20 if (task_pgrp(p) !=3D pgrp) - change_pid(p, PIDTYPE_PGID, pgrp); + change_pid(pids, p, PIDTYPE_PGID, pgrp); =20 err =3D 0; out: /* All paths lead to here, thus we are safe. -DaveM */ write_unlock_irq(&tasklist_lock); rcu_read_unlock(); + free_pids(pids); return err; } =20 @@ -1222,21 +1224,22 @@ SYSCALL_DEFINE1(getsid, pid_t, pid) return retval; } =20 -static void set_special_pids(struct pid *pid) +static void set_special_pids(struct pid **pids, struct pid *pid) { struct task_struct *curr =3D current->group_leader; =20 if (task_session(curr) !=3D pid) - change_pid(curr, PIDTYPE_SID, pid); + change_pid(pids, curr, PIDTYPE_SID, pid); =20 if (task_pgrp(curr) !=3D pid) - change_pid(curr, PIDTYPE_PGID, pid); + change_pid(pids, curr, PIDTYPE_PGID, pid); } =20 int ksys_setsid(void) { struct task_struct *group_leader =3D current->group_leader; struct pid *sid =3D task_pid(group_leader); + struct pid *pids[PIDTYPE_MAX] =3D { 0 }; pid_t session =3D pid_vnr(sid); int err =3D -EPERM; =20 @@ -1252,13 +1255,14 @@ int ksys_setsid(void) goto out; =20 group_leader->signal->leader =3D 1; - set_special_pids(sid); + set_special_pids(pids, sid); =20 proc_clear_tty(group_leader); =20 err =3D session; out: write_unlock_irq(&tasklist_lock); + free_pids(pids); if (err > 0) { proc_sid_connector(group_leader); sched_autogroup_create_attach(group_leader); --=20 2.43.0 From nobody Mon Dec 15 21:47:51 2025 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 78F0A23645B for ; Thu, 6 Feb 2025 16:44:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738860298; cv=none; b=nPgFvNEiN1iez+2/WkJqqqL1ltW4SfyNfqarZOKJG9oVOdnoqRZeYhdvbcU5KEPR6dHTf6idVFjfLpV/S74EaFfUNHKh4/X4VVtpxmWoqhLOmVNa3KlecWTMnzX410YKvKpxG45Z+54gO4dAKO1Sb4QinPRADIx1STeCfzljjsQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738860298; c=relaxed/simple; bh=GJ2y/FCanDqhcGlPwrjJkUUipKVr30iT6x4rWzEDa78=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rRwQogbhrK/jEcKNhGk3tKnTKg9puiQQtHgC9VNcRy7GvBHBdzhw1nva/Nbby9JFEnIyNvgWMGE4DTCpeFZVpNDBlgahZ0U0+qt+qajHLOS1yFs7MCugPS6eC9x3Zccu/OjrS+OXevRzERoH4Tn0RYslnbz1q9/5wTyDzlgtORw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VG1i3wRH; arc=none smtp.client-ip=209.85.218.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VG1i3wRH" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-aaedd529ba1so148672666b.1 for ; Thu, 06 Feb 2025 08:44:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738860295; x=1739465095; darn=vger.kernel.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=6DMFX6YMCCpHUnKPYix3pzepx5ItpSalkZSrvWGNgEw=; b=VG1i3wRHYmjJhCgEjUG4hGISBW5r6Kuq1+o42K9Ufm8y7MrkIG3CtoN/AqsIwapLjA Fva6hbXvUwZ8gbDKZQ7f0BR3sJRYmSaWMOtA4ITlQYb9U34PuwiPwfaZRZ2JVX6VziuV 1mT8DVKZbx7hi6C3nEXKdnYHkWc/MYH8gRO1V6eZMXrIglmf7HWYnYQ/gpWNxfPpYh4U n3Eoh1d5o6IV3EMTkGk+Ptl2S3SAYHW1+hUhy3iAl/UEYUZKnyHtkZ/khUGfvpowKn5Z DXMCI42xVaz8DQmPy5Y5RBvwfZtvDxCF36FHIxhGeZ1m8u25+pfZY7hHPErYF5jsNHPg 6/0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738860295; x=1739465095; 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=6DMFX6YMCCpHUnKPYix3pzepx5ItpSalkZSrvWGNgEw=; b=EZyYtzDTA7xh0ySZSuV9N6FcHa3V+zmXz5nf1Lq0nPi8ukKrPMoHM5Q2jLCFYJlmik BxK6Gk5iKIJmQ+XyKo6Y0i6CmOK3d4r0IVJAsPUezMZ0bW3ZQ7RDE34weXFbroGclH1h wtC+o6nw3y2p5EwFETIVXjrzyUzoYRs7Pro4q+MQarkcOL2j9e/uap03vbD5NqN3iFbX 6Mcbw8Vh7b5guzXL6sli6DBv5OlZ10xaDEE2B5qIKelkqPeuGnPDVl+8Tv8sZk314gVO 0N5L19BaHFvct818ttYJdIoqxRp84K9rjQ66EKlG2gcsAXoteWrjTFY9+oTDsDhPfn5i zm2g== X-Forwarded-Encrypted: i=1; AJvYcCVGr4XGXxwa8bvHVon+G/b3n8vPSNoXwPVGmWalLELh2bXIriPorB2V/vPgeHDGMW50HhVlezcf14/H9rg=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3UoKB3HDs3CXm2zFtccUKXIgtXaVnjYeXRSA1p751w29oYH6J Wj2ff08buMmn28vN1DoSg0coSCW1cBjUT21djTD6JjNY0TkGIhwH X-Gm-Gg: ASbGncuAkyQpO/8ku3VEx2q2CmZoixVde5+NKHODQ7GHJ+H9rbSsqExBNptQn0P2Yyu vtLlAy4UFCcmQkanbHJCvbO826nFL0Az/XUqD5HeIRJiDvpMkvaFUs9f6lecQoKvOx0ILxRrngV PaNMtii5c6mARdewTvQsU/Fm3sHg9Q35jdNqRJGgXMGshHjIhC3ry/pTSMJV0xKWcIbbNf9U35m lUTcshJ2nwiqwpGLtWIulXlp7K0yYXv3Wx90+c+WiOq8+aohhUUtHNzCQgVO9ASbRQAHYLxG7ij HMkkHaumuxkeddnwIc0oBFiT7hN6dLQ= X-Google-Smtp-Source: AGHT+IGOagMU3s4dSLwHCKRWQGm5DZx3LMYAR9bqVzPeh6m8lqHiM8BrELKuAU/htbOM8AWykF4F6A== X-Received: by 2002:a05:6402:210e:b0:5dc:58c8:3154 with SMTP id 4fb4d7f45d1cf-5de450800a4mr213355a12.28.1738860294539; Thu, 06 Feb 2025 08:44:54 -0800 (PST) Received: from f.. (cst-prg-95-94.cust.vodafone.cz. [46.135.95.94]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dcf9f6fa69sm1121849a12.73.2025.02.06.08.44.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 08:44:53 -0800 (PST) From: Mateusz Guzik To: ebiederm@xmission.com, oleg@redhat.com Cc: brauner@kernel.org, akpm@linux-foundation.org, Liam.Howlett@oracle.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mateusz Guzik Subject: [PATCH v6 5/5] pid: drop irq disablement around pidmap_lock Date: Thu, 6 Feb 2025 17:44:14 +0100 Message-ID: <20250206164415.450051-6-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250206164415.450051-1-mjguzik@gmail.com> References: <20250206164415.450051-1-mjguzik@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" It no longer serves any purpose now that the tasklist_lock -> pidmap_lock ordering got eliminated. Reviewed-by: Oleg Nesterov Signed-off-by: Mateusz Guzik Acked-by: Liam R. Howlett --- kernel/pid.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/kernel/pid.c b/kernel/pid.c index 73625f28c166..900193de4232 100644 --- a/kernel/pid.c +++ b/kernel/pid.c @@ -115,11 +115,10 @@ static void delayed_put_pid(struct rcu_head *rhp) void free_pid(struct pid *pid) { int i; - unsigned long flags; =20 lockdep_assert_not_held(&tasklist_lock); =20 - spin_lock_irqsave(&pidmap_lock, flags); + spin_lock(&pidmap_lock); for (i =3D 0; i <=3D pid->level; i++) { struct upid *upid =3D pid->numbers + i; struct pid_namespace *ns =3D upid->ns; @@ -142,7 +141,7 @@ void free_pid(struct pid *pid) idr_remove(&ns->idr, upid->nr); } pidfs_remove_pid(pid); - spin_unlock_irqrestore(&pidmap_lock, flags); + spin_unlock(&pidmap_lock); =20 call_rcu(&pid->rcu, delayed_put_pid); } @@ -210,7 +209,7 @@ struct pid *alloc_pid(struct pid_namespace *ns, pid_t *= set_tid, } =20 idr_preload(GFP_KERNEL); - spin_lock_irq(&pidmap_lock); + spin_lock(&pidmap_lock); =20 if (tid) { nr =3D idr_alloc(&tmp->idr, NULL, tid, @@ -237,7 +236,7 @@ struct pid *alloc_pid(struct pid_namespace *ns, pid_t *= set_tid, nr =3D idr_alloc_cyclic(&tmp->idr, NULL, pid_min, pid_max, GFP_ATOMIC); } - spin_unlock_irq(&pidmap_lock); + spin_unlock(&pidmap_lock); idr_preload_end(); =20 if (nr < 0) { @@ -271,7 +270,7 @@ struct pid *alloc_pid(struct pid_namespace *ns, pid_t *= set_tid, =20 upid =3D pid->numbers + ns->level; idr_preload(GFP_KERNEL); - spin_lock_irq(&pidmap_lock); + spin_lock(&pidmap_lock); if (!(ns->pid_allocated & PIDNS_ADDING)) goto out_unlock; pidfs_add_pid(pid); @@ -280,18 +279,18 @@ struct pid *alloc_pid(struct pid_namespace *ns, pid_t= *set_tid, idr_replace(&upid->ns->idr, pid, upid->nr); upid->ns->pid_allocated++; } - spin_unlock_irq(&pidmap_lock); + spin_unlock(&pidmap_lock); idr_preload_end(); =20 return pid; =20 out_unlock: - spin_unlock_irq(&pidmap_lock); + spin_unlock(&pidmap_lock); idr_preload_end(); put_pid_ns(ns); =20 out_free: - spin_lock_irq(&pidmap_lock); + spin_lock(&pidmap_lock); while (++i <=3D ns->level) { upid =3D pid->numbers + i; idr_remove(&upid->ns->idr, upid->nr); @@ -301,7 +300,7 @@ struct pid *alloc_pid(struct pid_namespace *ns, pid_t *= set_tid, if (ns->pid_allocated =3D=3D PIDNS_ADDING) idr_set_cursor(&ns->idr, 0); =20 - spin_unlock_irq(&pidmap_lock); + spin_unlock(&pidmap_lock); =20 kmem_cache_free(ns->pid_cachep, pid); return ERR_PTR(retval); @@ -309,9 +308,9 @@ struct pid *alloc_pid(struct pid_namespace *ns, pid_t *= set_tid, =20 void disable_pid_allocation(struct pid_namespace *ns) { - spin_lock_irq(&pidmap_lock); + spin_lock(&pidmap_lock); ns->pid_allocated &=3D ~PIDNS_ADDING; - spin_unlock_irq(&pidmap_lock); + spin_unlock(&pidmap_lock); } =20 struct pid *find_pid_ns(int nr, struct pid_namespace *ns) --=20 2.43.0