From nobody Sun Apr 26 18:52:55 2026 Received: from mail-ot1-f53.google.com (mail-ot1-f53.google.com [209.85.210.53]) (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 4D782284666 for ; Thu, 24 Apr 2025 16:50:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513431; cv=none; b=urWU72a5Ud0aj6wojVGQJjxz8+8GrSYy06iFFcA8qWYesVK9rrzzSvLxLXjTX5hTS7d4EfNH7djSBzJaoD3ecxQqfbdhMA2OuxWJVI1oAVI8gd2yfwqe0e2iEgYa6lzWt8jSuDvBaOsAeO4MiuCeDRUP9vaGW77Pqp/P2LF6Ijc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513431; c=relaxed/simple; bh=iRQ+tCNzTUzFjP3Q4w00NQLj2m8U6lvE3Ij0XsGhtg0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bzxrdbTEBIai1IMkvnqJSYt5z/qnMF5+vDfaNFh3+v6i5DqFvk8jWQ2i47KhPv0i+bkpkp1TibJvGHa0KKMK3j8J9iUGinuBsMcjVrKuJWSYG9yJSTrw4OyoPBgduceEcizbIAXeZIB3EotgjKF7divnCELfZgxjCU9OH91ogjM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=o83uobAZ; arc=none smtp.client-ip=209.85.210.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="o83uobAZ" Received: by mail-ot1-f53.google.com with SMTP id 46e09a7af769-72ecb4d9a10so915647a34.3 for ; Thu, 24 Apr 2025 09:50:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513429; x=1746118229; 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=Zwio3ISUto8LUTujsv8QXqK82cuXiEJf2BXkC619czg=; b=o83uobAZg32ukEuqNqmjmBkLvOMfa+6cW0v80YCN6cMnOhJGBQT2rpSZxNmkTv0jyt YOvrpu/t9We2fTUFKNwTgBOIOrrlzp2xAWjguLEDfxcPIv570BXNoDX2GmbuoIEMXtkx w8dUjpWv2MEkk1p8lwGUo4T6nWVpZ+ij7rT9Wn8CoN3p6Ki+JZs26pPRLeRt4FPIUWW9 npQkSv8qsGXpTt9daNoRcHWmCGVbZky9YpEpXwD4JWX6la4D8tyKLNCbl+PxH8Ti9PFG TV5ayfwM6XcAU8whgJtCKP5xsyAfEv+LOfo743HH1A95g4owXeA50rvTpxE1x2P8hE09 8GRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513429; x=1746118229; 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=Zwio3ISUto8LUTujsv8QXqK82cuXiEJf2BXkC619czg=; b=coFp7g+6rhXiuav6s5cBcL4hkfNxI6pD7dn8J5LsJr3ugJL9HNN6qs7KF7hqy/Sj+N wjUBqNUVj651uVpNlqVA49jG5D9WDIZ1Yx6WrpL+J4Sl9GnH8oAgqZrutP35qMNOWqH5 uiekvbXQ8PxuVrmuOvK6yYsJaE5JAdPCT0c7AyRcr6RbWwJLqqnKoH9e7zIpmM+TgB9t c8uQMTUl/2pmcsoPVg4Adk6k0N4GsqPPopCTvALWWl9+LakMEaOGOjsbfnJGjpBrDPci 5iLgbJRBXT0YqWTq/TWrvpP/5v6l0ioNoBrgJ3l4h08Q/Tt+YRqOXGXAsxdRJOco1JTJ 3XDg== X-Gm-Message-State: AOJu0Yy01z5vRIsjVR4xx0AtDEza564wl54QqBypo/aNO6U1TZtZXRic wzI04qpBigENuG8/VzYIRHF+w6hFnpnVo2PQX6Wmz46DuSRcHlslJOUR7fWXe4DikBR1zhwJeXq 0 X-Gm-Gg: ASbGncsR5tLZAgY73XdUfeYJg43EOU3vBf2HyUQWB9th6eIxcoLwg7dhlHlRI88yjyl mZZlDuQxhKGdyBfzGQOh0Sef8BBcvVkrW+1oFAEyzy8/T84/QLu05YAvs46MNxM5AXsOgMv2lmW +m8r/fwNmuRTh343mByA0PT4Cr0QVUox5GLhwNA/t5SEy2fS+UZuKjFGkZfvwaT0KHUhi5Opjvb 8ge7Oq6cf9gsFAg6wRz5kbrqoDEmhzEbo+1AxjuXm9+/G0zlcQXCpbVCDk/3/Hq7riWx7XLm9aX /9gXT7lTb3jNQRrVUF+8VfJ2e8PR8knji0c= X-Google-Smtp-Source: AGHT+IGy7CZalF5Miu4rlUrqy24erWiGVBihUFSHTQCWfAbTX6kMHsZPYJdkMwwydQR7vrtwIl+ZPQ== X-Received: by 2002:a05:6830:3c08:b0:72b:a175:2f1d with SMTP id 46e09a7af769-7304dbd8709mr2441810a34.23.1745513428769; Thu, 24 Apr 2025 09:50:28 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 46e09a7af769-7304f188d01sm296180a34.14.2025.04.24.09.50.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:27 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 01/23] ipmi:msghandler: Use READ_ONCE on run_to_completion Date: Thu, 24 Apr 2025 11:49:38 -0500 Message-ID: <20250424165020.627193-2-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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 needs to be read only once because it's used in lock/unlock scenarios. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 1e5313748f8b..77f0f41f2e3d 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -1882,13 +1882,12 @@ static void smi_send(struct ipmi_smi *intf, const struct ipmi_smi_handlers *handlers, struct ipmi_smi_msg *smi_msg, int priority) { - int run_to_completion =3D intf->run_to_completion; + int run_to_completion =3D READ_ONCE(intf->run_to_completion); unsigned long flags =3D 0; =20 if (!run_to_completion) spin_lock_irqsave(&intf->xmit_msgs_lock, flags); smi_msg =3D smi_add_send_msg(intf, smi_msg, priority); - if (!run_to_completion) spin_unlock_irqrestore(&intf->xmit_msgs_lock, flags); =20 @@ -4753,10 +4752,10 @@ static int handle_one_recv_msg(struct ipmi_smi *int= f, */ static void handle_new_recv_msgs(struct ipmi_smi *intf) { - struct ipmi_smi_msg *smi_msg; - unsigned long flags =3D 0; - int rv; - int run_to_completion =3D intf->run_to_completion; + struct ipmi_smi_msg *smi_msg; + unsigned long flags =3D 0; + int rv; + int run_to_completion =3D READ_ONCE(intf->run_to_completion); =20 /* See if any waiting messages need to be processed. */ if (!run_to_completion) @@ -4813,7 +4812,7 @@ static void smi_recv_work(struct work_struct *t) { unsigned long flags =3D 0; /* keep us warning-free. */ struct ipmi_smi *intf =3D from_work(intf, t, recv_work); - int run_to_completion =3D intf->run_to_completion; + int run_to_completion =3D READ_ONCE(intf->run_to_completion); struct ipmi_smi_msg *newmsg =3D NULL; =20 /* @@ -4843,9 +4842,9 @@ static void smi_recv_work(struct work_struct *t) intf->curr_msg =3D newmsg; } } - if (!run_to_completion) spin_unlock_irqrestore(&intf->xmit_msgs_lock, flags); + if (newmsg) intf->handlers->sender(intf->send_info, newmsg); =20 @@ -4859,7 +4858,7 @@ void ipmi_smi_msg_received(struct ipmi_smi *intf, struct ipmi_smi_msg *msg) { unsigned long flags =3D 0; /* keep us warning-free. */ - int run_to_completion =3D intf->run_to_completion; + int run_to_completion =3D READ_ONCE(intf->run_to_completion); =20 /* * To preserve message order, we keep a queue and deliver from --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) (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 EDF9628D85D for ; Thu, 24 Apr 2025 16:50:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513445; cv=none; b=lZQiGtc00pLc2MSa9Mbm45D0VCs0UVQo7fOydb/sABlsoGXyXTyvLesUgbMbGNLVbB04u064uVEHNksgN80qaV9rG3y8QLCBJOsar1fH4k34DKLMdr4JW43aCapERKgUzfcFwGWPwbFlq3YZ80okrlCUBWG/eB2Dg2x0bO1KRjU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513445; c=relaxed/simple; bh=LuMR+H1QwXKPEi9lGgEokcwglpP+bKoRaOXMJ8W3UrM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NnVnHq/MoJsEL/LYQSeeiHFFDCnpWC+1BA+hZAE9FzsfwFJKfVsGPUbhI6fmP0EpAJJ3HT55KpAVIksSvwcye+thsBjA4iU2U1NxUQsv8neF0C7F+jocL3aJwm5c38l8pFVgKX/mOTjL8vUEaMqKZWoOQwEG/Qtv0sQXWlVXa+w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=mA+zQ8ji; arc=none smtp.client-ip=209.85.219.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="mA+zQ8ji" Received: by mail-qv1-f44.google.com with SMTP id 6a1803df08f44-6ecfc7ed0c1so12704476d6.3 for ; Thu, 24 Apr 2025 09:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513442; x=1746118242; 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=IGfTJWj47CpXpT8PeT3U1Li99hkB5HE31d++OSuIbAk=; b=mA+zQ8jibdXbTTq2T/YwSjPcK8iwwA4QWmOdgbVPeW5bE+z85Chyb19MxGedehmg+X /IK55zBK254nf3eoJyLYWfrhOOZIC3KD6kba5sZVOlSXdb6otq9cKKuOd7RdcL+ia1WA cgjgTyrOFLhb22ODzMvq67eLR4AE5JH6QDRVJmjmKwLNxZKULUKJnqQp3kqYJGN73ZS0 0V6+AyR7LQJ3+rwxR44x0uZ1kG0ZoinJ7OevvfVDbAGd6LKXy5GZ8r798XQuoJKyjlx3 kHCvY/vCK7r3zmqiATUqNK6DkSJMmBfDAeXIx4R6g2TyDhtac+5pbgQ9pKS1EanPEkja trOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513442; x=1746118242; 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=IGfTJWj47CpXpT8PeT3U1Li99hkB5HE31d++OSuIbAk=; b=HrgeWpRVDwD+oRlw9R8iEeZBp4LwM1gFjSoxcUkfP1UFd2Mll0R3+NXXTURNiimJfU nsQTm18JvWjE9Sil4bYC6kLEFdvDYoWjrHe8X8PAIc0oku2kg4OIcpPHLXj9VAxjoi5G DU3jr+kdRWGIwxVBW76ka1acLUdz8zq9bUbuCK31uTQEzE/xvL5tcTUXYWw0e2S7d2sb ZWOutU7t3lLj/DO0/iKb95U6Rn65PN2vy2GbsaqYSzssOZFG+n0/trO8L/EVGW/1Udu4 tYSM2r5Lm7gPG10vC5QBjPY0KbVH9/9dYkbRXRyBVTnk0FRKUkYVtPEQfViiGHsXpCP6 TDpQ== X-Gm-Message-State: AOJu0YzKo+hHwQVytDhdwJ7iiDL2tKukNU47r38oLfFr7OqwTDV6S8N8 CF1ZMXscLKR7Sni1Q7kzvcRcfGriPwIDZIz7C1XOjfiR64gI/AGqetJ76cSFRcC21UjHA/zfcnB W X-Gm-Gg: ASbGncuzlZLai01GWFzS69p1yjKEk846KLXsqA4Uh+GbTJSX4dg1urlB/XoQ/AJ1I2o MoqYThIJF6d7cAD+HrgSWA9HGSmHTpMLP2DySKCTM1n461zJrhWXKUbvmmqgDOH6Vu2fK+0IWSb eRLKCeV19ZxAShgurJ30B9JML7BqlZ6Na9CkO9XbXsbPVyTJRW0owt5Nrfg+sFVfQncifDSJ1Rf w5tS982PCCfELAeJtK6FolufmWypnRF0iQFv4wPO+pU7mElf9h7cq4GYltc3WmYrTSSATcWRI+W omvRbGi52u6vQJq6R9tN7Fu3o2wrC0Gu5Ig= X-Google-Smtp-Source: AGHT+IFHp8n/VJuzX+UYnhpiqIQJQ9HAOKQP+infmIEinGOQzRk0Z/D3wAFlyPekPIZHnbzLJIOztA== X-Received: by 2002:a05:6808:6c85:b0:401:e5d6:31cd with SMTP id 5614622812f47-401eb23932fmr2137283b6e.3.1745513430870; Thu, 24 Apr 2025 09:50:30 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 5614622812f47-401ec8cce07sm311510b6e.20.2025.04.24.09.50.29 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:30 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 02/23] ipmi:msghandler: Rename recv_work to smi_work Date: Thu, 24 Apr 2025 11:49:39 -0500 Message-ID: <20250424165020.627193-3-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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 handles both receive and transmit functions, make the name generic. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 77f0f41f2e3d..22813b1598b0 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -41,7 +41,7 @@ =20 static struct ipmi_recv_msg *ipmi_alloc_recv_msg(void); static int ipmi_init_msghandler(void); -static void smi_recv_work(struct work_struct *t); +static void smi_work(struct work_struct *t); static void handle_new_recv_msgs(struct ipmi_smi *intf); static void need_waiter(struct ipmi_smi *intf); static int handle_one_recv_msg(struct ipmi_smi *intf, @@ -504,7 +504,7 @@ struct ipmi_smi { spinlock_t waiting_rcv_msgs_lock; struct list_head waiting_rcv_msgs; atomic_t watchdog_pretimeouts_to_deliver; - struct work_struct recv_work; + struct work_struct smi_work; =20 spinlock_t xmit_msgs_lock; struct list_head xmit_msgs; @@ -704,7 +704,7 @@ static void clean_up_interface_data(struct ipmi_smi *in= tf) struct cmd_rcvr *rcvr, *rcvr2; struct list_head list; =20 - cancel_work_sync(&intf->recv_work); + cancel_work_sync(&intf->smi_work); =20 free_smi_msg_list(&intf->waiting_rcv_msgs); free_recv_msg_list(&intf->waiting_events); @@ -3602,7 +3602,7 @@ int ipmi_add_smi(struct module *owner, intf->curr_seq =3D 0; spin_lock_init(&intf->waiting_rcv_msgs_lock); INIT_LIST_HEAD(&intf->waiting_rcv_msgs); - INIT_WORK(&intf->recv_work, smi_recv_work); + INIT_WORK(&intf->smi_work, smi_work); atomic_set(&intf->watchdog_pretimeouts_to_deliver, 0); spin_lock_init(&intf->xmit_msgs_lock); INIT_LIST_HEAD(&intf->xmit_msgs); @@ -4808,10 +4808,10 @@ static void handle_new_recv_msgs(struct ipmi_smi *i= ntf) } } =20 -static void smi_recv_work(struct work_struct *t) +static void smi_work(struct work_struct *t) { unsigned long flags =3D 0; /* keep us warning-free. */ - struct ipmi_smi *intf =3D from_work(intf, t, recv_work); + struct ipmi_smi *intf =3D from_work(intf, t, smi_work); int run_to_completion =3D READ_ONCE(intf->run_to_completion); struct ipmi_smi_msg *newmsg =3D NULL; =20 @@ -4883,9 +4883,9 @@ void ipmi_smi_msg_received(struct ipmi_smi *intf, spin_unlock_irqrestore(&intf->xmit_msgs_lock, flags); =20 if (run_to_completion) - smi_recv_work(&intf->recv_work); + smi_work(&intf->smi_work); else - queue_work(system_bh_wq, &intf->recv_work); + queue_work(system_bh_wq, &intf->smi_work); } EXPORT_SYMBOL(ipmi_smi_msg_received); =20 @@ -4895,7 +4895,7 @@ void ipmi_smi_watchdog_pretimeout(struct ipmi_smi *in= tf) return; =20 atomic_set(&intf->watchdog_pretimeouts_to_deliver, 1); - queue_work(system_bh_wq, &intf->recv_work); + queue_work(system_bh_wq, &intf->smi_work); } EXPORT_SYMBOL(ipmi_smi_watchdog_pretimeout); =20 @@ -5064,7 +5064,7 @@ static bool ipmi_timeout_handler(struct ipmi_smi *int= f, flags); } =20 - queue_work(system_bh_wq, &intf->recv_work); + queue_work(system_bh_wq, &intf->smi_work); =20 return need_timer; } --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f179.google.com (mail-oi1-f179.google.com [209.85.167.179]) (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 9096627FD76 for ; Thu, 24 Apr 2025 16:50:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513437; cv=none; b=nnmSZld4C3LnOpCHd+E9fi0dEvleCKawIFcqaEfTCru3UNiyWm/QKkz2Y1VpUZuezUJnybNebxauznsZJb8fXBlFWKaR0SEchoHRDuaWoGnfmd8/2sLPxv8aVKsAi5j+cMKavpBtyfck+7174DmaPnPy1+IrzhILnUfepYTrvpA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513437; c=relaxed/simple; bh=LuPSXS2gDM+3dccuKoPqDx7Vgdx+itgEGLDoJj+6O5c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lLsEDlduQ71fx4H54d/TbWtt2+mTukUtEAVmXCppPjpyNNFgm7lEvlvAJsEXA16HhtEx4U0rmgHQBcwHaEst0QJZlLmea4WrM7qLrlYE0BsrHJJimFBnLVBu9quuGS8cQi0tpic2bc5ly2CrE0q0g5lqV5mMaRG2jl6lv+mdqh0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=s9v0V51b; arc=none smtp.client-ip=209.85.167.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="s9v0V51b" Received: by mail-oi1-f179.google.com with SMTP id 5614622812f47-3f8ae3ed8adso886818b6e.3 for ; Thu, 24 Apr 2025 09:50:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513434; x=1746118234; 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=OcNpKj2ULrV1lWDMQw0DBFTmPSr8bbwLxdvwy2alDVU=; b=s9v0V51b95Lcy2UOPFV5mTZIkbA2JF93VVlBACJ/x67Pj1r5igyyHeio4eMDZ/2dnF rtXSLCbHTGdSLj4ARRUAgu2+s61KujOa4HSSPKPLfB14vo0DE/+wLPDOZgSCet9hYKjI jOQdq+NMt8gemvB5tCe6KCMlisI2IESgXnmLvG2YLc+r+zc3AYVTYODVlg5teT70tuP5 mWfAAWGC1PVKW09N1yqA4ie/sTViWn6nITX9SAif/USpybjCyqK3t/Ix9roEcb4v7rSe fi/aAQGzI8A0xLFIW5G+JSsxXrs8WsP2LQ2L8sVYQHpfXT44z2CR/3VEewvohet0Wu9h IBGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513434; x=1746118234; 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=OcNpKj2ULrV1lWDMQw0DBFTmPSr8bbwLxdvwy2alDVU=; b=SOGgI6ZviGgtvDswCaCPpU4js4LA/zgWZvgzOEvg058Dm3ncXlh8mpBfncbYjzMMC3 LXAo5YkHQBc1JNs+U+vLABThoQl6GQK2IWUj3T3Ck1exoZn+kx5DWzJeBRPrKoQiunja KItP+M4UR6pM8QcEzgUJ6o8PZEPi5RSoKuOYM73snh1p1qBjJuokoGL2/OLMcynJI37D kmVwAit9QuBATCj4/YkVcbbHgcbt313jNeW7whpqvEEZ8LA56sVzvr+/l6vxRtgDl4J0 Tu4euMVfk6gUQ8hRtlvVatFgpO6LkEKRijT919rlPTI0WAWAgzWHgLiYYa5rXBw3lotf ktIA== X-Gm-Message-State: AOJu0YyDFh4xVJkdYt8jMCFZ9mu2JgztFJEp1Dss0Ossh46gqobXy4th JbgbaYH54vbck1hlidCfYJNrd3E5/xfXrEUpy3zUJCTK1EfJqEHgdf+dCRsdxo2UXpH+v77X4ke I X-Gm-Gg: ASbGnctIURQwTqMg4tT4+V8JsnKpdC3T9ziHzn58IJJF6zYaQ03khe6n6i4JrVWT2Vb LSM+I7oMEcB8BwKL1ZIoU3NV3s5JaiiWxs0AxH/ptZONanW739IqBghAUQV5/5iOV/R3KtWjNCs hT8aJ/uvd7UtaVsaH8h1f6+qys08PT1sjnS9yDmIHZ6Na+n2ZPJ2064DZ16+AHv3XOcGniBuCtz CjhScwZOwRIz5IHU/Pp7rxZAIwRefPQrNjoxufmzuEd4wPAFl2YEwWG/Is2V15aijItNTJSfg1l 1YEsAZL3SBgm85pZ+ZWAha2fsQ0w/O7LXj7aATrki5nmNQ== X-Google-Smtp-Source: AGHT+IELql/wRvoa8BM3ex/dBaoFvABrW93Nk4W9CtFRx3vZMu1Go4RmhcXkY4KkH82YYqlFrrynyw== X-Received: by 2002:a05:6808:3198:b0:3f6:6d32:bdb4 with SMTP id 5614622812f47-401eb35f74bmr1991846b6e.24.1745513434105; Thu, 24 Apr 2025 09:50:34 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 006d021491bc7-60646862ec5sm319763eaf.3.2025.04.24.09.50.31 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:32 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 03/23] ipmi:msghandler: Move timer handling into a work queue Date: Thu, 24 Apr 2025 11:49:40 -0500 Message-ID: <20250424165020.627193-4-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" Get all operations that manipulate the interface list into thread context. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 22813b1598b0..e08ec9918a32 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -5083,8 +5083,11 @@ static struct timer_list ipmi_timer; =20 static atomic_t stop_operation; =20 -static void ipmi_timeout(struct timer_list *unused) +static void ipmi_timeout_work(struct work_struct *work) { + if (atomic_read(&stop_operation)) + return; + struct ipmi_smi *intf; bool need_timer =3D false; int index; @@ -5111,6 +5114,16 @@ static void ipmi_timeout(struct timer_list *unused) mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES); } =20 +static DECLARE_WORK(ipmi_timer_work, ipmi_timeout_work); + +static void ipmi_timeout(struct timer_list *unused) +{ + if (atomic_read(&stop_operation)) + return; + + queue_work(system_bh_wq, &ipmi_timer_work); +} + static void need_waiter(struct ipmi_smi *intf) { /* Racy, but worst case we start the timer twice. */ @@ -5538,6 +5551,7 @@ static void __exit cleanup_ipmi(void) */ atomic_set(&stop_operation, 1); del_timer_sync(&ipmi_timer); + cancel_work_sync(&ipmi_timer_work); =20 initialized =3D false; =20 --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oo1-f51.google.com (mail-oo1-f51.google.com [209.85.161.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 30AF8288CA1 for ; Thu, 24 Apr 2025 16:50:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513439; cv=none; b=ExuSpUqUBETJNuVDB1n76DQBltQP3uuonySmFEr+CKqcQ64PUD93uIJC7mF4ACAk5HFsAtUeyKMBRJe8xnFT6Ti5Ht4czmahsw9bCmBm9cU9U+b2fiVJQ+5h4DgNAtnKoec3f44bDx4asho5wfgCVu+gKacx+86g+L5eEDO6u8g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513439; c=relaxed/simple; bh=KUifTsl6uYWPkVN/kw6Cc33Z7cdDir1H9t3W+GvVit0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MevJhWanKCDJ+BJ02hADQ7WdxtRO3sbN7g33QhVBQyehQBek7f2fJ5BulAyjuetI7uq+dlBXNECloj9Xl9rNraeiD742RNj7HFwxpRQLOdV0Ts4k1iXHjrg2MPf0s6A8f11ulzN9F7w6UR7mheBG5DnIipdpu4YT/RQPk7hwBM0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=Hl33PXVT; arc=none smtp.client-ip=209.85.161.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="Hl33PXVT" Received: by mail-oo1-f51.google.com with SMTP id 006d021491bc7-604ad6c4cf1so478046eaf.3 for ; Thu, 24 Apr 2025 09:50:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513436; x=1746118236; 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=SZCnXReemUxFfOn+5GlvXuuUi6hFy4IX7Q4LFZGGFqo=; b=Hl33PXVTvXnk+kJHgV9X1ViKtgO1fAUq8IkgQXoNb5PTzZQQQekAzQLumYxoiKPDe5 +AaLqQe3wyv4ZfiaMJ4ATtcG7a9755LJpYMu3sx+m1Xqkye0ZZg2OqElfJrYAns6shOp Q64BKnpxm4IM3/QFiF7YI3GQUIH4HAcNk6FWVoY7jhgdMIgAmsEQ1VqBpCEumYDuBYFK J9eyE7o/HQoavBVdCSQyOpkzcuG4dWvVUPgOAniV6QrpIso+fMSe+DzJfn+a9PhcMnPn WNFSKIIDfA7xt1466Y15j8OaVppRbL1iOqEuPChQHtTp/LqeGgZlzE1VJdhG9aJSks1S 3pTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513436; x=1746118236; 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=SZCnXReemUxFfOn+5GlvXuuUi6hFy4IX7Q4LFZGGFqo=; b=KQ3Kfm8rigtYMmsEbYyGi8M0RGQ02PDWmUpAn95SctP0z/pvtp4maCyexUH0N91HTL kXziDTEukPFcqKzNWnD8ZUctvUK0kRC+RAQrm+OZGynhHP2NQld3RwoXZkLxTiXe2g3Q Ri7anGjrsI5fouUxq5OV41uLDeRNUYnHOABZPggtRu78p0MAT9VgSZjXgqFuCWxLcRxH Ij5Wz5KNu7cI1UrpnQ4ZkG9uCykRZeasVuUUeStrnarW4dnA/7mLllnJpU7ytRl1mrAp XDEs1LJqN7CQ6AtoXnADWO7Pz1vnMxk7sv1QMBTT63dNeP3sGO0bBlW+xVDgibPBWSw7 Ztzw== X-Gm-Message-State: AOJu0YyCRk2fd+hWkCy7kpoZ/SoNAayOlvYMTY58BBlb/kga06l2EOfr tG3OHtHnYbnzDrkvEtM5q0JYlLK1KUV32VdXap1Vc9MajiX1gtBxZ0c1lc9a234yBbJqV1STrid d X-Gm-Gg: ASbGncsDBfFi+p63/89yDjoabqWZQGNgNiaLC2GN/lG2xb1ijMVY88AD49ZvNOP14N4 M2kxkcfwGUoA7VOiobkf8+QBubIbhOSNF4w65CLPjo8BaG0vftR3xDDV1eQGequtjuV/5hgdHQv fLeWXiHRKWLoCs3quvAhRePbnJDPY0q4l0BpYr4Wb0miF3J4cyOHpnxrI4lp8I5xxaExnp3tqWG EeEAqjUpYXcb/F9agpNney15vxFhxPA8tLoQVCd7XRbiL9oHf3yMT3gTm9xzGWLchxLkQ0Vldkf EjlJ2+2KYD+ceRhsX4Ncs2q7dQ7cp+w5tqQ= X-Google-Smtp-Source: AGHT+IGc6CxvVncjGX9yYC21KFrqVXSC+mtv5R2uoUCopPdPsclItA9g8NY1N3XeTKAv8V27mY7Pfw== X-Received: by 2002:a05:6820:1e04:b0:603:f777:980a with SMTP id 006d021491bc7-6064fd81116mr123021eaf.7.1745513436253; Thu, 24 Apr 2025 09:50:36 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 006d021491bc7-60646863e7dsm324897eaf.6.2025.04.24.09.50.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:34 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 04/23] ipmi:msghandler: Deliver user messages in a work queue Date: Thu, 24 Apr 2025 11:49:41 -0500 Message-ID: <20250424165020.627193-5-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" This simplifies the locking and lets us remove some weird event handling code. deliver_response() and friends can now be called from an atomic context. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 41 ++++++++++++++++++----------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index e08ec9918a32..fc939b5bb7f8 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -495,6 +495,12 @@ struct ipmi_smi { struct seq_table seq_table[IPMI_IPMB_NUM_SEQ]; int curr_seq; =20 + /* + * Messages queued for deliver to the user. + */ + struct mutex user_msgs_mutex; + struct list_head user_msgs; + /* * Messages queued for delivery. If delivery fails (out of memory * for instance), They will stay in here to be processed later in a @@ -525,7 +531,6 @@ struct ipmi_smi { spinlock_t events_lock; /* For dealing with event stuff. */ struct list_head waiting_events; unsigned int waiting_events_count; /* How many events in queue? */ - char delivering_events; char event_msg_printed; =20 /* How many users are waiting for events? */ @@ -945,9 +950,13 @@ static int deliver_response(struct ipmi_smi *intf, str= uct ipmi_recv_msg *msg) struct ipmi_user *user =3D acquire_ipmi_user(msg->user, &index); =20 if (user) { - atomic_dec(&user->nr_msgs); - user->handler->ipmi_recv_hndl(msg, user->handler_data); + /* Deliver it in smi_work. */ + kref_get(&user->refcount); + mutex_lock(&intf->user_msgs_mutex); + list_add_tail(&msg->link, &intf->user_msgs); + mutex_unlock(&intf->user_msgs_mutex); release_ipmi_user(user, index); + queue_work(system_bh_wq, &intf->smi_work); } else { /* User went away, give up. */ ipmi_free_recv_msg(msg); @@ -1610,13 +1619,6 @@ int ipmi_set_gets_events(struct ipmi_user *user, boo= l val) atomic_dec(&intf->event_waiters); } =20 - if (intf->delivering_events) - /* - * Another thread is delivering events for this, so - * let it handle any new events. - */ - goto out; - /* Deliver any queued events. */ while (user->gets_events && !list_empty(&intf->waiting_events)) { list_for_each_entry_safe(msg, msg2, &intf->waiting_events, link) @@ -1627,17 +1629,11 @@ int ipmi_set_gets_events(struct ipmi_user *user, bo= ol val) intf->event_msg_printed =3D 0; } =20 - intf->delivering_events =3D 1; - spin_unlock_irqrestore(&intf->events_lock, flags); - list_for_each_entry_safe(msg, msg2, &msgs, link) { msg->user =3D user; kref_get(&user->refcount); deliver_local_response(intf, msg); } - - spin_lock_irqsave(&intf->events_lock, flags); - intf->delivering_events =3D 0; } =20 out: @@ -3590,6 +3586,8 @@ int ipmi_add_smi(struct module *owner, } if (slave_addr !=3D 0) intf->addrinfo[0].address =3D slave_addr; + INIT_LIST_HEAD(&intf->user_msgs); + mutex_init(&intf->user_msgs_mutex); INIT_LIST_HEAD(&intf->users); atomic_set(&intf->nr_users, 0); intf->handlers =3D handlers; @@ -4814,6 +4812,7 @@ static void smi_work(struct work_struct *t) struct ipmi_smi *intf =3D from_work(intf, t, smi_work); int run_to_completion =3D READ_ONCE(intf->run_to_completion); struct ipmi_smi_msg *newmsg =3D NULL; + struct ipmi_recv_msg *msg, *msg2; =20 /* * Start the next message if available. @@ -4851,6 +4850,16 @@ static void smi_work(struct work_struct *t) rcu_read_unlock(); =20 handle_new_recv_msgs(intf); + + mutex_lock(&intf->user_msgs_mutex); + list_for_each_entry_safe(msg, msg2, &intf->user_msgs, link) { + struct ipmi_user *user =3D msg->user; + + atomic_dec(&user->nr_msgs); + user->handler->ipmi_recv_hndl(msg, user->handler_data); + kref_put(&user->refcount, free_user); + } + mutex_unlock(&intf->user_msgs_mutex); } =20 /* Handle a new message from the lower layer. */ --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-ot1-f50.google.com (mail-ot1-f50.google.com [209.85.210.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 0DAEE28D83E for ; Thu, 24 Apr 2025 16:50:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513443; cv=none; b=cV/Dx7A7A0lDplzXtQv0e47TkDqKCNVuhmnmrbi1gLtJ7ubLNIAlekxGEII0dcFo0AHu/i1SsG8mxz0peCU/zDweO7/r0KC8ozxMzJvJeg74Tm+BD41yAuhxK1DQCu4UNh6b9D4wPG87Zly/Dg0s3c2sE+CvPRLJtGFgybS+44s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513443; c=relaxed/simple; bh=Ujjkg59SLEcKdjGn52vwG7qL/p3T6kELYMLWOGS0suQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CpmUpsFEy3Klf+fhAK/PJnqM410zifUPDd9rhXOYD17QP1p3cZU9hThC1KgfA4wDA+P+NGltF+yRoKjCbaHuOWsNM2zGfoHjOx2b1cssfhLaltX/YfEtEWFK0duiBmIs+lPQWTUdsmQUANEGu0e06USZgdjCrP+iTdaM7CawDqs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=sFoih8ON; arc=none smtp.client-ip=209.85.210.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="sFoih8ON" Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-72bb9725de1so325560a34.2 for ; Thu, 24 Apr 2025 09:50:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513438; x=1746118238; 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=2mt9MAvn/ACFqWqqnCeEAAT+y/0Ha6ZnHJ12VSLv/cA=; b=sFoih8ONcN4IN3GdMO4JRPoLB8yo5SBYrZMMs8s+5l9SwX8x17+5P1sksV2XtfbLx/ w+pf8DypEpdRxpWfsy4Gc4lrJsyLAoL8pNtvvuJO5m98f1nmWp4tPkAW5HKB6xrMqHXj I7Nv4O04qab0w+OyYriaX1VFCad8A0kLuUGfZoS57vCUxJTSpkWg5DxaQ8HrsnjBPCBY Cr4f8LtjHFRPe+ACuPr03TJo9aP39SM55oeWCBzbYdWbir4k8MoIaFlvG9sVrQZzrqmW n+A9LgzaTxhdDTIdGBB6eHQIJvFdKYu2kQnxTY+ZsSVTkn94KiBSuqsSQcOP5avgmojU /5vA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513438; x=1746118238; 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=2mt9MAvn/ACFqWqqnCeEAAT+y/0Ha6ZnHJ12VSLv/cA=; b=XOr3UUdt5l5IBXP9c4v1kWgUE9gsB2dXlb5BFTWSPoQly7fDE6qXtMF7hj6pOODF3+ H/E43Gy13zgszo5VV2fS2+F2GRC5osr4pfunM1Ng4rsRMVmSy2Y6vMDHj999Uexsamw+ QGevRvXroHy/IbU1OZjzrPoXXnvxhn9LDyJ0UCPJXaoxPRmIrjHkESW0g6RpTcNjV//b LLPlkQKTov7HVptJbX0xrogHXLyDT84XyNii3gd1oKFFvXbBaPniAdXGvSnnMWpimfTA ZRGU4KQoRD7uL35lRcYpStOBSgbkMAtfx38N3TV0fCLWJ8ESubRstnGqz7vnU09uHmTC 41SA== X-Gm-Message-State: AOJu0YzTcsAjx519NUicgyrKlETM/cTTk/LVGSY23ioLl4/gNTMZt7JG n4dGFQHwmHsWRqAhNpPpMg8QjzSXT2I3noQEu0Wb3Pq3U5Ool5KlcpIV3p3nV633DBpxmH+QiDU l X-Gm-Gg: ASbGncu7t+YeHoaZggaOwTrjUY0RwdKPCFftIimFs6vNFPLcSBg1iz8Um5K26XaGPCK 28vnea0YvO18r7l+zArA2L+eFWzgtd96TPzCVj4a+aMIkJ0zg+jTxSEEjCPRoMXVmskMTtptDZf 9PlhHgPTmpW8ORsoX6H/m4YOl65yeI3T7/MKs1deFaACoEVzQyF4KIbrOWpRCxx1lMm2rCkQGw+ suxUQzDv9K6gpkZ6f6M2lUexXFZV3cZ/Cb+AsFNogx3696GssW/JslUz5SfN5wMPyUQkuXx5jQR kFeS/z4aUYcBJTdVO1ymk9qp0pRRtkpV8Cw= X-Google-Smtp-Source: AGHT+IHUBeiQqvCVK5Iwa41pbqkYZJ4oWj+0zn9TgmVdUvQdRn9eq8bIm2wn5C6jA0S/xoOjLt70Kg== X-Received: by 2002:a05:6830:6086:b0:72b:943f:dda8 with SMTP id 46e09a7af769-73059def7bamr397812a34.26.1745513438494; Thu, 24 Apr 2025 09:50:38 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 46e09a7af769-7304f37b12fsm297025a34.43.2025.04.24.09.50.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:38 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 05/23] ipmi_msghandler: Change the events lock to a mutex Date: Thu, 24 Apr 2025 11:49:42 -0500 Message-ID: <20250424165020.627193-6-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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 can only be called from thread context now. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index fc939b5bb7f8..09e56e4141b7 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -528,7 +528,7 @@ struct ipmi_smi { * Events that were queues because no one was there to receive * them. */ - spinlock_t events_lock; /* For dealing with event stuff. */ + struct mutex events_mutex; /* For dealing with event stuff. */ struct list_head waiting_events; unsigned int waiting_events_count; /* How many events in queue? */ char event_msg_printed; @@ -1594,7 +1594,6 @@ EXPORT_SYMBOL(ipmi_set_maintenance_mode); =20 int ipmi_set_gets_events(struct ipmi_user *user, bool val) { - unsigned long flags; struct ipmi_smi *intf =3D user->intf; struct ipmi_recv_msg *msg, *msg2; struct list_head msgs; @@ -1606,7 +1605,7 @@ int ipmi_set_gets_events(struct ipmi_user *user, bool= val) =20 INIT_LIST_HEAD(&msgs); =20 - spin_lock_irqsave(&intf->events_lock, flags); + mutex_lock(&intf->events_mutex); if (user->gets_events =3D=3D val) goto out; =20 @@ -1637,7 +1636,7 @@ int ipmi_set_gets_events(struct ipmi_user *user, bool= val) } =20 out: - spin_unlock_irqrestore(&intf->events_lock, flags); + mutex_unlock(&intf->events_mutex); release_ipmi_user(user, index); =20 return 0; @@ -3605,7 +3604,7 @@ int ipmi_add_smi(struct module *owner, spin_lock_init(&intf->xmit_msgs_lock); INIT_LIST_HEAD(&intf->xmit_msgs); INIT_LIST_HEAD(&intf->hp_xmit_msgs); - spin_lock_init(&intf->events_lock); + mutex_init(&intf->events_mutex); spin_lock_init(&intf->watch_lock); atomic_set(&intf->event_waiters, 0); intf->ticks_to_req_ev =3D IPMI_REQUEST_EV_TIME; @@ -4391,7 +4390,6 @@ static int handle_read_event_rsp(struct ipmi_smi *int= f, struct list_head msgs; struct ipmi_user *user; int rv =3D 0, deliver_count =3D 0, index; - unsigned long flags; =20 if (msg->rsp_size < 19) { /* Message is too small to be an IPMB event. */ @@ -4406,7 +4404,7 @@ static int handle_read_event_rsp(struct ipmi_smi *int= f, =20 INIT_LIST_HEAD(&msgs); =20 - spin_lock_irqsave(&intf->events_lock, flags); + mutex_lock(&intf->events_mutex); =20 ipmi_inc_stat(intf, events); =20 @@ -4481,7 +4479,7 @@ static int handle_read_event_rsp(struct ipmi_smi *int= f, } =20 out: - spin_unlock_irqrestore(&intf->events_lock, flags); + mutex_unlock(&intf->events_mutex); =20 return rv; } --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-ot1-f48.google.com (mail-ot1-f48.google.com [209.85.210.48]) (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 4A04628D836 for ; Thu, 24 Apr 2025 16:50:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513443; cv=none; b=D444Dr1yBWFdmScUxXYzNn0OzGbl3uxY9Okoz+cNrMKZ+7MFMlC4bhDAaGsUtQA09vg41JVV9lvkyzkb9FS1kZ2gSHRpUgvT6hjNnYXuFvOtvUeiPQe2jk3uBpdW4NMlKCrjQHTMGI8CAX59lfN/M9MPJn8+lDPHXAgYS+xD+yE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513443; c=relaxed/simple; bh=++osSHXvTmPVe9md2OTag6QoCHA/mLsZUu+Mt6oJKxI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jiDceogrOltSQ0qvWo5mPiO/jTDAS892Esdj9yBmtbUpZ5P65X2gXlOrrD3YDfB2aSD+1TLHYt3MVFaxiTNJoMElO/t4XLELzpTdmb7chUt+pd+E00ajGNd8w1W2WN0hq2Ndb4U84Rzq+s9kDX2V0NX+p0ZeRjw+GWHEgR3CKK8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=Ec4vgdbq; arc=none smtp.client-ip=209.85.210.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="Ec4vgdbq" Received: by mail-ot1-f48.google.com with SMTP id 46e09a7af769-72bc3987a05so758702a34.1 for ; Thu, 24 Apr 2025 09:50:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513440; x=1746118240; 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=/GnhQTtfP1kbpsamg0T3MymU+hfTFmTPAkbgLQlgvws=; b=Ec4vgdbqbf3zsHiX3LEXgJ0fEQAZ+iual/BUNJoz7vzwTZbpTy2pdelsGfHEByQ29/ 7G9+Gn1r77yyFpFa4b8/sLnrPYyU6LObcir6F7AFboGJHySQRdJeMzg9p4QwwtLOj3gx tNR4hz2Sk79GQJVm7DgdmhWvu+u7sUgxiOyXRb2DUl+pTkWps5me1GdxMyfClxvrKFlB a+bcaqPYsc1Jyc4SkGgU9z25IgW8umn9bYeNIF+QswJviYV3L9pd1nMq/tWWkOlp+3Wl QakdGQJaz8K9OFqg3O4JM/R3g1+k1XE9kodJHtoicr/5K0SLgHbAIjqgQ/m6BsAMcJbr He/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513440; x=1746118240; 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=/GnhQTtfP1kbpsamg0T3MymU+hfTFmTPAkbgLQlgvws=; b=N/tllpayZAOY+W8BOMMicZ6EphSwmG8kA5afBJ+Nl3z15ufwR72YU8CApwKHHeiBGw xMnibZGuyWKVRH00pYzpBmIwrUu03JUo5UGsMTZHRF5CnDH1IYGfARQkOJGk0bKUcVMR tsKOZJMvolK1P1jcbnZHyLdt8dQJsuMntmlru/4wrvCr+Vu95sndxhj52r3zA881W7hT wI6AZFgwJMYzKMUuw702Ymvt+Eif6CKHTpV6dl2vK5mT+rqD3HmzAhx+Eq62BHgN5YE1 3BDZG3K5ANkz//FDp7im+z4pweuIsGKZd/laI4CLH2CLppcmgxOXu8mXIsw4Ll/OhBV7 JQVw== X-Gm-Message-State: AOJu0Yzcej0UKMyMtSwpJK4PwpgXupdZv3HNFaJ2Cv70dlUAHkx2O3R8 pDAawHUMFyorZN0RBQSchq9hIE7KTvymjpPmBueFxk6kkXDpBjaetRxcUfjqqt3UtFdYCZT0nlg b X-Gm-Gg: ASbGncuy0y+49BfEwGN2h7MwnC9P9xMT3sHgg9ebvjSvGsrzjoQ46BBeImjlXhUZuNH 4acxVPRhmEdcRB+2oENmzoqPHAvYjOI8PrtCTrFNTiziGRfzming/9Dd4zGvGxnrdVA7WaRQQoo 47L5lX/k7RYgE8eL9s5IECoYKVvomeFTKqN+XP4OgDeBpJiZqf2vuGZCy83wdlXlWSO/EPx/V8P uOIWa+fa7rOJJx/QFmQxUrd4gNpuT2BteYj35HRTtgsP4Mlat2SaHdnKmYO/uQXKvn4CJoMPidT XMOnu6DF8ZBgJJ2m4RkwTKiqmaXUatDvDeE= X-Google-Smtp-Source: AGHT+IEY44KBD1aFubYN6jTShqSmWRM3+Po/JZz2E+Ydlym6ZuKZazjnHqe3n1F3LmG4zH6CwubL5Q== X-Received: by 2002:a9d:7093:0:b0:72e:c42a:1797 with SMTP id 46e09a7af769-7304fb1402amr1617165a34.13.1745513439712; Thu, 24 Apr 2025 09:50:39 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 46e09a7af769-7304f1a1b8dsm301061a34.17.2025.04.24.09.50.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:39 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 06/23] ipmi:msghandler: Use the system_wq, not system_bh_wq Date: Thu, 24 Apr 2025 11:49:43 -0500 Message-ID: <20250424165020.627193-7-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" Everything can be run in thread context now, don't use the bh one. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 09e56e4141b7..c060be93562d 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -956,7 +956,7 @@ static int deliver_response(struct ipmi_smi *intf, stru= ct ipmi_recv_msg *msg) list_add_tail(&msg->link, &intf->user_msgs); mutex_unlock(&intf->user_msgs_mutex); release_ipmi_user(user, index); - queue_work(system_bh_wq, &intf->smi_work); + queue_work(system_wq, &intf->smi_work); } else { /* User went away, give up. */ ipmi_free_recv_msg(msg); @@ -4892,7 +4892,7 @@ void ipmi_smi_msg_received(struct ipmi_smi *intf, if (run_to_completion) smi_work(&intf->smi_work); else - queue_work(system_bh_wq, &intf->smi_work); + queue_work(system_wq, &intf->smi_work); } EXPORT_SYMBOL(ipmi_smi_msg_received); =20 @@ -4902,7 +4902,7 @@ void ipmi_smi_watchdog_pretimeout(struct ipmi_smi *in= tf) return; =20 atomic_set(&intf->watchdog_pretimeouts_to_deliver, 1); - queue_work(system_bh_wq, &intf->smi_work); + queue_work(system_wq, &intf->smi_work); } EXPORT_SYMBOL(ipmi_smi_watchdog_pretimeout); =20 @@ -5071,7 +5071,7 @@ static bool ipmi_timeout_handler(struct ipmi_smi *int= f, flags); } =20 - queue_work(system_bh_wq, &intf->smi_work); + queue_work(system_wq, &intf->smi_work); =20 return need_timer; } @@ -5128,7 +5128,7 @@ static void ipmi_timeout(struct timer_list *unused) if (atomic_read(&stop_operation)) return; =20 - queue_work(system_bh_wq, &ipmi_timer_work); + queue_work(system_wq, &ipmi_timer_work); } =20 static void need_waiter(struct ipmi_smi *intf) --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f171.google.com (mail-oi1-f171.google.com [209.85.167.171]) (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 86FEA28DEEB for ; Thu, 24 Apr 2025 16:50:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513446; cv=none; b=tfPLIjPBnSah9QGDZXOHJVQI4N2k8Jk3yh0F0E+BvJeCqOOCJFbGWouDM6eUBSKtQeXs9VOYPMGjyK8GIMFQxYnbqUediqQ7NErVNpOmfVFvcD1GEWutlr+r9HcQ97h55NYf2h2QEXCPBYPL+lfAms1lljj/CWZf4k/jqs0536I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513446; c=relaxed/simple; bh=x/1tR+7YNpv1X2WuXip96loh6bgp5NymXOuHcJX291I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Dxtg75T/WeZCWtKU95zefoTYW53PbJaqG/helLE7Kkp7YCnCBAJSLGncAkLcYpspIt1izb6aF3BTQONi/+ecT4HguGyPjI1FRpX8oN22UNbgnGqq9NoLjBMjPUu6TueQzLVBBd75cOM0YQPFCeIKyNxGPGDFyiZmrtTWP9BeiLg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=H+Z99l5e; arc=none smtp.client-ip=209.85.167.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="H+Z99l5e" Received: by mail-oi1-f171.google.com with SMTP id 5614622812f47-3f8ae3ed8adso886934b6e.3 for ; Thu, 24 Apr 2025 09:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513441; x=1746118241; 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=0we9ZQq4peTK4zKEBVF6z6jfkkvOUWW82/uvCZ/QL1c=; b=H+Z99l5e53Lt62k2YjHa9GOZcr0hXJSTyvbrrOwc7ptxfnq6EnEJIKGuPB3NRYJOjw qrFn6C41i/LPb9YHgZ5iIyEe4NQZiccsBu4jWTNwRMr1qZgYewN19ZLMsc1tRwsh1osb mBPvMejpK7WW/rr6pX0e1m8pzjJcWAl13KZ7TLQ4Mnuf5kAIOpu0Wt52+Os7Qi8Br/9W jv6QiN0G/XHnvcIEMu2KWQbgAH0PSECI4FwhhbBLAQzXdRWgQNTsVlrgCik6yMACkJUw o94Q7HcAOXICPYpC3HYtWaPpt0HSV07q4Momvdj+PMdnwG66yCoSMDNiwigYsQFyaTFK mQGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513441; x=1746118241; 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=0we9ZQq4peTK4zKEBVF6z6jfkkvOUWW82/uvCZ/QL1c=; b=aSo0QVEvnHR4zixUS3s01/MtHV5kIL0JeF5Es2W6cmGx6jEIhpjvkCDOkqjrRnKf60 4iM3wg5fmJfUTmnUCn5BHbVtVLGA0LVUqB1NDu8F4wyCcq1gvKrNCHh9c7pBA/reaj+W raPTMbEheTJO4IdqYkoQJH0UmByi3DZZXEPDyUOFmYbWp49YGr1p6L1kknR0hU8lZEHz 6pELF7re9XvxCwNfWqHyHIFv9m8ctlXnIcjgw0XUZ5deRJWoSUwHOzbOchpZ1shRO10d 4qLnKgHFVNE4xfEpg2ucK5xeIvR8/nhsUcZfgJVNub+w3JG6XmH6Z+8xouTy67JHxyMh eWlg== X-Gm-Message-State: AOJu0YzJ4ozI+qa2ifBX3l+LKwD6GdZ26exnl6IJYy0RVOy0zgc8y6t3 eRYsH65lqihZ/6lXfSTKWmmEzy9eNUZ+HrYS2uPWwN9Kj6v2ruxSe3hGFLiJ0T8Ski0DCX6lQmX G X-Gm-Gg: ASbGncsmtpQd5EJvQPZryG3+Mptm16P3eEu5oW9SZ9UxuqOd7mmba1FURi8u5IjV1IQ NbhZ4oH8p3WOcgZlLrzTVa+E1VQZVNlWeFH+yJfedmfkzDKUcgE/NdGXGnNSsMaPZSmPmE5mQNw TIAAQbYbYKSpASJ0rpjgQ9pS+J+/fT5gpYuX7Th9oKhU3yrC4nDZ6crBbfMzXcvBzaGcfy4scgp aDutrr92JyQclYkouh00+ZgYgYa+c1smH1YiW7hgNxupTZEkcVBDbFBRv3lZbGZnoYig23DC7Bu Oxw1EMJ3OWCmI6PxY6OrKAk2bbYpKDv0BH8= X-Google-Smtp-Source: AGHT+IErfgO6vYBZlqli6tMt7WKhlz4RkzqFWo2rGlEvw4dnQsV0WieGa/IkdZlE3abpkevP8cduUw== X-Received: by 2002:a05:6808:2187:b0:3f6:7fd0:808c with SMTP id 5614622812f47-401eb2a7b39mr1869889b6e.16.1745513441174; Thu, 24 Apr 2025 09:50:41 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 5614622812f47-401ec8e32f4sm310876b6e.23.2025.04.24.09.50.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:40 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 07/23] ipmi:msghandler: Remove srcu from the ipmi user structure Date: Thu, 24 Apr 2025 11:49:44 -0500 Message-ID: <20250424165020.627193-8-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" With the restructures done, srcu is no longer required, and it's fairly onerous. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 310 ++++++++++++---------------- 1 file changed, 133 insertions(+), 177 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index c060be93562d..7dd264e40957 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -180,14 +180,8 @@ MODULE_PARM_DESC(max_msgs_per_user, struct ipmi_user { struct list_head link; =20 - /* - * Set to NULL when the user is destroyed, a pointer to myself - * so srcu_dereference can be used on it. - */ - struct ipmi_user *self; - struct srcu_struct release_barrier; - struct kref refcount; + refcount_t destroyed; =20 /* The upper layer that handles receive messages. */ const struct ipmi_user_hndl *handler; @@ -200,28 +194,25 @@ struct ipmi_user { bool gets_events; =20 atomic_t nr_msgs; - - /* Free must run in process context for RCU cleanup. */ - struct work_struct remove_work; }; =20 -static struct workqueue_struct *remove_work_wq; - -static struct ipmi_user *acquire_ipmi_user(struct ipmi_user *user, int *in= dex) - __acquires(user->release_barrier) +static void free_ipmi_user(struct kref *ref) { - struct ipmi_user *ruser; + struct ipmi_user *user =3D container_of(ref, struct ipmi_user, refcount); =20 - *index =3D srcu_read_lock(&user->release_barrier); - ruser =3D srcu_dereference(user->self, &user->release_barrier); - if (!ruser) - srcu_read_unlock(&user->release_barrier, *index); - return ruser; + vfree(user); } =20 -static void release_ipmi_user(struct ipmi_user *user, int index) +static void release_ipmi_user(struct ipmi_user *user) { - srcu_read_unlock(&user->release_barrier, index); + kref_put(&user->refcount, free_ipmi_user); +} + +static struct ipmi_user *acquire_ipmi_user(struct ipmi_user *user) +{ + if (!kref_get_unless_zero(&user->refcount)) + return NULL; + return user; } =20 struct cmd_rcvr { @@ -327,6 +318,8 @@ struct bmc_device { }; #define to_bmc_device(x) container_of((x), struct bmc_device, pdev.dev) =20 +static struct workqueue_struct *bmc_remove_work_wq; + static int bmc_get_device_id(struct ipmi_smi *intf, struct bmc_device *bmc, struct ipmi_device_id *id, bool *guid_set, guid_t *guid); @@ -451,11 +444,10 @@ struct ipmi_smi { struct list_head link; =20 /* - * The list of upper layers that are using me. seq_lock write - * protects this. Read protection is with srcu. + * The list of upper layers that are using me. */ struct list_head users; - struct srcu_struct users_srcu; + struct mutex users_mutex; atomic_t nr_users; struct device_attribute nr_users_devattr; struct device_attribute nr_msgs_devattr; @@ -502,10 +494,11 @@ struct ipmi_smi { struct list_head user_msgs; =20 /* - * Messages queued for delivery. If delivery fails (out of memory - * for instance), They will stay in here to be processed later in a - * periodic timer interrupt. The workqueue is for handling received - * messages directly from the handler. + * Messages queued for processing. If processing fails (out + * of memory for instance), They will stay in here to be + * processed later in a periodic timer interrupt. The + * workqueue is for handling received messages directly from + * the handler. */ spinlock_t waiting_rcv_msgs_lock; struct list_head waiting_rcv_msgs; @@ -635,8 +628,6 @@ static DEFINE_MUTEX(ipmidriver_mutex); =20 static LIST_HEAD(ipmi_interfaces); static DEFINE_MUTEX(ipmi_interfaces_mutex); -#define ipmi_interfaces_mutex_held() \ - lockdep_is_held(&ipmi_interfaces_mutex) static struct srcu_struct ipmi_interfaces_srcu; =20 /* @@ -710,13 +701,14 @@ static void clean_up_interface_data(struct ipmi_smi *= intf) struct list_head list; =20 cancel_work_sync(&intf->smi_work); + /* smi_work() can no longer be in progress after this. */ =20 free_smi_msg_list(&intf->waiting_rcv_msgs); free_recv_msg_list(&intf->waiting_events); =20 /* * Wholesale remove all the entries from the list in the - * interface and wait for RCU to know that none are in use. + * interface. */ mutex_lock(&intf->cmd_rcvrs_mutex); INIT_LIST_HEAD(&list); @@ -760,7 +752,7 @@ int ipmi_smi_watcher_register(struct ipmi_smi_watcher *= watcher) =20 index =3D srcu_read_lock(&ipmi_interfaces_srcu); list_for_each_entry_rcu(intf, &ipmi_interfaces, link, - lockdep_is_held(&smi_watchers_mutex)) { + lockdep_is_held(&smi_watchers_mutex)) { int intf_num =3D READ_ONCE(intf->intf_num); =20 if (intf_num =3D=3D -1) @@ -784,9 +776,6 @@ int ipmi_smi_watcher_unregister(struct ipmi_smi_watcher= *watcher) } EXPORT_SYMBOL(ipmi_smi_watcher_unregister); =20 -/* - * Must be called with smi_watchers_mutex held. - */ static void call_smi_watchers(int i, struct device *dev) { @@ -946,17 +935,15 @@ static int deliver_response(struct ipmi_smi *intf, st= ruct ipmi_recv_msg *msg) ipmi_free_recv_msg(msg); atomic_dec(&msg->user->nr_msgs); } else { - int index; - struct ipmi_user *user =3D acquire_ipmi_user(msg->user, &index); + struct ipmi_user *user =3D acquire_ipmi_user(msg->user); =20 if (user) { /* Deliver it in smi_work. */ - kref_get(&user->refcount); mutex_lock(&intf->user_msgs_mutex); list_add_tail(&msg->link, &intf->user_msgs); mutex_unlock(&intf->user_msgs_mutex); - release_ipmi_user(user, index); queue_work(system_wq, &intf->smi_work); + /* User release will happen in the work queue. */ } else { /* User went away, give up. */ ipmi_free_recv_msg(msg); @@ -1201,22 +1188,13 @@ static int intf_err_seq(struct ipmi_smi *intf, return rv; } =20 -static void free_user_work(struct work_struct *work) -{ - struct ipmi_user *user =3D container_of(work, struct ipmi_user, - remove_work); - - cleanup_srcu_struct(&user->release_barrier); - vfree(user); -} - int ipmi_create_user(unsigned int if_num, const struct ipmi_user_hndl *handler, void *handler_data, struct ipmi_user **user) { unsigned long flags; - struct ipmi_user *new_user; + struct ipmi_user *new_user =3D NULL; int rv, index; struct ipmi_smi *intf; =20 @@ -1239,10 +1217,6 @@ int ipmi_create_user(unsigned int if_num, if (rv) return rv; =20 - new_user =3D vzalloc(sizeof(*new_user)); - if (!new_user) - return -ENOMEM; - index =3D srcu_read_lock(&ipmi_interfaces_srcu); list_for_each_entry_rcu(intf, &ipmi_interfaces, link) { if (intf->intf_num =3D=3D if_num) @@ -1253,16 +1227,21 @@ int ipmi_create_user(unsigned int if_num, goto out_kfree; =20 found: + if (intf->in_shutdown) { + rv =3D -ENODEV; + goto out_kfree; + } + if (atomic_add_return(1, &intf->nr_users) > max_users) { rv =3D -EBUSY; goto out_kfree; } =20 - INIT_WORK(&new_user->remove_work, free_user_work); - - rv =3D init_srcu_struct(&new_user->release_barrier); - if (rv) + new_user =3D vzalloc(sizeof(*new_user)); + if (!new_user) { + rv =3D -ENOMEM; goto out_kfree; + } =20 if (!try_module_get(intf->owner)) { rv =3D -ENODEV; @@ -1274,14 +1253,15 @@ int ipmi_create_user(unsigned int if_num, =20 atomic_set(&new_user->nr_msgs, 0); kref_init(&new_user->refcount); + refcount_set(&new_user->destroyed, 1); + kref_get(&new_user->refcount); /* Destroy owns a refcount. */ new_user->handler =3D handler; new_user->handler_data =3D handler_data; new_user->intf =3D intf; new_user->gets_events =3D false; =20 - rcu_assign_pointer(new_user->self, new_user); spin_lock_irqsave(&intf->seq_lock, flags); - list_add_rcu(&new_user->link, &intf->users); + list_add(&new_user->link, &intf->users); spin_unlock_irqrestore(&intf->seq_lock, flags); if (handler->ipmi_watchdog_pretimeout) /* User wants pretimeouts, so make sure to watch for them. */ @@ -1324,14 +1304,7 @@ int ipmi_get_smi_info(int if_num, struct ipmi_smi_in= fo *data) } EXPORT_SYMBOL(ipmi_get_smi_info); =20 -static void free_user(struct kref *ref) -{ - struct ipmi_user *user =3D container_of(ref, struct ipmi_user, refcount); - - /* SRCU cleanup must happen in workqueue context. */ - queue_work(remove_work_wq, &user->remove_work); -} - +/* Must be called with intf->users_mutex held. */ static void _ipmi_destroy_user(struct ipmi_user *user) { struct ipmi_smi *intf =3D user->intf; @@ -1341,19 +1314,8 @@ static void _ipmi_destroy_user(struct ipmi_user *use= r) struct cmd_rcvr *rcvrs =3D NULL; struct module *owner; =20 - if (!acquire_ipmi_user(user, &i)) { - /* - * The user has already been cleaned up, just make sure - * nothing is using it and return. - */ - synchronize_srcu(&user->release_barrier); + if (!refcount_dec_if_one(&user->destroyed)) return; - } - - rcu_assign_pointer(user->self, NULL); - release_ipmi_user(user, i); - - synchronize_srcu(&user->release_barrier); =20 if (user->handler->shutdown) user->handler->shutdown(user->handler_data); @@ -1364,11 +1326,11 @@ static void _ipmi_destroy_user(struct ipmi_user *us= er) if (user->gets_events) atomic_dec(&intf->event_waiters); =20 - /* Remove the user from the interface's sequence table. */ - spin_lock_irqsave(&intf->seq_lock, flags); - list_del_rcu(&user->link); + /* Remove the user from the interface's list and sequence table. */ + list_del(&user->link); atomic_dec(&intf->nr_users); =20 + spin_lock_irqsave(&intf->seq_lock, flags); for (i =3D 0; i < IPMI_IPMB_NUM_SEQ; i++) { if (intf->seq_table[i].inuse && (intf->seq_table[i].recv_msg->user =3D=3D user)) { @@ -1402,6 +1364,8 @@ static void _ipmi_destroy_user(struct ipmi_user *user) kfree(rcvr); } =20 + release_ipmi_user(user); + owner =3D intf->owner; kref_put(&intf->refcount, intf_free); module_put(owner); @@ -1409,9 +1373,13 @@ static void _ipmi_destroy_user(struct ipmi_user *use= r) =20 void ipmi_destroy_user(struct ipmi_user *user) { + struct ipmi_smi *intf =3D user->intf; + + mutex_lock(&intf->users_mutex); _ipmi_destroy_user(user); + mutex_unlock(&intf->users_mutex); =20 - kref_put(&user->refcount, free_user); + kref_put(&user->refcount, free_ipmi_user); } EXPORT_SYMBOL(ipmi_destroy_user); =20 @@ -1420,9 +1388,9 @@ int ipmi_get_version(struct ipmi_user *user, unsigned char *minor) { struct ipmi_device_id id; - int rv, index; + int rv; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 @@ -1431,7 +1399,7 @@ int ipmi_get_version(struct ipmi_user *user, *major =3D ipmi_version_major(&id); *minor =3D ipmi_version_minor(&id); } - release_ipmi_user(user, index); + release_ipmi_user(user); =20 return rv; } @@ -1441,9 +1409,9 @@ int ipmi_set_my_address(struct ipmi_user *user, unsigned int channel, unsigned char address) { - int index, rv =3D 0; + int rv =3D 0; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 @@ -1453,7 +1421,7 @@ int ipmi_set_my_address(struct ipmi_user *user, channel =3D array_index_nospec(channel, IPMI_MAX_CHANNELS); user->intf->addrinfo[channel].address =3D address; } - release_ipmi_user(user, index); + release_ipmi_user(user); =20 return rv; } @@ -1463,9 +1431,9 @@ int ipmi_get_my_address(struct ipmi_user *user, unsigned int channel, unsigned char *address) { - int index, rv =3D 0; + int rv =3D 0; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 @@ -1475,7 +1443,7 @@ int ipmi_get_my_address(struct ipmi_user *user, channel =3D array_index_nospec(channel, IPMI_MAX_CHANNELS); *address =3D user->intf->addrinfo[channel].address; } - release_ipmi_user(user, index); + release_ipmi_user(user); =20 return rv; } @@ -1485,9 +1453,9 @@ int ipmi_set_my_LUN(struct ipmi_user *user, unsigned int channel, unsigned char LUN) { - int index, rv =3D 0; + int rv =3D 0; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 @@ -1497,7 +1465,7 @@ int ipmi_set_my_LUN(struct ipmi_user *user, channel =3D array_index_nospec(channel, IPMI_MAX_CHANNELS); user->intf->addrinfo[channel].lun =3D LUN & 0x3; } - release_ipmi_user(user, index); + release_ipmi_user(user); =20 return rv; } @@ -1507,9 +1475,9 @@ int ipmi_get_my_LUN(struct ipmi_user *user, unsigned int channel, unsigned char *address) { - int index, rv =3D 0; + int rv =3D 0; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 @@ -1519,7 +1487,7 @@ int ipmi_get_my_LUN(struct ipmi_user *user, channel =3D array_index_nospec(channel, IPMI_MAX_CHANNELS); *address =3D user->intf->addrinfo[channel].lun; } - release_ipmi_user(user, index); + release_ipmi_user(user); =20 return rv; } @@ -1527,17 +1495,17 @@ EXPORT_SYMBOL(ipmi_get_my_LUN); =20 int ipmi_get_maintenance_mode(struct ipmi_user *user) { - int mode, index; + int mode; unsigned long flags; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 spin_lock_irqsave(&user->intf->maintenance_mode_lock, flags); mode =3D user->intf->maintenance_mode; spin_unlock_irqrestore(&user->intf->maintenance_mode_lock, flags); - release_ipmi_user(user, index); + release_ipmi_user(user); =20 return mode; } @@ -1552,11 +1520,11 @@ static void maintenance_mode_update(struct ipmi_smi= *intf) =20 int ipmi_set_maintenance_mode(struct ipmi_user *user, int mode) { - int rv =3D 0, index; + int rv =3D 0; unsigned long flags; struct ipmi_smi *intf =3D user->intf; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 @@ -1586,7 +1554,7 @@ int ipmi_set_maintenance_mode(struct ipmi_user *user,= int mode) } out_unlock: spin_unlock_irqrestore(&intf->maintenance_mode_lock, flags); - release_ipmi_user(user, index); + release_ipmi_user(user); =20 return rv; } @@ -1597,9 +1565,8 @@ int ipmi_set_gets_events(struct ipmi_user *user, bool= val) struct ipmi_smi *intf =3D user->intf; struct ipmi_recv_msg *msg, *msg2; struct list_head msgs; - int index; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 @@ -1637,7 +1604,7 @@ int ipmi_set_gets_events(struct ipmi_user *user, bool= val) =20 out: mutex_unlock(&intf->events_mutex); - release_ipmi_user(user, index); + release_ipmi_user(user); =20 return 0; } @@ -1682,9 +1649,9 @@ int ipmi_register_for_cmd(struct ipmi_user *user, { struct ipmi_smi *intf =3D user->intf; struct cmd_rcvr *rcvr; - int rv =3D 0, index; + int rv =3D 0; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 @@ -1714,7 +1681,7 @@ int ipmi_register_for_cmd(struct ipmi_user *user, if (rv) kfree(rcvr); out_release: - release_ipmi_user(user, index); + release_ipmi_user(user); =20 return rv; } @@ -1728,9 +1695,9 @@ int ipmi_unregister_for_cmd(struct ipmi_user *user, struct ipmi_smi *intf =3D user->intf; struct cmd_rcvr *rcvr; struct cmd_rcvr *rcvrs =3D NULL; - int i, rv =3D -ENOENT, index; + int i, rv =3D -ENOENT; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 @@ -1753,7 +1720,7 @@ int ipmi_unregister_for_cmd(struct ipmi_user *user, } mutex_unlock(&intf->cmd_rcvrs_mutex); synchronize_rcu(); - release_ipmi_user(user, index); + release_ipmi_user(user); while (rcvrs) { smi_remove_watch(intf, IPMI_WATCH_MASK_CHECK_COMMANDS); rcvr =3D rcvrs; @@ -2408,12 +2375,12 @@ int ipmi_request_settime(struct ipmi_user *user, unsigned int retry_time_ms) { unsigned char saddr =3D 0, lun =3D 0; - int rv, index; + int rv; =20 if (!user) return -EINVAL; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 @@ -2432,7 +2399,7 @@ int ipmi_request_settime(struct ipmi_user *user, retries, retry_time_ms); =20 - release_ipmi_user(user, index); + release_ipmi_user(user); return rv; } EXPORT_SYMBOL(ipmi_request_settime); @@ -2447,12 +2414,12 @@ int ipmi_request_supply_msgs(struct ipmi_user *= user, int priority) { unsigned char saddr =3D 0, lun =3D 0; - int rv, index; + int rv; =20 if (!user) return -EINVAL; =20 - user =3D acquire_ipmi_user(user, &index); + user =3D acquire_ipmi_user(user); if (!user) return -ENODEV; =20 @@ -2471,7 +2438,7 @@ int ipmi_request_supply_msgs(struct ipmi_user *us= er, lun, -1, 0); =20 - release_ipmi_user(user, index); + release_ipmi_user(user); return rv; } EXPORT_SYMBOL(ipmi_request_supply_msgs); @@ -3058,7 +3025,7 @@ cleanup_bmc_device(struct kref *ref) * with removing the device attributes while reading a device * attribute. */ - queue_work(remove_work_wq, &bmc->remove_work); + queue_work(bmc_remove_work_wq, &bmc->remove_work); } =20 /* @@ -3514,15 +3481,14 @@ static ssize_t nr_msgs_show(struct device *dev, char *buf) { struct ipmi_smi *intf =3D container_of(attr, - struct ipmi_smi, nr_msgs_devattr); + struct ipmi_smi, nr_msgs_devattr); struct ipmi_user *user; - int index; unsigned int count =3D 0; =20 - index =3D srcu_read_lock(&intf->users_srcu); - list_for_each_entry_rcu(user, &intf->users, link) + mutex_lock(&intf->users_mutex); + list_for_each_entry(user, &intf->users, link) count +=3D atomic_read(&user->nr_msgs); - srcu_read_unlock(&intf->users_srcu, index); + mutex_unlock(&intf->users_mutex); =20 return sysfs_emit(buf, "%u\n", count); } @@ -3563,12 +3529,6 @@ int ipmi_add_smi(struct module *owner, if (!intf) return -ENOMEM; =20 - rv =3D init_srcu_struct(&intf->users_srcu); - if (rv) { - kfree(intf); - return rv; - } - intf->owner =3D owner; intf->bmc =3D &intf->tmp_bmc; INIT_LIST_HEAD(&intf->bmc->intfs); @@ -3588,6 +3548,7 @@ int ipmi_add_smi(struct module *owner, INIT_LIST_HEAD(&intf->user_msgs); mutex_init(&intf->user_msgs_mutex); INIT_LIST_HEAD(&intf->users); + mutex_init(&intf->users_mutex); atomic_set(&intf->nr_users, 0); intf->handlers =3D handlers; intf->send_info =3D send_info; @@ -3688,7 +3649,6 @@ int ipmi_add_smi(struct module *owner, list_del_rcu(&intf->link); mutex_unlock(&ipmi_interfaces_mutex); synchronize_srcu(&ipmi_interfaces_srcu); - cleanup_srcu_struct(&intf->users_srcu); kref_put(&intf->refcount, intf_free); =20 return rv; @@ -3754,7 +3714,7 @@ static void cleanup_smi_msgs(struct ipmi_smi *intf) void ipmi_unregister_smi(struct ipmi_smi *intf) { struct ipmi_smi_watcher *w; - int intf_num, index; + int intf_num; =20 if (!intf) return; @@ -3780,15 +3740,14 @@ void ipmi_unregister_smi(struct ipmi_smi *intf) w->smi_gone(intf_num); mutex_unlock(&smi_watchers_mutex); =20 - index =3D srcu_read_lock(&intf->users_srcu); + mutex_lock(&intf->users_mutex); while (!list_empty(&intf->users)) { - struct ipmi_user *user =3D - container_of(list_next_rcu(&intf->users), - struct ipmi_user, link); + struct ipmi_user *user =3D list_first_entry(&intf->users, + struct ipmi_user, link); =20 _ipmi_destroy_user(user); } - srcu_read_unlock(&intf->users_srcu, index); + mutex_unlock(&intf->users_mutex); =20 if (intf->handlers->shutdown) intf->handlers->shutdown(intf->send_info); @@ -3797,7 +3756,6 @@ void ipmi_unregister_smi(struct ipmi_smi *intf) =20 ipmi_bmc_unregister(intf); =20 - cleanup_srcu_struct(&intf->users_srcu); kref_put(&intf->refcount, intf_free); } EXPORT_SYMBOL(ipmi_unregister_smi); @@ -3942,7 +3900,7 @@ static int handle_ipmb_get_msg_cmd(struct ipmi_smi *i= ntf, * later. */ rv =3D 1; - kref_put(&user->refcount, free_user); + kref_put(&user->refcount, free_ipmi_user); } else { /* Extract the source address from the data. */ ipmb_addr =3D (struct ipmi_ipmb_addr *) &recv_msg->addr; @@ -4033,7 +3991,7 @@ static int handle_ipmb_direct_rcv_cmd(struct ipmi_smi= *intf, * later. */ rv =3D 1; - kref_put(&user->refcount, free_user); + kref_put(&user->refcount, free_ipmi_user); } else { /* Extract the source address from the data. */ daddr =3D (struct ipmi_ipmb_direct_addr *)&recv_msg->addr; @@ -4218,7 +4176,7 @@ static int handle_lan_get_msg_cmd(struct ipmi_smi *in= tf, * message, so requeue it for handling later. */ rv =3D 1; - kref_put(&user->refcount, free_user); + kref_put(&user->refcount, free_ipmi_user); } else { /* Extract the source address from the data. */ lan_addr =3D (struct ipmi_lan_addr *) &recv_msg->addr; @@ -4327,7 +4285,7 @@ static int handle_oem_get_msg_cmd(struct ipmi_smi *in= tf, * later. */ rv =3D 1; - kref_put(&user->refcount, free_user); + kref_put(&user->refcount, free_ipmi_user); } else { /* * OEM Messages are expected to be delivered via @@ -4389,7 +4347,7 @@ static int handle_read_event_rsp(struct ipmi_smi *int= f, struct ipmi_recv_msg *recv_msg, *recv_msg2; struct list_head msgs; struct ipmi_user *user; - int rv =3D 0, deliver_count =3D 0, index; + int rv =3D 0, deliver_count =3D 0; =20 if (msg->rsp_size < 19) { /* Message is too small to be an IPMB event. */ @@ -4412,18 +4370,20 @@ static int handle_read_event_rsp(struct ipmi_smi *i= ntf, * Allocate and fill in one message for every user that is * getting events. */ - index =3D srcu_read_lock(&intf->users_srcu); - list_for_each_entry_rcu(user, &intf->users, link) { + mutex_lock(&intf->users_mutex); + list_for_each_entry(user, &intf->users, link) { if (!user->gets_events) continue; =20 recv_msg =3D ipmi_alloc_recv_msg(); if (!recv_msg) { - rcu_read_unlock(); + mutex_unlock(&intf->users_mutex); list_for_each_entry_safe(recv_msg, recv_msg2, &msgs, link) { + user =3D recv_msg->user; list_del(&recv_msg->link); ipmi_free_recv_msg(recv_msg); + kref_put(&user->refcount, free_ipmi_user); } /* * We couldn't allocate memory for the @@ -4441,7 +4401,7 @@ static int handle_read_event_rsp(struct ipmi_smi *int= f, kref_get(&user->refcount); list_add_tail(&recv_msg->link, &msgs); } - srcu_read_unlock(&intf->users_srcu, index); + mutex_unlock(&intf->users_mutex); =20 if (deliver_count) { /* Now deliver all the messages. */ @@ -4785,23 +4745,6 @@ static void handle_new_recv_msgs(struct ipmi_smi *in= tf) } if (!run_to_completion) spin_unlock_irqrestore(&intf->waiting_rcv_msgs_lock, flags); - - /* - * If the pretimout count is non-zero, decrement one from it and - * deliver pretimeouts to all the users. - */ - if (atomic_add_unless(&intf->watchdog_pretimeouts_to_deliver, -1, 0)) { - struct ipmi_user *user; - int index; - - index =3D srcu_read_lock(&intf->users_srcu); - list_for_each_entry_rcu(user, &intf->users, link) { - if (user->handler->ipmi_watchdog_pretimeout) - user->handler->ipmi_watchdog_pretimeout( - user->handler_data); - } - srcu_read_unlock(&intf->users_srcu, index); - } } =20 static void smi_work(struct work_struct *t) @@ -4820,8 +4763,6 @@ static void smi_work(struct work_struct *t) * message delivery. */ =20 - rcu_read_lock(); - if (!run_to_completion) spin_lock_irqsave(&intf->xmit_msgs_lock, flags); if (intf->curr_msg =3D=3D NULL && !intf->in_shutdown) { @@ -4845,17 +4786,32 @@ static void smi_work(struct work_struct *t) if (newmsg) intf->handlers->sender(intf->send_info, newmsg); =20 - rcu_read_unlock(); - handle_new_recv_msgs(intf); =20 + /* + * If the pretimout count is non-zero, decrement one from it and + * deliver pretimeouts to all the users. + */ + if (atomic_add_unless(&intf->watchdog_pretimeouts_to_deliver, -1, 0)) { + struct ipmi_user *user; + + mutex_lock(&intf->users_mutex); + list_for_each_entry(user, &intf->users, link) { + if (user->handler->ipmi_watchdog_pretimeout) + user->handler->ipmi_watchdog_pretimeout( + user->handler_data); + } + mutex_unlock(&intf->users_mutex); + } + mutex_lock(&intf->user_msgs_mutex); list_for_each_entry_safe(msg, msg2, &intf->user_msgs, link) { struct ipmi_user *user =3D msg->user; =20 + list_del(&msg->link); atomic_dec(&user->nr_msgs); user->handler->ipmi_recv_hndl(msg, user->handler_data); - kref_put(&user->refcount, free_user); + release_ipmi_user(user); } mutex_unlock(&intf->user_msgs_mutex); } @@ -5187,7 +5143,7 @@ static struct ipmi_recv_msg *ipmi_alloc_recv_msg(void) void ipmi_free_recv_msg(struct ipmi_recv_msg *msg) { if (msg->user && !oops_in_progress) - kref_put(&msg->user->refcount, free_user); + kref_put(&msg->user->refcount, free_ipmi_user); msg->done(msg); } EXPORT_SYMBOL(ipmi_free_recv_msg); @@ -5422,7 +5378,7 @@ static int panic_event(struct notifier_block *this, has_panicked =3D 1; =20 /* For every registered interface, set it to run to completion. */ - list_for_each_entry_rcu(intf, &ipmi_interfaces, link) { + list_for_each_entry(intf, &ipmi_interfaces, link) { if (!intf->handlers || intf->intf_num =3D=3D -1) /* Interface is not ready. */ continue; @@ -5452,7 +5408,7 @@ static int panic_event(struct notifier_block *this, intf->handlers->set_run_to_completion(intf->send_info, 1); =20 - list_for_each_entry_rcu(user, &intf->users, link) { + list_for_each_entry(user, &intf->users, link) { if (user->handler->ipmi_panic_handler) user->handler->ipmi_panic_handler( user->handler_data); @@ -5501,8 +5457,8 @@ static int ipmi_init_msghandler(void) if (rv) goto out; =20 - remove_work_wq =3D create_singlethread_workqueue("ipmi-msghandler-remove-= wq"); - if (!remove_work_wq) { + bmc_remove_work_wq =3D create_singlethread_workqueue("ipmi-msghandler-rem= ove-wq"); + if (!bmc_remove_work_wq) { pr_err("unable to create ipmi-msghandler-remove-wq workqueue"); rv =3D -ENOMEM; goto out_wq; @@ -5541,7 +5497,7 @@ static void __exit cleanup_ipmi(void) int count; =20 if (initialized) { - destroy_workqueue(remove_work_wq); + destroy_workqueue(bmc_remove_work_wq); =20 atomic_notifier_chain_unregister(&panic_notifier_list, &panic_block); --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oa1-f45.google.com (mail-oa1-f45.google.com [209.85.160.45]) (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 1946D28E5E1 for ; Thu, 24 Apr 2025 16:50:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513448; cv=none; b=MfbEiDTrBnV+L90qI5lX5SwiQI7TdGlsw/cLuiXKJ+FkpLyQ6/92VbHNI8JAttEUyE+ShfEXKa9K45VcAIHgfMimVBBLEgcBUo7Z8LFI9INJP7TLVqUA6B4liAfLbtJNBWMuhKm2oFAtU6sdh1CnogWRF+PggwAluAkQpNr7URc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513448; c=relaxed/simple; bh=P8Og3yDaHtBMAvU7xzL0ojvaWgPHw3G/Imui6NRoVls=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ifIyjI0VVcmBujdVAsl+NuqLOmYa8jh8jjKR5II5e+GYaqXLIg38cWBAMiY7Zmv7lZHbIncOqEvs3N7SoGPknKjq+kZVUQryfEG8CF7kHsecWSBCUfzBM/owsNgzr+mHJnaPJJliBtSVGlkBxr/Dni0FDFPCPcMP6s6sVsG1wuA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=KzyHH4c4; arc=none smtp.client-ip=209.85.160.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="KzyHH4c4" Received: by mail-oa1-f45.google.com with SMTP id 586e51a60fabf-2c77a5747e0so638156fac.2 for ; Thu, 24 Apr 2025 09:50:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513443; x=1746118243; 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=W+VtVBPln1Y837qXh0eU3XxWMEbeRih+vkZIm1udch0=; b=KzyHH4c4NUL4Cd7t1DaeRxJTquAxXfuNtwqjmDP+axc/bqkaXIQ+FN0y0zSuxIKgDC j5WETHRZeBUMMHu1oNcY5Txau5VWgq4Ss0TNBqIgyOtNe9LjHTlBtXsZzebFV+TcEJzp ihXl3oKCf9Y+6ZUpBrLRi7xzuaGwJpLzeAOhWO132Q+XX37SP9+A2QfUw1uACSzy83E3 QI+PfqjasIMnQhn/nr+sT1Umvk8YjFaQ0DFE3hELrrzd9GRawwlmx/LL+3C0H0zYZTW9 6Ddy5J793jofwNlWJFvAcmYKqIq2I1JMQ9plFmLAfO3Gx5H5Xw+p9Sf2j/wTebRMTOc6 0DaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513443; x=1746118243; 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=W+VtVBPln1Y837qXh0eU3XxWMEbeRih+vkZIm1udch0=; b=mnj8qhmGL3+09n6FSls4jcFXTTLfkc8eqYFp7VvYrF+TEi9iK4HBPTk75VVqkLDqMi IkkjRyPFYb4ZyXiRqsi07HHqJSiq1oUI/vC4FeY6DfyhxV7q1BwWj3xU6SMt/5PbuXYz zmHMG5MTAUKgZUii7xLYl2KK04Px42hyL7L2qwSHVKFSSKdR9bmKeFnnhqcpsQCYqcac W/XNcdodmMMoplcE/+gc4z7+CGu3PM21KRUHnWpVjPxOBO7tLjpLzsO3UcMXpxh6oE5r 8dxHd5hLc3Q+UPSGjMUpth5pRl1EWVPfRz3dmBpRfEy9hsUqZVfqQAM6BXpyDofU1Z84 xKQw== X-Gm-Message-State: AOJu0Yxh9Ibuz+ad0aesKGBf237Y8jT1BqqEQbRKbQ1jjXBWwgHtGs5U wawzcJ+ehTuXIeFbMMuD0lt111gCLpuq5rDAsiPBM4ELxoWTCEDNGWi7PQObR7O0lW0auoA+tO+ g X-Gm-Gg: ASbGncs4KTOKy5G9W9m/qg1g/sWeImJxhRULI5PVBsVbC5eA7e2eBKPqXj0r2BvRehs v4o3s0AiJQfExuMyK3Bmee1mBdXgzPLigLy/Jh6GfAXBTzeMg0uvlz5bMId2hwY2d2885MjbRCO sSNCsiFG8c+oda3D+nCB+KC9nczqDl13MFJEsm+JKqAUT+TpFukcnxjgjM72OwWSLBt10PwVXtG rXsBcADFYfg2zoYs9E8+q0M+bAv36YnZoiIaMlagLOATRuW88Jgfg6cTrxflxYLVSXcKWnXJt4j Dsv39lYOCH0EmZQ3Rc2ZLlt8zCUh6vNCo6U= X-Google-Smtp-Source: AGHT+IEwAKHdD34qLl478yNOL4fFhBx737j3ZgvMAG9V5/X/oUUpBawdVdeaMdjAo4rZ6D/aAODV9Q== X-Received: by 2002:a05:6870:46ac:b0:2c2:519e:d9a9 with SMTP id 586e51a60fabf-2d96e660ce6mr1996464fac.24.1745513443471; Thu, 24 Apr 2025 09:50:43 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 586e51a60fabf-2d972f3a068sm365498fac.0.2025.04.24.09.50.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:42 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 08/23] ipmi:msghandler: Remove srcu for the ipmi_interfaces list Date: Thu, 24 Apr 2025 11:49:45 -0500 Message-ID: <20250424165020.627193-9-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" With reworks srcu is no longer necessary, this simplifies locking a lot. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 194 +++++++++++++++------------- 1 file changed, 102 insertions(+), 92 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 7dd264e40957..3e88ac6831d8 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -628,7 +628,6 @@ static DEFINE_MUTEX(ipmidriver_mutex); =20 static LIST_HEAD(ipmi_interfaces); static DEFINE_MUTEX(ipmi_interfaces_mutex); -static struct srcu_struct ipmi_interfaces_srcu; =20 /* * List of watchers that want to know when smi's are added and deleted. @@ -694,28 +693,20 @@ static void free_smi_msg_list(struct list_head *q) } } =20 -static void clean_up_interface_data(struct ipmi_smi *intf) +static void intf_free(struct kref *ref) { + struct ipmi_smi *intf =3D container_of(ref, struct ipmi_smi, refcount); int i; struct cmd_rcvr *rcvr, *rcvr2; - struct list_head list; - - cancel_work_sync(&intf->smi_work); - /* smi_work() can no longer be in progress after this. */ =20 free_smi_msg_list(&intf->waiting_rcv_msgs); free_recv_msg_list(&intf->waiting_events); =20 /* * Wholesale remove all the entries from the list in the - * interface. + * interface. No need for locks, this is single-threaded. */ - mutex_lock(&intf->cmd_rcvrs_mutex); - INIT_LIST_HEAD(&list); - list_splice_init_rcu(&intf->cmd_rcvrs, &list, synchronize_rcu); - mutex_unlock(&intf->cmd_rcvrs_mutex); - - list_for_each_entry_safe(rcvr, rcvr2, &list, link) + list_for_each_entry_safe(rcvr, rcvr2, &intf->cmd_rcvrs, link) kfree(rcvr); =20 for (i =3D 0; i < IPMI_IPMB_NUM_SEQ; i++) { @@ -723,20 +714,17 @@ static void clean_up_interface_data(struct ipmi_smi *= intf) && (intf->seq_table[i].recv_msg)) ipmi_free_recv_msg(intf->seq_table[i].recv_msg); } -} =20 -static void intf_free(struct kref *ref) -{ - struct ipmi_smi *intf =3D container_of(ref, struct ipmi_smi, refcount); - - clean_up_interface_data(intf); kfree(intf); } =20 int ipmi_smi_watcher_register(struct ipmi_smi_watcher *watcher) { struct ipmi_smi *intf; - int index, rv; + unsigned int count =3D 0, i; + int *interfaces =3D NULL; + struct device **devices =3D NULL; + int rv =3D 0; =20 /* * Make sure the driver is actually initialized, this handles @@ -750,20 +738,53 @@ int ipmi_smi_watcher_register(struct ipmi_smi_watcher= *watcher) =20 list_add(&watcher->link, &smi_watchers); =20 - index =3D srcu_read_lock(&ipmi_interfaces_srcu); - list_for_each_entry_rcu(intf, &ipmi_interfaces, link, - lockdep_is_held(&smi_watchers_mutex)) { - int intf_num =3D READ_ONCE(intf->intf_num); + /* + * Build an array of ipmi interfaces and fill it in, and + * another array of the devices. We can't call the callback + * with ipmi_interfaces_mutex held. smi_watchers_mutex will + * keep things in order for the user. + */ + mutex_lock(&ipmi_interfaces_mutex); + list_for_each_entry(intf, &ipmi_interfaces, link) + count++; + if (count > 0) { + interfaces =3D kmalloc_array(count, sizeof(*interfaces), + GFP_KERNEL); + if (!interfaces) { + rv =3D -ENOMEM; + } else { + devices =3D kmalloc_array(count, sizeof(*devices), + GFP_KERNEL); + if (!devices) { + kfree(interfaces); + interfaces =3D NULL; + rv =3D -ENOMEM; + } + } + count =3D 0; + } + if (interfaces) { + list_for_each_entry(intf, &ipmi_interfaces, link) { + int intf_num =3D READ_ONCE(intf->intf_num); =20 - if (intf_num =3D=3D -1) - continue; - watcher->new_smi(intf_num, intf->si_dev); + if (intf_num =3D=3D -1) + continue; + devices[count] =3D intf->si_dev; + interfaces[count++] =3D intf_num; + } + } + mutex_unlock(&ipmi_interfaces_mutex); + + if (interfaces) { + for (i =3D 0; i < count; i++) + watcher->new_smi(interfaces[i], devices[i]); + kfree(interfaces); + kfree(devices); } - srcu_read_unlock(&ipmi_interfaces_srcu, index); =20 mutex_unlock(&smi_watchers_mutex); =20 - return 0; + return rv; } EXPORT_SYMBOL(ipmi_smi_watcher_register); =20 @@ -781,14 +802,12 @@ call_smi_watchers(int i, struct device *dev) { struct ipmi_smi_watcher *w; =20 - mutex_lock(&smi_watchers_mutex); list_for_each_entry(w, &smi_watchers, link) { if (try_module_get(w->owner)) { w->new_smi(i, dev); module_put(w->owner); } } - mutex_unlock(&smi_watchers_mutex); } =20 static int @@ -1195,7 +1214,7 @@ int ipmi_create_user(unsigned int if_num, { unsigned long flags; struct ipmi_user *new_user =3D NULL; - int rv, index; + int rv =3D 0; struct ipmi_smi *intf; =20 /* @@ -1217,8 +1236,8 @@ int ipmi_create_user(unsigned int if_num, if (rv) return rv; =20 - index =3D srcu_read_lock(&ipmi_interfaces_srcu); - list_for_each_entry_rcu(intf, &ipmi_interfaces, link) { + mutex_lock(&ipmi_interfaces_mutex); + list_for_each_entry(intf, &ipmi_interfaces, link) { if (intf->intf_num =3D=3D if_num) goto found; } @@ -1260,45 +1279,44 @@ int ipmi_create_user(unsigned int if_num, new_user->intf =3D intf; new_user->gets_events =3D false; =20 + mutex_lock(&intf->users_mutex); spin_lock_irqsave(&intf->seq_lock, flags); list_add(&new_user->link, &intf->users); spin_unlock_irqrestore(&intf->seq_lock, flags); + mutex_unlock(&intf->users_mutex); + if (handler->ipmi_watchdog_pretimeout) /* User wants pretimeouts, so make sure to watch for them. */ smi_add_watch(intf, IPMI_WATCH_MASK_CHECK_WATCHDOG); - srcu_read_unlock(&ipmi_interfaces_srcu, index); - *user =3D new_user; - return 0; =20 out_kfree: - atomic_dec(&intf->nr_users); - srcu_read_unlock(&ipmi_interfaces_srcu, index); - vfree(new_user); + if (rv) { + atomic_dec(&intf->nr_users); + vfree(new_user); + } else { + *user =3D new_user; + } + mutex_unlock(&ipmi_interfaces_mutex); return rv; } EXPORT_SYMBOL(ipmi_create_user); =20 int ipmi_get_smi_info(int if_num, struct ipmi_smi_info *data) { - int rv, index; + int rv =3D -EINVAL; struct ipmi_smi *intf; =20 - index =3D srcu_read_lock(&ipmi_interfaces_srcu); - list_for_each_entry_rcu(intf, &ipmi_interfaces, link) { - if (intf->intf_num =3D=3D if_num) - goto found; + mutex_lock(&ipmi_interfaces_mutex); + list_for_each_entry(intf, &ipmi_interfaces, link) { + if (intf->intf_num =3D=3D if_num) { + if (!intf->handlers->get_smi_info) + rv =3D -ENOTTY; + else + rv =3D intf->handlers->get_smi_info(intf->send_info, data); + break; + } } - srcu_read_unlock(&ipmi_interfaces_srcu, index); - - /* Not found, return an error */ - return -EINVAL; - -found: - if (!intf->handlers->get_smi_info) - rv =3D -ENOTTY; - else - rv =3D intf->handlers->get_smi_info(intf->send_info, data); - srcu_read_unlock(&ipmi_interfaces_srcu, index); + mutex_unlock(&ipmi_interfaces_mutex); =20 return rv; } @@ -1345,7 +1363,7 @@ static void _ipmi_destroy_user(struct ipmi_user *user) * Remove the user from the command receiver's table. First * we build a list of everything (not using the standard link, * since other things may be using it till we do - * synchronize_srcu()) then free everything in that list. + * synchronize_rcu()) then free everything in that list. */ mutex_lock(&intf->cmd_rcvrs_mutex); list_for_each_entry_rcu(rcvr, &intf->cmd_rcvrs, link, @@ -1357,7 +1375,6 @@ static void _ipmi_destroy_user(struct ipmi_user *user) } } mutex_unlock(&intf->cmd_rcvrs_mutex); - synchronize_rcu(); while (rcvrs) { rcvr =3D rcvrs; rcvrs =3D rcvr->next; @@ -2298,7 +2315,7 @@ static int i_ipmi_request(struct ipmi_user *user, } } =20 - rcu_read_lock(); + mutex_lock(&ipmi_interfaces_mutex); if (intf->in_shutdown) { rv =3D -ENODEV; goto out_err; @@ -2344,7 +2361,7 @@ static int i_ipmi_request(struct ipmi_user *user, =20 smi_send(intf, intf->handlers, smi_msg, priority); } - rcu_read_unlock(); + mutex_unlock(&ipmi_interfaces_mutex); =20 out: if (rv && user) @@ -3578,12 +3595,16 @@ int ipmi_add_smi(struct module *owner, for (i =3D 0; i < IPMI_NUM_STATS; i++) atomic_set(&intf->stats[i], 0); =20 + /* + * Grab the watchers mutex so we can deliver the new interface + * without races. + */ + mutex_lock(&smi_watchers_mutex); mutex_lock(&ipmi_interfaces_mutex); /* Look for a hole in the numbers. */ i =3D 0; link =3D &ipmi_interfaces; - list_for_each_entry_rcu(tintf, &ipmi_interfaces, link, - ipmi_interfaces_mutex_held()) { + list_for_each_entry(tintf, &ipmi_interfaces, link) { if (tintf->intf_num !=3D i) { link =3D &tintf->link; break; @@ -3592,9 +3613,9 @@ int ipmi_add_smi(struct module *owner, } /* Add the new interface in numeric order. */ if (i =3D=3D 0) - list_add_rcu(&intf->link, &ipmi_interfaces); + list_add(&intf->link, &ipmi_interfaces); else - list_add_tail_rcu(&intf->link, link); + list_add_tail(&intf->link, link); =20 rv =3D handlers->start_processing(send_info, intf); if (rv) @@ -3626,18 +3647,14 @@ int ipmi_add_smi(struct module *owner, goto out_err_bmc_reg; } =20 - /* - * Keep memory order straight for RCU readers. Make - * sure everything else is committed to memory before - * setting intf_num to mark the interface valid. - */ - smp_wmb(); intf->intf_num =3D i; mutex_unlock(&ipmi_interfaces_mutex); =20 /* After this point the interface is legal to use. */ call_smi_watchers(i, intf->si_dev); =20 + mutex_unlock(&smi_watchers_mutex); + return 0; =20 out_err_bmc_reg: @@ -3646,9 +3663,9 @@ int ipmi_add_smi(struct module *owner, if (intf->handlers->shutdown) intf->handlers->shutdown(intf->send_info); out_err: - list_del_rcu(&intf->link); + list_del(&intf->link); mutex_unlock(&ipmi_interfaces_mutex); - synchronize_srcu(&ipmi_interfaces_srcu); + mutex_unlock(&smi_watchers_mutex); kref_put(&intf->refcount, intf_free); =20 return rv; @@ -3718,13 +3735,16 @@ void ipmi_unregister_smi(struct ipmi_smi *intf) =20 if (!intf) return; + intf_num =3D intf->intf_num; mutex_lock(&ipmi_interfaces_mutex); + cancel_work_sync(&intf->smi_work); + /* smi_work() can no longer be in progress after this. */ + intf->intf_num =3D -1; intf->in_shutdown =3D true; - list_del_rcu(&intf->link); + list_del(&intf->link); mutex_unlock(&ipmi_interfaces_mutex); - synchronize_srcu(&ipmi_interfaces_srcu); =20 /* At this point no users can be added to the interface. */ =20 @@ -3880,7 +3900,7 @@ static int handle_ipmb_get_msg_cmd(struct ipmi_smi *i= ntf, dev_dbg(intf->si_dev, "Invalid command: %*ph\n", msg->data_size, msg->data); =20 - rcu_read_lock(); + mutex_lock(&ipmi_interfaces_mutex); if (!intf->in_shutdown) { smi_send(intf, intf->handlers, msg, 0); /* @@ -3890,7 +3910,7 @@ static int handle_ipmb_get_msg_cmd(struct ipmi_smi *i= ntf, */ rv =3D -1; } - rcu_read_unlock(); + mutex_unlock(&ipmi_interfaces_mutex); } else { recv_msg =3D ipmi_alloc_recv_msg(); if (!recv_msg) { @@ -3971,7 +3991,7 @@ static int handle_ipmb_direct_rcv_cmd(struct ipmi_smi= *intf, msg->data[4] =3D IPMI_INVALID_CMD_COMPLETION_CODE; msg->data_size =3D 5; =20 - rcu_read_lock(); + mutex_lock(&ipmi_interfaces_mutex); if (!intf->in_shutdown) { smi_send(intf, intf->handlers, msg, 0); /* @@ -3981,7 +4001,7 @@ static int handle_ipmb_direct_rcv_cmd(struct ipmi_smi= *intf, */ rv =3D -1; } - rcu_read_unlock(); + mutex_unlock(&ipmi_interfaces_mutex); } else { recv_msg =3D ipmi_alloc_recv_msg(); if (!recv_msg) { @@ -5053,13 +5073,12 @@ static void ipmi_timeout_work(struct work_struct *w= ork) =20 struct ipmi_smi *intf; bool need_timer =3D false; - int index; =20 if (atomic_read(&stop_operation)) return; =20 - index =3D srcu_read_lock(&ipmi_interfaces_srcu); - list_for_each_entry_rcu(intf, &ipmi_interfaces, link) { + mutex_lock(&ipmi_interfaces_mutex); + list_for_each_entry(intf, &ipmi_interfaces, link) { if (atomic_read(&intf->event_waiters)) { intf->ticks_to_req_ev--; if (intf->ticks_to_req_ev =3D=3D 0) { @@ -5071,7 +5090,7 @@ static void ipmi_timeout_work(struct work_struct *wor= k) =20 need_timer |=3D ipmi_timeout_handler(intf, IPMI_TIMEOUT_TIME); } - srcu_read_unlock(&ipmi_interfaces_srcu, index); + mutex_unlock(&ipmi_interfaces_mutex); =20 if (need_timer) mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES); @@ -5453,15 +5472,11 @@ static int ipmi_init_msghandler(void) if (initialized) goto out; =20 - rv =3D init_srcu_struct(&ipmi_interfaces_srcu); - if (rv) - goto out; - bmc_remove_work_wq =3D create_singlethread_workqueue("ipmi-msghandler-rem= ove-wq"); if (!bmc_remove_work_wq) { pr_err("unable to create ipmi-msghandler-remove-wq workqueue"); rv =3D -ENOMEM; - goto out_wq; + goto out; } =20 timer_setup(&ipmi_timer, ipmi_timeout, 0); @@ -5471,9 +5486,6 @@ static int ipmi_init_msghandler(void) =20 initialized =3D true; =20 -out_wq: - if (rv) - cleanup_srcu_struct(&ipmi_interfaces_srcu); out: mutex_unlock(&ipmi_interfaces_mutex); return rv; @@ -5525,8 +5537,6 @@ static void __exit cleanup_ipmi(void) count =3D atomic_read(&recv_msg_inuse_count); if (count !=3D 0) pr_warn("recv message count %d at exit\n", count); - - cleanup_srcu_struct(&ipmi_interfaces_srcu); } if (drvregistered) driver_unregister(&ipmidriver.driver); --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f175.google.com (mail-oi1-f175.google.com [209.85.167.175]) (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 193CB28E60C for ; Thu, 24 Apr 2025 16:50:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513449; cv=none; b=SS9AGydalbCmoAZwTArpVF7vGJo+tVkS1u4Tu+U686yaFdm5UxpDql7JjHpK59WMLqxTvdkv9Y5ho9GyQayy4LMZDNT69NcWKloDq4u8QOIz5I+lRvoo4M3rzUMf9cEey0hAe8IG+0OIc3IC9yuPIHX2UU9w6MXD+txWBp20VqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513449; c=relaxed/simple; bh=oR/a4b9Szk7To5ChYKT4GzPnnr5ezZujkWUCJ23TiTk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ljf/MeBgc68hwt6UDMtAYwbTRhRQlmd5GPg734mJHQ9X22UcepYTiSJiTymqSUUYPurzUt7L/rLrse2J2x/8fBOcrL+M9WXKdOqpsDahmZF4z2iKhPhCvJy0MBtoukoF+WXbWBlu8RtwKjVw6YQN1kydJeIof4W+vent0XFoW1U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=Y0CVLk1C; arc=none smtp.client-ip=209.85.167.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="Y0CVLk1C" Received: by mail-oi1-f175.google.com with SMTP id 5614622812f47-3feb0db95e6so817552b6e.1 for ; Thu, 24 Apr 2025 09:50:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513445; x=1746118245; 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=/fgUCgCcd6UdxLBiMyVEIH1ieA5nsUGYJTkW0ajZaXU=; b=Y0CVLk1CWkGv5Q14+5RhyFTAy5KoIscZ6RyJq0JDvwt6sNXEoW6eLl5y1BCOZ1vK37 c5mkEKFS4ZX+zvV93483Ap/j2dDoUYZ/t23F9yt7cyxWYGM3KI5c1/WSHVBoBrIDBoBI BOtopNVwgS9ovF73NEHRIsHE3PdRNV///OoPc+IPXaFvZMYz8MkzIfetytXggJLXEvqT wpwL4WdgARS9guWWRyv2262Ai4WdfvM//1QZmPVz1eppbr9OjUJU73QEQztPoR6IAuaf EHYA5AHc5Gg0/e6p9h0/zb5VoC+Jj66ouRku/rTYylTP3ixCXf0E4us5SllaR+0fgbuk aRtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513445; x=1746118245; 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=/fgUCgCcd6UdxLBiMyVEIH1ieA5nsUGYJTkW0ajZaXU=; b=kBDI2dAMyoTJ/XR1shOaC8QCe0jJbtBGGy+mDQciVa7P/0A6mmfWUNTo1q+hKf4F4K VA1vcJAgseqXym615jpJgjuha6WBwS7HzNpG1hb1UciFrGQh15cZUpyE5zU7Ueoq2yHc VbrI1yxie1w28q21Rj8dfkZ7RChfoBDwhJ187qS3DG+G9s4a5ml7pUpp68yu1mmlKPzQ NQwv63FJco0u5xWHu3EGqi4Z9Qfmn18rpu4OjpnEFfRa/QOHhI2fpOXSo84++8wWtC0F KCgKHIQ2nqJ28EzQXBbsMgtmbVthEawGlXtlROIbdyWDXKFaKTAIrNkZZZ6SiKBO41TD rVPA== X-Gm-Message-State: AOJu0YxryuqhrEmUACak1iJoDLvD68nRHOIXU8rVCl/+ONUdiqsEowDu 6kvEvVHPoyBl7xUCHwHFRVOIopZXV57qBwHz61OgrCwSJ2QDaH0aK1aZX+jKpHarvsQf7PH/3ym m X-Gm-Gg: ASbGncvcwzpzSoEfCYYw2yRpKdVyNiR23bY3OPsuNyZBNYcZMSW6nN5pjvYwsaZuwb0 kUQ/9fQHp8zRLfTFqGo6tm6QbQH6ioN8bTZYMkdXQ/ZOiLlyxgtgkYtlk6Io8x2yIFi8WfoiDb1 0dFu0pMdZNlpOOuwkxOm2nIKGWqN9zjv9C7yaPQ2CyvoLNyVnV37WZ7+Aj47dIXEQgtaWmpCogd rM2w8xtZIFlsw903t8qW2FYz3tP5S7mEe6Pcd6UDP508EBFaDFf/m1gV3eDM+PCADK3e/YH0Mbu bZc81LbvzPoROVHkEkxrtvENn4rfTrhAw+U= X-Google-Smtp-Source: AGHT+IHPcvdv7FB3AhQqLV3hsOXNc3tJB6fClCSl8rmnmdZAKemsfjxh48tjLULNh3+o5YbNVEjOoA== X-Received: by 2002:a05:6808:3a0f:b0:401:e611:67c7 with SMTP id 5614622812f47-401f123168cmr66506b6e.27.1745513445631; Thu, 24 Apr 2025 09:50:45 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 5614622812f47-401ec978295sm306930b6e.47.2025.04.24.09.50.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:45 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 09/23] ipmi:watchdog: Change lock to mutex Date: Thu, 24 Apr 2025 11:49:46 -0500 Message-ID: <20250424165020.627193-10-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" Now that the msghandler does all callbacks in user threads, there is no need to have a lock any more, a mutex will work fine. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_watchdog.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_wat= chdog.c index f1875b2bebbc..01c10bd5f099 100644 --- a/drivers/char/ipmi/ipmi_watchdog.c +++ b/drivers/char/ipmi/ipmi_watchdog.c @@ -150,7 +150,7 @@ static char preaction[16] =3D "pre_none"; static unsigned char preop_val =3D WDOG_PREOP_NONE; =20 static char preop[16] =3D "preop_none"; -static DEFINE_SPINLOCK(ipmi_read_lock); +static DEFINE_MUTEX(ipmi_read_mutex); static char data_to_read; static DECLARE_WAIT_QUEUE_HEAD(read_q); static struct fasync_struct *fasync_q; @@ -793,7 +793,7 @@ static ssize_t ipmi_read(struct file *file, * Reading returns if the pretimeout has gone off, and it only does * it once per pretimeout. */ - spin_lock_irq(&ipmi_read_lock); + mutex_lock(&ipmi_read_mutex); if (!data_to_read) { if (file->f_flags & O_NONBLOCK) { rv =3D -EAGAIN; @@ -804,9 +804,9 @@ static ssize_t ipmi_read(struct file *file, add_wait_queue(&read_q, &wait); while (!data_to_read && !signal_pending(current)) { set_current_state(TASK_INTERRUPTIBLE); - spin_unlock_irq(&ipmi_read_lock); + mutex_unlock(&ipmi_read_mutex); schedule(); - spin_lock_irq(&ipmi_read_lock); + mutex_lock(&ipmi_read_mutex); } remove_wait_queue(&read_q, &wait); =20 @@ -818,7 +818,7 @@ static ssize_t ipmi_read(struct file *file, data_to_read =3D 0; =20 out: - spin_unlock_irq(&ipmi_read_lock); + mutex_unlock(&ipmi_read_mutex); =20 if (rv =3D=3D 0) { if (copy_to_user(buf, &data_to_read, 1)) @@ -856,10 +856,10 @@ static __poll_t ipmi_poll(struct file *file, poll_tab= le *wait) =20 poll_wait(file, &read_q, wait); =20 - spin_lock_irq(&ipmi_read_lock); + mutex_lock(&ipmi_read_mutex); if (data_to_read) mask |=3D (EPOLLIN | EPOLLRDNORM); - spin_unlock_irq(&ipmi_read_lock); + mutex_unlock(&ipmi_read_mutex); =20 return mask; } @@ -932,13 +932,11 @@ static void ipmi_wdog_pretimeout_handler(void *handle= r_data) if (atomic_inc_and_test(&preop_panic_excl)) panic("Watchdog pre-timeout"); } else if (preop_val =3D=3D WDOG_PREOP_GIVE_DATA) { - unsigned long flags; - - spin_lock_irqsave(&ipmi_read_lock, flags); + mutex_lock(&ipmi_read_mutex); data_to_read =3D 1; wake_up_interruptible(&read_q); kill_fasync(&fasync_q, SIGIO, POLL_IN); - spin_unlock_irqrestore(&ipmi_read_lock, flags); + mutex_unlock(&ipmi_read_mutex); } } =20 --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oa1-f47.google.com (mail-oa1-f47.google.com [209.85.160.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 6A83A197A76 for ; Thu, 24 Apr 2025 16:50:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513449; cv=none; b=Iury3knWoXR+UVGQ1gzV7gmYxcfpCeur2opzQOOwt5p99PziTJd443Qcmbp9k12FdcpkAl41GZ6ta6x23d4LGUJ/u7HGyPnC8jUm5+h5VgcM7lYqLJnqn1OnBwqj4PpxCtiPN388pso4BiOPsHvjf0NTdgTCgrfCjzrced+noro= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513449; c=relaxed/simple; bh=SQ6vcpjxjqiGrMHPluDT6XOz9Z80nQnqZkicTUONgNo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FbramhZvq+IO0Y8YxGSg98+hq30/mfMLZjvgakk1qB/4e4U7NhGDJcnpiu5bBXYXqz8gNxpXJylnTKZWh1UEc2eFxtrCUTUYq7X8cuvcqTbn59qs2xdg/HOxkgGFGLoPHECcNWWqqqecCfBn/ZptorhWdQc1+NWpR/u5dK9HYSk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=c+/V4oTc; arc=none smtp.client-ip=209.85.160.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="c+/V4oTc" Received: by mail-oa1-f47.google.com with SMTP id 586e51a60fabf-2c2504fa876so306621fac.0 for ; Thu, 24 Apr 2025 09:50:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513447; x=1746118247; 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=kUz7DXMA39otnLyfDSP3DMy4MLC8l/U84/KlxK55hqA=; b=c+/V4oTc2sRjNyTQJOrQQS/qXje7hzKng4qmObtrsVGhqwzn6DutxcwH21KVuP28Pf pOW1Vk82j+3YOzYjQmi4UvkiDTiI7E4+cnLs8VRnr7UGM3cDMs9IsWCZeCabNTcc0HzR XGAynS5O4H1T7MzP8UOjT8ghfPA/+9C/t3QPcnWrU4GuNUMFWwVbSPghSZ0+ryNEM1fM H7vmz6TPjCqPXZVyrmNDb6ninfS6PwwvX1dohSYOU1UE7z4N75RAJRKsV8tzrZwZZJBK mXtwZz4tnPDSSKI7hcGIyXrtNtoAkeqTofEE4wCoH5Utq0X13Ifudje/MAnnAyd0t2Nt EUJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513447; x=1746118247; 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=kUz7DXMA39otnLyfDSP3DMy4MLC8l/U84/KlxK55hqA=; b=wKYH5Igneekye12MQqROeMtoB386cn1t56RO4B+V+D/IRcBcNt4nnfEi3ncijQs1NB ZS/HFWaWHlO+lYen1bNuelOeXSkx8jluzKj+e95S5WzLlWtkNtNJBv0e4R2GawRJv/Zz blFL/L60e7eV2g+y78J+kK8W8topnyZH0Vu7SfonfiiKq2O2PiWYKRyGblWkuls5kyI2 LYMTn8WFWIXzau2tkTb0qOyly5n7RhKpWo2C2dLdrdtlGMMGQaQJbk22LWMhOyvm6oP8 EloxQqn6hMMhD6Nwo05yg+8AhdBma54oJ23dYxbPx5f4rqZNxAMIKBJefnWPfnBbpotW tBww== X-Gm-Message-State: AOJu0YzJNUTcBv6lcGDHYJbuIdVAPVPJvZ3wu1LxcPhr3um63l6a+Zks 2nGOD0hTSxFxMKUPoHwA6576L896um0EGAfIK7Z0Me1t1SDwd5ICKBnaZ7SJNzXB7yKmh6e6jxi + X-Gm-Gg: ASbGnct+Didme396x2SRqXcK4459LhATq8NrCuw0Uf3mcs5xxFEC++n3KA9B02tehrz izcJAiYUlfugxcN0BSxCiPOSW0GxaGIkCwaVX6ivDsRIXehuLqyUfRX7cRvxVPkdrmDe6cjDaOd +slaHbB2wQphQnPDCYSd817ioAPZBJrH8Q0MP2Ks21IbY73cWY1UDecXXgzo9Haq8Kd33HnSO5O oiJLWott9K7BZmbPPkvKW1PvTyIA/S4lW3+u5xf831QTShq58qJ8szhQnVbia6bcSvpXT3uBiq3 hmf/nZ8Puz4uyHBBkdVtCwnTD3Ng0wzbTes= X-Google-Smtp-Source: AGHT+IEFBkV7UHEn58Xszvm0tfXkA82Ab6TrMIvEXYPdUN5UB+Wy6GEu8BwlPZj7yfPnj9aDzbXcQQ== X-Received: by 2002:a05:6870:1592:b0:2d5:230f:b34a with SMTP id 586e51a60fabf-2d99420d1b8mr332806fac.9.1745513446880; Thu, 24 Apr 2025 09:50:46 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 586e51a60fabf-2d973650836sm361584fac.9.2025.04.24.09.50.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:46 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 10/23] ipmi: Add a note about the pretimeout callback Date: Thu, 24 Apr 2025 11:49:47 -0500 Message-ID: <20250424165020.627193-11-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" You can't do IPMI calls from the callback, it's called with locks held. Signed-off-by: Corey Minyard --- include/linux/ipmi.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/linux/ipmi.h b/include/linux/ipmi.h index 2f74dd90c271..27cd5980bb27 100644 --- a/include/linux/ipmi.h +++ b/include/linux/ipmi.h @@ -93,7 +93,8 @@ struct ipmi_user_hndl { =20 /* * Called when the interface detects a watchdog pre-timeout. If - * this is NULL, it will be ignored for the user. + * this is NULL, it will be ignored for the user. Note that you + * can't do any IPMI calls from here, it's called with locks held. */ void (*ipmi_watchdog_pretimeout)(void *handler_data); =20 --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-ot1-f49.google.com (mail-ot1-f49.google.com [209.85.210.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 C6C4F28BAAC for ; Thu, 24 Apr 2025 16:50:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513451; cv=none; b=fnkgyuCqOHeUajhGVTWsMnbeDmW49iumSflOpR58Ry1/rLHaK9FWovDMXiyLWS4FSfg/h1UH6nYdww9NcQP5cJvj5rVNRDcCSlJhoyDNLBpT4tOMMQHyTqikS8p84ocv5FarZwNuhWM5SUZlp4vh5t+iDJB4Y/CzC4yq8Zz+jLw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513451; c=relaxed/simple; bh=xx6WjQQJI7TG0s8jN6ebesWLtmwT5S6KXNjgM9mjaoc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fGZJFSoqha9NRxXUycW4WpGuD4hc1XLRCW96+c7+r2LykRDybd47aqS1lJmbYBgtvB04M6Tk+NM6sWD++lTGW4chewlkcjJX6l2XaSACWviKVSKEemqNRvRvRcC10BxpRyD2Jyta5n93FyRanhDIy3sbVOZBzrzjnr5N/14sk3g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=E5ofKRFy; arc=none smtp.client-ip=209.85.210.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="E5ofKRFy" Received: by mail-ot1-f49.google.com with SMTP id 46e09a7af769-72c16e658f4so850860a34.1 for ; Thu, 24 Apr 2025 09:50:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513448; x=1746118248; 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=Bo8OORB/CMRTqZ+jmfB+YUkyYwA6MdIiB5QaJmUO56E=; b=E5ofKRFy1QivSOzZEhkyAYg8IHUSmY4tfwSYhqEFj2HVykCXGv5UzkVJz1RAv9rCPI nPDhP+rYb/gQbzmXJTCkooS74iYigRpZKrATwCPIVIOhHWIsY1z91gjg4bpBF36hihQK 0QEUpdSMDKiDVa0ZaUPaLpnSK3JH46vf5SGsTucZ3HN6mf8IbHqrRMFZKtxeu4iaoyHv my57sr+o8H2R4a0LB4WOYos4jlSh/yY0EahkqocTA1nvh5HWAFmYbiAJLoVr+1IwFC6E Teqk2/uQjzDO8b5H7yIC0e1wPh/qoZXOxPaKkJnxyLvAUzFxVe3ySfT6Ho16Soe4P+Ie aPaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513448; x=1746118248; 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=Bo8OORB/CMRTqZ+jmfB+YUkyYwA6MdIiB5QaJmUO56E=; b=egmF+IFCW7MBXQvy4Z1oUMmhgLSAscd4HSj0T+upfXRIIbKxM0n4S21ALZTUrVwYL+ yPPJQc9dzHu/xgqIkhGlFliZDO1aucqv6Mirpo/QjnQOX7zWuVF3WefpSdR9PUwrPTKn M0S+zI+CevxaCnmOUbqSFG0/0773/vvI972mfRzGnAuNg2qOd2PXOR5gYIjgwDT5vYrF TIoQ6bpWh2WTFQMd1+iNd94zJ2IzaeinFsPHatVCU33brZlgaGeSkO6dyTvtSry+INJm QiyMlVZT2tA7JbVo0w/735SdUulSye2hrTJesoMrLembcaKFFHUiOBSzXmI2/2Do9MJh h6Fg== X-Gm-Message-State: AOJu0Yw8mo6StgufUPzJRjzA+lqBUWcjuEC1dc/mM12hAw+SisVZdAPu piTrdjm8LS3g3aj7N1qpZ01M05+9olmFIrpFkv90R6jp7t4o6Ucx7OR76quh7xmhGaDE+Fo+gO2 E X-Gm-Gg: ASbGncshb+KH8IwRff92o7IB4m/H02WDtQKqzmBXJuqOjkfdL0bMsZ9kR1TOLwJALhr 0enoyUYL2GqX0VLYJEKK3GCQQaBL7mzMluIl62rtQA5SBLA74qnkm5N5+q7+pvTCGPtBvmdD65r s9SYOeigaL7hcDcjpQMC5tQ0ua5fw1NwH1/bsrpd6oL94/EGWHjvuzG1Ki8ViTZ2AiKWZ0fylG+ uiHaFldTBzQNsNxAUvRZw6h4I/z95FtHsNL4O8TrgqBNQ1wX/or5ZcA5WTOV1J7ZJmNyM1RqbVe 9zP+q2lzka9WbYKsLRM92AnAGl+dIRrNCjA= X-Google-Smtp-Source: AGHT+IGActbYLMI+4Dv1DxR+pkcu73M2Hm6w/m4/WWnj+zX8JKJ9d7TyKjUutOCfa+lPaH6GRQXn7w== X-Received: by 2002:a05:6830:3741:b0:72b:8000:d487 with SMTP id 46e09a7af769-73059bc8b48mr414897a34.3.1745513448417; Thu, 24 Apr 2025 09:50:48 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 46e09a7af769-7304f187fa9sm292307a34.11.2025.04.24.09.50.47 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:47 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 11/23] ipmi:msghandler: Remove some user level processing in panic mode Date: Thu, 24 Apr 2025 11:49:48 -0500 Message-ID: <20250424165020.627193-12-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" When run to completion is set, don't call things that will claim mutexes or call user callbacks. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 3e88ac6831d8..e7bed764b4bb 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -4808,6 +4808,10 @@ static void smi_work(struct work_struct *t) =20 handle_new_recv_msgs(intf); =20 + /* Nothing below applies during panic time. */ + if (run_to_completion) + return; + /* * If the pretimout count is non-zero, decrement one from it and * deliver pretimeouts to all the users. --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f182.google.com (mail-oi1-f182.google.com [209.85.167.182]) (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 EEF5328F50D for ; Thu, 24 Apr 2025 16:50:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513452; cv=none; b=rHw+KEkURxcvuNFNmCp/5P5DDoXYLKjSS1syx8c8PwN4gXVj+u//TcDNE+tkltij9uoqICGWIzU6gnCxlzmGBtHZ9rX47Pf99rMzNimo20w/Z724ZM2F8QY57iDptifx89d8xLs+ETB/d8Z/byNQxErXN0Bp7tMc6jwZy4N6CFg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513452; c=relaxed/simple; bh=I8y6Dm7syHuvh9BYvzLeEhnMOxZLHQ+TtWC6xRhAQAw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SvKGdM2vnNsN+ooBsiaNa9xGivHIorwUET1S5Uay1QPlY8NjDta92rQ/ULDKm0+yUDaDS5+ggkStEmZyQDv3NFLiQMPhcODEcuRHYIA515+apUjtDHhrKWS6sGGELAWyG7rLcc4bqxzInD+j2cUI2F/4B/NX7bAWhmhJasVXeHk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=ltTkvHGY; arc=none smtp.client-ip=209.85.167.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="ltTkvHGY" Received: by mail-oi1-f182.google.com with SMTP id 5614622812f47-3f8ae3ed8adso887067b6e.3 for ; Thu, 24 Apr 2025 09:50:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513449; x=1746118249; 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=O8oGDdvRnI5EoipFzFv4+4XYwTfEEBtpDViBBf5EBeQ=; b=ltTkvHGYm7EuFCtetLc3IG/SGlslP6Opch8Lt6fstZ+p6N1tI1+0D7kXywLqAEp3Tm PHfvfgtOqD8CE2gPB6pTwK0f9r9VCB25WxzlGg9xF8YMgaqL+Amdssv/UAdj1lgekNLd ZEW/J6C3IZNrC+vwFJFhgwCvlaHyPcvl08uyDf4uHW3wASxAiw6ZWgFrIRo8qc1wnCaK 1Nw+kCAEHjBUEJY70sYfLiOorm8521OdO6HCyxHAJpesqMijW6/08+eanQg9pxt/7+w6 EY6clNvoVAGORze3P7wvV7Z1IPlIMHw7cqq7pXAt6J6nzk48tNEc+L4vzut8oFw8Qs9U HA+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513449; x=1746118249; 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=O8oGDdvRnI5EoipFzFv4+4XYwTfEEBtpDViBBf5EBeQ=; b=V/dbUEJGZpV8hxv/8hx6ss0PW2mXwa9U75x5jp0ek5/VBs3a/TNfYjnB8F1O/R8Ixo yo6VdW5pcMrNN5mIVDLhkTkyhMC/F6/gSJs6CJb0ss+XwqVXTNH3SXGMIZjJvC6WKZXU Rqtr+YMbSjNnPC5puHH7PeFwh3pvBakdgkB+JHTTfF/PlaxG0JgSFpeHELBt3JVvw0ou DppiH3lXyPVqkWYQKzHlonIaWdiYsjIXK3iTNU103uF+9gLn1o2HTmm1AUHFaOmCm1cN 5iQd15jeQHv6uHUNy/UTRlRC7Ltmi6m7ktwFeJQkWBR96kBC4IQ9vgV8D7mJZsEoqtBX nj/w== X-Gm-Message-State: AOJu0Yynkr1dzdxS8iPzBTfKGLld5YYbFYvEqR2KI0a2+UgtpAyA0PXe 2uFfgUCNaGguT1kMmpRdX9FNniygIj37MiQp7IMUc9WDQOUiRH57G0R/4KAP25jHjPWTQARwmq6 G X-Gm-Gg: ASbGncveHPsFWOwNeJGro0VMQqJfnprUPysvsVtMyT5g/+1jTM9/GSNIsIpPJiFE5xF 7Bldg8ypmOeTm89oWlSVaK76+HtEzQCTeAkmcXvz9eXim23kALtjbNjtQAGu/KG/MSt2RoKAd4u eb1JSa9z/crhkA86FCRSA+N0Kr1aSCPNVwV2x8tdzdhxJAMIgCcrdUaUQavRWqNsUuMlwEowHKb dCdcQSGL6oNC/AgrqfO+GaijmZaqaHyrJLJD7qxylhrKvvLK3ZEn/nHl5EXJ+2r1VG3ROrC0SUN STs7UTnm7D+fE/reAzAPtY4zbgYDmtcVctdEKayv7OAnLw== X-Google-Smtp-Source: AGHT+IFkIgExmDrBdSdQTioadtDd9kVguGf2ruitTrAnAmP6r1qHlEk08+wJKwFS7DjoDJUfJ1+Iwg== X-Received: by 2002:a05:6808:6c8e:b0:3f3:e01e:f7eb with SMTP id 5614622812f47-401eb27e11cmr2026509b6e.7.1745513449589; Thu, 24 Apr 2025 09:50:49 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 5614622812f47-401ec8b069fsm314865b6e.5.2025.04.24.09.50.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:49 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 12/23] ipmi:msghandler: Fix locking around users and interfaces Date: Thu, 24 Apr 2025 11:49:49 -0500 Message-ID: <20250424165020.627193-13-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" Now that SRCU is gone from IPMI, it can no longer be sloppy about locking. Use the users mutex now when sending a message, not the big ipmi_interfaces mutex, because it can result in a recursive lock. The users mutex will work because the interface destroy code claims it after setting the interface in shutdown mode. Also, due to the same changes, rework the refcounting on users and interfaces. Remove the refcount to an interface when the user is freed, not when it is destroyed. If the interface is destroyed while the user still exists, the user will still point to the interface to test that it is valid if the user tries to do anything but delete the user. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 51 ++++++++++++++--------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index e7bed764b4bb..d05032dc1f69 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -46,6 +46,7 @@ static void handle_new_recv_msgs(struct ipmi_smi *intf); static void need_waiter(struct ipmi_smi *intf); static int handle_one_recv_msg(struct ipmi_smi *intf, struct ipmi_smi_msg *msg); +static void intf_free(struct kref *ref); =20 static bool initialized; static bool drvregistered; @@ -196,25 +197,6 @@ struct ipmi_user { atomic_t nr_msgs; }; =20 -static void free_ipmi_user(struct kref *ref) -{ - struct ipmi_user *user =3D container_of(ref, struct ipmi_user, refcount); - - vfree(user); -} - -static void release_ipmi_user(struct ipmi_user *user) -{ - kref_put(&user->refcount, free_ipmi_user); -} - -static struct ipmi_user *acquire_ipmi_user(struct ipmi_user *user) -{ - if (!kref_get_unless_zero(&user->refcount)) - return NULL; - return user; -} - struct cmd_rcvr { struct list_head link; =20 @@ -611,6 +593,28 @@ static int __ipmi_bmc_register(struct ipmi_smi *intf, bool guid_set, guid_t *guid, int intf_num); static int __scan_channels(struct ipmi_smi *intf, struct ipmi_device_id *i= d); =20 +static void free_ipmi_user(struct kref *ref) +{ + struct ipmi_user *user =3D container_of(ref, struct ipmi_user, refcount); + struct module *owner; + + owner =3D user->intf->owner; + kref_put(&user->intf->refcount, intf_free); + module_put(owner); + vfree(user); +} + +static void release_ipmi_user(struct ipmi_user *user) +{ + kref_put(&user->refcount, free_ipmi_user); +} + +static struct ipmi_user *acquire_ipmi_user(struct ipmi_user *user) +{ + if (!kref_get_unless_zero(&user->refcount)) + return NULL; + return user; +} =20 /* * The driver model view of the IPMI messaging driver. @@ -1330,7 +1334,6 @@ static void _ipmi_destroy_user(struct ipmi_user *user) unsigned long flags; struct cmd_rcvr *rcvr; struct cmd_rcvr *rcvrs =3D NULL; - struct module *owner; =20 if (!refcount_dec_if_one(&user->destroyed)) return; @@ -1382,10 +1385,6 @@ static void _ipmi_destroy_user(struct ipmi_user *use= r) } =20 release_ipmi_user(user); - - owner =3D intf->owner; - kref_put(&intf->refcount, intf_free); - module_put(owner); } =20 void ipmi_destroy_user(struct ipmi_user *user) @@ -2315,7 +2314,7 @@ static int i_ipmi_request(struct ipmi_user *user, } } =20 - mutex_lock(&ipmi_interfaces_mutex); + mutex_lock(&intf->users_mutex); if (intf->in_shutdown) { rv =3D -ENODEV; goto out_err; @@ -2361,7 +2360,7 @@ static int i_ipmi_request(struct ipmi_user *user, =20 smi_send(intf, intf->handlers, smi_msg, priority); } - mutex_unlock(&ipmi_interfaces_mutex); + mutex_unlock(&intf->users_mutex); =20 out: if (rv && user) --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f175.google.com (mail-oi1-f175.google.com [209.85.167.175]) (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 85C4328F53D for ; Thu, 24 Apr 2025 16:50:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513454; cv=none; b=b3d0ICvS6J8E11T6gcXm0y2FVWH4peu9KykaUFB2KgdAgeDkQsxYB8N1HBR6J9vUmUY+hp18is1dcm0QnurI2VSiAxcyR6+Qo36iEpxp+TPk9i10rCUBUUyGte0SnoXGss/ydR0odp0GtJYgaGXHE91PZDWkZzWUs/eUHHA/8y8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513454; c=relaxed/simple; bh=LPUq/AG1jJWICrGW0I7sQ269PYBFUmUzBdCAtijMfSE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=it1EMHBVb9Q6Koo9ot1R1g549QF41GcwU4gmZ4sYW/TDDdonKZcA0/fJpeunmI6cICy1ojJmOIyV9VH7m+7O1//HGNY/PGTZULwzz75ZMJ53WN28QMEazwwtG5TgikWxyopZqEni0ZgR0IBVbv0fEq1h5yPqsBQT5Xzl7lMilJM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=AYNdDDV/; arc=none smtp.client-ip=209.85.167.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="AYNdDDV/" Received: by mail-oi1-f175.google.com with SMTP id 5614622812f47-3f7f7b70aebso793571b6e.2 for ; Thu, 24 Apr 2025 09:50:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513451; x=1746118251; 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=nvR8oUvm5AANjxDmH4zqg+trywtqJbWELpqwDmIHFLI=; b=AYNdDDV//UrwGAQ4z+B/vy5BBNOV8vAAxOZUCDleMeQix4DgbHKFkf9BCa9fVc/htd iSqethTf2CpcogwWx5hZQi8VDXGQEagr/M56RNRIogSeo2dxEV4qCZunLauZ0rMHomK/ 60TorrFKsEOe5JOsz1dAzop9vTtn/JUW4zPSC+lmg9z7UH3+4B8ADP15C61qp2MEUSzq RxEQWN0+1K6LnOoxXDZ4LC7ZDg9lbLlkvDPk0xchMeaHGu6dYru4IbmUMBGDZvRQA9GE W83E/h16dJvCL71HsT3vXbWBZlv08FDr52EoNOsxfMQH1Jki9S1egSRgAUXLvF2w6MG/ tGqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513451; x=1746118251; 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=nvR8oUvm5AANjxDmH4zqg+trywtqJbWELpqwDmIHFLI=; b=GdtdpbBAKFRhp3wyLVEYvaGo6Hsv0v7eWSTsrFFMCxW1m6l5Yyw3wZ0/EDCGmGFKcD rzJ23zCNdJfzdf2ayvF5f2eegBg52CkYcqG4q9FUHTDw7ISZizAZTqPgQaKq9vNnCG11 LzZW7IzhX4ihXO67oI7CgEkGvbzXHkEe04wqW5fsDfImL+8q3G82ikYtgllXDa5d03yI GCliNE5yFykns5P2lWVFSANaN1AX/nHiBQd9tvHBzKTD583W3+W1Hbj8PKqyWdSAdk+V /g2qyNg22Uvf1ubpnwhHJzdbJOPqeRYgly8elu/bZuk4MEg01wL/R5r/3/PqScVIPxRc oMRQ== X-Gm-Message-State: AOJu0YwIG9TB4GPE3xU4uSfKX/lIub53lRkwYyBovIZYzaxKVdansebf 29GzCDkbOpipH/KLOnxAfVTzTDzSQ47gg0LR00mMoMr4LfAn8KxnAGsqKeUvcaKcB3D/L7ZA753 u X-Gm-Gg: ASbGncvOHO4UDWJ/0+U/4I9GSItvb0rXvXY3kyX/IwSyShFCMjkwSowA4eQycbmQ0I0 eYsJL7K+6P8YV17AQF+lczgsz8aO76WOhJ4N7BnBkLGQw+v+O0wED2pYC2aMqP5D0fpLsA4WN90 KZvDONh49KfhK1/bgtPTxELzNWairrpy6xYTkd1+bU+iMH3ir256oLmFJTXqB4rulDgwPPZcF6o LbaqDrOK7+XS1Tb0pFVthl9Q3aL6mfhbfciS1U2vibQ+l279YKo9zzdY/TtU5OrsszkQdgYPzVt +tIlPCoUQBEmZu652sGWlv3/mHNYnOINp6o= X-Google-Smtp-Source: AGHT+IGxBh3dRs7oF9SPvu9xegYdzcEYSKMLeofJNaEOzl0NBrLhyFwnB+PDh2QGaXrXXoSthZFQbQ== X-Received: by 2002:a05:6808:7005:b0:3fb:46cc:e08 with SMTP id 5614622812f47-401f1231827mr69872b6e.28.1745513450759; Thu, 24 Apr 2025 09:50:50 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 5614622812f47-401ec8cd325sm315773b6e.19.2025.04.24.09.50.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:50 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 13/23] ipmi:msghandler: Don't acquire a user refcount for queued messages Date: Thu, 24 Apr 2025 11:49:50 -0500 Message-ID: <20250424165020.627193-14-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" Messages already have a refcount for the user, so there's no need to account for a new one. As part of this, grab a refcount to the interface when processing received messages. The messages can be freed there, cause the user then the interface to be freed. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 32 +++++++++++++++-------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index d05032dc1f69..edc53c22ca84 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -958,20 +958,14 @@ static int deliver_response(struct ipmi_smi *intf, st= ruct ipmi_recv_msg *msg) ipmi_free_recv_msg(msg); atomic_dec(&msg->user->nr_msgs); } else { - struct ipmi_user *user =3D acquire_ipmi_user(msg->user); - - if (user) { - /* Deliver it in smi_work. */ - mutex_lock(&intf->user_msgs_mutex); - list_add_tail(&msg->link, &intf->user_msgs); - mutex_unlock(&intf->user_msgs_mutex); - queue_work(system_wq, &intf->smi_work); - /* User release will happen in the work queue. */ - } else { - /* User went away, give up. */ - ipmi_free_recv_msg(msg); - rv =3D -EINVAL; - } + /* + * Deliver it in smi_work. The message will hold a + * refcount to the user. + */ + mutex_lock(&intf->user_msgs_mutex); + list_add_tail(&msg->link, &intf->user_msgs); + mutex_unlock(&intf->user_msgs_mutex); + queue_work(system_wq, &intf->smi_work); } =20 return rv; @@ -4827,6 +4821,13 @@ static void smi_work(struct work_struct *t) mutex_unlock(&intf->users_mutex); } =20 + /* + * Freeing the message can cause a user to be released, which + * can then cause the interface to be freed. Make sure that + * doesn't happen until we are ready. + */ + kref_get(&intf->refcount); + mutex_lock(&intf->user_msgs_mutex); list_for_each_entry_safe(msg, msg2, &intf->user_msgs, link) { struct ipmi_user *user =3D msg->user; @@ -4834,9 +4835,10 @@ static void smi_work(struct work_struct *t) list_del(&msg->link); atomic_dec(&user->nr_msgs); user->handler->ipmi_recv_hndl(msg, user->handler_data); - release_ipmi_user(user); } mutex_unlock(&intf->user_msgs_mutex); + + kref_put(&intf->refcount, intf_free); } =20 /* Handle a new message from the lower layer. */ --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f173.google.com (mail-oi1-f173.google.com [209.85.167.173]) (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 63ABC28FFD5 for ; Thu, 24 Apr 2025 16:50:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513455; cv=none; b=mHMa311qSBVlrxMP6VXts7aCyhmg7yVG6sIV39mpQvuvOL9JLS1ADzEawSNzAtJWoX8U8tkkG8Tyx0RQ/l/nlFcutvin5OjWnT6RCA7YMnpbKTH+wfqfgrXYn2O/TtPRfP6RlZzOOYHJBZ+E0ZrFXOiSu2a1sw/Qgg64hbBN8v8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513455; c=relaxed/simple; bh=ev2+REOh6JLHQHzx1pYRwJ6ml+j1MT8Bi19AvQ0dFFU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jOkzI5AQobLwl9l8Dokn2WcOEiKjvbWi73uFEwjGaBw4iHQsFlESEauIiu/qedbCRVHZeItnfIPL9zgtSZ8naND/5KYP5S8n5RSc0AJh+jpue1dv9rxtmS5ICpvwv33ducvc3KGttanHY6J6q4h6vCKOGHRV/pCtOqcabIHRKJ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=U6YETpto; arc=none smtp.client-ip=209.85.167.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="U6YETpto" Received: by mail-oi1-f173.google.com with SMTP id 5614622812f47-3fe83c8cbdbso432984b6e.3 for ; Thu, 24 Apr 2025 09:50:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513452; x=1746118252; 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=34wiUQ0AMJfn+ReOObF+ZTxikTeHpyAO2TM1tGanBH4=; b=U6YETptoca6tPk02lp6sBNlYHDOjLyL7YmVejd+N1JcGHttLxkKltDwKyGuZBjpbJv zpWW4YmJfw4qF6bjUz6Bh20F+x8WqTo/o82VlkhiITQPegGk6h66aXdK+y9O3cOL43ey hXYOKnhaehPhfMTcv8vpG+PPi1SK4uzYAJ0MS1osqobNBGfTbuPOymFYlHM3GGJGhiA2 xm6YC66xir2yu3/xJ2vNQYdqasuIN6dQ7xIOKp2OMS9MUgzHZ6y6nW5lL43UvSnsV9jj HAsO6Gb8TysTpBNTVca36sH+sO/DjBnJus0CeNFW7uXE42IYRoZ4XmZQYiFLJwSSbzxF iE+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513452; x=1746118252; 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=34wiUQ0AMJfn+ReOObF+ZTxikTeHpyAO2TM1tGanBH4=; b=f0y/zTVmyeM/4elg8zXv/wtuxmsFvArkB6m/2ij3ZV7Hd3cHObYdX0Hsbfq6WL6Gc3 VV46DqwqGdX+lE9MUy4dm3G7WAbTTam3tVg5b3jdsyqntCiLPDqYxvcqtn1N9YgVwmxI KFzB1kcEJJYCqGA0PIBpnu+aCevK9NBVRc+FjHC5jrJx+MOtUzxLSQz2hGf/x/hiFE7m 0iSXJ7JRJtIdF8GibJPtBBXmZjsJU6VOpMIxG84rtwwSx0sn8yRdSL7K3H9MD2//UPl/ 02V+jEnwzWq4rA1WAr+EC//F5hVIXe8F9vmjA8gir0JdFtfyyYxrWiNf1qmCVsfLtCTj NrwA== X-Gm-Message-State: AOJu0YyrMypqBh3pcidB5eC+DgPhXHnhkL2/57HGuPjLn1oZf2fyGkvi NTqRJdtOZJLAOwSs1R4vJaySINezCOzg8nK/SxuyPGq0UQZ3EkJwT1zncyB4rpvAi2uMRzNDqzr / X-Gm-Gg: ASbGncs+z/ICCaJ/5jC4RqYzbEDCLAzSjwoaE3eEh68MzU/zoD0MBO4hmEMlXxmF01n K87ZKO9Kr+ugh/MVEjgr2Q5ggXAX/Q3MBNhcb+bDVyh+07jHrJ5Fb1Vm0NXk3qSoZcaKeOINQZ6 4mkHDrCrnF5vOG+rYHO7P5/42wP2kbU8tkMoG0g8jc+uT3Oj6ebawtTMRIuYlpPzrAsMuH54LaC kke/60wTem+BCza3IZEJ3ISUqM3YubCLd2G4PpV87O5stnz+wyLiex6XdtkvLyAJDjvvBMKJdzb ERptU16zsAcSynZUiFXjVoD//B/kj/RlxQ8= X-Google-Smtp-Source: AGHT+IEHlDIf7ClF9R8piHibOkiklRbxXeeireMCw2PHSCOxkSCPjQvlyS1JVQbFyT1Sumg6jwuxWw== X-Received: by 2002:a05:6808:3308:b0:400:a250:9819 with SMTP id 5614622812f47-401f1180586mr101396b6e.12.1745513451973; Thu, 24 Apr 2025 09:50:51 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 5614622812f47-401ec8e2808sm312067b6e.21.2025.04.24.09.50.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:51 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 14/23] ipmi:msghandler: Don't check for shutdown when returning responses Date: Thu, 24 Apr 2025 11:49:51 -0500 Message-ID: <20250424165020.627193-15-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" The lower level interface shouldn't attempt to unregister if it has a callback in the pending queue. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 34 ++++++++++------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index edc53c22ca84..74a84eeeed9c 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -3893,17 +3893,12 @@ static int handle_ipmb_get_msg_cmd(struct ipmi_smi = *intf, dev_dbg(intf->si_dev, "Invalid command: %*ph\n", msg->data_size, msg->data); =20 - mutex_lock(&ipmi_interfaces_mutex); - if (!intf->in_shutdown) { - smi_send(intf, intf->handlers, msg, 0); - /* - * We used the message, so return the value - * that causes it to not be freed or - * queued. - */ - rv =3D -1; - } - mutex_unlock(&ipmi_interfaces_mutex); + smi_send(intf, intf->handlers, msg, 0); + /* + * We used the message, so return the value that + * causes it to not be freed or queued. + */ + rv =3D -1; } else { recv_msg =3D ipmi_alloc_recv_msg(); if (!recv_msg) { @@ -3984,17 +3979,12 @@ static int handle_ipmb_direct_rcv_cmd(struct ipmi_s= mi *intf, msg->data[4] =3D IPMI_INVALID_CMD_COMPLETION_CODE; msg->data_size =3D 5; =20 - mutex_lock(&ipmi_interfaces_mutex); - if (!intf->in_shutdown) { - smi_send(intf, intf->handlers, msg, 0); - /* - * We used the message, so return the value - * that causes it to not be freed or - * queued. - */ - rv =3D -1; - } - mutex_unlock(&ipmi_interfaces_mutex); + smi_send(intf, intf->handlers, msg, 0); + /* + * We used the message, so return the value that + * causes it to not be freed or queued. + */ + rv =3D -1; } else { recv_msg =3D ipmi_alloc_recv_msg(); if (!recv_msg) { --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) (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 A030928136E for ; Thu, 24 Apr 2025 16:50:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513457; cv=none; b=pJKZWWEVmZqiBFsVC5Bk5dEqUABcPsf9FeERSq82Ulw5EiJFPs9Duf+wB3QnREQhv5l7Gzlaf3SmVAyxOYiYJpMO0M0ltD87iWjGnA5m7EFuwUtqSqijmA5E4dGvqyqgKvPjzDKjzTb56Gr9D8Rjt2rXENyLJjIBQHXGIfoRcF0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513457; c=relaxed/simple; bh=9kTc4t7o1IsnHGiUfWMlY8nneXPQ6AscrQgHYpwrHA8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HEMpuANjAkmRYpLbZ63qElSucoh31dFFMzamxTSgt3tmZcYhSbndE49+zfAXsJYzY+bTAeD23b8g5DU7sBlFOlbKDUYdEhqcu0mOH9UdgO+72adfmR7ZWwomrRleaF59G8eLso07KyRQw5amcMAtK6CMlM7OuAvYlQID2/WCQtA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=B8LXFB87; arc=none smtp.client-ip=209.85.167.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="B8LXFB87" Received: by mail-oi1-f174.google.com with SMTP id 5614622812f47-3fcfc85f1f5so361137b6e.2 for ; Thu, 24 Apr 2025 09:50:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513454; x=1746118254; 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=grEWQ0hJBXjtKLv/1JIW7cg4Vz29ZCwIkUkVu1A6LjU=; b=B8LXFB87Xn76NCr+CpxHwEhMr/5FnKxTDlrL4bHCz7Qtp7MimsrqSkiH9brwNUy2XT yevnXyL1g/CwExsjWdB9/6Vopurz2Sk3KYjnQnQFrMhSDLA8ZbFZLnU6FeyP4jWsMiWh YSniwYaJ5aao95N2JsciHUUFnsIjhOuIUVl1K2XRiLq18cDo5ERAlX+HFwzSCn2Nukkp TIt4yZg5v+D9RF+xluB/4MYTfQJaBH0fdjuWJOzHSGsopxh0jPJYB3EXRRHy0scYYtRK vGbgiHCdak79mmk5CGMCXLNJvWjwU7DMv8tojLANTPtEl/V6cVH5wyjOWXN32c/hwD/o gyYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513454; x=1746118254; 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=grEWQ0hJBXjtKLv/1JIW7cg4Vz29ZCwIkUkVu1A6LjU=; b=JJ6hSN20aqHhsi8gd08Jm/l15Amv+AyBANm/R0Ed0YVP7jy1aVBJE5igMQ0ArgANPk A9YTFtztgpjxFtiHePoBhmS0QdMSdQYe8bAHe9PVrhLlgmMEU/iIkdQbekoIKS/gQkDU fSf1CLHniJTZH7WZeNjTvVoDlcN+LDzaAJAgv9t7+94twwA5ZQZ3TuzZoWZNc+yFRmfR JRsoYl5on2rypYdmsbIrJlxS1IxxOTa7P5zJbfEw8FhN/ezlpjxVRAV0ZEAkdsAl+c9p 0luRPq95kh1+pzaSnr8imIv2sxeSbzCy51sI5H7R5r2hfIVRlvQEvXqRcFTyFfDXu8Ps hv+w== X-Gm-Message-State: AOJu0Ywp3nS4UQj3b3os3rFU+3l+PzHz3u3OuvdjmSJ6mNvXNgYov+hG Xc9Y/Ho+4zTBiqsVG8CfaybFSGqBVzoKnOKJ4d3nfNbj5NmQzAWqwUM7Om8wDFD/h9DHcJIPa1O r X-Gm-Gg: ASbGnct8p8V2ORuDwOxrAOM5q3EUc72Qc3PHlY3TWi+auTK3TUJxp7W+JqtdLnzn8JF 4/zee57yD5jhzZQtBcF82+Y1x/W0ep5aQIRJlRrtKt0dF6FCf9pwcN6EFVUF8Xc3SgPikbPgo1W xtBBCxH/d0rQpCTze9+7hT7rEemoFyttwjPcxD3B7hrvtHerNpNpP3Edlh6DdJTzEa/r5xQmm2j GFq0RuZw0GnLQ2L8eAl/3zHQL6pUHwnK3Oysy0uZ9oQLM8Q2Z4FkeV+l0UDHBaAGK7P70rc0jRx Rav/rMmfiRb3cyjLs3hzASnmvp6jYMCP8I8= X-Google-Smtp-Source: AGHT+IEtMCTOpalPZ8d+/hnZwM3bREEt7UQ4vwzckHylq5ddbr/kBcL7ygtUXXdcd71qJvRQglwpBA== X-Received: by 2002:a05:6808:188:b0:3f6:ab66:f4a1 with SMTP id 5614622812f47-401f1244a60mr57537b6e.39.1745513454141; Thu, 24 Apr 2025 09:50:54 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 5614622812f47-401ec8b08c5sm314413b6e.7.2025.04.24.09.50.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:53 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 15/23] ipmi:msghandler: Remove proc_fs.h Date: Thu, 24 Apr 2025 11:49:52 -0500 Message-ID: <20250424165020.627193-16-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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's no longer used. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 74a84eeeed9c..927556ca469d 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f172.google.com (mail-oi1-f172.google.com [209.85.167.172]) (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 A3830291158 for ; Thu, 24 Apr 2025 16:50:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513459; cv=none; b=hTgFa0QgiELBqlSy9yoAoa3DGvtKlLICoAH8OSaFPmRNiOHJqP8X+PPEDkfOssUdzSGtoGVPeLVWbqKLxFOlTD6rg8wD0Jwr2uy6mPvSwzPHUw2dG8hnJGp+VT3jN7RCp42gMas53xDk3oGTAMO3w/+CsEkz95AIBr6z5rin2n0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513459; c=relaxed/simple; bh=XrmOcDsptBdldttLyIXtr04zz3J2K3l1Im+6+tV5Kug=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KBvMcW4IIO+4v4JWaTqRuaWBLGlnZ4DdN6e/gJgwJMzHVRDmyKwCt1n4bHxDiGprbHv/o8509nKYUiFSkY47oylpXgC8BCmD60ZI61qPIyWV8NxYmoEwJdsJeHE5yI+K1n24e0PD6phNx3sO5MyFs1kg/vZ3Wth3uXkwex1Ma7Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=jG2ZwAxz; arc=none smtp.client-ip=209.85.167.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="jG2ZwAxz" Received: by mail-oi1-f172.google.com with SMTP id 5614622812f47-400fa6eafa9so949050b6e.1 for ; Thu, 24 Apr 2025 09:50:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513456; x=1746118256; 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=wByEINYJd0q8686qKYCNqB/r8M3VXqTUYfl1z8pH8qc=; b=jG2ZwAxzGk2h58fSweA4BXlMvcZ8fo+90yM5yZWmP/GLZUHu93J2I8MWORkPWF/O/I cgXSId0ZG7+qMmKDJW0Kv1bkGTnRA468XK/UShK95kCT9TDpiCIFw4Df0eHtL6o+oGow UkKq5ea6WLm4OCtlG53pc2nge8QFDTEqbquAoyL5eu49pHJozZmaKP+sF+FVctnkfTSD B1s9QilsK4zWo0O+2XWV7931hkvrE01GIrwGaxlRD1NdNrgCN50kEED6EJiPkV3pTMpY vc+gGuHIsEvMRXIcmM/cH44zPw0SDdskApEaDZ5Sv78DCWBO4OXds+fghxnkGAtu+HbQ IpBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513456; x=1746118256; 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=wByEINYJd0q8686qKYCNqB/r8M3VXqTUYfl1z8pH8qc=; b=cXmuElpkLPH0S3BjfBJhGR6jvD413VOXAOElxD8XLn/ix19LaXxJ9s9Ec2oPNyKHPq gZqYWtIhYMiAdZ36lZ2tQ3CdY06CGd484L8mo2wurbZcMYQHQXAbXYw19jYrozNuEBQP VndX+Y5EKpRSYYS2QNl8TtxTVmlhMGn8Xo4vhGDuv+z7tkRKU3/5ioaad6dD05i74/b/ x5OdOa8RPPANS8mXauPz6G8n/anP5mJ+k/PZvtnwQJUm/V50Sz2jZwzRJuNW0PcRmnhl aEY2I0/dheocrWrrOYRPc3EB3SKTXI5hzi7mn2VHJF3TcQ4+/5F0tWIcLAevGHqvAWJa Dt0A== X-Gm-Message-State: AOJu0Yy7BzDfxfU6yhF0gET+c5kIm7bAcQwhk7TR3o0QsOdnJiOxoH00 bHB6qCSiAnCQgn3NIjag3q7J+DKqDzN8tB0wX98PSnZz3DElZ46O6WSnIk84DjONvltxDcvceB4 l X-Gm-Gg: ASbGnctdUUsSZok2xrNv0Q7AY/G20l2jptsX99iulBW883EPNIdKH4xDT+W5XnxNmfX Mm/MEgoMuJgoldmilThTjxka37e24vjkFV1QC5VC5QNpbJaozU0le2Xs4TPDFTmSKrXrXhexYvZ Hg7E9Z+Y3hVzh1p6TTOPCur7kzJPqo4xwgYQr6yKyN5HwKBqHqfmMIh9Pp2EkRwuhrYG0qkPcBy 3PUaviY0as+dkaO+c8r0HfDZs3eGu5uLkuH728keQiOowxCwjYoYYMrUygvRuDE2EES05fUwbYd 1fjkoSG3jJBwWRQ1JPyR27X06FbloYuwfl4= X-Google-Smtp-Source: AGHT+IHOkaOe8SUFZce7EwkwL3Qq0QHY9K0s47gF8ITRNwmFE/6ljSaVw0y2q6bH3+tIlQTgvwm2aQ== X-Received: by 2002:a05:6808:f8d:b0:3f3:d802:14f1 with SMTP id 5614622812f47-401eb2979c8mr1843460b6e.12.1745513456357; Thu, 24 Apr 2025 09:50:56 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 006d021491bc7-60646862ec5sm319870eaf.3.2025.04.24.09.50.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:54 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 16/23] ipmi:msghandler: Shut down lower layer first at unregister Date: Thu, 24 Apr 2025 11:49:53 -0500 Message-ID: <20250424165020.627193-17-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" This makes sure any outstanding messages are returned to the user before the interface is cleaned up. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 927556ca469d..56654a9c5cf7 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -3738,7 +3738,13 @@ void ipmi_unregister_smi(struct ipmi_smi *intf) list_del(&intf->link); mutex_unlock(&ipmi_interfaces_mutex); =20 - /* At this point no users can be added to the interface. */ + /* + * At this point no users can be added to the interface and no + * new messages can be sent. + */ + + if (intf->handlers->shutdown) + intf->handlers->shutdown(intf->send_info); =20 device_remove_file(intf->si_dev, &intf->nr_msgs_devattr); device_remove_file(intf->si_dev, &intf->nr_users_devattr); @@ -3761,9 +3767,6 @@ void ipmi_unregister_smi(struct ipmi_smi *intf) } mutex_unlock(&intf->users_mutex); =20 - if (intf->handlers->shutdown) - intf->handlers->shutdown(intf->send_info); - cleanup_smi_msgs(intf); =20 ipmi_bmc_unregister(intf); --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) (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 D54BE291174 for ; Thu, 24 Apr 2025 16:50:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513461; cv=none; b=TBFM4pUFy9t+THB8xAWsRn6x1KBm5QjYFpsZff4+wleXjmO/UMNbadFMDAo631JyMIntWOeu5n98B/UeLtzbN9M8CTJpCeSb3VcAk9O+b5xzsX7GatuZA6mK4d4gHPe/OZEaD+PkVx0M4Zuaewi5NGNJM8lon0gjrWNhVf7PDUM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513461; c=relaxed/simple; bh=zR4tniuAE0duovzeQicTC51tNkBhS7PwXVSnhERFhn0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CYXCDYuvSGcnosTPkfftuhDRC1BP3SCSfE3RqebYNMlZxSmCrHd82Cq/NK3psgFZbYxkmzUVhnJdtmEBrMwyqxRvesIxq98kAa7DXg0S1Yr06F2oDugaPWo+giL/xFxqVSvETvByInfSZ4etlcRmqOjX0Z7sZMi6ffy/G41vIMs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=dRb/LbNp; arc=none smtp.client-ip=209.85.167.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="dRb/LbNp" Received: by mail-oi1-f174.google.com with SMTP id 5614622812f47-3fbc00143d6so1041239b6e.3 for ; Thu, 24 Apr 2025 09:50:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513458; x=1746118258; 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=qepDoEK7fQtEFFNDVuX8GV694aIjiKgLyArjf+63mRk=; b=dRb/LbNpXZKvNJTLQuZSnol4/Wk2VYddhYo76A7ouUkeU7v+yeQ4C5Wo5WPiU1TV2F 6OeN+73etG6mO+0WNMPTPVtmvGtHKjnH5CVvOyseGArAWDRPFQh4h7Qk2Z/+wBEuCEkm er8D7SmEBhMjy57jkoCpV0fOsTucZdBDilOHbNCyjIgAhLKG2Oms+7Jha81WBGhQAoU3 tQhwg3+rh3zEIQv94TIwPRZOGoEUx98DfTBh74OnT1D6tEbXqPHtPkiJkbqpDo67BjUa +jtDbETHGGTLYOmUj8zHAbPGvVBFLBT52Lqr3UGIcYJbzWd7ismuCgq7fltb/wmJO43e R10A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513458; x=1746118258; 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=qepDoEK7fQtEFFNDVuX8GV694aIjiKgLyArjf+63mRk=; b=ISurC+HUoIZIRVxuI/JOGDx2Iqa9Zd7f9PNuRbR8DDr5N6asmg90w/c7B745yypzHA CbH5yjpIdrS5ufGM1ZfJJpmFAENY9Q+f/qwExE00aEPA4/0aBy4HRZBN4u4Ixw4U8s7N dPg7MCP9bu8PdoRnrfWM4+OKRXD70p4aB59aNe/PskIfSoVwTRoFGu0dMFFl/pChcWZ2 TSpPdbiKp8yesdk+IX8fl5DBv6oMsOQpMLjTJg9+vXsoQngixYSvwWZYn8+95PQZt+4m 3WMUlG0pxAoKUQpzqHVUsYVbATB5kTQuBQ4T9rO6hmUuolKDSYlSmEaAxslhEIP3pHvb 1msw== X-Gm-Message-State: AOJu0YylNUniioYf1yJ8GnrhVhLCCMQC1ZJR3/h6UvYw3iZzqzPPPQ9F 7KlhggewL3HmyOTP4qHFn++jPyH5tqT3zcyw7H8zAJ40JRLfgXJpxoeROBXIBu2AVFn4aG86PaD w X-Gm-Gg: ASbGnctWtLsWJH6GaEC2H4i7A2N/dueX0LUdY8oG3/pwocTpbcBCgJDASR9JuiN6n5M An52cgrcG66KBzY+an8leO8HtuPOv2Ihp1dydaKulJ4vptE/pgUYGRh9KPOXCRCmVZqTiukP0cr YkGBBLg4l5aETmgDmAjJyyvuCpsBGuwQkpPrmcELJRBGO58WwsiTiIoyPx3hiuPD6IUa90IZIPc 9tXgP9le+cZnRyG4eQYR9f3jT6hVWqnSC+T73R2eU1NGCjS0ukE4mUPQyWOA0Udz8RV5DrWSvJP BRiMl8ziFFROVs0t8hNktd8YC4iX2u6Yel9Ht7bcrTvK0w== X-Google-Smtp-Source: AGHT+IEfVULpCholq3S/L81RHTmf54TB5BR0x2l2mjKQ8FChlydz7ZqUdy/hNLvgRVxIzVFkC8/dEw== X-Received: by 2002:a05:6870:30e:b0:296:bbc8:4a82 with SMTP id 586e51a60fabf-2d9944a6db9mr284312fac.27.1745513458491; Thu, 24 Apr 2025 09:50:58 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 586e51a60fabf-2d973c18da5sm365930fac.47.2025.04.24.09.50.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:58 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 17/23] ipmi:msghandler: Add a error return from unhandle LAN cmds Date: Thu, 24 Apr 2025 11:49:54 -0500 Message-ID: <20250424165020.627193-18-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" If we get a command from a LAN channel, return an error instead of just throwing it away. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 56654a9c5cf7..c72ff523216c 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -4165,14 +4165,33 @@ static int handle_lan_get_msg_cmd(struct ipmi_smi *= intf, rcu_read_unlock(); =20 if (user =3D=3D NULL) { - /* We didn't find a user, just give up. */ + /* We didn't find a user, just give up and return an error. */ ipmi_inc_stat(intf, unhandled_commands); =20 + msg->data[0] =3D (IPMI_NETFN_APP_REQUEST << 2); + msg->data[1] =3D IPMI_SEND_MSG_CMD; + msg->data[2] =3D chan; + msg->data[3] =3D msg->rsp[4]; /* handle */ + msg->data[4] =3D msg->rsp[8]; /* rsSWID */ + msg->data[5] =3D ((netfn + 1) << 2) | (msg->rsp[9] & 0x3); + msg->data[6] =3D ipmb_checksum(&msg->data[3], 3); + msg->data[7] =3D msg->rsp[5]; /* rqSWID */ + /* rqseq/lun */ + msg->data[8] =3D (msg->rsp[9] & 0xfc) | (msg->rsp[6] & 0x3); + msg->data[9] =3D cmd; + msg->data[10] =3D IPMI_INVALID_CMD_COMPLETION_CODE; + msg->data[11] =3D ipmb_checksum(&msg->data[7], 4); + msg->data_size =3D 12; + + dev_dbg(intf->si_dev, "Invalid command: %*ph\n", + msg->data_size, msg->data); + + smi_send(intf, intf->handlers, msg, 0); /* - * Don't do anything with these messages, just allow - * them to be freed. + * We used the message, so return the value that + * causes it to not be freed or queued. */ - rv =3D 0; + rv =3D -1; } else { recv_msg =3D ipmi_alloc_recv_msg(); if (!recv_msg) { --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oa1-f41.google.com (mail-oa1-f41.google.com [209.85.160.41]) (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 0E61D29117E for ; Thu, 24 Apr 2025 16:51:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513462; cv=none; b=BwZw6brrd5T+w37aaot49n4+pRO8MwA+V4hVyP7egxJma8V89arbkvk0LM2ncclyXhtKu+Nf+UyvCd58E+XxGYltxyqW7eKWX0RtLszHsx908J9sYTCp+A5SnlH3tPyuJ2M6Z6wFuyp9/+w0BFVDsWw+U1rcU0XxT1reDCK3+pY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513462; c=relaxed/simple; bh=fd5h5226p9UGXVZ8th2FGoGfLL4oYW4m8ar1pRGrIsA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=b1dfX9xunYx84efIi8S48dqV0FrKDZuS9I4yy6spxiPt07nwnkBsxI2TkfGhMFa5Jo47rDj8CfmgKQGAiUQkk/hHxceB0Nq4fUDdIBtQ2bzneUtXtXePZbRCxuSkkGWksjaSJKiZgTDFEsfGdNZURDfQqsLZEmG4PpHUKCQnaQw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=H12SC9K/; arc=none smtp.client-ip=209.85.160.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="H12SC9K/" Received: by mail-oa1-f41.google.com with SMTP id 586e51a60fabf-2cc57330163so847061fac.2 for ; Thu, 24 Apr 2025 09:51:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513460; x=1746118260; 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=UcndkTp5legK2dTJBdv4J/lSCNqmghjWhrBEL4ikoYE=; b=H12SC9K/nlinwYt0oa72461Mfleb7PUl4ha+Bs9o3Bc/doGaFcYCECopiW6It9c+lc G6geRpALjFniceUrbrzHMb0apkA5SN2vygAfWptkRGTz8A4jNqfTotwa+wPfcnrEKC9v EBDSG+ZIt2VocQ+uqzdbVaFj37QA0jJhhx71uGn+FNXnex9FgVohDa8AsRWP4WKt1aL3 Vsr+eoqLAb3oL0kKUIGZMtew60RVmimxMPvIPVTNJ0w/sIFy6V+Gr701DvGOTwgiGdZf Kqek7cJH9ejIzxYA+RmBjY8nNeSkfWiJj04y24lyEGWi5zFaoQ1n7E4YOXPMVvA5xdcN TK9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513460; x=1746118260; 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=UcndkTp5legK2dTJBdv4J/lSCNqmghjWhrBEL4ikoYE=; b=A3kIbJEkgqU+3QPxKfJE0Y2b54offJgIGe6ETbQ9brOk0OP3WYrenXEN1ruLmnVZzP 8yYv9D0217Z5eGWDkPHlZFCIkFfEGyu8hHCH/U4BMC0pQssC+SdmpezNuMHy+FdpvIe1 uJYZWThrEtRrIsHvclKknTiWXovokYUdlEcOh99upAYuXV4vtqRR4/GoKNUMiD0DGscW K6EoggqPC8JU/EYtUtABMBP9xrZZYtzxhe7MhPqMoWKrOOPUom0D7s6PbBLx4ER+3rjO jSz7Ag1K3eobjF93VFcE866ytMd5Y6cV1au2p/+M7LmSXgrwLRc5TEiQ+lEx07vaNCG6 p1bw== X-Gm-Message-State: AOJu0YyP2A/0YSGby1m2PHISkiiC/MtbZVI7pxVBAwAkt7ls955EpTas VcISV80ClAHqt6k44jCI3Q5bGCv8+KKwDIrAM/3IOZ8CgZ9zPnuiCRK8tW6ku6GRhWblDOKO/Oz A X-Gm-Gg: ASbGnctcUH0+LCAv2KSE+U3BKehVkhnQDAWLcHpYf8fo4k9DO+V1utVbErgmpkb6Lr6 As9ogZ0ApFZtN4vby8rnj4hDbBEuB2hPlKc+BsIT0uXj2RrBqtdF9E/yjz5B7VYKeuFxZq4LfTd BlZPOBtU89v/KGFgxfw8lSoacnVBFgvSlp8FMioWM6J/n2u6z8de84ilKaqaJuJ4nAvuH7AbW7X whlB/MkYZ69pYFvHggq2uCRZ+68LsBUXIKOnQGxQzovOcU+GsnHjUe0VxnLk7/iNlj8Pw+SEKNd lT3kEAUn49Eg7q5RnAT0/qLIqcLnCXXvQ9U= X-Google-Smtp-Source: AGHT+IHvH5g1pUsqssiBfm6bR7wtFuGkcmkXmOuTpra93Is/ODb7u30DjUeZOPANFp/MMlEBeADP7A== X-Received: by 2002:a05:6870:70aa:b0:2c1:aed2:abd2 with SMTP id 586e51a60fabf-2d96e2ead17mr1943389fac.16.1745513459716; Thu, 24 Apr 2025 09:50:59 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 586e51a60fabf-2d973b7889esm368087fac.31.2025.04.24.09.50.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:50:59 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 18/23] ipmi:si: Rework startup of IPMI devices Date: Thu, 24 Apr 2025 11:49:55 -0500 Message-ID: <20250424165020.627193-19-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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 is possible in some situations that IPMI devices won't get started up properly. This change makes it so all non-duplicate devices will get started up. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_si_intf.c | 82 ++++++++++++++++++++++++-------- 1 file changed, 62 insertions(+), 20 deletions(-) diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_i= ntf.c index 062f92cace24..8837f85f2d77 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c @@ -2095,9 +2095,18 @@ static int try_smi_init(struct smi_info *new_smi) return rv; } =20 +/* + * Devices in the same address space at the same address are the same. + */ +static bool __init ipmi_smi_info_same(struct smi_info *e1, struct smi_info= *e2) +{ + return (e1->io.addr_space =3D=3D e2->io.addr_space && + e1->io.addr_data =3D=3D e2->io.addr_data); +} + static int __init init_ipmi_si(void) { - struct smi_info *e; + struct smi_info *e, *e2; enum ipmi_addr_src type =3D SI_INVALID; =20 if (initialized) @@ -2113,37 +2122,70 @@ static int __init init_ipmi_si(void) =20 ipmi_si_parisc_init(); =20 - /* We prefer devices with interrupts, but in the case of a machine - with multiple BMCs we assume that there will be several instances - of a given type so if we succeed in registering a type then also - try to register everything else of the same type */ mutex_lock(&smi_infos_lock); + + /* + * Scan through all the devices. We prefer devices with + * interrupts, so go through those first in case there are any + * duplicates that don't have the interrupt set. + */ list_for_each_entry(e, &smi_infos, link) { - /* Try to register a device if it has an IRQ and we either - haven't successfully registered a device yet or this - device has the same type as one we successfully registered */ - if (e->io.irq && (!type || e->io.addr_source =3D=3D type)) { - if (!try_smi_init(e)) { - type =3D e->io.addr_source; + bool dup =3D false; + + /* Register ones with interrupts first. */ + if (!e->io.irq) + continue; + + /* + * Go through the ones we have already seen to see if this + * is a dup. + */ + list_for_each_entry(e2, &smi_infos, link) { + if (e2 =3D=3D e) + break; + if (e2->io.irq && ipmi_smi_info_same(e, e2)) { + dup =3D true; + break; } } + if (!dup) + try_smi_init(e); } =20 - /* type will only have been set if we successfully registered an si */ - if (type) - goto skip_fallback_noirq; + /* + * Now try devices without interrupts. + */ + list_for_each_entry(e, &smi_infos, link) { + bool dup =3D false; =20 - /* Fall back to the preferred device */ + if (e->io.irq) + continue; =20 - list_for_each_entry(e, &smi_infos, link) { - if (!e->io.irq && (!type || e->io.addr_source =3D=3D type)) { - if (!try_smi_init(e)) { - type =3D e->io.addr_source; + /* + * Go through the ones we have already seen to see if + * this is a dup. We have already looked at the ones + * with interrupts. + */ + list_for_each_entry(e2, &smi_infos, link) { + if (!e2->io.irq) + continue; + if (ipmi_smi_info_same(e, e2)) { + dup =3D true; + break; + } + } + list_for_each_entry(e2, &smi_infos, link) { + if (e2 =3D=3D e) + break; + if (ipmi_smi_info_same(e, e2)) { + dup =3D true; + break; } } + if (!dup) + try_smi_init(e); } =20 -skip_fallback_noirq: initialized =3D true; mutex_unlock(&smi_infos_lock); =20 --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-ot1-f45.google.com (mail-ot1-f45.google.com [209.85.210.45]) (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 39686291158 for ; Thu, 24 Apr 2025 16:51:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513463; cv=none; b=JaEPwfmzkbPaUTNleRq63P7DLnj5i2fzmGW6yTmD2KAnUDQAZmXjhDEK5mpxzuzrJw1IK2fKg89ki1rkcd8VAZai1uBKGXzOGDFUxkzJPnp5VBoF7WebDI1oOrurupXFjW9j+XzErfvdwQpNWPduVk7ZVlfWKWH9Xq30VD6lheQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513463; c=relaxed/simple; bh=hUi0pMy5Cqhathph59WzODpUH0Rto3mKQRA3vrZzR4s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bZEk4OQsRoQP/W+f4DZ1Udk307pmQ1TYCeIrGEjzHLf35FLcNAvInLhyY43VzJNf7ZGrN7hKkO41+E8j/OMvE0jZ65yydusP20jC3AglfOpuwoxgnSi+e/X/OJl26EUUt9XJPjBLY7u2sB+cxXSgDHR3sU+gqmeRSlBt7kVmNBU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=qFgtL46t; arc=none smtp.client-ip=209.85.210.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="qFgtL46t" Received: by mail-ot1-f45.google.com with SMTP id 46e09a7af769-72bc3987a05so758918a34.1 for ; Thu, 24 Apr 2025 09:51:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513461; x=1746118261; 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=hBLLv3lBQauMahCNm+2PIxA3w9/5v8v0uZ/gJ4AQluo=; b=qFgtL46tEtdRpVHQs0HJxAjypVmFnZGjmsMG1kY3RHenETGYUvF/FNnhwZjs2+yLnX JO0IF6cbdEqAEPnBi8XOJjSWG+C8AJsAdxOu6tYpdmyC3hgxUSc7SrxdDRgHukUNovU8 hmA3Wi32sTTFuym5deS5MqV/rP27IvmYfPzZiSu4zk7ePK1Q4GJAAHWWygJpa3GYmvxw YE9Afl2yILrp6d5C9Kyn6DAWrZ8Ymfr1mc58zoQu/HVzwN0v1DOzqi8EUl1qjvqATIk3 dzzhsYlWJPy/hiJ5wndHN90Fp7tqyuAutm2+BbHvHeQPiTF7KNt/2QHv6EDLtJcHcU/N fofw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513461; x=1746118261; 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=hBLLv3lBQauMahCNm+2PIxA3w9/5v8v0uZ/gJ4AQluo=; b=Aa8XElxh9XX+uL+EECvpLgErus/nAkaaP1Kx3bQkpJChirPRzelpImpMZksEXYo0nS c7HtXBMfhCa5tXfscjpu3MJYYMSG0rjyg0p956CBs/jfSb6xh3qaVc2OB0KcBj/i/510 i9zY+T1DKkYdwLmOcveUcoxRSSuiWrQmZCzKfgtAmmqvjOVg1eqJEFkiY089jXyqbQi0 mxrxcx0GUgaxbygpcJjd53/lzGf7q6yY+tME09Ym6y4ZezZ+UUiU/a0PhvSb0LpCXRxn YZ9zavtdyGtpSRPhbFSfymPejf+UUs9bcJE9af/CVF96BQ56xHBaAcRcnyYPtIH/3dII s9LQ== X-Gm-Message-State: AOJu0YxXI+0mDmG6wSXGq1teneaAj2ZDI1yoozT0VclAi9oOWhN6Ac5S CaR3cqoTalbaC0ZtijtH8Pg/p2460a9PTMM9lreG73bJbaJSe3Eg4cAUtOP9aob2LWtwCnUM2nu m X-Gm-Gg: ASbGnctCMCyOeABoM8Ws4hRlRmsT+VfBXnJkmxI+PXeTYYoHoxEosYaBG53+OI/Ch+l Yzee6f/N146SSiSzZmEVeravfcyaSTlpWqTc1Z+nI6c8hiGU7wUQj59Qurlup9kzeHQm4u7bzaG RP/VYeuq1HfgNIIDzewvtqo4QS33bHC6efjwqXkjwINYDbCcFyHhJTzdLB9QXfCO4MF8QsNum4s IfOdsVa3W8LT4Wet4P5P9M/JX/SnzG2pk65IKaD3Bjxt7/z3XVDU4UeWN5A2nMo6qT61bJ3ttgc a6qh4Up0BS+FaOw7K+08rKWeNxzFWBSS8rkJGkXSdV0sqQ== X-Google-Smtp-Source: AGHT+IE8rOflQid2RZybnE7oYt//PQVoakrhLTkTbYiVydjxxNfwTgHdK3bahsZQOYX2nqAIz9IazQ== X-Received: by 2002:a05:6830:620d:b0:72a:b78:1c5a with SMTP id 46e09a7af769-7304fab52c2mr2030378a34.10.1745513460875; Thu, 24 Apr 2025 09:51:00 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 46e09a7af769-7304f1a62absm301288a34.28.2025.04.24.09.51.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:51:00 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 19/23] ipmi:msghandler: Don't deliver messages to deleted users Date: Thu, 24 Apr 2025 11:49:56 -0500 Message-ID: <20250424165020.627193-20-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" Check to see if they have been destroyed before trying to deliver a message. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index c72ff523216c..938c566624d9 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -1327,6 +1327,7 @@ static void _ipmi_destroy_user(struct ipmi_user *user) unsigned long flags; struct cmd_rcvr *rcvr; struct cmd_rcvr *rcvrs =3D NULL; + struct ipmi_recv_msg *msg, *msg2; =20 if (!refcount_dec_if_one(&user->destroyed)) return; @@ -1377,6 +1378,15 @@ static void _ipmi_destroy_user(struct ipmi_user *use= r) kfree(rcvr); } =20 + mutex_lock(&intf->user_msgs_mutex); + list_for_each_entry_safe(msg, msg2, &intf->user_msgs, link) { + if (msg->user !=3D user) + continue; + list_del(&msg->link); + ipmi_free_recv_msg(msg); + } + mutex_unlock(&intf->user_msgs_mutex); + release_ipmi_user(user); } =20 @@ -4844,8 +4854,22 @@ static void smi_work(struct work_struct *t) struct ipmi_user *user =3D msg->user; =20 list_del(&msg->link); - atomic_dec(&user->nr_msgs); - user->handler->ipmi_recv_hndl(msg, user->handler_data); + + /* + * I would like for this check (and user->destroyed) + * to go away, but it's possible that an interface is + * processing a message that belongs to the user while + * the user is being deleted. When that response + * comes back, it could be queued after the user is + * destroyed. This is simpler than handling it in the + * interface. + */ + if (refcount_read(&user->destroyed) =3D=3D 0) { + ipmi_free_recv_msg(msg); + } else { + atomic_dec(&user->nr_msgs); + user->handler->ipmi_recv_hndl(msg, user->handler_data); + } } mutex_unlock(&intf->user_msgs_mutex); =20 --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f172.google.com (mail-oi1-f172.google.com [209.85.167.172]) (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 4DEC12918DC for ; Thu, 24 Apr 2025 16:51:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513466; cv=none; b=TLzeFUcGxT3tWUOeC7z3V6JvKqT1M9FaQR/t38z2RS14MFiQJ8IDHQwozkoPliTMw3Kv7Kj10X0lXDZz0Q3nAHoncHja6KlReO0/ivlmWAafX645oRRdVgmMpFx5944qPlOOoB+C2+j4oIWGZ4VCnytGYpP/5D6NtHtWImkefTI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513466; c=relaxed/simple; bh=j0DoxpKjCJhhU+yir274VL1deTlL0JGM8AR24S7KyNw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gYcmf6eUGanmyhrN22aX/upBX/vI+hL8d3IzRjAJC8UCIslWrYiJL92NVDNyobq/fpoPw0lZcFRwUPd7izre2dbKRCB17Sa+D5XTTkmnfFmxB26R7cJJGR20mvDbeoi2DjJAvteiZL4hDgz6IC7QDjy3DenrlzzVYk4T3SxKZkM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=dF4pnKU1; arc=none smtp.client-ip=209.85.167.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="dF4pnKU1" Received: by mail-oi1-f172.google.com with SMTP id 5614622812f47-3fa6c54cdb2so1197297b6e.3 for ; Thu, 24 Apr 2025 09:51:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513464; x=1746118264; 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=VH64OM6I6nosuLY4RSxIBPH85WXV+oEeTJ6j2dq97QM=; b=dF4pnKU1O7aWBqtFZRkV3P9THmkTIMUrFhSezKUKutrt/Hh4qb1eJCG9jnud0eKiCu pkLlIfLUN5WzcmDEY61TDEYd0/aLKAJ8+pjUt6ojKiVpPPvSTnsVVUsAF9PDtz3iVm8q /Rir2VL9LmQ4nCCeUkmJrAFOfa+DBUXvMy6Xzwe6FoEfivEnXn6/Iy08Dye0ZIjDMx7x K3ZlRM61N5m5e/hpNCyikEUCVJ2ARn6HyHFSsGn0mb+bSSCErDPpQinWxbfOUllXG9uT oXfn/ywnoSDdcGyPNBf8eBMOOraqGamLWdOTJn095uAYK/O0XeVKJLGqXIhs4aRyaG2x 7svQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513464; x=1746118264; 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=VH64OM6I6nosuLY4RSxIBPH85WXV+oEeTJ6j2dq97QM=; b=ssBgtKcpy+XNjv+oYEKjfCIj30e1zp9ZO8xcUo06sDtaIT3LhpDvGaCwzvYsmIqgxc 88a89meUu/yxyq8M+itftk/AExZVxXkSQXOtcekfZ9LJ/H0b0Z5sWlWAmxnoyu9JqNvS kk9CoTEJUjnQU2P5FgN8YtQkjQsdzDSjIP8DNgifah1aJ3kVOYReAjqEnliyhhhL6mk5 JXjTknKTmoV1NmDShuGbg6WuzAwK5GOkl4rye5CAsQNOYZCRgFBiNUIGRlhBH2x06KjP 5EkBBPIO0kdlJn+pomWjlp+1KtLKuvAbQ0VOdmgc6P+4ANCcX2NTzQqjDCCoUaptgElt HsEQ== X-Gm-Message-State: AOJu0Yxh/cc469fbxI2R2VpHonN5QYx47HL18Dsuf+J5KjYCVFsHJV35 ZPSXW4tvtTizDYflCJzmj2u2jEk/Q0WFfBQ8sw0USJssSPUk5WeNpUHZOTTJsSxNYi0U9bXedpk H X-Gm-Gg: ASbGnctAfMGmfVzB9IOCwKFHdUqwT5wY7rXhSvnlklT8AD7bwKnBYVNKcSEtBb6LC42 rf6AsGA9aLACHex6qHu94fKE/EcP9mWBrAioGIt6B3padQM/JkNeM0m1eJzs21zklvs1sSGC1Hy p8uhaMNlfM5LXiZmEbLJKJpyeItnvmEuBK7pVO2PLXMf9xij+O3QgZ+50n+8s6S1uh/YrdLHo+n sqPTaHkWj9qOZOEmglFsqqBRxSN6EXuebMfCW4y/4nimr8Hzm9PsZ5KHOCrjV4m9e/kS1JXHtaO 8rMpPbKQYxoSquPb3CedXyJQGoEL6kYfCms= X-Google-Smtp-Source: AGHT+IHEXQA1OTb7rMWfEAZZ0DvXP5Khkqdlv7WV286ube6xvxznKifB3RDkqvSozgqpVp+14zNUjw== X-Received: by 2002:a05:6808:6a89:b0:3f8:f8c6:5500 with SMTP id 5614622812f47-401f1254c03mr56299b6e.34.1745513463964; Thu, 24 Apr 2025 09:51:03 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 5614622812f47-401ec8b0484sm306647b6e.4.2025.04.24.09.51.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:51:02 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 20/23] ipmi:ssif: Fix a shutdown race Date: Thu, 24 Apr 2025 11:49:57 -0500 Message-ID: <20250424165020.627193-21-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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 was possible for the SSIF thread to stop and quit before the kthread_stop() call because ssif->stopping was set before the stop. So only exit the SSIF thread is kthread_should_stop() returns true. There is no need to wake the thread, as the wait will be interrupted by kthread_stop(). Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_ssif.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c index 506d9988721e..b016fabaac68 100644 --- a/drivers/char/ipmi/ipmi_ssif.c +++ b/drivers/char/ipmi/ipmi_ssif.c @@ -481,8 +481,6 @@ static int ipmi_ssif_thread(void *data) /* Wait for something to do */ result =3D wait_for_completion_interruptible( &ssif_info->wake_thread); - if (ssif_info->stopping) - break; if (result =3D=3D -ERESTARTSYS) continue; init_completion(&ssif_info->wake_thread); @@ -1270,10 +1268,8 @@ static void shutdown_ssif(void *send_info) ssif_info->stopping =3D true; del_timer_sync(&ssif_info->watch_timer); del_timer_sync(&ssif_info->retry_timer); - if (ssif_info->thread) { - complete(&ssif_info->wake_thread); + if (ssif_info->thread) kthread_stop(ssif_info->thread); - } } =20 static void ssif_remove(struct i2c_client *client) --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f169.google.com (mail-oi1-f169.google.com [209.85.167.169]) (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 B3167292926 for ; Thu, 24 Apr 2025 16:51:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513470; cv=none; b=TvVijaXG4S69Tiic1apXPwdPzCSWk1qq/kLInMPD2YR+9J0s/QMwPo+SO2hpRNFSGDASRKOi3rUAiDrDCwd2k1Lbp0ZS2TjGCHv9w1kd8TsOczqxNbHi/e2p4Tykn7aOVK3k5eUzIWX5IrXrX9pMpRO0kcYPwLxQWa/byGzNZUA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513470; c=relaxed/simple; bh=WrUUd8PeFU5uY5s2F7LwC7QUGE14MD2LZ0JwIjCHlF0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=F69YC5OD6rM47/NG0msNutr/eZMAMeL/H2UFowwbd6ju+KICIJlKXb3xuYNN3OfC2R8WiocwZ157LTOhKNl63aUZziK7n1lkwOvNTIPuROa2neeLxrjddeTfEiOUZk9KJZ6PytKaIcm/dkjROyOnp3dslH2uFGFPgHaX/Hh45aw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=suhfNA5D; arc=none smtp.client-ip=209.85.167.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="suhfNA5D" Received: by mail-oi1-f169.google.com with SMTP id 5614622812f47-3fbaa18b810so398988b6e.2 for ; Thu, 24 Apr 2025 09:51:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513467; x=1746118267; 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=jEgmX4f34QPktqncOkt/LqJb044C3ijlTJNnknUvSOY=; b=suhfNA5DoxDibeEFSha2urmloWwlZVYn2324wdCXQBlIsr+iyqU0OdaCOW3PcPNFrZ EZRuiIKh0LCYLR2puzRfcrDw1asBNsa6csDNemR2umiXK0W4RGY5SzSKvvFTbPINbcud rU16l3lfGJyYX1Q7vZ9FxYdcqHiBz2KxPGJ3SCOFsgHPWDHota8La5N46JGZmS3WazwQ 2u46GlS5vgUwFiXMGfCPuukYJz+7nNkMr4VJD6vBannkOYFE577mDfNB+GegpgsPEkno EQS5KQ6YK12Q4PKp6abndQvCC2flYKfDMi9vVv76FueXXVcKY5EqqAmAlWTiw9WGkQ9u 8FUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513467; x=1746118267; 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=jEgmX4f34QPktqncOkt/LqJb044C3ijlTJNnknUvSOY=; b=IRYAuJGY1QF7et+zrZEr43jj5qEg1VHDbEUVgYzjyBJtjO7UNixLtJdFaqyBGqvb1x 4UVT0TmHFokDg4wwqaetk6R8QUQNakk719HJXaIN9S7sAKURLKfM/cW5Cjt7TQrpg5nK 6vmLFLHMxsVk/bQhNVFFe5sJ+fYJ48SyEVfM39E3KpumQsrzBL+7sqZzu3KG+HVW/pKh qdRxnHnFaVvFB2v+6SWXvjfMnRay1Iu7zf+hmKF1IVU6aUuX9wfy3M9H/8iG+2djITzv De+pcQ0GfjpRuIZk8mSoyBYljRPsapxNW2ETdbaAcY0X2PQlkzt0/mGNvvyf2Gn7P4mQ DqxQ== X-Gm-Message-State: AOJu0YwkCicbi951aBA2667OPFdp9UhSwQrSBIvEcqi4ycMwO+WoamHX YyLanhOmJaTPOnpSdDuEDrsIR4Vy/ABDuA5RNFUvEAh7+yBklTIIubfaC4EeDb6TrxJUOCdM+RF 5 X-Gm-Gg: ASbGncvIy2sl9iYwlThXEGkmg2WyfwwB8xW5DITkdfoq7fZoOodXAc6kfXdVICZxLpM D3asxeASgSG3fOzwXfdvfwu6nrfradBC0cXA3Ksb0ZVMITGF4IdtD9DRR17tNjg89IpNrc+axfW Yr2xEzJ8bKvirwl/6pvTHFHWfjDNNITBTP7q/xvPKoR/jmndqSRrleZx8nJepgvwZvMj56x2gPP lJsrMRxdZ/GdSmFzNBo9g1D8zl2jy5460FJ1aeOEXrA3uAZRkmY/7qJGJ8tHxHykPTUdGlxHF1s qRw3jme5h5kerPeAs7Sh5loNFP5AXiR5OqI= X-Google-Smtp-Source: AGHT+IFA+1xug8uO+8nNHepTDHInLcjGUEuwr/mAK1O/1ugsuMGJlyeEY1wGHZCMW93FOccptNFEqw== X-Received: by 2002:a05:6808:164a:b0:3f6:a476:f7d3 with SMTP id 5614622812f47-401f117f330mr93378b6e.9.1745513467172; Thu, 24 Apr 2025 09:51:07 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 5614622812f47-401ec8c9dd3sm308500b6e.11.2025.04.24.09.51.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:51:05 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 21/23] Documentation:ipmi: Remove comments about interrupt level Date: Thu, 24 Apr 2025 11:49:58 -0500 Message-ID: <20250424165020.627193-22-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" Callbacks no longer run at interrupt level or bh, so remove those comments. Signed-off-by: Corey Minyard --- Documentation/driver-api/ipmi.rst | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Documentation/driver-api/ipmi.rst b/Documentation/driver-api/i= pmi.rst index dfa021eacd63..3a533cd2ef60 100644 --- a/Documentation/driver-api/ipmi.rst +++ b/Documentation/driver-api/ipmi.rst @@ -280,10 +280,8 @@ Creating the User To use the message handler, you must first create a user using ipmi_create_user. The interface number specifies which SMI you want to connect to, and you must supply callback functions to be called -when data comes in. The callback function can run at interrupt level, -so be careful using the callbacks. This also allows to you pass in a -piece of data, the handler_data, that will be passed back to you on -all calls. +when data comes in. This also allows to you pass in a piece of data, +the handler_data, that will be passed back to you on all calls. =20 Once you are done, call ipmi_destroy_user() to get rid of the user. =20 @@ -303,8 +301,7 @@ use it for anything you like. =20 Responses come back in the function pointed to by the ipmi_recv_hndl field of the "handler" that you passed in to ipmi_create_user(). -Remember again, these may be running at interrupt level. Remember to -look at the receive type, too. +Remember to look at the receive type, too. =20 From userland, you fill out an ipmi_req_t structure and use the IPMICTL_SEND_COMMAND ioctl. For incoming stuff, you can use select() --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f177.google.com (mail-oi1-f177.google.com [209.85.167.177]) (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 82E50292935 for ; Thu, 24 Apr 2025 16:51:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513472; cv=none; b=sj4y2n+zAjfMH79zCmzmKr148YnDKb4yTLvJzfqytejGjQLMvTrXbZPfiZ8B3cQLVNicSeUjUcbq9v+BNSa7m0qOTWj8LASxKvda2HcdWFrjQGqdq/LlKpQyIDEW+YAvvgXqVmxb2fhnsV7GVHsXkaCS4UOQqBP5DuNLKMTtwu0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513472; c=relaxed/simple; bh=iQPTdaZWNg+8X577i1OFWCdJ6F6xxtIPE7Njwp4JyD0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fIn+REjGcrtIn3bIEMBSG4GaVwACQ/F5hSIlQ+xOFYIjSF/KGltzWNba7NXqORmhi054t6QJ9uapZJJVpWEhKgTdDjtMEGpdvPuPNf//wFJFIh5cwXbnxS+uJvG9V/8E0lT1NRehhZ5TVILbCTEHJC/4WxQZg/6Jjm0HRn7SPmw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=SAOuPtHX; arc=none smtp.client-ip=209.85.167.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="SAOuPtHX" Received: by mail-oi1-f177.google.com with SMTP id 5614622812f47-3fe83c8cbdbso433104b6e.3 for ; Thu, 24 Apr 2025 09:51:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513468; x=1746118268; 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=lmKp2gCwW8Wb1KK3JuJ2jc0+NeIFs1EM3vsXyT2a46o=; b=SAOuPtHXuEftEts3cLdNiuSrLM0P3bwuMkNrdCJkqwXzcJQ12dXW6+n0VG0zztJPWm c4azEl6k34dUVEgXu8nIaaacYlZekVbpywp+UHvyBgcCMnbPlcBic4cNWhIYW5JbTbSM YoxGZM7cB8EwEQuG4g01vRyIyQ3zaMiITA+Q5rjMwzp47SKlekyVtbtH7Sxa/JWzANxn 6G5a9u7tBuF5m1vGGts9jMQE5a+qLSD4NNTK/BdYYaUdcKpzQy2aRWFDSLPPnKnIfV9S pqFhJ56fk5I7Igajd7m8BKUtvxX76hTrAJB6Fth2HQFfbdKCERkKIKJcHycQdUZ0Q4M5 tk6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513468; x=1746118268; 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=lmKp2gCwW8Wb1KK3JuJ2jc0+NeIFs1EM3vsXyT2a46o=; b=BZC2QPNG/NhJYI2uMIAaVXDJ/AknnpkKFyxNHlkNzC/sE11JDestTEVsuQP6RMok57 JKnyXnrpX0BHXUIcqex/p6hMLWYfCgXbJYMCzDT6HaA8NDp89oMS32IuOZZO2ut5j8fj PF4lUBD/hYLPR4eahbeiBb98y9BqSCPmA1OnpZ4Kvy28HhYLLg4T7O+k20jxcM0f5lPN MW0pCZgsZOU665Q6se1wReq7VI3+uN4Y1NVOjbtEoIaAFGO0Zn3JjPbf3URhW0M9jkKq PJLvuPv7Ba+kvdYGVNuvFLxCIojNFphdqVyI6Nar9p8ilTEQo2ANI02urltiPvOQk7bC 3SoA== X-Gm-Message-State: AOJu0YxWoScdAj+jT35xy9cqHxL7bclEQrLIl3Xi8RIeAbxzDE48APcD c/o1W2dPhNZritnprFXxF8b/I0F1oHvjifDtziWPbMKjuNee1TTP6XrWWh1SLvF/2ogTM/f2rfY 7 X-Gm-Gg: ASbGncs0OvJ02qmRhafWv/xgMlPZ7LG8a5q/SqXvpy7BquT8kporwQ/xk6JUWtSLpdc SCjnsWFTxhDqap0o1TiTZf9a6mkDjvo849vpff3jl20ia8ti2/j9kKvowYH356yQO782Rn03IJo LH1EWHRFIdRX0uciT/uceOO198F01kzgHMyaWICpxQZx5MC0PJJ5Vo0B5a7q9p0DPx96B91RWSQ bF3Xb3fkAFCVnzFMbgoT1m9qG2pE8HugDjf2Qh2CGH6LTeEnlOSnvzyHfD5d98lT8iW4bPfTn2q 1khSG0WMR+V8+HWOyAbPplK20KtWNf5FbPw= X-Google-Smtp-Source: AGHT+IF5B0qmEp1jWeDZ0WSSiqcMbFmxpjThGtl9WBQObpHvxiMrF90DVkEM+mFolA8xXV0TFK/4Fg== X-Received: by 2002:a05:6808:398d:b0:400:b701:33ce with SMTP id 5614622812f47-401f118fe02mr109617b6e.13.1745513468479; Thu, 24 Apr 2025 09:51:08 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 006d021491bc7-6064690dd44sm328697eaf.28.2025.04.24.09.51.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:51:07 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 22/23] ipmi:msghandler: Export and fix panic messaging capability Date: Thu, 24 Apr 2025 11:49:59 -0500 Message-ID: <20250424165020.627193-23-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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" Don't have the other users that do things at panic time (the watchdog) do all this themselves, provide a function to do it. Also, with the new design where most stuff happens at thread context, a few things needed to be fixed to avoid doing locking in a panic context. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 50 ++++++++++++++++++----------- include/linux/ipmi.h | 10 ++++++ 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 938c566624d9..ece6aa95fbb5 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -2284,6 +2284,7 @@ static int i_ipmi_request(struct ipmi_user *user, { struct ipmi_smi_msg *smi_msg; struct ipmi_recv_msg *recv_msg; + int run_to_completion =3D READ_ONCE(intf->run_to_completion); int rv =3D 0; =20 if (user) { @@ -2317,7 +2318,8 @@ static int i_ipmi_request(struct ipmi_user *user, } } =20 - mutex_lock(&intf->users_mutex); + if (!run_to_completion) + mutex_lock(&intf->users_mutex); if (intf->in_shutdown) { rv =3D -ENODEV; goto out_err; @@ -2363,7 +2365,8 @@ static int i_ipmi_request(struct ipmi_user *user, =20 smi_send(intf, intf->handlers, smi_msg, priority); } - mutex_unlock(&intf->users_mutex); + if (!run_to_completion) + mutex_unlock(&intf->users_mutex); =20 out: if (rv && user) @@ -4559,7 +4562,7 @@ static int handle_one_recv_msg(struct ipmi_smi *intf, && (msg->data[1] =3D=3D IPMI_SEND_MSG_CMD) && (msg->user_data =3D=3D NULL)) { =20 - if (intf->in_shutdown) + if (intf->in_shutdown || intf->run_to_completion) goto out; =20 /* @@ -4631,6 +4634,9 @@ static int handle_one_recv_msg(struct ipmi_smi *intf, */ struct ipmi_recv_msg *recv_msg; =20 + if (intf->run_to_completion) + goto out; + chan =3D msg->data[2] & 0x0f; if (chan >=3D IPMI_MAX_CHANNELS) /* Invalid channel number */ @@ -4653,6 +4659,9 @@ static int handle_one_recv_msg(struct ipmi_smi *intf, && (msg->rsp[1] =3D=3D IPMI_GET_MSG_CMD)) { struct ipmi_channel *chans; =20 + if (intf->run_to_completion) + goto out; + /* It's from the receive queue. */ chan =3D msg->rsp[3] & 0xf; if (chan >=3D IPMI_MAX_CHANNELS) { @@ -4727,6 +4736,9 @@ static int handle_one_recv_msg(struct ipmi_smi *intf, } else if ((msg->rsp[0] =3D=3D ((IPMI_NETFN_APP_REQUEST|1) << 2)) && (msg->rsp[1] =3D=3D IPMI_READ_EVENT_MSG_BUFFER_CMD)) { /* It's an asynchronous event. */ + if (intf->run_to_completion) + goto out; + requeue =3D handle_read_event_rsp(intf, msg); } else { /* It's a response from the local BMC. */ @@ -4855,15 +4867,6 @@ static void smi_work(struct work_struct *t) =20 list_del(&msg->link); =20 - /* - * I would like for this check (and user->destroyed) - * to go away, but it's possible that an interface is - * processing a message that belongs to the user while - * the user is being deleted. When that response - * comes back, it could be queued after the user is - * destroyed. This is simpler than handling it in the - * interface. - */ if (refcount_read(&user->destroyed) =3D=3D 0) { ipmi_free_recv_msg(msg); } else { @@ -5222,9 +5225,9 @@ static void dummy_recv_done_handler(struct ipmi_recv_= msg *msg) /* * Inside a panic, send a message and wait for a response. */ -static void ipmi_panic_request_and_wait(struct ipmi_smi *intf, - struct ipmi_addr *addr, - struct kernel_ipmi_msg *msg) +static void _ipmi_panic_request_and_wait(struct ipmi_smi *intf, + struct ipmi_addr *addr, + struct kernel_ipmi_msg *msg) { struct ipmi_smi_msg smi_msg; struct ipmi_recv_msg recv_msg; @@ -5254,6 +5257,15 @@ static void ipmi_panic_request_and_wait(struct ipmi_= smi *intf, ipmi_poll(intf); } =20 +void ipmi_panic_request_and_wait(struct ipmi_user *user, + struct ipmi_addr *addr, + struct kernel_ipmi_msg *msg) +{ + user->intf->run_to_completion =3D 1; + _ipmi_panic_request_and_wait(user->intf, addr, msg); +} +EXPORT_SYMBOL(ipmi_panic_request_and_wait); + static void event_receiver_fetcher(struct ipmi_smi *intf, struct ipmi_recv_msg *msg) { @@ -5322,7 +5334,7 @@ static void send_panic_events(struct ipmi_smi *intf, = char *str) } =20 /* Send the event announcing the panic. */ - ipmi_panic_request_and_wait(intf, &addr, &msg); + _ipmi_panic_request_and_wait(intf, &addr, &msg); =20 /* * On every interface, dump a bunch of OEM event holding the @@ -5358,7 +5370,7 @@ static void send_panic_events(struct ipmi_smi *intf, = char *str) msg.data =3D NULL; msg.data_len =3D 0; intf->null_user_handler =3D device_id_fetcher; - ipmi_panic_request_and_wait(intf, &addr, &msg); + _ipmi_panic_request_and_wait(intf, &addr, &msg); =20 if (intf->local_event_generator) { /* Request the event receiver from the local MC. */ @@ -5367,7 +5379,7 @@ static void send_panic_events(struct ipmi_smi *intf, = char *str) msg.data =3D NULL; msg.data_len =3D 0; intf->null_user_handler =3D event_receiver_fetcher; - ipmi_panic_request_and_wait(intf, &addr, &msg); + _ipmi_panic_request_and_wait(intf, &addr, &msg); } intf->null_user_handler =3D NULL; =20 @@ -5419,7 +5431,7 @@ static void send_panic_events(struct ipmi_smi *intf, = char *str) memcpy_and_pad(data+5, 11, p, size, '\0'); p +=3D size; =20 - ipmi_panic_request_and_wait(intf, &addr, &msg); + _ipmi_panic_request_and_wait(intf, &addr, &msg); } } =20 diff --git a/include/linux/ipmi.h b/include/linux/ipmi.h index 27cd5980bb27..7da6602eab71 100644 --- a/include/linux/ipmi.h +++ b/include/linux/ipmi.h @@ -344,4 +344,14 @@ extern int ipmi_get_smi_info(int if_num, struct ipmi_s= mi_info *data); /* Helper function for computing the IPMB checksum of some data. */ unsigned char ipmb_checksum(unsigned char *data, int size); =20 +/* + * For things that must send messages at panic time, like the IPMI watchdog + * driver that extends the reset time on a panic, use this to send messages + * from panic context. Note that this puts the driver into a mode that + * only works at panic time, so only use it then. + */ +void ipmi_panic_request_and_wait(struct ipmi_user *user, + struct ipmi_addr *addr, + struct kernel_ipmi_msg *msg); + #endif /* __LINUX_IPMI_H */ --=20 2.43.0 From nobody Sun Apr 26 18:52:55 2026 Received: from mail-oi1-f180.google.com (mail-oi1-f180.google.com [209.85.167.180]) (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 7299C293476 for ; Thu, 24 Apr 2025 16:51:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513474; cv=none; b=jHEw5ogavuCAZcdrZN4Js3ZHVBeMVHyKIDH6nCsw1HHqGYXvhQPFZSOXEkuOiIzlfTgoAR/CsuCYzulcCZpnopAUqIi9sYWIQGkFHdqR4M0C44y/P7Eo3VJg3M8CG1a/NxAewM2m+dYX2Zb8ZEG55BX1A8zt9yR5rkuef1BmUd4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745513474; c=relaxed/simple; bh=gDye0TlyhUI7D6/X2UpFJ0FpYsClsGf08yxjJi6IYlg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lmY3oxgjY+KXuQ8mUs4nmHGq99q/JptBO/WYURPfgiDIiLFrHIFFuoHBomglX/Rw/yU85iXlwecm9BG+zZlxE3P/ZGRib1Mwn9aAX3cvwUJw4kKHVP3dMkee7847VwBZUMeEsIzH/uXF+ukulbXRJpikW8HUHHRiKTIDZQwWqbs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net; spf=none smtp.mailfrom=minyard.net; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b=uBp3OmG4; arc=none smtp.client-ip=209.85.167.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=minyard.net Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=minyard.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=minyard-net.20230601.gappssmtp.com header.i=@minyard-net.20230601.gappssmtp.com header.b="uBp3OmG4" Received: by mail-oi1-f180.google.com with SMTP id 5614622812f47-3f9a7cbc8f1so438433b6e.0 for ; Thu, 24 Apr 2025 09:51:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=minyard-net.20230601.gappssmtp.com; s=20230601; t=1745513471; x=1746118271; 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=5DtP54tyqxFhFBILx2kDBmZqGd2mYL3dx6NE92iFW4Q=; b=uBp3OmG4H5wx+EV/d8H7DpJB6bD3AWX+UuoAj7CA5rPJriD5AtuY+QkRaYBKbKTHaV 3trxzJB29joFOTggWK7ntK7C6GxJpY3SdKlRiWYnz06Nc1mlDj/Dde6JUpyJXYpLNh7x RbuPGbhOS/tlqeYHQvC5Zf3aqE/kV/igDQNS8Lxy6o5ZBMvC5GUH5GcQyRumS9X1KiFM hlF7s98qZy2rZGqfZFXULm24+nEH7wRMwjVwOSUdx0wSsflTF32G+cKORwqYPLPuJt4/ NAXNTHuSGqL+orjke8a/lY75oziFaEMaYXDu9m/GEdlhDVFjsxH3co3UNmJ6/7zDwofo IH4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745513471; x=1746118271; 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=5DtP54tyqxFhFBILx2kDBmZqGd2mYL3dx6NE92iFW4Q=; b=wDJJhKMHo6onlaqQtgM3AMbfd67LsIRXGG2gleXl/lbZSt1JMLF0yNYSa77Ipc698Z FrOQ3QJianG11aiwoLA1WxMWl/Q53ZP6/KdvnwLCjVaLLUoA2NeIFasREjpID25uEFQj zBB57VGPjXQ4o2U+f+c35q8eHYaAIpLIAekiUhLB4njFYRx5FYjqz9EvYCjtzKnppyhl lUeJsA3hqQ8+N/h5TuCF7/yI9VEOeD0FfS/crpNntF6To7DD9hSWjDyFc1Xe1OqK48uV msQvZFu7ceso4aS12nDw1Ir4H89P4JSCvE4tZMmSvQvB49i8cmNUJK2EIODzwTIjmkh4 RksA== X-Gm-Message-State: AOJu0Yyn+0eDd+XsFn9BthKs11/Ss+HfsneI2UMC/q2Yfd+5aDoNJfuX oQ8O94jBCYESegF0jvHrak0ZUeXthLWMHxGmdohPCneGHh6ZWO6aYIXdcLwdJQm+lmw2Xsic/LA c X-Gm-Gg: ASbGncu146AaOz41l+xaUW5Ftj5RS3XJlz7G31wU34PHgtqYYIXTfFX26wr6Ig65b47 G6CyOyG1s0VtA5R3mymqFyNUWnpxPI9hojAaj27B4AValwKQdpYKHcyug2gQnlm1/smbVE4JNM7 itq6Q7DExOoqpeyfw+V1CG5Ciu8nie+qLCnxcGhkZvuwm4D6hRgFxK0eHqHC19V3CXrC0tH1WOC z6SFZOuZ2KyMt/aw5o2pi7wwTs1dWkxXuOKCJOruYZD0cfWhrM96aYicg8o0dHgqK+5iBE/K7SC d/z+153fu8jdcs0A6fqRj/gjBKfMIWdfkN8= X-Google-Smtp-Source: AGHT+IHZgD6N5Ydm2i854rDOI9bgjRs+sNeoNUESxEFdm0GMfAu3nWPsdoBeLj7XFF1Qh0xyiRdviA== X-Received: by 2002:a05:6808:6c8e:b0:3f6:7832:77f1 with SMTP id 5614622812f47-401eb3cf753mr1932722b6e.33.1745513470904; Thu, 24 Apr 2025 09:51:10 -0700 (PDT) Received: from localhost ([2001:470:b8f6:1b:af2e:7abf:8abe:2726]) by smtp.gmail.com with UTF8SMTPSA id 5614622812f47-401ec8c9dd3sm308524b6e.11.2025.04.24.09.51.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 09:51:10 -0700 (PDT) From: Corey Minyard To: linux-kernel@vger.kernel.org, openipmi-developer@lists.sourceforge.net, Rik van Riel Cc: "Paul E . McKenney" , Breno Leitao , Corey Minyard , Corey Minyard Subject: [PATCH 23/23] ipmi:watchdog: Use the new interface for panic messages Date: Thu, 24 Apr 2025 11:50:00 -0500 Message-ID: <20250424165020.627193-24-corey@minyard.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250424165020.627193-1-corey@minyard.net> References: <20250424165020.627193-1-corey@minyard.net> 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's available, remove all the duplicate code. Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_watchdog.c | 72 ++++++++----------------------- 1 file changed, 17 insertions(+), 55 deletions(-) diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_wat= chdog.c index 01c10bd5f099..ab759b492fdd 100644 --- a/drivers/char/ipmi/ipmi_watchdog.c +++ b/drivers/char/ipmi/ipmi_watchdog.c @@ -363,7 +363,7 @@ static int __ipmi_set_timeout(struct ipmi_smi_msg *smi= _msg, { struct kernel_ipmi_msg msg; unsigned char data[6]; - int rv; + int rv =3D 0; struct ipmi_system_interface_addr addr; int hbnow =3D 0; =20 @@ -405,14 +405,18 @@ static int __ipmi_set_timeout(struct ipmi_smi_msg *s= mi_msg, msg.cmd =3D IPMI_WDOG_SET_TIMER; msg.data =3D data; msg.data_len =3D sizeof(data); - rv =3D ipmi_request_supply_msgs(watchdog_user, - (struct ipmi_addr *) &addr, - 0, - &msg, - NULL, - smi_msg, - recv_msg, - 1); + if (smi_msg) + rv =3D ipmi_request_supply_msgs(watchdog_user, + (struct ipmi_addr *) &addr, + 0, + &msg, + NULL, + smi_msg, + recv_msg, + 1); + else + ipmi_panic_request_and_wait(watchdog_user, + (struct ipmi_addr *) &addr, &msg); if (rv) pr_warn("set timeout error: %d\n", rv); else if (send_heartbeat_now) @@ -431,9 +435,7 @@ static int _ipmi_set_timeout(int do_heartbeat) =20 atomic_set(&msg_tofree, 2); =20 - rv =3D __ipmi_set_timeout(&smi_msg, - &recv_msg, - &send_heartbeat_now); + rv =3D __ipmi_set_timeout(&smi_msg, &recv_msg, &send_heartbeat_now); if (rv) { atomic_set(&msg_tofree, 0); return rv; @@ -460,27 +462,10 @@ static int ipmi_set_timeout(int do_heartbeat) return rv; } =20 -static atomic_t panic_done_count =3D ATOMIC_INIT(0); - -static void panic_smi_free(struct ipmi_smi_msg *msg) -{ - atomic_dec(&panic_done_count); -} -static void panic_recv_free(struct ipmi_recv_msg *msg) -{ - atomic_dec(&panic_done_count); -} - -static struct ipmi_smi_msg panic_halt_heartbeat_smi_msg =3D - INIT_IPMI_SMI_MSG(panic_smi_free); -static struct ipmi_recv_msg panic_halt_heartbeat_recv_msg =3D - INIT_IPMI_RECV_MSG(panic_recv_free); - static void panic_halt_ipmi_heartbeat(void) { struct kernel_ipmi_msg msg; struct ipmi_system_interface_addr addr; - int rv; =20 /* * Don't reset the timer if we have the timer turned off, that @@ -497,24 +482,10 @@ static void panic_halt_ipmi_heartbeat(void) msg.cmd =3D IPMI_WDOG_RESET_TIMER; msg.data =3D NULL; msg.data_len =3D 0; - atomic_add(2, &panic_done_count); - rv =3D ipmi_request_supply_msgs(watchdog_user, - (struct ipmi_addr *) &addr, - 0, - &msg, - NULL, - &panic_halt_heartbeat_smi_msg, - &panic_halt_heartbeat_recv_msg, - 1); - if (rv) - atomic_sub(2, &panic_done_count); + ipmi_panic_request_and_wait(watchdog_user, (struct ipmi_addr *) &addr, + &msg); } =20 -static struct ipmi_smi_msg panic_halt_smi_msg =3D - INIT_IPMI_SMI_MSG(panic_smi_free); -static struct ipmi_recv_msg panic_halt_recv_msg =3D - INIT_IPMI_RECV_MSG(panic_recv_free); - /* * Special call, doesn't claim any locks. This is only to be called * at panic or halt time, in run-to-completion mode, when the caller @@ -526,22 +497,13 @@ static void panic_halt_ipmi_set_timeout(void) int send_heartbeat_now; int rv; =20 - /* Wait for the messages to be free. */ - while (atomic_read(&panic_done_count) !=3D 0) - ipmi_poll_interface(watchdog_user); - atomic_add(2, &panic_done_count); - rv =3D __ipmi_set_timeout(&panic_halt_smi_msg, - &panic_halt_recv_msg, - &send_heartbeat_now); + rv =3D __ipmi_set_timeout(NULL, NULL, &send_heartbeat_now); if (rv) { - atomic_sub(2, &panic_done_count); pr_warn("Unable to extend the watchdog timeout\n"); } else { if (send_heartbeat_now) panic_halt_ipmi_heartbeat(); } - while (atomic_read(&panic_done_count) !=3D 0) - ipmi_poll_interface(watchdog_user); } =20 static int __ipmi_heartbeat(void) --=20 2.43.0