From nobody Sun Jun 21 10:07:14 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EC27BC433EF for ; Tue, 29 Mar 2022 18:34:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240580AbiC2Sfl (ORCPT ); Tue, 29 Mar 2022 14:35:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59444 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238583AbiC2Sff (ORCPT ); Tue, 29 Mar 2022 14:35:35 -0400 Received: from mail-qv1-xf2b.google.com (mail-qv1-xf2b.google.com [IPv6:2607:f8b0:4864:20::f2b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 77973201A6 for ; Tue, 29 Mar 2022 11:33:51 -0700 (PDT) Received: by mail-qv1-xf2b.google.com with SMTP id k7so15073725qvc.4 for ; Tue, 29 Mar 2022 11:33:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=eKX8MOuc+fqfFqc9o7xUeIg2s3MACXL989nTaOCsTRg=; b=SmSkru7LcPKK7uB+F3Ng+PLbgy5CFKKdgPnhrrwvhYcn6rT+OE7nyok8aWPmQx5Po4 6AzY5DOhNYTKzXvOnw/7F3hd475ovWAgr9Xv+ezfjwOrMfkNmQ9VnK7qSES/hjLOj8Xh M3dX2//opJKIsuIuFMXDiIkupgWq4SoVWdwT4hMIBQ596Q5h5xqsu7YyUx5pg310X+dg bPuqGDn/AS1GZsHrGvR7Sw+MrDn8WVUXfF9kOSVJODneDjadSlusA1lN7EWbgEW6JWRi kkF7xR9zHtrU2/5/bLZYQ+ld/mVp40dTK/ZIGgYnTU7W7eS3pdZzFi8+Wo3Bs4rgtxJA rtrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=eKX8MOuc+fqfFqc9o7xUeIg2s3MACXL989nTaOCsTRg=; b=yPnEBLRdFvGA0aar5rOqkuILVxXqfv0vneIw3aCZ0Daf+ziQphLvdbH7xfaHAnXbsq lvMysZlXxFT6RDnu8/fvQhym1L/DoA1dNv+gOAjq+FMShyy0OAkZ/48uQWxsCn86BeAf FZRiohM6SwWlq7KczZs6PAIyTUD0VSUyvdp7mMDt+GSJVbrtoJ+bBlkDPqgBPvajRuxh Q6yJ+kskNZYuoD0QdQxP9FhyPsHAGxql42RRCc39ecDq2xACbRf+i8YBh1MWwZFJuciV 9VmGQZpYbGl6y8rdFDVWpe3vjtjcXkiEfPEBN8xsk2JbS5AySOiSEF1tt4dyuVyUmBrL HOhQ== X-Gm-Message-State: AOAM533k5YZMVZzVBxJm92ieQKLbqB7kIFFIW88Ua4KG/8ooJ98bdFHi 7ZYhcanqQESkT+GmXYWGIVhG4KA1MA== X-Google-Smtp-Source: ABdhPJxbQ4wBVitVjiXj6qY7npw5KQhZI9PmVVTOrduX/2N2bPbSJvyLDIC2B3HF3BMXeRDVf5LQRg== X-Received: by 2002:a05:6214:20a1:b0:42d:6f51:46e2 with SMTP id 1-20020a05621420a100b0042d6f5146e2mr28075705qvd.67.1648578830339; Tue, 29 Mar 2022 11:33:50 -0700 (PDT) Received: from serve.minyard.net (serve.minyard.net. [2001:470:b8f6:1b::1]) by smtp.gmail.com with ESMTPSA id o4-20020a05620a22c400b0067e02a697e0sm9542179qki.33.2022.03.29.11.33.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Mar 2022 11:33:49 -0700 (PDT) Sender: Corey Minyard Received: from t560.minyard.net (unknown [IPv6:2001:470:b8f6:1b:dcc2:ca6d:a437:b3e0]) by serve.minyard.net (Postfix) with ESMTPA id EC2C61817BE; Tue, 29 Mar 2022 18:33:47 +0000 (UTC) From: minyard@acm.org To: Chen Guanqiao Cc: openipmi-developer@lists.sourceforge.net, linux-kernel@vger.kernel.org, Corey Minyard Subject: [PATCH 1/4] ipmi: Add a limit on the number of users that may use IPMI Date: Tue, 29 Mar 2022 13:33:37 -0500 Message-Id: <20220329183340.471474-2-minyard@acm.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220329183340.471474-1-minyard@acm.org> References: <20220329183340.471474-1-minyard@acm.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Corey Minyard Each user uses memory, we need limits to avoid a rogue program from running the system out of memory. Based on work by Chen Guanqiao Cc: Chen Guanqiao Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index c59265146e9c..de80bf4c4e4c 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -145,6 +145,12 @@ module_param(default_max_retries, uint, 0644); MODULE_PARM_DESC(default_max_retries, "The time (milliseconds) between retry sends in maintenance mode"); =20 +/* The default maximum number of users that may register. */ +static unsigned int max_users =3D 30; +module_param(max_users, uint, 0644); +MODULE_PARM_DESC(max_users, + "The most users that may use the IPMI stack at one time."); + /* Call every ~1000 ms. */ #define IPMI_TIMEOUT_TIME 1000 =20 @@ -442,6 +448,7 @@ struct ipmi_smi { */ struct list_head users; struct srcu_struct users_srcu; + atomic_t nr_users; =20 /* Used for wake ups at startup. */ wait_queue_head_t waitq; @@ -1230,6 +1237,11 @@ int ipmi_create_user(unsigned int if_num, goto out_kfree; =20 found: + if (atomic_add_return(1, &intf->nr_users) > max_users) { + rv =3D -EBUSY; + goto out_kfree; + } + INIT_WORK(&new_user->remove_work, free_user_work); =20 rv =3D init_srcu_struct(&new_user->release_barrier); @@ -1262,6 +1274,7 @@ int ipmi_create_user(unsigned int if_num, return 0; =20 out_kfree: + atomic_sub(1, &intf->nr_users); srcu_read_unlock(&ipmi_interfaces_srcu, index); vfree(new_user); return rv; @@ -1336,6 +1349,7 @@ static void _ipmi_destroy_user(struct ipmi_user *user) /* Remove the user from the interface's sequence table. */ spin_lock_irqsave(&intf->seq_lock, flags); list_del_rcu(&user->link); + atomic_dec(&intf->nr_users); =20 for (i =3D 0; i < IPMI_IPMB_NUM_SEQ; i++) { if (intf->seq_table[i].inuse @@ -3529,6 +3543,7 @@ int ipmi_add_smi(struct module *owner, if (slave_addr !=3D 0) intf->addrinfo[0].address =3D slave_addr; INIT_LIST_HEAD(&intf->users); + atomic_set(&intf->nr_users, 0); intf->handlers =3D handlers; intf->send_info =3D send_info; spin_lock_init(&intf->seq_lock); --=20 2.25.1 From nobody Sun Jun 21 10:07:14 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41F65C433EF for ; Tue, 29 Mar 2022 18:34:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240591AbiC2Sft (ORCPT ); Tue, 29 Mar 2022 14:35:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240556AbiC2Sff (ORCPT ); Tue, 29 Mar 2022 14:35:35 -0400 Received: from mail-qk1-x729.google.com (mail-qk1-x729.google.com [IPv6:2607:f8b0:4864:20::729]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7285323140 for ; Tue, 29 Mar 2022 11:33:52 -0700 (PDT) Received: by mail-qk1-x729.google.com with SMTP id 1so14825016qke.1 for ; Tue, 29 Mar 2022 11:33:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vWA7HcHxRpWtEbVOYRkc14CrV3xH0f9ykow83uQI6Oc=; b=TGAfGZeUItf+EdBmKHvq/2lKgRAqtSOyPTJ3cIwzNwRXU6NEbCqLYag1qggqY920kV cLpNhwg8PEBGMVp+7YAlNt2AZec4QPKGCGxm8GAYJjlZOIjJyc4pdCjSIBiV68cQREzj RpezyPsr0Zc6OgGORxiIZ1uy2+dWR2GmnjtpwpY+t/eoSp+XqqRleYDRXMAfcj9/vndG IC6FAoCJgJ45lmGcaVEFqFp4WI6vIN4OpkuRVDrJdXY8/OutwXgLzrlHQoX+D05G/whr otQ0Q5eD/J/839YermdMlOdL6AyKoKD5EaKYUKknuWkrJMP0gJNvvc5rgqWaJ9yW3IqZ 41oQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=vWA7HcHxRpWtEbVOYRkc14CrV3xH0f9ykow83uQI6Oc=; b=O9Z3TOFOO+POSpGpBI0Qef6L/nVJst72JxLm+ftdp6o765y3Nba+ubxCgujrpvcpXb S1q2NubVfUqfXHW6ZPeT4TlOBocgXiK2pGFA1vVRXmR41SOdJcKUQqsRHJjmiGl2N9TI hp919CjZlMF6A0XzhVohf8guriXkOLLq219pDmkFIOGlqGrsbd9WgX7ZG/iZdUOFRCo7 +/h5q8G1i1AHHaxfFVyjedrNwqr8AiKSNdxWLiCuWTQOzqld+5g9A3/t6S7j1UC0ch4m vNK3aTSgPR5y+9Mn/tkZrCrf1nleEQHyu56aETMei6IPVbzqBWC3G7OKiYquPh3PZ/5t Rmtw== X-Gm-Message-State: AOAM530yZBKOBT84a1OwRIE8YE2WNg+4MDnPFLtn2lP0DgF33hWlTEdm lNf8YxM3Jm1g1/RAxNhI9w== X-Google-Smtp-Source: ABdhPJy9SCF44CcQJbSUiXgEkc9BHr7eeymXyPLB3zmBh4ucrhwiiARaLqeXVN83k3mcw0qJHmiSsg== X-Received: by 2002:a37:a3d2:0:b0:67b:30b2:732f with SMTP id m201-20020a37a3d2000000b0067b30b2732fmr21033089qke.719.1648578831377; Tue, 29 Mar 2022 11:33:51 -0700 (PDT) Received: from serve.minyard.net ([47.184.144.75]) by smtp.gmail.com with ESMTPSA id m4-20020ac85b04000000b002e1dcaed228sm15054133qtw.7.2022.03.29.11.33.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Mar 2022 11:33:49 -0700 (PDT) Sender: Corey Minyard Received: from t560.minyard.net (unknown [IPv6:2001:470:b8f6:1b:dcc2:ca6d:a437:b3e0]) by serve.minyard.net (Postfix) with ESMTPA id 0FA5D1817BF; Tue, 29 Mar 2022 18:33:48 +0000 (UTC) From: minyard@acm.org To: Chen Guanqiao Cc: openipmi-developer@lists.sourceforge.net, linux-kernel@vger.kernel.org, Corey Minyard Subject: [PATCH 2/4] ipmi: Limit the number of message a user may have outstanding Date: Tue, 29 Mar 2022 13:33:38 -0500 Message-Id: <20220329183340.471474-3-minyard@acm.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220329183340.471474-1-minyard@acm.org> References: <20220329183340.471474-1-minyard@acm.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Corey Minyard This way a rogue application can't use up a bunch of memory. Based on work by Chen Guanqiao Cc: Chen Guanqiao Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index de80bf4c4e4c..2a05199e8224 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -151,6 +151,12 @@ module_param(max_users, uint, 0644); MODULE_PARM_DESC(max_users, "The most users that may use the IPMI stack at one time."); =20 +/* The default maximum number of message a user may have outstanding. */ +static unsigned int max_msgs_per_user =3D 100; +module_param(max_msgs_per_user, uint, 0644); +MODULE_PARM_DESC(max_msgs_per_user, + "The most message a user may have outstanding."); + /* Call every ~1000 ms. */ #define IPMI_TIMEOUT_TIME 1000 =20 @@ -193,6 +199,8 @@ struct ipmi_user { /* Does this interface receive IPMI events? */ bool gets_events; =20 + atomic_t nr_msgs; + /* Free must run in process context for RCU cleanup. */ struct work_struct remove_work; }; @@ -934,11 +942,13 @@ static int deliver_response(struct ipmi_smi *intf, st= ruct ipmi_recv_msg *msg) * risk. At this moment, simply skip it in that case. */ 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); =20 if (user) { + atomic_dec(&user->nr_msgs); user->handler->ipmi_recv_hndl(msg, user->handler_data); release_ipmi_user(user, index); } else { @@ -1256,6 +1266,7 @@ int ipmi_create_user(unsigned int if_num, /* Note that each existing user holds a refcount to the interface. */ kref_get(&intf->refcount); =20 + atomic_set(&new_user->nr_msgs, 0); kref_init(&new_user->refcount); new_user->handler =3D handler; new_user->handler_data =3D handler_data; @@ -2298,6 +2309,14 @@ static int i_ipmi_request(struct ipmi_user *user, struct ipmi_recv_msg *recv_msg; int rv =3D 0; =20 + if (user) { + if (atomic_add_return(1, &user->nr_msgs) > max_msgs_per_user) { + atomic_dec(&user->nr_msgs); + rv =3D -EBUSY; + goto out; + } + } + if (supplied_recv) recv_msg =3D supplied_recv; else { @@ -2369,6 +2388,8 @@ static int i_ipmi_request(struct ipmi_user *user, rcu_read_unlock(); =20 out: + if (rv && user) + atomic_dec(&user->nr_msgs); return rv; } =20 --=20 2.25.1 From nobody Sun Jun 21 10:07:14 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 296B5C433F5 for ; Tue, 29 Mar 2022 18:33:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240564AbiC2Sfi (ORCPT ); Tue, 29 Mar 2022 14:35:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235403AbiC2Sfe (ORCPT ); Tue, 29 Mar 2022 14:35:34 -0400 Received: from mail-qt1-x829.google.com (mail-qt1-x829.google.com [IPv6:2607:f8b0:4864:20::829]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 009C21FCEE for ; Tue, 29 Mar 2022 11:33:50 -0700 (PDT) Received: by mail-qt1-x829.google.com with SMTP id a11so16050188qtb.12 for ; Tue, 29 Mar 2022 11:33:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pYh17+m9ZvxB94QZOjFlGLEILR7t0nVp9Jw8tjfjzHg=; b=E5ysQicLK6/PS0w5N6+csC5X17whyf5UxpO207r5zL/7M3hWteMDQ/l6pb1KDMuysC 3yXUAtvsTnUp5c2K5QXln/+wPnYu8ZCvqOEfibo5AQRGIsaJwq3CB1Y0oq8mAw2ay9FW Xdn9b8Sn9gdrJufk5JuWnn3Ejf2mWxVaY7H+0QL9UmDX5nhN0Iw4M14NwMrzdscHAak1 BG/dJlUhpqDrgZROirne/j+jJU4h415Qc4Y1FA5X2RT6e6gbpklf4z9ZXISqNfPD6Wrk Qgrt020xavylPykNW6SqKP/VNGTEuuClxdoo/UN7hvo3OXN2CHhRgNdol1u+qFuIJVB+ WlrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=pYh17+m9ZvxB94QZOjFlGLEILR7t0nVp9Jw8tjfjzHg=; b=MrZj0f6IkZvMYG0/cocssbLhgkfPBymlglyWTlj+U2yi2vUMPZ7mg1OqZ+1fwuNih+ wUdI8rCokca4JWSoxfLSpoKKt1iPuXor7t+maLb1lNh5EEUcmWTADVu+7g1I+9PdbRkU 1xNLY+CcZ1UDOGzUeAN2SUwac1j9YiGC1MrsHmZT4glhhNw6GCaUXh67HTqjhzHxz5r3 m9wyyOAQMDhWVBnilXlJShHwHcMSu+cvQxfs3Df5N9Q82WUDenpsoefjbqHa1PdFwfxN PAlysaqPfxmyE2grXCQVCVkifEBQ3tQaJF8MMfD6rCtwLS0M1CRRFS8ZxVfe561Gh1EE 3pNQ== X-Gm-Message-State: AOAM5317FDirT0OqkZ5dXZOa/fnsY/9S0BrrMSIqh3ICZM5wnt1icMqC em6tVfAeIOWiFKPAIZncsQ== X-Google-Smtp-Source: ABdhPJyDgABbA4NUgp4AHQ6yq/6JO6cXsfhVZOKL8n+20PmhywEH7JMbsKjEg6HsqlHMi4lnNpY5cg== X-Received: by 2002:a05:622a:1894:b0:2e1:cbdb:8b74 with SMTP id v20-20020a05622a189400b002e1cbdb8b74mr28825846qtc.643.1648578830008; Tue, 29 Mar 2022 11:33:50 -0700 (PDT) Received: from serve.minyard.net ([47.184.144.75]) by smtp.gmail.com with ESMTPSA id h14-20020a05622a170e00b002e1a65754d8sm16175490qtk.91.2022.03.29.11.33.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Mar 2022 11:33:49 -0700 (PDT) Sender: Corey Minyard Received: from t560.minyard.net (unknown [IPv6:2001:470:b8f6:1b:dcc2:ca6d:a437:b3e0]) by serve.minyard.net (Postfix) with ESMTPA id 23FC21817C0; Tue, 29 Mar 2022 18:33:48 +0000 (UTC) From: minyard@acm.org To: Chen Guanqiao Cc: openipmi-developer@lists.sourceforge.net, linux-kernel@vger.kernel.org, Corey Minyard Subject: [PATCH 3/4] ipmi: Add a sysfs interface to view the number of users Date: Tue, 29 Mar 2022 13:33:39 -0500 Message-Id: <20220329183340.471474-4-minyard@acm.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220329183340.471474-1-minyard@acm.org> References: <20220329183340.471474-1-minyard@acm.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Corey Minyard A count of users is kept for each interface, allow it to be viewed. Based on work by Chen Guanqiao Cc: Chen Guanqiao Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 2a05199e8224..3ba188e05ca6 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -457,6 +457,8 @@ struct ipmi_smi { struct list_head users; struct srcu_struct users_srcu; atomic_t nr_users; + struct device_attribute nr_users_devattr; + =20 /* Used for wake ups at startup. */ wait_queue_head_t waitq; @@ -3506,6 +3508,17 @@ void ipmi_poll_interface(struct ipmi_user *user) } EXPORT_SYMBOL(ipmi_poll_interface); =20 +static ssize_t nr_users_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct ipmi_smi *intf =3D container_of(attr, + struct ipmi_smi, nr_users_devattr); + + return sysfs_emit(buf, "%d\n", atomic_read(&intf->nr_users)); +} +static DEVICE_ATTR_RO(nr_users); + static void redo_bmc_reg(struct work_struct *work) { struct ipmi_smi *intf =3D container_of(work, struct ipmi_smi, @@ -3628,6 +3641,12 @@ int ipmi_add_smi(struct module *owner, if (rv) goto out_err_bmc_reg; =20 + intf->nr_users_devattr =3D dev_attr_nr_users; + sysfs_attr_init(&intf->nr_users_devattr.attr); + rv =3D device_create_file(intf->si_dev, &intf->nr_users_devattr); + if (rv) + goto out_err_bmc_reg; + /* * Keep memory order straight for RCU readers. Make * sure everything else is committed to memory before @@ -3724,6 +3743,8 @@ void ipmi_unregister_smi(struct ipmi_smi *intf) =20 /* At this point no users can be added to the interface. */ =20 + device_remove_file(intf->si_dev, &intf->nr_users_devattr); + /* * Call all the watcher interfaces to tell them that * an interface is going away. --=20 2.25.1 From nobody Sun Jun 21 10:07:14 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8F0E7C433EF for ; Tue, 29 Mar 2022 18:34:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240599AbiC2Sfu (ORCPT ); Tue, 29 Mar 2022 14:35:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59484 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240559AbiC2Sff (ORCPT ); Tue, 29 Mar 2022 14:35:35 -0400 Received: from mail-qt1-x835.google.com (mail-qt1-x835.google.com [IPv6:2607:f8b0:4864:20::835]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA36223158 for ; Tue, 29 Mar 2022 11:33:52 -0700 (PDT) Received: by mail-qt1-x835.google.com with SMTP id 10so16063499qtz.11 for ; Tue, 29 Mar 2022 11:33:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bjza6K+AY/cPZQnOFPJJVhFu3gZWdgR4+p6QcBpzTy0=; b=JPam0pwniV7W7pfXJ0KUPB7FsNfYvcpKufKyDRuc8w2/nhluZvybl8Xl4GxkU6Xl4J tkz8Tz7sxWzqQOzY1YdZ8hkXE+oRBhI4qBDKicL3fLc7cFH4ZecY1Dp4OY4lDmYSXbNq W4Fw2HFh95UlQpvGAt68H8/Hie51PP/TIPeqzc66F0QuhEUrXS18/tDNiQQOg1WNhRy1 G6YSkoy6wOlxOobjYo2ifZkl7cafxY2SXAACXmbYfNf9o0fMolEBQ7NoFLeHgZJUkEsM lw7g94ng0ve5foXBMpirk3r4XNmrNIGjQJ3I6pAJfwVWQ4XTEa9x8YqOk3a1b1hdxWF0 bQDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=bjza6K+AY/cPZQnOFPJJVhFu3gZWdgR4+p6QcBpzTy0=; b=hG5WzfHjQrj0MSUcgqqp+CcDZbyfNnuglV0mLcYyOuOvaSdykk/ivem9VynGKcq4PI Uwg3lepSEdNOZBXoEzma8zY3daY0+OrDIMJ3Qa3djtNwk3dQL/Ovx+XmEN1az57qEmBa yvmJQPhc4cthkvuAn6VFwsI2mmWQThDdFl25HL2VWkUgr+vuBC7cHiFVDXMT06+ZwyG5 G8Gwgcw1elh/j+b3M0x4CnEm7mXaYBMekemJ6L0AgxUlYeZqLYLiK/pY38F+q1iSMyxK T9bO3RCDt8ax7VqKqVm13f9W1EQewaj3IhG52cR77vbyB4sZTjrDiv7WwJULQ6phH4bT GEsw== X-Gm-Message-State: AOAM5332EZJaK+tAUD0/KNsIf9Hb5DmAmxQCLA655UvFeLt6AcYdJNkO X30pBiwkAs7i5N5PnSGqZwWbCJTnJQ== X-Google-Smtp-Source: ABdhPJzgswxUhX3CVNKadJI6lHxhDQSuNlqb2woYu+H3DNLh7JPt8Kog1vdWOnQfKSECZTLJLQ+Z1g== X-Received: by 2002:ac8:5892:0:b0:2e1:c997:a5f6 with SMTP id t18-20020ac85892000000b002e1c997a5f6mr29886327qta.357.1648578831700; Tue, 29 Mar 2022 11:33:51 -0700 (PDT) Received: from serve.minyard.net (serve.minyard.net. [2001:470:b8f6:1b::1]) by smtp.gmail.com with ESMTPSA id y11-20020ac85f4b000000b002e1e038a8fdsm15326134qta.13.2022.03.29.11.33.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Mar 2022 11:33:49 -0700 (PDT) Sender: Corey Minyard Received: from t560.minyard.net (unknown [IPv6:2001:470:b8f6:1b:dcc2:ca6d:a437:b3e0]) by serve.minyard.net (Postfix) with ESMTPA id 39F981817C1; Tue, 29 Mar 2022 18:33:48 +0000 (UTC) From: minyard@acm.org To: Chen Guanqiao Cc: openipmi-developer@lists.sourceforge.net, linux-kernel@vger.kernel.org, Corey Minyard Subject: [PATCH 4/4] ipmi: Add a sysfs count of total outstanding messages for an interface Date: Tue, 29 Mar 2022 13:33:40 -0500 Message-Id: <20220329183340.471474-5-minyard@acm.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220329183340.471474-1-minyard@acm.org> References: <20220329183340.471474-1-minyard@acm.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Corey Minyard Go through each user and add its message count to a total and print the total. It would be nice to have a per-user file, but there's no user sysfs entity at this point to hang it off of. Probably not worth the effort. Based on work by Chen Guanqiao Cc: Chen Guanqiao Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_m= sghandler.c index 3ba188e05ca6..e30223763a2a 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -458,6 +458,7 @@ struct ipmi_smi { struct srcu_struct users_srcu; atomic_t nr_users; struct device_attribute nr_users_devattr; + struct device_attribute nr_msgs_devattr; =20 =20 /* Used for wake ups at startup. */ @@ -3519,6 +3520,25 @@ static ssize_t nr_users_show(struct device *dev, } static DEVICE_ATTR_RO(nr_users); =20 +static ssize_t nr_msgs_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct ipmi_smi *intf =3D container_of(attr, + struct ipmi_smi, nr_msgs_devattr); + struct ipmi_user *user; + int index; + unsigned int count =3D 0; + + index =3D srcu_read_lock(&intf->users_srcu); + list_for_each_entry_rcu(user, &intf->users, link) + count +=3D atomic_read(&user->nr_msgs); + srcu_read_unlock(&intf->users_srcu, index); + + return sysfs_emit(buf, "%u\n", count); +} +static DEVICE_ATTR_RO(nr_msgs); + static void redo_bmc_reg(struct work_struct *work) { struct ipmi_smi *intf =3D container_of(work, struct ipmi_smi, @@ -3647,6 +3667,14 @@ int ipmi_add_smi(struct module *owner, if (rv) goto out_err_bmc_reg; =20 + intf->nr_msgs_devattr =3D dev_attr_nr_msgs; + sysfs_attr_init(&intf->nr_msgs_devattr.attr); + rv =3D device_create_file(intf->si_dev, &intf->nr_msgs_devattr); + if (rv) { + device_remove_file(intf->si_dev, &intf->nr_users_devattr); + goto out_err_bmc_reg; + } + /* * Keep memory order straight for RCU readers. Make * sure everything else is committed to memory before @@ -3743,6 +3771,7 @@ void ipmi_unregister_smi(struct ipmi_smi *intf) =20 /* At this point no users can be added to the interface. */ =20 + device_remove_file(intf->si_dev, &intf->nr_msgs_devattr); device_remove_file(intf->si_dev, &intf->nr_users_devattr); =20 /* --=20 2.25.1