From patchwork Fri Nov 3 06:15:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jeffery X-Patchwork-Id: 161159 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp830873vqu; Thu, 2 Nov 2023 23:16:33 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFIb12qP1UhLnolnYwLtVurAG9g5J6I3u+ZfdX+SfbEx53ESOpzfZohPP1p/bveHrS/La2D X-Received: by 2002:a81:6e07:0:b0:5a8:72ee:463d with SMTP id j7-20020a816e07000000b005a872ee463dmr1988849ywc.49.1698992193065; Thu, 02 Nov 2023 23:16:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698992193; cv=none; d=google.com; s=arc-20160816; b=uCdgDzDcQ0+Ex55qokfod2VQ9b/gfg1XyYUyvhJ0iq0oJLCZyug620GQDHjtYwhB7P tOMXfr7xbJXgP3Al6WE/hp5N2LbyeTwCk2KBa1zi1iywnDbeTq0Jg6/spxT+ou3Zv4Gb WMM1qoRX4jJWikrJOBmbkMnvuLxP6f8ruDDWdwK+ichhvaFvAhCo9gS/T/RC46hP6LbS wTt5F1/Dy9iNRczZFyDkrH7WN2fWFfpTbGtV+5x7yfyLwHKiSw5SEB0fNTguPY3f73M7 HgtvGxft1ZatU3oLReWHnLOOE4r1sUZ9zmENGk6nysyCq+W1lc4mlyVaPoX9wEjIhw+o iVQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=AMOQEb03XmNyI60tnL3U2zDrGzgwc0hBeKG41n8Z2ko=; fh=J5fZGSGUmoD0NT+ZfFkgng7qPhvONoMGdVOrNctU85A=; b=Al9mmfLC2AHPVSkWL2cz56XU3FY1ksbGqr+vRPY+qK1N2EfC+paZThkEOUsCU+ruTP M19avCKIHqmSUItKWotc4kazYv0w6AiBEsunCH9H9GkWl+4fKsGAcmf5m4YnP0Le3RZX j1zzhkDYzuUe6NYmTRtWCjUdbLPipFOf8+s8+wNt7cpX0sujSem8BBr17zYNnyPcaeDu DGQuhLjEyR3hszo4kpgLHi8z/MJ2xpId3yPSpwWVUhKGLElvasr6U/k8peJTznogXVDj 6hAkYTZhwVkUf/q5Aq82QzKop9IvoqHB9ePPlbnlV3MRSyW5j2Y7g3A4qYnFjLC5Rhk/ oMVQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=jtjV3TZL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id x64-20020a638643000000b005859c221c6dsi1012253pgd.221.2023.11.02.23.16.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 23:16:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=jtjV3TZL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id DA7378115A8F; Thu, 2 Nov 2023 23:16:24 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230517AbjKCGPx (ORCPT + 36 others); Fri, 3 Nov 2023 02:15:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230302AbjKCGPs (ORCPT ); Fri, 3 Nov 2023 02:15:48 -0400 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 710901AD for ; Thu, 2 Nov 2023 23:15:40 -0700 (PDT) Received: from localhost.localdomain (ppp14-2-79-67.adl-apt-pir-bras31.tpg.internode.on.net [14.2.79.67]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id 2EEB6201BD; Fri, 3 Nov 2023 14:15:38 +0800 (AWST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1698992138; bh=AMOQEb03XmNyI60tnL3U2zDrGzgwc0hBeKG41n8Z2ko=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=jtjV3TZLPzvN1w4uR+fgbdz1AEMsgGnTq4P6RHyjkA4Zt4Y8ax1EROo73dfq2HmCn 6km6mjpDeLUeQkt4Umlt9SO1SEvc6KeAVIZ55upcRfl+Q2MkNozRkMn9yKVbq0djBi wUmkcYb+bxTqNFnlLngWXRB0qVR2Ym0rwoQsPtPvW01ucSshJZdJx3qokNg3XkLSo9 F6FNbXzsO3dVuBuw+jiJCk6s+Hh+evqDvAF3mVfUT26mYeMyFp/Cu1IcHbsF3ikuYT JeVqO5FI3+7FoQlAZuoQZ20pbzv+DS8V0IFwoJXgPY2JP2sLVqbevUSE0u3BTLCsEY OrMUwmbzBIE8A== From: Andrew Jeffery To: minyard@acm.org, openipmi-developer@lists.sourceforge.net Cc: Andrew Jeffery , linux-kernel@vger.kernel.org, Jonathan.Cameron@Huawei.com, aladyshev22@gmail.com, jk@codeconstruct.com.au Subject: [PATCH 01/10] ipmi: kcs_bmc: Update module description Date: Fri, 3 Nov 2023 16:45:13 +1030 Message-Id: <20231103061522.1268637-2-andrew@codeconstruct.com.au> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231103061522.1268637-1-andrew@codeconstruct.com.au> References: <20231103061522.1268637-1-andrew@codeconstruct.com.au> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Thu, 02 Nov 2023 23:16:25 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781522437460780793 X-GMAIL-MSGID: 1781522437460780793 KCS devices are often used for IPMI, but they're not constrained to it. Update the subsystem module description to reflect its more general capabilities. Signed-off-by: Andrew Jeffery --- drivers/char/ipmi/kcs_bmc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/char/ipmi/kcs_bmc.c b/drivers/char/ipmi/kcs_bmc.c index 8b1161d5194a..a429d9f8a7bf 100644 --- a/drivers/char/ipmi/kcs_bmc.c +++ b/drivers/char/ipmi/kcs_bmc.c @@ -187,4 +187,4 @@ EXPORT_SYMBOL(kcs_bmc_update_event_mask); MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Haiyue Wang "); MODULE_AUTHOR("Andrew Jeffery "); -MODULE_DESCRIPTION("KCS BMC to handle the IPMI request from system software"); +MODULE_DESCRIPTION("Subsystem for BMCs to communicate via KCS devices"); From patchwork Fri Nov 3 06:15:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jeffery X-Patchwork-Id: 161160 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp830945vqu; Thu, 2 Nov 2023 23:16:45 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGqm5BjeFFf1k9HvHVvcr1tVxg2LwwVMRBvwCmB9q2SFgODqUs3h0DhgnmWBG1roM3W9zDp X-Received: by 2002:a05:6808:8f6:b0:3ae:511e:179e with SMTP id d22-20020a05680808f600b003ae511e179emr20930957oic.54.1698992204844; Thu, 02 Nov 2023 23:16:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698992204; cv=none; d=google.com; s=arc-20160816; b=Hgd17fu3OnJ0+mKJreYNFJ6xgYwMGdFcYDrio4zb3iytj9i6YsY3H+uEOiAfLw5fd8 90QvIUuuIX5drCfSqS/CKc0mgp0tSfKnx5Fj5JOdG3QsZJm7Ve/YzvVAe1Xw7ofJImYd JLKndQeC9M2ArlX1ZgWR0ZK3LBYTRDP7mb4v3H/XrcTcF9N7Hj+X9d9oO92E5EzEeCzi kFPRi/E18aV3OvuyuBtPmcamR7a5K/wEiddAOC0HpEah7JaYeiPRV6aByzWGKP8Sj2h+ G7gys2npM1Gc0fz9ULUMOM0eokBUk5d5P6Cvss0rUX1zRBRLs9kCeXpY9eD+pQxcOGo/ zvhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=UrTbHIBuDGRrYkDPZsK7lRpnYMK3E56TRQ6kVp/EyZE=; fh=J5fZGSGUmoD0NT+ZfFkgng7qPhvONoMGdVOrNctU85A=; b=b14Bg/aPJUQGAUtEIKvZuhbWsAzKTw46q91dYiTRv7XetLAc+opdt80/nBiXPlD+0b mcCyEo170x7FovFSnFbmN/6hXBFn7EYrLMnXlmgZF4NBnqVHYWZS1ILDWGTIBsoCVMQv uJ2+iN4MShuynYZlWo+w6ESjI0zJK2CTVr4TTIe/wg9tp8sLcLKz5u9HQWKyjsZzEFLq wi+/0vpxqm+dTvRkCAR6W9dnGpInIrV+IW3NbnaHcq8IiD1tfxjSfI/ZG2PJD7e83V0T hXxYh3O8hHy6auQyA3T3TDtueDJYz46F+ApHZRM+7+hb0ZrUM4FD1TKA4t4l0YvHMBGQ WUdg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=JMtdd0T0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id bd32-20020a056a0027a000b0068fa8499af1si991653pfb.11.2023.11.02.23.16.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 23:16:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=JMtdd0T0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 0C83880B5A27; Thu, 2 Nov 2023 23:16:02 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230403AbjKCGPu (ORCPT + 36 others); Fri, 3 Nov 2023 02:15:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35400 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230307AbjKCGPs (ORCPT ); Fri, 3 Nov 2023 02:15:48 -0400 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D91D51B2 for ; Thu, 2 Nov 2023 23:15:41 -0700 (PDT) Received: from localhost.localdomain (ppp14-2-79-67.adl-apt-pir-bras31.tpg.internode.on.net [14.2.79.67]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id E281B201BF; Fri, 3 Nov 2023 14:15:38 +0800 (AWST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1698992139; bh=UrTbHIBuDGRrYkDPZsK7lRpnYMK3E56TRQ6kVp/EyZE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=JMtdd0T0P2ikWmfihcJb7TZYWjGjos/oKFYsVKErP6oYr9ryUwZBj1FmAHMZvOg5K /lLCvJwADNnbA6Qvi7Ml4lSiHyJqIHKVL8GjPW6qBdkmSyz7ws6OODms3Bugi9c9bd EvUjv8nvKmBnxP8z6Jg7vqcdPkVsSUTF2di+420m3rCNJX4ycft1f7Yy0xqwDRfrII EY//3q5nRw+uu3Hi36DTDKhmGKQ9gdwsA2jef7pJy159m02X8/tE+4W4C7cDcdrvb7 gcrVKBHGx4HYZULDZfTGT1BzFc3h5NKGyyvPwUm8v2o3ykpdtz2fehzJ1sKQ7Ri9rb a/G36x83DzgPA== From: Andrew Jeffery To: minyard@acm.org, openipmi-developer@lists.sourceforge.net Cc: Andrew Jeffery , linux-kernel@vger.kernel.org, Jonathan.Cameron@Huawei.com, aladyshev22@gmail.com, jk@codeconstruct.com.au Subject: [PATCH 02/10] ipmi: kcs_bmc: Include spinlock.h Date: Fri, 3 Nov 2023 16:45:14 +1030 Message-Id: <20231103061522.1268637-3-andrew@codeconstruct.com.au> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231103061522.1268637-1-andrew@codeconstruct.com.au> References: <20231103061522.1268637-1-andrew@codeconstruct.com.au> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Thu, 02 Nov 2023 23:16:02 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781522450175243276 X-GMAIL-MSGID: 1781522450175243276 struct kcs_bmc_device defines a spinlock member but the header in which it is defined failed to include the spinlock header. In the spirit of include-what-you-use, do what's necessary. Signed-off-by: Andrew Jeffery --- drivers/char/ipmi/kcs_bmc.h | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/char/ipmi/kcs_bmc.h b/drivers/char/ipmi/kcs_bmc.h index fa408b802c79..880d835fb90c 100644 --- a/drivers/char/ipmi/kcs_bmc.h +++ b/drivers/char/ipmi/kcs_bmc.h @@ -7,6 +7,7 @@ #define __KCS_BMC_H__ #include +#include #define KCS_BMC_EVENT_TYPE_OBE BIT(0) #define KCS_BMC_EVENT_TYPE_IBF BIT(1) From patchwork Fri Nov 3 06:15:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jeffery X-Patchwork-Id: 161161 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp830955vqu; Thu, 2 Nov 2023 23:16:45 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEBm4HYd5I7BPsrB072qEtBvW4qeDg5wR9520n/IbrCubqH9U3Fq2mcr8LmBr6Lj2Hb4wic X-Received: by 2002:a17:90b:3597:b0:27d:880d:8645 with SMTP id mm23-20020a17090b359700b0027d880d8645mr17411319pjb.49.1698992205733; Thu, 02 Nov 2023 23:16:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698992205; cv=none; d=google.com; s=arc-20160816; b=bA46UraUH7dMRz5EVJt5t1LdyHtEW1AL6errlTVkUrQuHTlJDvAKMhL17cSBmz+JIH LqHGRStu1s09b8ZNw7sGx6EG1DCTIi5TBP31fjid9rkgxiZQMT/bPHZPV6ZUsm954k9X shuM2NS1V2esEUTRNfOjeO4xs/hh/KtbzVNkHsc916hM0zG6fqZgUK5jqwGQ+1O40s+u 8LOxhd/o8Nhc1Th0Y/IvzHBBuaBQqjzVUi9Y/teUmjitz7TSPJgx8xpJ3s05Soa/pR1T snomf7T/OpEgyB4ItrgtgHwCtICI8v5j5VL5QpR5DqCxZRlCSVOX7/CCW6bfgLvocVLJ mXyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=hYHyullC4OIb5ueKBUtHARoDjsv8sC0z5UpD23psbTg=; fh=J5fZGSGUmoD0NT+ZfFkgng7qPhvONoMGdVOrNctU85A=; b=pjRu+04xAtiQU35Y+oukkDWbq2vP9EqaOA3foIEsqA4cpYlr9Hm0MYvZwYQ+VkUaxK t5SZUOFa2abjfCTuuVjNivTyJ0qMnGij4Af4owpsnWt2D4sNC199E7fovcVTPkAXg4fj 4G57WknwIBshCMWScvj+lypJoUQFDkVYi0yI+xpUp69ahdHAErpmG3RmN9awNvgbwn7c 9r6jg7N+G5zpaGyhrEf+aV1GMQcI34A9tJf6kHhLakylC6u1uTvaKiYnJjW9+dJUSy6u r8/ZUSxKGMJWuePoruxvBeXM9R5kfcmJ9gckR1rW4gIv13ov8WTJP0tHgJs4Gs9IM3ku DDjw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=lKLQuGem; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id pg13-20020a17090b1e0d00b00277651787f1si1044371pjb.145.2023.11.02.23.16.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 23:16:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=lKLQuGem; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id B19B1811F927; Thu, 2 Nov 2023 23:16:05 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231220AbjKCGP6 (ORCPT + 36 others); Fri, 3 Nov 2023 02:15:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35424 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230314AbjKCGPs (ORCPT ); Fri, 3 Nov 2023 02:15:48 -0400 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E45B41B4 for ; Thu, 2 Nov 2023 23:15:41 -0700 (PDT) Received: from localhost.localdomain (ppp14-2-79-67.adl-apt-pir-bras31.tpg.internode.on.net [14.2.79.67]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id A4F7D201C3; Fri, 3 Nov 2023 14:15:39 +0800 (AWST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1698992140; bh=hYHyullC4OIb5ueKBUtHARoDjsv8sC0z5UpD23psbTg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=lKLQuGemKmw5voq2rUsfzBHn00UX+Y/HnEtbLYNqvN9CseaRxwuOjIHs7hHv9nU17 1E7Egh94J5i3ygDC9uJZktBIr99HafQqZVBDpCnlta1lT6Pvp8sFgZSnkr2aFDP8za zc7oTfZAGpYs9YOf6/q+NZPBnGwPPKhrBVPn+5ULR+8x0FHqFxWxAgD24g5SaHzGW3 zRjkqz+W+5VxcdrECFjyv/Ds8UsXttu2lfr3OKqezPbOCEV/rWM/I/3QPG9SE3b7Ku tW3yISYZM6PmsEguqM8j2YhbfC2qvWaZAumTj9iY2XLk1MaPNvyZeMq2Ydf3+A7WuR yyZQ9zdtGTn+Q== From: Andrew Jeffery To: minyard@acm.org, openipmi-developer@lists.sourceforge.net Cc: Andrew Jeffery , linux-kernel@vger.kernel.org, Jonathan.Cameron@Huawei.com, aladyshev22@gmail.com, jk@codeconstruct.com.au Subject: [PATCH 03/10] ipmi: kcs_bmc: Make kcs_bmc_update_event_mask() static Date: Fri, 3 Nov 2023 16:45:15 +1030 Message-Id: <20231103061522.1268637-4-andrew@codeconstruct.com.au> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231103061522.1268637-1-andrew@codeconstruct.com.au> References: <20231103061522.1268637-1-andrew@codeconstruct.com.au> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Thu, 02 Nov 2023 23:16:05 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781522450874365410 X-GMAIL-MSGID: 1781522450874365410 There were no users outside the subsystem core, so let's not expose it. Signed-off-by: Andrew Jeffery --- drivers/char/ipmi/kcs_bmc.c | 11 +++++------ drivers/char/ipmi/kcs_bmc_client.h | 2 -- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/char/ipmi/kcs_bmc.c b/drivers/char/ipmi/kcs_bmc.c index a429d9f8a7bf..1a827db8a465 100644 --- a/drivers/char/ipmi/kcs_bmc.c +++ b/drivers/char/ipmi/kcs_bmc.c @@ -68,6 +68,11 @@ irqreturn_t kcs_bmc_handle_event(struct kcs_bmc_device *kcs_bmc) } EXPORT_SYMBOL(kcs_bmc_handle_event); +static void kcs_bmc_update_event_mask(struct kcs_bmc_device *kcs_bmc, u8 mask, u8 events) +{ + kcs_bmc->ops->irq_mask_update(kcs_bmc, mask, events); +} + int kcs_bmc_enable_device(struct kcs_bmc_device *kcs_bmc, struct kcs_bmc_client *client) { int rc; @@ -178,12 +183,6 @@ void kcs_bmc_unregister_driver(struct kcs_bmc_driver *drv) } EXPORT_SYMBOL(kcs_bmc_unregister_driver); -void kcs_bmc_update_event_mask(struct kcs_bmc_device *kcs_bmc, u8 mask, u8 events) -{ - kcs_bmc->ops->irq_mask_update(kcs_bmc, mask, events); -} -EXPORT_SYMBOL(kcs_bmc_update_event_mask); - MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Haiyue Wang "); MODULE_AUTHOR("Andrew Jeffery "); diff --git a/drivers/char/ipmi/kcs_bmc_client.h b/drivers/char/ipmi/kcs_bmc_client.h index 6fdcde0a7169..814ad8e052ef 100644 --- a/drivers/char/ipmi/kcs_bmc_client.h +++ b/drivers/char/ipmi/kcs_bmc_client.h @@ -35,8 +35,6 @@ void kcs_bmc_unregister_driver(struct kcs_bmc_driver *drv); int kcs_bmc_enable_device(struct kcs_bmc_device *kcs_bmc, struct kcs_bmc_client *client); void kcs_bmc_disable_device(struct kcs_bmc_device *kcs_bmc, struct kcs_bmc_client *client); -void kcs_bmc_update_event_mask(struct kcs_bmc_device *kcs_bmc, u8 mask, u8 events); - u8 kcs_bmc_read_data(struct kcs_bmc_device *kcs_bmc); void kcs_bmc_write_data(struct kcs_bmc_device *kcs_bmc, u8 data); u8 kcs_bmc_read_status(struct kcs_bmc_device *kcs_bmc); From patchwork Fri Nov 3 06:15:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jeffery X-Patchwork-Id: 161166 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp831093vqu; Thu, 2 Nov 2023 23:17:14 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFC5Pea9rcAoUWhRHYu2nYdRbj3p6A1zILu/YJE9Z7SDtpwELF1GNOMuN8muy9O/86RgLgl X-Received: by 2002:a17:90a:b015:b0:280:1c25:b633 with SMTP id x21-20020a17090ab01500b002801c25b633mr14972228pjq.2.1698992234447; Thu, 02 Nov 2023 23:17:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698992234; cv=none; d=google.com; s=arc-20160816; b=QAuMl4IwAVwCKOUAUENlj7vrxIskTwQ6Bl0Mv6SLO9g9BqJvm+u5GWLwkBX3NQnLKd dzP/bfzDdVGfAK08YrDVN9pNeFuEZnQD2uEZzNx9rPjLOiVzvLH6tjDkqv59OZZbBc8J fKnabJwDRrcFbWxV0jvoRjO1OA4dO1mraj9c+WY81id5X1fRWxLcw70y/Z0cOnQmCZqh B+Yojwf7g1QBa/IEyjmPALVxCDly3WZNUcnfSenkFoQHZPKgDGxGII952JFG5WccBOC9 lZBw1vpuY/n3m01rmc1YS3ToBhXqlyRk7Sk5cVRoxcaqQ9vRl37zwV7t0g96d4Vh1C14 aICA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=gMOtRmTdZKiT17CY+VYm9GvQ641VhOnLGRnNlkCuGwQ=; fh=J5fZGSGUmoD0NT+ZfFkgng7qPhvONoMGdVOrNctU85A=; b=IdqJaFYQS51qDy0+4SFfPrOiNulVq7Zx95Rc4qRdVJYfxJymUL6w7fQXbEGUewFqWI RyexQ+D2w9g+d1ctCoBU7MOyc6CxIZ4kyUUl6N85N9ep4iKPZRdXPPEqTx5l047fd9/d +416/oMAMQ9s+MRAikupkucXPQ5UvS4Ii4i3qVXy8FW3qIwm90j7bpX63wUrUgKn3IO2 O9qNr2qRjx2kjHxzuWXlED/Ee201mCHjF7Vfp6aEWOns3J5Ym0ajp1VMViZz+7GQz/kl bNU0EMVgV4txBp6EW2hrChgugNU5acD7W95Oaid19uxktlG/ZeBjEEgts3HoxqJCTrL7 wmRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=XZs4h8Ub; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id d1-20020a17090ac24100b0027491203b43si1071285pjx.189.2023.11.02.23.17.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 23:17:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=XZs4h8Ub; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 98E6782698D8; Thu, 2 Nov 2023 23:17:07 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231345AbjKCGQA (ORCPT + 36 others); Fri, 3 Nov 2023 02:16:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35428 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229379AbjKCGPs (ORCPT ); Fri, 3 Nov 2023 02:15:48 -0400 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A86A1B5 for ; Thu, 2 Nov 2023 23:15:42 -0700 (PDT) Received: from localhost.localdomain (ppp14-2-79-67.adl-apt-pir-bras31.tpg.internode.on.net [14.2.79.67]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id 5786A20235; Fri, 3 Nov 2023 14:15:40 +0800 (AWST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1698992140; bh=gMOtRmTdZKiT17CY+VYm9GvQ641VhOnLGRnNlkCuGwQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=XZs4h8UbvvAYE97E+7Fsk/JgsmsXEo7Ih0IzeDoIw8NGNVrdIi234MrwI+ZXnqUX3 oUUat3f25yVPuAKyClcmDojd7I/yCowQkySkXmmvWNP5gO5xIuuyfhrvn0zzFMiBsJ CUz0Yo0GNK0M09QdftdYS3pmzGbnFLiw/fHHpQRjGLiwwxEBRIGa3n3kUcaGI+pNv7 EWOCRucSNmIJPDxyC4zxe9fy19s1JgdLLV7HT4K9udWPaVcYoxR78uYWYG0UY+JGRO 39WZmGBbBDJU7fIOBtj28+dx/BQpzleRYtvRmSeoaqVICZxEt+j5yxzIMQkWsH0W0V 5PnhydiC9df0w== From: Andrew Jeffery To: minyard@acm.org, openipmi-developer@lists.sourceforge.net Cc: Andrew Jeffery , linux-kernel@vger.kernel.org, Jonathan.Cameron@Huawei.com, aladyshev22@gmail.com, jk@codeconstruct.com.au Subject: [PATCH 04/10] ipmi: kcs_bmc: Make remove_device() callback return void Date: Fri, 3 Nov 2023 16:45:16 +1030 Message-Id: <20231103061522.1268637-5-andrew@codeconstruct.com.au> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231103061522.1268637-1-andrew@codeconstruct.com.au> References: <20231103061522.1268637-1-andrew@codeconstruct.com.au> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Thu, 02 Nov 2023 23:17:07 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781522480938137928 X-GMAIL-MSGID: 1781522480938137928 Don't pretend there's a valid failure path when there's not. Signed-off-by: Andrew Jeffery --- drivers/char/ipmi/kcs_bmc.c | 12 ++---------- drivers/char/ipmi/kcs_bmc_cdev_ipmi.c | 6 ++---- drivers/char/ipmi/kcs_bmc_client.h | 2 +- drivers/char/ipmi/kcs_bmc_serio.c | 6 ++---- 4 files changed, 7 insertions(+), 19 deletions(-) diff --git a/drivers/char/ipmi/kcs_bmc.c b/drivers/char/ipmi/kcs_bmc.c index 1a827db8a465..5a3f199241d2 100644 --- a/drivers/char/ipmi/kcs_bmc.c +++ b/drivers/char/ipmi/kcs_bmc.c @@ -135,15 +135,11 @@ EXPORT_SYMBOL(kcs_bmc_add_device); void kcs_bmc_remove_device(struct kcs_bmc_device *kcs_bmc) { struct kcs_bmc_driver *drv; - int rc; mutex_lock(&kcs_bmc_lock); list_del(&kcs_bmc->entry); list_for_each_entry(drv, &kcs_bmc_drivers, entry) { - rc = drv->ops->remove_device(kcs_bmc); - if (rc) - dev_err(kcs_bmc->dev, "Failed to remove chardev for KCS channel %d: %d", - kcs_bmc->channel, rc); + drv->ops->remove_device(kcs_bmc); } mutex_unlock(&kcs_bmc_lock); } @@ -169,15 +165,11 @@ EXPORT_SYMBOL(kcs_bmc_register_driver); void kcs_bmc_unregister_driver(struct kcs_bmc_driver *drv) { struct kcs_bmc_device *kcs_bmc; - int rc; mutex_lock(&kcs_bmc_lock); list_del(&drv->entry); list_for_each_entry(kcs_bmc, &kcs_bmc_devices, entry) { - rc = drv->ops->remove_device(kcs_bmc); - if (rc) - dev_err(kcs_bmc->dev, "Failed to remove driver for KCS channel %d: %d", - kcs_bmc->channel, rc); + drv->ops->remove_device(kcs_bmc); } mutex_unlock(&kcs_bmc_lock); } diff --git a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c index cf670e891966..0552a07d6775 100644 --- a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c +++ b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c @@ -512,7 +512,7 @@ static int kcs_bmc_ipmi_add_device(struct kcs_bmc_device *kcs_bmc) return 0; } -static int kcs_bmc_ipmi_remove_device(struct kcs_bmc_device *kcs_bmc) +static void kcs_bmc_ipmi_remove_device(struct kcs_bmc_device *kcs_bmc) { struct kcs_bmc_ipmi *priv = NULL, *pos; @@ -527,7 +527,7 @@ static int kcs_bmc_ipmi_remove_device(struct kcs_bmc_device *kcs_bmc) spin_unlock_irq(&kcs_bmc_ipmi_instances_lock); if (!priv) - return -ENODEV; + return; misc_deregister(&priv->miscdev); kcs_bmc_disable_device(priv->client.dev, &priv->client); @@ -535,8 +535,6 @@ static int kcs_bmc_ipmi_remove_device(struct kcs_bmc_device *kcs_bmc) devm_kfree(kcs_bmc->dev, priv->data_out); devm_kfree(kcs_bmc->dev, priv->data_in); devm_kfree(kcs_bmc->dev, priv); - - return 0; } static const struct kcs_bmc_driver_ops kcs_bmc_ipmi_driver_ops = { diff --git a/drivers/char/ipmi/kcs_bmc_client.h b/drivers/char/ipmi/kcs_bmc_client.h index 814ad8e052ef..1c0df184860d 100644 --- a/drivers/char/ipmi/kcs_bmc_client.h +++ b/drivers/char/ipmi/kcs_bmc_client.h @@ -10,7 +10,7 @@ struct kcs_bmc_driver_ops { int (*add_device)(struct kcs_bmc_device *kcs_bmc); - int (*remove_device)(struct kcs_bmc_device *kcs_bmc); + void (*remove_device)(struct kcs_bmc_device *kcs_bmc); }; struct kcs_bmc_driver { diff --git a/drivers/char/ipmi/kcs_bmc_serio.c b/drivers/char/ipmi/kcs_bmc_serio.c index 1793358be782..0320ea974e03 100644 --- a/drivers/char/ipmi/kcs_bmc_serio.c +++ b/drivers/char/ipmi/kcs_bmc_serio.c @@ -103,7 +103,7 @@ static int kcs_bmc_serio_add_device(struct kcs_bmc_device *kcs_bmc) return 0; } -static int kcs_bmc_serio_remove_device(struct kcs_bmc_device *kcs_bmc) +static void kcs_bmc_serio_remove_device(struct kcs_bmc_device *kcs_bmc) { struct kcs_bmc_serio *priv = NULL, *pos; @@ -118,7 +118,7 @@ static int kcs_bmc_serio_remove_device(struct kcs_bmc_device *kcs_bmc) spin_unlock_irq(&kcs_bmc_serio_instances_lock); if (!priv) - return -ENODEV; + return; /* kfree()s priv->port via put_device() */ serio_unregister_port(priv->port); @@ -127,8 +127,6 @@ static int kcs_bmc_serio_remove_device(struct kcs_bmc_device *kcs_bmc) kcs_bmc_disable_device(kcs_bmc, &priv->client); devm_kfree(priv->client.dev->dev, priv); - - return 0; } static const struct kcs_bmc_driver_ops kcs_bmc_serio_driver_ops = { From patchwork Fri Nov 3 06:15:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jeffery X-Patchwork-Id: 161162 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp830965vqu; Thu, 2 Nov 2023 23:16:48 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEZ6QwFEypezT7dgut7XNaTeBmBDs1ZKqD/I2EYImc85WbvPgvxYxHtCB/h78X2oBpemyA9 X-Received: by 2002:a05:6a20:2590:b0:16b:977d:f7cf with SMTP id k16-20020a056a20259000b0016b977df7cfmr25179983pzd.36.1698992208623; Thu, 02 Nov 2023 23:16:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698992208; cv=none; d=google.com; s=arc-20160816; b=q7eZ+dLbsvBeKTi6/3qvVubhqJzxmHLm5V7zbVhqGZIUnsGHkjNeMXYQOPE/CXw3IB vdLZcXgbJDovrnsjseS5VtlUZnFsJ6sdcUWajjbZh7TSf5uoecG6cvZg0VmyxORfETPS Vo+l7snCSLagdWZetkmBbgSp+5TdeSU8Tt+AURWUCXawTlLiXqJxo10s47RuvC0GpThx IImry0SAOlLSv2N25oNC5D5B+9fWhWSdCW/J7xdDuTMlhS6Xlw4yXsE6aSBLpC56HANN /2U65KzhkdipLYR4Y0cOVOPdndiYNWjgr785LQ7or/2GYYTTz1VwNfJ3stywspDlQmmQ zfIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=JPTRq9Jl+Y4VB3JZP1WhZQy1wlhfWVs9rePT+5FbziQ=; fh=J5fZGSGUmoD0NT+ZfFkgng7qPhvONoMGdVOrNctU85A=; b=X78tbhGnIz1mONZxpPMXoBd36aja97mv8dRU0TlKu0o3SFLcSMZQ5f8MQaw1oAjLCQ B7FrKzM8r+Fc3ma7MiXuzi+eq7+zFwOHng3UvRtXR/3VOKQiYccmv3x0+0HXJfsEQn63 1zC17V4z8g5GNQqRk5jUMObkMHNCY2MsmBm95tQ/mjWmt9Ynl7Giw8D1U4+ViUTj/twL xECHaKdZLaXYzoc8s1UMuQpuVnLTHiQByBHnvZJteKTcJUofphzft2tB5jpIXSPJ2lOL 9yUX7i3nsN1oRn1o4AP+5wrtSzJXB3gFz2YFOanIcMV1cgexUyKDRhwO3DnPG/S7Czh/ VH5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=Zlfwla4E; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id f11-20020a056a00228b00b006b91e0fc586si1016426pfe.66.2023.11.02.23.16.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 23:16:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=Zlfwla4E; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id ADFDA803417B; Thu, 2 Nov 2023 23:16:33 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231587AbjKCGQE (ORCPT + 36 others); Fri, 3 Nov 2023 02:16:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35434 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230435AbjKCGPv (ORCPT ); Fri, 3 Nov 2023 02:15:51 -0400 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7BF3019D for ; Thu, 2 Nov 2023 23:15:45 -0700 (PDT) Received: from localhost.localdomain (ppp14-2-79-67.adl-apt-pir-bras31.tpg.internode.on.net [14.2.79.67]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id 14DC820236; Fri, 3 Nov 2023 14:15:41 +0800 (AWST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1698992141; bh=JPTRq9Jl+Y4VB3JZP1WhZQy1wlhfWVs9rePT+5FbziQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Zlfwla4E/f4EJTDai63sNZ3bd0TkhzfAogO5+aU8p+6OajJE9sQ9osUOyfMWoTbc0 Gh+aaXO3wXE3Vu/XmmuJMvn3FQWUcLTaRAXJEApVpH1s9A89ykWLCrHyranWCyzVw0 BujQMQYrBL0qDH7u1B78w98UWXZa7VA31FsaACS5NIYpbxkWq/YR1hpXMf0PRaQR/k tU6J1PQwtVZ4i0R4Cq28f3UCvu8ZknVj5hrGY39jlcJYb9nPA/3fEZqgiJkiafLPyc 9lCgr02Nnr6aNGjx85Lj1aqk/pzOhGxIKoYBfd6m+ewPEk3dsJahltezymIyQ61Soq pRVbrFh2cQqZw== From: Andrew Jeffery To: minyard@acm.org, openipmi-developer@lists.sourceforge.net Cc: Andrew Jeffery , linux-kernel@vger.kernel.org, Jonathan.Cameron@Huawei.com, aladyshev22@gmail.com, jk@codeconstruct.com.au Subject: [PATCH 05/10] ipmi: kcs_bmc: Define client actions in terms of kcs_bmc_client Date: Fri, 3 Nov 2023 16:45:17 +1030 Message-Id: <20231103061522.1268637-6-andrew@codeconstruct.com.au> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231103061522.1268637-1-andrew@codeconstruct.com.au> References: <20231103061522.1268637-1-andrew@codeconstruct.com.au> MIME-Version: 1.0 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Thu, 02 Nov 2023 23:16:33 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781522454191553220 X-GMAIL-MSGID: 1781522454191553220 Operations such as reading and writing from hardware and updating the events of interest are operations in which the client is interested, but are applied to the device. Strengthen the concept of the client in the subsystem and clean up some call-sites by translating between the client and device types in the core of the KCS subsystem. Signed-off-by: Andrew Jeffery --- drivers/char/ipmi/kcs_bmc.c | 67 ++++++++++++++++++--------- drivers/char/ipmi/kcs_bmc_cdev_ipmi.c | 50 ++++++++++---------- drivers/char/ipmi/kcs_bmc_client.h | 15 +++--- drivers/char/ipmi/kcs_bmc_serio.c | 10 ++-- 4 files changed, 81 insertions(+), 61 deletions(-) diff --git a/drivers/char/ipmi/kcs_bmc.c b/drivers/char/ipmi/kcs_bmc.c index 5a3f199241d2..d70e503041bd 100644 --- a/drivers/char/ipmi/kcs_bmc.c +++ b/drivers/char/ipmi/kcs_bmc.c @@ -22,33 +22,53 @@ static LIST_HEAD(kcs_bmc_drivers); /* Consumer data access */ -u8 kcs_bmc_read_data(struct kcs_bmc_device *kcs_bmc) +static void kcs_bmc_client_validate(struct kcs_bmc_client *client) { - return kcs_bmc->ops->io_inputb(kcs_bmc, kcs_bmc->ioreg.idr); + WARN_ONCE(client != READ_ONCE(client->dev->client), "KCS client confusion detected"); +} + +u8 kcs_bmc_read_data(struct kcs_bmc_client *client) +{ + struct kcs_bmc_device *dev = client->dev; + + kcs_bmc_client_validate(client); + return dev->ops->io_inputb(dev, dev->ioreg.idr); } EXPORT_SYMBOL(kcs_bmc_read_data); -void kcs_bmc_write_data(struct kcs_bmc_device *kcs_bmc, u8 data) +void kcs_bmc_write_data(struct kcs_bmc_client *client, u8 data) { - kcs_bmc->ops->io_outputb(kcs_bmc, kcs_bmc->ioreg.odr, data); + struct kcs_bmc_device *dev = client->dev; + + kcs_bmc_client_validate(client); + dev->ops->io_outputb(dev, dev->ioreg.odr, data); } EXPORT_SYMBOL(kcs_bmc_write_data); -u8 kcs_bmc_read_status(struct kcs_bmc_device *kcs_bmc) +u8 kcs_bmc_read_status(struct kcs_bmc_client *client) { - return kcs_bmc->ops->io_inputb(kcs_bmc, kcs_bmc->ioreg.str); + struct kcs_bmc_device *dev = client->dev; + + kcs_bmc_client_validate(client); + return dev->ops->io_inputb(dev, dev->ioreg.str); } EXPORT_SYMBOL(kcs_bmc_read_status); -void kcs_bmc_write_status(struct kcs_bmc_device *kcs_bmc, u8 data) +void kcs_bmc_write_status(struct kcs_bmc_client *client, u8 data) { - kcs_bmc->ops->io_outputb(kcs_bmc, kcs_bmc->ioreg.str, data); + struct kcs_bmc_device *dev = client->dev; + + kcs_bmc_client_validate(client); + dev->ops->io_outputb(dev, dev->ioreg.str, data); } EXPORT_SYMBOL(kcs_bmc_write_status); -void kcs_bmc_update_status(struct kcs_bmc_device *kcs_bmc, u8 mask, u8 val) +void kcs_bmc_update_status(struct kcs_bmc_client *client, u8 mask, u8 val) { - kcs_bmc->ops->io_updateb(kcs_bmc, kcs_bmc->ioreg.str, mask, val); + struct kcs_bmc_device *dev = client->dev; + + kcs_bmc_client_validate(client); + dev->ops->io_updateb(dev, dev->ioreg.str, mask, val); } EXPORT_SYMBOL(kcs_bmc_update_status); @@ -73,36 +93,39 @@ static void kcs_bmc_update_event_mask(struct kcs_bmc_device *kcs_bmc, u8 mask, u kcs_bmc->ops->irq_mask_update(kcs_bmc, mask, events); } -int kcs_bmc_enable_device(struct kcs_bmc_device *kcs_bmc, struct kcs_bmc_client *client) +int kcs_bmc_enable_device(struct kcs_bmc_client *client) { + struct kcs_bmc_device *dev = client->dev; int rc; - spin_lock_irq(&kcs_bmc->lock); - if (kcs_bmc->client) { + spin_lock_irq(&dev->lock); + if (dev->client) { rc = -EBUSY; } else { u8 mask = KCS_BMC_EVENT_TYPE_IBF; - kcs_bmc->client = client; - kcs_bmc_update_event_mask(kcs_bmc, mask, mask); + dev->client = client; + kcs_bmc_update_event_mask(dev, mask, mask); rc = 0; } - spin_unlock_irq(&kcs_bmc->lock); + spin_unlock_irq(&dev->lock); return rc; } EXPORT_SYMBOL(kcs_bmc_enable_device); -void kcs_bmc_disable_device(struct kcs_bmc_device *kcs_bmc, struct kcs_bmc_client *client) +void kcs_bmc_disable_device(struct kcs_bmc_client *client) { - spin_lock_irq(&kcs_bmc->lock); - if (client == kcs_bmc->client) { + struct kcs_bmc_device *dev = client->dev; + + spin_lock_irq(&dev->lock); + if (client == dev->client) { u8 mask = KCS_BMC_EVENT_TYPE_IBF | KCS_BMC_EVENT_TYPE_OBE; - kcs_bmc_update_event_mask(kcs_bmc, mask, 0); - kcs_bmc->client = NULL; + kcs_bmc_update_event_mask(dev, mask, 0); + dev->client = NULL; } - spin_unlock_irq(&kcs_bmc->lock); + spin_unlock_irq(&dev->lock); } EXPORT_SYMBOL(kcs_bmc_disable_device); diff --git a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c index 0552a07d6775..712a80c27060 100644 --- a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c +++ b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c @@ -121,14 +121,14 @@ enum kcs_states { static inline void set_state(struct kcs_bmc_ipmi *priv, u8 state) { - kcs_bmc_update_status(priv->client.dev, KCS_STATUS_STATE_MASK, KCS_STATUS_STATE(state)); + kcs_bmc_update_status(&priv->client, KCS_STATUS_STATE_MASK, KCS_STATUS_STATE(state)); } static void kcs_bmc_ipmi_force_abort(struct kcs_bmc_ipmi *priv) { set_state(priv, ERROR_STATE); - kcs_bmc_read_data(priv->client.dev); - kcs_bmc_write_data(priv->client.dev, KCS_ZERO_DATA); + kcs_bmc_read_data(&priv->client); + kcs_bmc_write_data(&priv->client, KCS_ZERO_DATA); priv->phase = KCS_PHASE_ERROR; priv->data_in_avail = false; @@ -137,11 +137,9 @@ static void kcs_bmc_ipmi_force_abort(struct kcs_bmc_ipmi *priv) static void kcs_bmc_ipmi_handle_data(struct kcs_bmc_ipmi *priv) { - struct kcs_bmc_device *dev; + struct kcs_bmc_client *client = &priv->client; u8 data; - dev = priv->client.dev; - switch (priv->phase) { case KCS_PHASE_WRITE_START: priv->phase = KCS_PHASE_WRITE_DATA; @@ -150,8 +148,8 @@ static void kcs_bmc_ipmi_handle_data(struct kcs_bmc_ipmi *priv) case KCS_PHASE_WRITE_DATA: if (priv->data_in_idx < KCS_MSG_BUFSIZ) { set_state(priv, WRITE_STATE); - kcs_bmc_write_data(dev, KCS_ZERO_DATA); - priv->data_in[priv->data_in_idx++] = kcs_bmc_read_data(dev); + kcs_bmc_write_data(client, KCS_ZERO_DATA); + priv->data_in[priv->data_in_idx++] = kcs_bmc_read_data(client); } else { kcs_bmc_ipmi_force_abort(priv); priv->error = KCS_LENGTH_ERROR; @@ -161,7 +159,7 @@ static void kcs_bmc_ipmi_handle_data(struct kcs_bmc_ipmi *priv) case KCS_PHASE_WRITE_END_CMD: if (priv->data_in_idx < KCS_MSG_BUFSIZ) { set_state(priv, READ_STATE); - priv->data_in[priv->data_in_idx++] = kcs_bmc_read_data(dev); + priv->data_in[priv->data_in_idx++] = kcs_bmc_read_data(client); priv->phase = KCS_PHASE_WRITE_DONE; priv->data_in_avail = true; wake_up_interruptible(&priv->queue); @@ -175,33 +173,33 @@ static void kcs_bmc_ipmi_handle_data(struct kcs_bmc_ipmi *priv) if (priv->data_out_idx == priv->data_out_len) set_state(priv, IDLE_STATE); - data = kcs_bmc_read_data(dev); + data = kcs_bmc_read_data(client); if (data != KCS_CMD_READ_BYTE) { set_state(priv, ERROR_STATE); - kcs_bmc_write_data(dev, KCS_ZERO_DATA); + kcs_bmc_write_data(client, KCS_ZERO_DATA); break; } if (priv->data_out_idx == priv->data_out_len) { - kcs_bmc_write_data(dev, KCS_ZERO_DATA); + kcs_bmc_write_data(client, KCS_ZERO_DATA); priv->phase = KCS_PHASE_IDLE; break; } - kcs_bmc_write_data(dev, priv->data_out[priv->data_out_idx++]); + kcs_bmc_write_data(client, priv->data_out[priv->data_out_idx++]); break; case KCS_PHASE_ABORT_ERROR1: set_state(priv, READ_STATE); - kcs_bmc_read_data(dev); - kcs_bmc_write_data(dev, priv->error); + kcs_bmc_read_data(client); + kcs_bmc_write_data(client, priv->error); priv->phase = KCS_PHASE_ABORT_ERROR2; break; case KCS_PHASE_ABORT_ERROR2: set_state(priv, IDLE_STATE); - kcs_bmc_read_data(dev); - kcs_bmc_write_data(dev, KCS_ZERO_DATA); + kcs_bmc_read_data(client); + kcs_bmc_write_data(client, KCS_ZERO_DATA); priv->phase = KCS_PHASE_IDLE; break; @@ -216,9 +214,9 @@ static void kcs_bmc_ipmi_handle_cmd(struct kcs_bmc_ipmi *priv) u8 cmd; set_state(priv, WRITE_STATE); - kcs_bmc_write_data(priv->client.dev, KCS_ZERO_DATA); + kcs_bmc_write_data(&priv->client, KCS_ZERO_DATA); - cmd = kcs_bmc_read_data(priv->client.dev); + cmd = kcs_bmc_read_data(&priv->client); switch (cmd) { case KCS_CMD_WRITE_START: priv->phase = KCS_PHASE_WRITE_START; @@ -269,7 +267,7 @@ static irqreturn_t kcs_bmc_ipmi_event(struct kcs_bmc_client *client) spin_lock(&priv->lock); - status = kcs_bmc_read_status(client->dev); + status = kcs_bmc_read_status(client); if (status & KCS_STATUS_IBF) { if (status & KCS_STATUS_CMD_DAT) kcs_bmc_ipmi_handle_cmd(priv); @@ -299,7 +297,7 @@ static int kcs_bmc_ipmi_open(struct inode *inode, struct file *filp) { struct kcs_bmc_ipmi *priv = to_kcs_bmc(filp); - return kcs_bmc_enable_device(priv->client.dev, &priv->client); + return kcs_bmc_enable_device(&priv->client); } static __poll_t kcs_bmc_ipmi_poll(struct file *filp, poll_table *wait) @@ -402,7 +400,7 @@ static ssize_t kcs_bmc_ipmi_write(struct file *filp, const char __user *buf, priv->data_out_idx = 1; priv->data_out_len = count; memcpy(priv->data_out, priv->kbuffer, count); - kcs_bmc_write_data(priv->client.dev, priv->data_out[0]); + kcs_bmc_write_data(&priv->client, priv->data_out[0]); ret = count; } else { ret = -EINVAL; @@ -425,11 +423,11 @@ static long kcs_bmc_ipmi_ioctl(struct file *filp, unsigned int cmd, switch (cmd) { case IPMI_BMC_IOCTL_SET_SMS_ATN: - kcs_bmc_update_status(priv->client.dev, KCS_STATUS_SMS_ATN, KCS_STATUS_SMS_ATN); + kcs_bmc_update_status(&priv->client, KCS_STATUS_SMS_ATN, KCS_STATUS_SMS_ATN); break; case IPMI_BMC_IOCTL_CLEAR_SMS_ATN: - kcs_bmc_update_status(priv->client.dev, KCS_STATUS_SMS_ATN, 0); + kcs_bmc_update_status(&priv->client, KCS_STATUS_SMS_ATN, 0); break; case IPMI_BMC_IOCTL_FORCE_ABORT: @@ -451,7 +449,7 @@ static int kcs_bmc_ipmi_release(struct inode *inode, struct file *filp) struct kcs_bmc_ipmi *priv = to_kcs_bmc(filp); kcs_bmc_ipmi_force_abort(priv); - kcs_bmc_disable_device(priv->client.dev, &priv->client); + kcs_bmc_disable_device(&priv->client); return 0; } @@ -530,7 +528,7 @@ static void kcs_bmc_ipmi_remove_device(struct kcs_bmc_device *kcs_bmc) return; misc_deregister(&priv->miscdev); - kcs_bmc_disable_device(priv->client.dev, &priv->client); + kcs_bmc_disable_device(&priv->client); devm_kfree(kcs_bmc->dev, priv->kbuffer); devm_kfree(kcs_bmc->dev, priv->data_out); devm_kfree(kcs_bmc->dev, priv->data_in); diff --git a/drivers/char/ipmi/kcs_bmc_client.h b/drivers/char/ipmi/kcs_bmc_client.h index 1c0df184860d..1251e9669bcd 100644 --- a/drivers/char/ipmi/kcs_bmc_client.h +++ b/drivers/char/ipmi/kcs_bmc_client.h @@ -32,12 +32,11 @@ struct kcs_bmc_client { void kcs_bmc_register_driver(struct kcs_bmc_driver *drv); void kcs_bmc_unregister_driver(struct kcs_bmc_driver *drv); -int kcs_bmc_enable_device(struct kcs_bmc_device *kcs_bmc, struct kcs_bmc_client *client); -void kcs_bmc_disable_device(struct kcs_bmc_device *kcs_bmc, struct kcs_bmc_client *client); - -u8 kcs_bmc_read_data(struct kcs_bmc_device *kcs_bmc); -void kcs_bmc_write_data(struct kcs_bmc_device *kcs_bmc, u8 data); -u8 kcs_bmc_read_status(struct kcs_bmc_device *kcs_bmc); -void kcs_bmc_write_status(struct kcs_bmc_device *kcs_bmc, u8 data); -void kcs_bmc_update_status(struct kcs_bmc_device *kcs_bmc, u8 mask, u8 val); +int kcs_bmc_enable_device(struct kcs_bmc_client *client); +void kcs_bmc_disable_device(struct kcs_bmc_client *client); +u8 kcs_bmc_read_data(struct kcs_bmc_client *client); +void kcs_bmc_write_data(struct kcs_bmc_client *client, u8 data); +u8 kcs_bmc_read_status(struct kcs_bmc_client *client); +void kcs_bmc_write_status(struct kcs_bmc_client *client, u8 data); +void kcs_bmc_update_status(struct kcs_bmc_client *client, u8 mask, u8 val); #endif diff --git a/drivers/char/ipmi/kcs_bmc_serio.c b/drivers/char/ipmi/kcs_bmc_serio.c index 0320ea974e03..713e847bbc4e 100644 --- a/drivers/char/ipmi/kcs_bmc_serio.c +++ b/drivers/char/ipmi/kcs_bmc_serio.c @@ -36,10 +36,10 @@ static irqreturn_t kcs_bmc_serio_event(struct kcs_bmc_client *client) spin_lock(&priv->lock); - status = kcs_bmc_read_status(client->dev); + status = kcs_bmc_read_status(client); if (status & KCS_BMC_STR_IBF) - handled = serio_interrupt(priv->port, kcs_bmc_read_data(client->dev), 0); + handled = serio_interrupt(priv->port, kcs_bmc_read_data(client), 0); spin_unlock(&priv->lock); @@ -54,14 +54,14 @@ static int kcs_bmc_serio_open(struct serio *port) { struct kcs_bmc_serio *priv = port->port_data; - return kcs_bmc_enable_device(priv->client.dev, &priv->client); + return kcs_bmc_enable_device(&priv->client); } static void kcs_bmc_serio_close(struct serio *port) { struct kcs_bmc_serio *priv = port->port_data; - kcs_bmc_disable_device(priv->client.dev, &priv->client); + kcs_bmc_disable_device(&priv->client); } static DEFINE_SPINLOCK(kcs_bmc_serio_instances_lock); @@ -124,7 +124,7 @@ static void kcs_bmc_serio_remove_device(struct kcs_bmc_device *kcs_bmc) serio_unregister_port(priv->port); /* Ensure the IBF IRQ is disabled if we were the active client */ - kcs_bmc_disable_device(kcs_bmc, &priv->client); + kcs_bmc_disable_device(&priv->client); devm_kfree(priv->client.dev->dev, priv); } From patchwork Fri Nov 3 06:15:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jeffery X-Patchwork-Id: 161163 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp830974vqu; Thu, 2 Nov 2023 23:16:50 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF5sLJOJMhhcyv+6E9yeB8biAKZfrxUYvYYzwERKHmVUyGVxfN3lIyISVHp1PpSdf3DcmKd X-Received: by 2002:a05:6a21:3398:b0:181:a8ed:4898 with SMTP id yy24-20020a056a21339800b00181a8ed4898mr3262570pzb.38.1698992209744; Thu, 02 Nov 2023 23:16:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698992209; cv=none; d=google.com; s=arc-20160816; b=U1NtIySc5Trt9fKeWcBHP9uDqkdj9JWGmtcX9kYU308GsDfenD9yqfzRZqn4ajqRyQ g5OQT3N2ptgxvDB58r/UMUI/8QyT07nMfzUe91DcuwkSdud7y3DDriZCDKaf88r9iksY XRVHCVniTEddbwO9DO50eC7hmNA0FnJiBdTvZC7CAYI4LIL538C87X4J1YvBC2uX4FS4 Hq28kXYRli7CYhzclIwHvJAbse2pjFFkLN5W7WHDbEzmf3AqnyaZH8c3+dEF0E3k/zL2 4Jy2thbq98cJWZpra6GF5OyxUJ5jU9Nwq5HJz3uC0HhixVExZ1u93W3LfkObtB7o85ti 6lJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=2O/2ScZ3CygF88mlMVLZxyoGI2VWLFlNiAqo0wuDir4=; fh=J5fZGSGUmoD0NT+ZfFkgng7qPhvONoMGdVOrNctU85A=; b=05LGreoV/Kz1gflwi01mVy5OVDDvmrtXYGPHz7iexg1LzljdawR1QGC1tTQ95ZGy2f jAZcfOEcXp1GQfSwwpf6LAN8tPsqe0gCG9cw/y/6N32n2X3n82YHYeioyR5flDUyHt+D 1lYG5UJYzsCEicYAg1y0I8D+j23vg+AEbYHPn5KXSkytQWu+ViKRfj5JGIwrftHFahFf rG88aKkXVYUImLGO5Rk5peTd2+lXhNQ4LppFD9r7BLPoUsrjNj9e2tWw9dwSpGX+S+4L jJ0BsyUMioZ5y+a+UWDolf0X3m2PNIDBgyYYk7pH6H8IPoF0Fevw+AUSz9aQ5atIhlMp Y6Bg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=AcFz9XeO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id j12-20020a056a00174c00b0069100de2235si1008876pfc.187.2023.11.02.23.16.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 23:16:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=AcFz9XeO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 61A838250277; Thu, 2 Nov 2023 23:16:40 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231698AbjKCGQH (ORCPT + 36 others); Fri, 3 Nov 2023 02:16:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230479AbjKCGPw (ORCPT ); Fri, 3 Nov 2023 02:15:52 -0400 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 235571B6 for ; Thu, 2 Nov 2023 23:15:46 -0700 (PDT) Received: from localhost.localdomain (ppp14-2-79-67.adl-apt-pir-bras31.tpg.internode.on.net [14.2.79.67]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id C388F20237; Fri, 3 Nov 2023 14:15:41 +0800 (AWST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1698992142; bh=2O/2ScZ3CygF88mlMVLZxyoGI2VWLFlNiAqo0wuDir4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=AcFz9XeOEs1SJu6NZFof4sNJOFcXmYH7pSl9+PpGrtirABF4TXEE8e2cEI6KuyaUX l7n+TRiBmY0MmbMwg4ckH+EyzEavC8pTjH5XouUHEZtp4oXWzz/hrPpv+kNoJtNLvC sF2+WQYeymOHy+v3Z4ZXeADLh1Pp7gjx3N0EaKlXCFRtHQ/Ds6dmZtNoNCqSEXb6dD OmIY4hYYqe1MjHD99SHAaA24wMmfYwmDLyQWzsljnutWaomeYGZOWmWxK2xdkyf3wL 5hF2MI/2qYFDqYLJsfRmX7SXRob/NPPy2tt/VgRU5/CF6xpZoKnqg1usCfDk52o89g xF1JAfsXlGn1g== From: Andrew Jeffery To: minyard@acm.org, openipmi-developer@lists.sourceforge.net Cc: Andrew Jeffery , linux-kernel@vger.kernel.org, Jonathan.Cameron@Huawei.com, aladyshev22@gmail.com, jk@codeconstruct.com.au Subject: [PATCH 06/10] ipmi: kcs_bmc: Integrate buffers into driver struct Date: Fri, 3 Nov 2023 16:45:18 +1030 Message-Id: <20231103061522.1268637-7-andrew@codeconstruct.com.au> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231103061522.1268637-1-andrew@codeconstruct.com.au> References: <20231103061522.1268637-1-andrew@codeconstruct.com.au> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Thu, 02 Nov 2023 23:16:40 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781522455431884036 X-GMAIL-MSGID: 1781522455431884036 Consolidate several necessary allocations into one to reduce the number of possible error paths. Signed-off-by: Andrew Jeffery --- drivers/char/ipmi/kcs_bmc_cdev_ipmi.c | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c index 712a80c27060..45ac930172ec 100644 --- a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c +++ b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c @@ -66,6 +66,10 @@ enum kcs_ipmi_errors { KCS_UNSPECIFIED_ERROR = 0xFF }; +#define DEVICE_NAME "ipmi-kcs" +#define KCS_MSG_BUFSIZ 1000 +#define KCS_ZERO_DATA 0 + struct kcs_bmc_ipmi { struct list_head entry; @@ -79,24 +83,18 @@ struct kcs_bmc_ipmi { wait_queue_head_t queue; bool data_in_avail; int data_in_idx; - u8 *data_in; + u8 data_in[KCS_MSG_BUFSIZ]; int data_out_idx; int data_out_len; - u8 *data_out; + u8 data_out[KCS_MSG_BUFSIZ]; struct mutex mutex; - u8 *kbuffer; + u8 kbuffer[KCS_MSG_BUFSIZ]; struct miscdevice miscdev; }; -#define DEVICE_NAME "ipmi-kcs" - -#define KCS_MSG_BUFSIZ 1000 - -#define KCS_ZERO_DATA 0 - /* IPMI 2.0 - Table 9-1, KCS Interface Status Register Bits */ #define KCS_STATUS_STATE(state) (state << 6) #define KCS_STATUS_STATE_MASK GENMASK(7, 6) @@ -478,19 +476,15 @@ static int kcs_bmc_ipmi_add_device(struct kcs_bmc_device *kcs_bmc) spin_lock_init(&priv->lock); mutex_init(&priv->mutex); - init_waitqueue_head(&priv->queue); priv->client.dev = kcs_bmc; priv->client.ops = &kcs_bmc_ipmi_client_ops; - priv->data_in = devm_kmalloc(kcs_bmc->dev, KCS_MSG_BUFSIZ, GFP_KERNEL); - priv->data_out = devm_kmalloc(kcs_bmc->dev, KCS_MSG_BUFSIZ, GFP_KERNEL); - priv->kbuffer = devm_kmalloc(kcs_bmc->dev, KCS_MSG_BUFSIZ, GFP_KERNEL); priv->miscdev.minor = MISC_DYNAMIC_MINOR; priv->miscdev.name = devm_kasprintf(kcs_bmc->dev, GFP_KERNEL, "%s%u", DEVICE_NAME, kcs_bmc->channel); - if (!priv->data_in || !priv->data_out || !priv->kbuffer || !priv->miscdev.name) + if (!priv->miscdev.name) return -EINVAL; priv->miscdev.fops = &kcs_bmc_ipmi_fops; @@ -529,9 +523,6 @@ static void kcs_bmc_ipmi_remove_device(struct kcs_bmc_device *kcs_bmc) misc_deregister(&priv->miscdev); kcs_bmc_disable_device(&priv->client); - devm_kfree(kcs_bmc->dev, priv->kbuffer); - devm_kfree(kcs_bmc->dev, priv->data_out); - devm_kfree(kcs_bmc->dev, priv->data_in); devm_kfree(kcs_bmc->dev, priv); } From patchwork Fri Nov 3 06:15:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jeffery X-Patchwork-Id: 161164 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp830980vqu; Thu, 2 Nov 2023 23:16:50 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG7F3AT2lH+4sEjbVLFfT0v74LTgDTVGUW2YF5/EHgy74XFoIPxsoIyQTNvYt5t7/iw8MZG X-Received: by 2002:a05:6a20:3d26:b0:162:d056:9f52 with SMTP id y38-20020a056a203d2600b00162d0569f52mr25327287pzi.14.1698992210329; Thu, 02 Nov 2023 23:16:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698992210; cv=none; d=google.com; s=arc-20160816; b=xgljEa3SEREMyPRApbIUCrZrthzR7ZgGXmnCfRyhSORSvnM2mZOEeUuSc6q29S3gzS MTMnxudjV2IY+Oh837y23XamlqQbk1ybZfjAIBRfdoRb7NWcNomuY0wllp4JstXQl2Jw poQOeYf90kq6tH5eIvOf1XMwrrZkqkQMKdNqH9gGeT8SWGDUvvM/6YkHusdjpr9ZdXx0 BXcDElmlIA+4IRkVd4wHGITFT22y+Bv2nCPzGpQetTPl9d7rcUo2gS1A5Q8wFMK2xzAB 9UXz6Iy03x2R3WRUGOXYviA3Buy3ZciYbkqCo3TA6ZRBeqJxIVfeEZ1Xa5CaV/OjoYOv AJiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=GGoKlYnNvXC2BTeqK17rcaRkc8buHyC3L9pFQJ9S1nU=; fh=J5fZGSGUmoD0NT+ZfFkgng7qPhvONoMGdVOrNctU85A=; b=H7vSeNplvZ9+jEeEqtGKi1g4r0gDWW2sKsnKABBFZOHrQDo+YN/JFs0Jc/4w7gHHWM WmaIPk76sZN97UvlarcF0chXnHsyoHYc4fEOOPDZW+P+yEQ4nDN24mtGqYF5/QqiUVPK yj0CKsGZglXdbwHTDlZJ4iB/E5A6f1GLsupgFnrOaf1w8Q5HhBpRneqIkKmdiOU7MFbu /sr4v8P2468o7J0mhob60doEy6mp+VcCKZlmQZF0YoIMBYohLcJmIGeeXim+hpp5U0jT 0Z8czzQp/m7Y7kPovSVK5NlNqTMjmQo+x9YS2VudmePAVvRxYL6V2VRFAyDm3nBebcGV HHTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=ZJnq4a3Y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id nv14-20020a17090b1b4e00b0027cef9ad081si1146928pjb.164.2023.11.02.23.16.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 23:16:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=ZJnq4a3Y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id A964A8311BD1; Thu, 2 Nov 2023 23:16:21 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231838AbjKCGQJ (ORCPT + 36 others); Fri, 3 Nov 2023 02:16:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35452 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230375AbjKCGPy (ORCPT ); Fri, 3 Nov 2023 02:15:54 -0400 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1E1F31AD for ; Thu, 2 Nov 2023 23:15:48 -0700 (PDT) Received: from localhost.localdomain (ppp14-2-79-67.adl-apt-pir-bras31.tpg.internode.on.net [14.2.79.67]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id 7D4A620239; Fri, 3 Nov 2023 14:15:42 +0800 (AWST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1698992143; bh=GGoKlYnNvXC2BTeqK17rcaRkc8buHyC3L9pFQJ9S1nU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ZJnq4a3YRZSxvojAQk9umAAuupbrSi5V7STrRJp5mmCmvT7wQCI+5IElH4GMD8D0r SGmdB/ug4tocPNv9AUKUP/+36S8hRF1olkq6rdWBwp+uP6xrSIpl455UblT3YJzN3N aNh/Oi9hE8V30J3hzE2mr8yO+BK3BWfeBWGcSaenjtsWbk2j8KIg0S79zqZc0EcPyR wN+xuCv1Vu0gmALBqr5SzPS5QnUmDaqlrQm5H5hscGbqVfpNmqPZGsNyu/uYGch9b8 FRE+HN87DyNJHRC+vQHEwrXox1lI2y5jDN7aGhkTnqrbqTuX9kNDbDm8meS7unlUZP IOxW5OkCHBOGw== From: Andrew Jeffery To: minyard@acm.org, openipmi-developer@lists.sourceforge.net Cc: Andrew Jeffery , linux-kernel@vger.kernel.org, Jonathan.Cameron@Huawei.com, aladyshev22@gmail.com, jk@codeconstruct.com.au Subject: [PATCH 07/10] ipmi: kcs_bmc: Disassociate client from device lifetimes Date: Fri, 3 Nov 2023 16:45:19 +1030 Message-Id: <20231103061522.1268637-8-andrew@codeconstruct.com.au> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231103061522.1268637-1-andrew@codeconstruct.com.au> References: <20231103061522.1268637-1-andrew@codeconstruct.com.au> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Thu, 02 Nov 2023 23:16:21 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781522455871465439 X-GMAIL-MSGID: 1781522455871465439 KCS client modules may be removed by actions unrelated to KCS devices. As usual, removing a KCS client module requires unbinding all client instances from the underlying devices to prevent further use of the code. Previously, KCS client resource lifetimes were tied to the underlying KCS device instance with the use of `devm_k[mz]alloc()` APIs. This requires the use of `devm_free()` as a consequence. It's necessary to scrutinise use of explicit `devm_free()`s because they generally indicate there's a concerning corner-case in play, but that's not really the case here. Switch to explicit kmalloc()/kfree() to align expectations with the intent of the code. Signed-off-by: Andrew Jeffery --- drivers/char/ipmi/kcs_bmc_cdev_ipmi.c | 28 ++++++++++++++++++--------- drivers/char/ipmi/kcs_bmc_serio.c | 20 ++++++++++++------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c index 45ac930172ec..98f231f24c26 100644 --- a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c +++ b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c @@ -470,7 +470,7 @@ static int kcs_bmc_ipmi_add_device(struct kcs_bmc_device *kcs_bmc) struct kcs_bmc_ipmi *priv; int rc; - priv = devm_kzalloc(kcs_bmc->dev, sizeof(*priv), GFP_KERNEL); + priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; @@ -482,26 +482,35 @@ static int kcs_bmc_ipmi_add_device(struct kcs_bmc_device *kcs_bmc) priv->client.ops = &kcs_bmc_ipmi_client_ops; priv->miscdev.minor = MISC_DYNAMIC_MINOR; - priv->miscdev.name = devm_kasprintf(kcs_bmc->dev, GFP_KERNEL, "%s%u", DEVICE_NAME, - kcs_bmc->channel); - if (!priv->miscdev.name) - return -EINVAL; + priv->miscdev.name = kasprintf(GFP_KERNEL, "%s%u", DEVICE_NAME, kcs_bmc->channel); + if (!priv->miscdev.name) { + rc = -ENOMEM; + goto cleanup_priv; + } priv->miscdev.fops = &kcs_bmc_ipmi_fops; rc = misc_register(&priv->miscdev); if (rc) { - dev_err(kcs_bmc->dev, "Unable to register device: %d\n", rc); - return rc; + pr_err("Unable to register device: %d\n", rc); + goto cleanup_miscdev_name; } spin_lock_irq(&kcs_bmc_ipmi_instances_lock); list_add(&priv->entry, &kcs_bmc_ipmi_instances); spin_unlock_irq(&kcs_bmc_ipmi_instances_lock); - dev_info(kcs_bmc->dev, "Initialised IPMI client for channel %d", kcs_bmc->channel); + pr_info("Initialised IPMI client for channel %d\n", kcs_bmc->channel); return 0; + +cleanup_miscdev_name: + kfree(priv->miscdev.name); + +cleanup_priv: + kfree(priv); + + return rc; } static void kcs_bmc_ipmi_remove_device(struct kcs_bmc_device *kcs_bmc) @@ -523,7 +532,8 @@ static void kcs_bmc_ipmi_remove_device(struct kcs_bmc_device *kcs_bmc) misc_deregister(&priv->miscdev); kcs_bmc_disable_device(&priv->client); - devm_kfree(kcs_bmc->dev, priv); + kfree(priv->miscdev.name); + kfree(priv); } static const struct kcs_bmc_driver_ops kcs_bmc_ipmi_driver_ops = { diff --git a/drivers/char/ipmi/kcs_bmc_serio.c b/drivers/char/ipmi/kcs_bmc_serio.c index 713e847bbc4e..0a68c76da955 100644 --- a/drivers/char/ipmi/kcs_bmc_serio.c +++ b/drivers/char/ipmi/kcs_bmc_serio.c @@ -71,15 +71,18 @@ static int kcs_bmc_serio_add_device(struct kcs_bmc_device *kcs_bmc) { struct kcs_bmc_serio *priv; struct serio *port; + int rc; - priv = devm_kzalloc(kcs_bmc->dev, sizeof(*priv), GFP_KERNEL); + priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; /* Use kzalloc() as the allocation is cleaned up with kfree() via serio_unregister_port() */ port = kzalloc(sizeof(*port), GFP_KERNEL); - if (!port) - return -ENOMEM; + if (!port) { + rc = -ENOMEM; + goto cleanup_priv; + } port->id.type = SERIO_8042; port->open = kcs_bmc_serio_open; @@ -98,9 +101,14 @@ static int kcs_bmc_serio_add_device(struct kcs_bmc_device *kcs_bmc) serio_register_port(port); - dev_info(kcs_bmc->dev, "Initialised serio client for channel %d", kcs_bmc->channel); + pr_info("Initialised serio client for channel %d\n", kcs_bmc->channel); return 0; + +cleanup_priv: + kfree(priv); + + return rc; } static void kcs_bmc_serio_remove_device(struct kcs_bmc_device *kcs_bmc) @@ -122,11 +130,9 @@ static void kcs_bmc_serio_remove_device(struct kcs_bmc_device *kcs_bmc) /* kfree()s priv->port via put_device() */ serio_unregister_port(priv->port); - /* Ensure the IBF IRQ is disabled if we were the active client */ kcs_bmc_disable_device(&priv->client); - - devm_kfree(priv->client.dev->dev, priv); + kfree(priv); } static const struct kcs_bmc_driver_ops kcs_bmc_serio_driver_ops = { From patchwork Fri Nov 3 06:15:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jeffery X-Patchwork-Id: 161165 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp830995vqu; Thu, 2 Nov 2023 23:16:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGvnWJIstDSPBFcMzmIN5lAGQcavrMS76sqVB4KrGS5nToTf9IbS841EKmnB+29s9ldjIvr X-Received: by 2002:a17:90b:1bc5:b0:27d:a14c:eba6 with SMTP id oa5-20020a17090b1bc500b0027da14ceba6mr814830pjb.21.1698992214548; Thu, 02 Nov 2023 23:16:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698992214; cv=none; d=google.com; s=arc-20160816; b=hemP6ntgyLX2bh2xKFBFSyabw5/UaDM9ITx14/rkwR4KMWaRltdrBpwUSzJGSIuDi8 nyOyipLfAl5BxZslKL4KXJxeBkzZ6AjhFMJQYuRX6YrrMFJKbdnYhTQBEn+V8iwQHkQC 1EeJhNdbTDygJ8pFjDqO7DLy115XFe49gehE3a4dO+IxoUHQPOtpIzs3yRHXNz05Xx6g 6ZDyMxkFn0JRAiyQp7pWvGkTQ1yy+wNOd2YUnSdzGNhVJUCQAqJefoAX56cxEevz8uxO +MJOo9gNEOoFOp4YWo4J/mYRJjt5Ar0DgqfLxuY9IsWkLp6MNIPboh1xycLhpqoOeA8w aVyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=L7oKznO+QKSLgY6R8VCPalDfz9KTRfbux02CIZeP4js=; fh=J5fZGSGUmoD0NT+ZfFkgng7qPhvONoMGdVOrNctU85A=; b=HPjxFnMeaiFxp7Tni/VqU9C0ZtJsXES7ICtKFxBl27/xRPzHdwZKbn/d3zhtw43SQB sjbmm5fmPcxomk3TFyu/5LergHpnz9g+6/twvB3VgCICt8QJenETSa+AnEgnKVmSjmqM bl0p7i7bpNviw1RFouHJlPe0XUU5sb8afyGt75nVG1gXAuEgMivSL5bP00ME8o+Wc9hF dbddhzqFsvr/ha6YXzndw6mHr64fNPMDjhh97TI8mraPbu/cIWpMo7nw8ThLLWZtL+Fx fxTzR/tix14zjLjagsHi6as2RmuzTw4c8ho3/1K7MHzlJlpW8Sd1IRdtsD7Et79KpHCD kBzg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=UD7u725u; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id a18-20020a17090ad81200b0027d33155aefsi1004606pjv.99.2023.11.02.23.16.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 23:16:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=UD7u725u; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id B0F228313350; Thu, 2 Nov 2023 23:16:30 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231905AbjKCGQK (ORCPT + 36 others); Fri, 3 Nov 2023 02:16:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35468 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231129AbjKCGPy (ORCPT ); Fri, 3 Nov 2023 02:15:54 -0400 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1EA4C1B2 for ; Thu, 2 Nov 2023 23:15:48 -0700 (PDT) Received: from localhost.localdomain (ppp14-2-79-67.adl-apt-pir-bras31.tpg.internode.on.net [14.2.79.67]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id 396D22023A; Fri, 3 Nov 2023 14:15:43 +0800 (AWST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1698992143; bh=L7oKznO+QKSLgY6R8VCPalDfz9KTRfbux02CIZeP4js=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=UD7u725uFAOf/mmSOXBf/4JdTnF52QsZK+rN4Ab6LlOISnaaQ/srVoodkt/v4dcer p/8dOypXD0wZ34TYEkkgJhqI9V0tgu7v9Jya0rhgJCAyCYYahMqse/ekOhBXV1j59j 6hKYcP62E4ZmwJAlTTXqj9unlS+XPJG0J554qM0xTho/sZpEQFapGdgc9GcK6E1otW /kXucfmwp5Nbdb5LcuNe4YUYhoqckka5zo/d4RnN1BCHehZ4pa8C4nmhOODps+EwXO 3oUO/ln6J7teRXYAa3qRDywjXk/FbMUJCEfnM4cRGJR1hslD+oVOaEpUF1dkJT5S6s /6J/NoSvE8QLA== From: Andrew Jeffery To: minyard@acm.org, openipmi-developer@lists.sourceforge.net Cc: Andrew Jeffery , linux-kernel@vger.kernel.org, Jonathan.Cameron@Huawei.com, aladyshev22@gmail.com, jk@codeconstruct.com.au Subject: [PATCH 08/10] ipmi: kcs_bmc: Track clients in core Date: Fri, 3 Nov 2023 16:45:20 +1030 Message-Id: <20231103061522.1268637-9-andrew@codeconstruct.com.au> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231103061522.1268637-1-andrew@codeconstruct.com.au> References: <20231103061522.1268637-1-andrew@codeconstruct.com.au> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Thu, 02 Nov 2023 23:16:30 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781522459902518804 X-GMAIL-MSGID: 1781522459902518804 I ran out of spoons before I could come up with a better client tracking scheme back in the original refactoring series: https://lore.kernel.org/all/20210608104757.582199-1-andrew@aj.id.au/ Jonathan prodded Konstantin about the issue in a review of Konstantin's MCTP patches[1], prompting an attempt to clean it up. [1]: https://lore.kernel.org/all/20230929120835.0000108e@Huawei.com/ Prevent client modules from having to track their own instances by requiring they return a pointer to a client object from their add_device() implementation. We can then track this in the core, and provide it as the argument to the remove_device() implementation to save the client module from further work. The usual container_of() pattern gets the client module access to its private data. Signed-off-by: Andrew Jeffery --- drivers/char/ipmi/kcs_bmc.c | 68 ++++++++++++++++----------- drivers/char/ipmi/kcs_bmc_cdev_ipmi.c | 42 ++++------------- drivers/char/ipmi/kcs_bmc_client.h | 35 ++++++++++---- drivers/char/ipmi/kcs_bmc_device.h | 4 +- drivers/char/ipmi/kcs_bmc_serio.c | 43 +++++------------ 5 files changed, 88 insertions(+), 104 deletions(-) diff --git a/drivers/char/ipmi/kcs_bmc.c b/drivers/char/ipmi/kcs_bmc.c index d70e503041bd..203cb73faa91 100644 --- a/drivers/char/ipmi/kcs_bmc.c +++ b/drivers/char/ipmi/kcs_bmc.c @@ -19,6 +19,7 @@ static DEFINE_MUTEX(kcs_bmc_lock); static LIST_HEAD(kcs_bmc_devices); static LIST_HEAD(kcs_bmc_drivers); +static LIST_HEAD(kcs_bmc_clients); /* Consumer data access */ @@ -129,25 +130,27 @@ void kcs_bmc_disable_device(struct kcs_bmc_client *client) } EXPORT_SYMBOL(kcs_bmc_disable_device); -int kcs_bmc_add_device(struct kcs_bmc_device *kcs_bmc) +int kcs_bmc_add_device(struct kcs_bmc_device *dev) { + struct kcs_bmc_client *client; struct kcs_bmc_driver *drv; int error = 0; - int rc; - spin_lock_init(&kcs_bmc->lock); - kcs_bmc->client = NULL; + spin_lock_init(&dev->lock); + dev->client = NULL; mutex_lock(&kcs_bmc_lock); - list_add(&kcs_bmc->entry, &kcs_bmc_devices); + list_add(&dev->entry, &kcs_bmc_devices); list_for_each_entry(drv, &kcs_bmc_drivers, entry) { - rc = drv->ops->add_device(kcs_bmc); - if (!rc) - continue; - - dev_err(kcs_bmc->dev, "Failed to add chardev for KCS channel %d: %d", - kcs_bmc->channel, rc); - error = rc; + client = drv->ops->add_device(drv, dev); + if (IS_ERR(client)) { + error = PTR_ERR(client); + dev_err(dev->dev, + "Failed to add chardev for KCS channel %d: %d", + dev->channel, error); + break; + } + list_add(&client->entry, &kcs_bmc_clients); } mutex_unlock(&kcs_bmc_lock); @@ -155,31 +158,37 @@ int kcs_bmc_add_device(struct kcs_bmc_device *kcs_bmc) } EXPORT_SYMBOL(kcs_bmc_add_device); -void kcs_bmc_remove_device(struct kcs_bmc_device *kcs_bmc) +void kcs_bmc_remove_device(struct kcs_bmc_device *dev) { - struct kcs_bmc_driver *drv; + struct kcs_bmc_client *curr, *tmp; mutex_lock(&kcs_bmc_lock); - list_del(&kcs_bmc->entry); - list_for_each_entry(drv, &kcs_bmc_drivers, entry) { - drv->ops->remove_device(kcs_bmc); + list_for_each_entry_safe(curr, tmp, &kcs_bmc_clients, entry) { + if (curr->dev == dev) { + list_del(&curr->entry); + curr->drv->ops->remove_device(curr); + } } + list_del(&dev->entry); mutex_unlock(&kcs_bmc_lock); } EXPORT_SYMBOL(kcs_bmc_remove_device); void kcs_bmc_register_driver(struct kcs_bmc_driver *drv) { - struct kcs_bmc_device *kcs_bmc; - int rc; + struct kcs_bmc_client *client; + struct kcs_bmc_device *dev; mutex_lock(&kcs_bmc_lock); list_add(&drv->entry, &kcs_bmc_drivers); - list_for_each_entry(kcs_bmc, &kcs_bmc_devices, entry) { - rc = drv->ops->add_device(kcs_bmc); - if (rc) - dev_err(kcs_bmc->dev, "Failed to add driver for KCS channel %d: %d", - kcs_bmc->channel, rc); + list_for_each_entry(dev, &kcs_bmc_devices, entry) { + client = drv->ops->add_device(drv, dev); + if (IS_ERR(client)) { + dev_err(dev->dev, "Failed to add driver for KCS channel %d: %ld", + dev->channel, PTR_ERR(client)); + continue; + } + list_add(&client->entry, &kcs_bmc_clients); } mutex_unlock(&kcs_bmc_lock); } @@ -187,13 +196,16 @@ EXPORT_SYMBOL(kcs_bmc_register_driver); void kcs_bmc_unregister_driver(struct kcs_bmc_driver *drv) { - struct kcs_bmc_device *kcs_bmc; + struct kcs_bmc_client *curr, *tmp; mutex_lock(&kcs_bmc_lock); - list_del(&drv->entry); - list_for_each_entry(kcs_bmc, &kcs_bmc_devices, entry) { - drv->ops->remove_device(kcs_bmc); + list_for_each_entry_safe(curr, tmp, &kcs_bmc_clients, entry) { + if (curr->drv == drv) { + list_del(&curr->entry); + drv->ops->remove_device(curr); + } } + list_del(&drv->entry); mutex_unlock(&kcs_bmc_lock); } EXPORT_SYMBOL(kcs_bmc_unregister_driver); diff --git a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c index 98f231f24c26..9fca31f8c7c2 100644 --- a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c +++ b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c @@ -71,8 +71,6 @@ enum kcs_ipmi_errors { #define KCS_ZERO_DATA 0 struct kcs_bmc_ipmi { - struct list_head entry; - struct kcs_bmc_client client; spinlock_t lock; @@ -462,27 +460,24 @@ static const struct file_operations kcs_bmc_ipmi_fops = { .unlocked_ioctl = kcs_bmc_ipmi_ioctl, }; -static DEFINE_SPINLOCK(kcs_bmc_ipmi_instances_lock); -static LIST_HEAD(kcs_bmc_ipmi_instances); - -static int kcs_bmc_ipmi_add_device(struct kcs_bmc_device *kcs_bmc) +static struct kcs_bmc_client * +kcs_bmc_ipmi_add_device(struct kcs_bmc_driver *drv, struct kcs_bmc_device *dev) { struct kcs_bmc_ipmi *priv; int rc; priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) - return -ENOMEM; + return ERR_PTR(ENOMEM); spin_lock_init(&priv->lock); mutex_init(&priv->mutex); init_waitqueue_head(&priv->queue); - priv->client.dev = kcs_bmc; - priv->client.ops = &kcs_bmc_ipmi_client_ops; + kcs_bmc_client_init(&priv->client, &kcs_bmc_ipmi_client_ops, drv, dev); priv->miscdev.minor = MISC_DYNAMIC_MINOR; - priv->miscdev.name = kasprintf(GFP_KERNEL, "%s%u", DEVICE_NAME, kcs_bmc->channel); + priv->miscdev.name = kasprintf(GFP_KERNEL, "%s%u", DEVICE_NAME, dev->channel); if (!priv->miscdev.name) { rc = -ENOMEM; goto cleanup_priv; @@ -496,13 +491,9 @@ static int kcs_bmc_ipmi_add_device(struct kcs_bmc_device *kcs_bmc) goto cleanup_miscdev_name; } - spin_lock_irq(&kcs_bmc_ipmi_instances_lock); - list_add(&priv->entry, &kcs_bmc_ipmi_instances); - spin_unlock_irq(&kcs_bmc_ipmi_instances_lock); + pr_info("Initialised IPMI client for channel %d\n", dev->channel); - pr_info("Initialised IPMI client for channel %d\n", kcs_bmc->channel); - - return 0; + return &priv->client; cleanup_miscdev_name: kfree(priv->miscdev.name); @@ -510,25 +501,12 @@ static int kcs_bmc_ipmi_add_device(struct kcs_bmc_device *kcs_bmc) cleanup_priv: kfree(priv); - return rc; + return ERR_PTR(rc); } -static void kcs_bmc_ipmi_remove_device(struct kcs_bmc_device *kcs_bmc) +static void kcs_bmc_ipmi_remove_device(struct kcs_bmc_client *client) { - struct kcs_bmc_ipmi *priv = NULL, *pos; - - spin_lock_irq(&kcs_bmc_ipmi_instances_lock); - list_for_each_entry(pos, &kcs_bmc_ipmi_instances, entry) { - if (pos->client.dev == kcs_bmc) { - priv = pos; - list_del(&pos->entry); - break; - } - } - spin_unlock_irq(&kcs_bmc_ipmi_instances_lock); - - if (!priv) - return; + struct kcs_bmc_ipmi *priv = client_to_kcs_bmc_ipmi(client); misc_deregister(&priv->miscdev); kcs_bmc_disable_device(&priv->client); diff --git a/drivers/char/ipmi/kcs_bmc_client.h b/drivers/char/ipmi/kcs_bmc_client.h index 1251e9669bcd..1c6c812d6edc 100644 --- a/drivers/char/ipmi/kcs_bmc_client.h +++ b/drivers/char/ipmi/kcs_bmc_client.h @@ -8,16 +8,7 @@ #include "kcs_bmc.h" -struct kcs_bmc_driver_ops { - int (*add_device)(struct kcs_bmc_device *kcs_bmc); - void (*remove_device)(struct kcs_bmc_device *kcs_bmc); -}; - -struct kcs_bmc_driver { - struct list_head entry; - - const struct kcs_bmc_driver_ops *ops; -}; +struct kcs_bmc_driver; struct kcs_bmc_client_ops { irqreturn_t (*event)(struct kcs_bmc_client *client); @@ -26,7 +17,31 @@ struct kcs_bmc_client_ops { struct kcs_bmc_client { const struct kcs_bmc_client_ops *ops; + struct kcs_bmc_driver *drv; struct kcs_bmc_device *dev; + struct list_head entry; +}; + +struct kcs_bmc_driver_ops { + struct kcs_bmc_client *(*add_device)(struct kcs_bmc_driver *drv, + struct kcs_bmc_device *dev); + void (*remove_device)(struct kcs_bmc_client *client); +}; + +static inline void kcs_bmc_client_init(struct kcs_bmc_client *client, + const struct kcs_bmc_client_ops *ops, + struct kcs_bmc_driver *drv, + struct kcs_bmc_device *dev) +{ + client->ops = ops; + client->drv = drv; + client->dev = dev; +} + +struct kcs_bmc_driver { + struct list_head entry; + + const struct kcs_bmc_driver_ops *ops; }; void kcs_bmc_register_driver(struct kcs_bmc_driver *drv); diff --git a/drivers/char/ipmi/kcs_bmc_device.h b/drivers/char/ipmi/kcs_bmc_device.h index 17c572f25c54..ca2b5dc2031d 100644 --- a/drivers/char/ipmi/kcs_bmc_device.h +++ b/drivers/char/ipmi/kcs_bmc_device.h @@ -16,7 +16,7 @@ struct kcs_bmc_device_ops { }; irqreturn_t kcs_bmc_handle_event(struct kcs_bmc_device *kcs_bmc); -int kcs_bmc_add_device(struct kcs_bmc_device *kcs_bmc); -void kcs_bmc_remove_device(struct kcs_bmc_device *kcs_bmc); +int kcs_bmc_add_device(struct kcs_bmc_device *dev); +void kcs_bmc_remove_device(struct kcs_bmc_device *dev); #endif diff --git a/drivers/char/ipmi/kcs_bmc_serio.c b/drivers/char/ipmi/kcs_bmc_serio.c index 0a68c76da955..3cfda39506f6 100644 --- a/drivers/char/ipmi/kcs_bmc_serio.c +++ b/drivers/char/ipmi/kcs_bmc_serio.c @@ -13,8 +13,6 @@ #include "kcs_bmc_client.h" struct kcs_bmc_serio { - struct list_head entry; - struct kcs_bmc_client client; struct serio *port; @@ -64,10 +62,8 @@ static void kcs_bmc_serio_close(struct serio *port) kcs_bmc_disable_device(&priv->client); } -static DEFINE_SPINLOCK(kcs_bmc_serio_instances_lock); -static LIST_HEAD(kcs_bmc_serio_instances); - -static int kcs_bmc_serio_add_device(struct kcs_bmc_device *kcs_bmc) +static struct kcs_bmc_client * +kcs_bmc_serio_add_device(struct kcs_bmc_driver *drv, struct kcs_bmc_device *dev) { struct kcs_bmc_serio *priv; struct serio *port; @@ -75,12 +71,12 @@ static int kcs_bmc_serio_add_device(struct kcs_bmc_device *kcs_bmc) priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) - return -ENOMEM; + return ERR_PTR(ENOMEM); /* Use kzalloc() as the allocation is cleaned up with kfree() via serio_unregister_port() */ port = kzalloc(sizeof(*port), GFP_KERNEL); if (!port) { - rc = -ENOMEM; + rc = ENOMEM; goto cleanup_priv; } @@ -88,45 +84,28 @@ static int kcs_bmc_serio_add_device(struct kcs_bmc_device *kcs_bmc) port->open = kcs_bmc_serio_open; port->close = kcs_bmc_serio_close; port->port_data = priv; - port->dev.parent = kcs_bmc->dev; + port->dev.parent = dev->dev; spin_lock_init(&priv->lock); priv->port = port; - priv->client.dev = kcs_bmc; - priv->client.ops = &kcs_bmc_serio_client_ops; - spin_lock_irq(&kcs_bmc_serio_instances_lock); - list_add(&priv->entry, &kcs_bmc_serio_instances); - spin_unlock_irq(&kcs_bmc_serio_instances_lock); + kcs_bmc_client_init(&priv->client, &kcs_bmc_serio_client_ops, drv, dev); serio_register_port(port); - pr_info("Initialised serio client for channel %d\n", kcs_bmc->channel); + pr_info("Initialised serio client for channel %d\n", dev->channel); - return 0; + return &priv->client; cleanup_priv: kfree(priv); - return rc; + return ERR_PTR(rc); } -static void kcs_bmc_serio_remove_device(struct kcs_bmc_device *kcs_bmc) +static void kcs_bmc_serio_remove_device(struct kcs_bmc_client *client) { - struct kcs_bmc_serio *priv = NULL, *pos; - - spin_lock_irq(&kcs_bmc_serio_instances_lock); - list_for_each_entry(pos, &kcs_bmc_serio_instances, entry) { - if (pos->client.dev == kcs_bmc) { - priv = pos; - list_del(&pos->entry); - break; - } - } - spin_unlock_irq(&kcs_bmc_serio_instances_lock); - - if (!priv) - return; + struct kcs_bmc_serio *priv = client_to_kcs_bmc_serio(client); /* kfree()s priv->port via put_device() */ serio_unregister_port(priv->port); From patchwork Fri Nov 3 06:15:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jeffery X-Patchwork-Id: 161158 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp830854vqu; Thu, 2 Nov 2023 23:16:31 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFrjgKD+hYrsJTMwQFBWhfZBGElgTc3jHex/7HFOk6r7RHllqnpfGWs8DAL6NUEPrZcFuxh X-Received: by 2002:a17:90b:1c01:b0:280:280c:efe3 with SMTP id oc1-20020a17090b1c0100b00280280cefe3mr2404278pjb.14.1698992190717; Thu, 02 Nov 2023 23:16:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698992190; cv=none; d=google.com; s=arc-20160816; b=mvWWyabhldyLzGqzKb8w7lDgl2E+cuYlhAVcHiv3FnSzAnJz0+5VPNjBaqh+TyvFuy gRlY6zNDCsB7LJG6DkKieS34wWru5oH7WoGbxbG6jsDJAuPPhO/dvFwhjT8dSGzvVkj6 W3IvPO2GR5IkB03ANb0ztoJKk0MC/CUPb2ekLulgqMXVMimgVp7qZoPNYptSKocsctMV M//6c/OYac1NN1RKJRTnkEkHcqRYdImFyRwaU/CxRlkx2lk9Q88k7gfWueBpflqP96tt +pO5T7iyzUgIGXca271VP8LIFTh4WtM6yM7vkfDCOGKv+cDvJkRO8en6rsTREXP13HdQ Yheg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=PBzGQ9XdHybgB4MnC4pIf/AcZ42td+dcXGF6qrKn84c=; fh=J5fZGSGUmoD0NT+ZfFkgng7qPhvONoMGdVOrNctU85A=; b=QL0R2Mp05AfPG+O/LEAzCYAP6fSBonMVYJ9/EIl9bI7CS+vMKkfA6tUz9lNrLn/fMs 62wnygRtdnULq99HRSg98SdYlFOmiCoYoVWmh3T7RAxYxboTTkHkP7eQIlFXgeIZGIdP 1vA//VyqqNQpAAxvyUVtyZOICyrfdTHLCwcNhHyEEbSD74gnEa2oHGyJzWPA7M8cGAje YBL/tZ9nYRdsMrMjC/7GynFcMiFEuodz7eiA5+ECBK1Iz1sOzmm9LxRd9FudF+JQ3dHg F29/CvydQ6rBBVSrozgU84n3o3XZLuJ497FEvUeGk675TAGSPtd8xqaqx9GQAFkYWl9k 00Uw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=kVCSm2a6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id s14-20020a17090ad48e00b0027ff8323f07si1095943pju.15.2023.11.02.23.16.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 23:16:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=kVCSm2a6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id B134980279EA; Thu, 2 Nov 2023 23:16:23 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231383AbjKCGQC (ORCPT + 36 others); Fri, 3 Nov 2023 02:16:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35438 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230456AbjKCGPv (ORCPT ); Fri, 3 Nov 2023 02:15:51 -0400 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6AEF91B4 for ; Thu, 2 Nov 2023 23:15:48 -0700 (PDT) Received: from localhost.localdomain (ppp14-2-79-67.adl-apt-pir-bras31.tpg.internode.on.net [14.2.79.67]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id E6FFC2023B; Fri, 3 Nov 2023 14:15:43 +0800 (AWST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1698992144; bh=PBzGQ9XdHybgB4MnC4pIf/AcZ42td+dcXGF6qrKn84c=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=kVCSm2a6myZWDlqnkDlsyfh8Xpz8H2fzFwLKoagVmpeuvsRxVrhOVOpR2GUYpYyqq 6X25J916IpFiZ0Dy5MH4yhfTuPbt2/RawMfC5tuFyIpTloFKvcipogKzalPvPP98N1 gF9l07S4s4FGiLdiOEowTxFovr+r8XV7YR9hekifuuDmCTiCpEoewbSaffY9DC0OCB voqmRIPcs72ro0wCKnjZnBpvriCInCZJ9Oy9jXLP6Q6QcA1tHqprioPOVCQFDelsZA KUQhmKGwn4cM5yGTNrtGjw6UEvY9S+X6Cd4xWcetNnoyjqJNDrbT+EayEIgEvT4s6B 0wiMCdEGOMkgQ== From: Andrew Jeffery To: minyard@acm.org, openipmi-developer@lists.sourceforge.net Cc: Andrew Jeffery , linux-kernel@vger.kernel.org, Jonathan.Cameron@Huawei.com, aladyshev22@gmail.com, jk@codeconstruct.com.au Subject: [PATCH 09/10] ipmi: kcs_bmc: Add module_kcs_bmc_driver() Date: Fri, 3 Nov 2023 16:45:21 +1030 Message-Id: <20231103061522.1268637-10-andrew@codeconstruct.com.au> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231103061522.1268637-1-andrew@codeconstruct.com.au> References: <20231103061522.1268637-1-andrew@codeconstruct.com.au> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Thu, 02 Nov 2023 23:16:23 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781522435414185222 X-GMAIL-MSGID: 1781522435414185222 Remove some cruft in the client modules by adding the usual module macro for the KCS subsystem. Signed-off-by: Andrew Jeffery --- drivers/char/ipmi/kcs_bmc.c | 4 +++- drivers/char/ipmi/kcs_bmc.h | 1 + drivers/char/ipmi/kcs_bmc_cdev_ipmi.c | 15 +-------------- drivers/char/ipmi/kcs_bmc_client.h | 7 ++++++- drivers/char/ipmi/kcs_bmc_serio.c | 15 +-------------- 5 files changed, 12 insertions(+), 30 deletions(-) diff --git a/drivers/char/ipmi/kcs_bmc.c b/drivers/char/ipmi/kcs_bmc.c index 203cb73faa91..c69eb671d9d0 100644 --- a/drivers/char/ipmi/kcs_bmc.c +++ b/drivers/char/ipmi/kcs_bmc.c @@ -174,7 +174,7 @@ void kcs_bmc_remove_device(struct kcs_bmc_device *dev) } EXPORT_SYMBOL(kcs_bmc_remove_device); -void kcs_bmc_register_driver(struct kcs_bmc_driver *drv) +int kcs_bmc_register_driver(struct kcs_bmc_driver *drv) { struct kcs_bmc_client *client; struct kcs_bmc_device *dev; @@ -191,6 +191,8 @@ void kcs_bmc_register_driver(struct kcs_bmc_driver *drv) list_add(&client->entry, &kcs_bmc_clients); } mutex_unlock(&kcs_bmc_lock); + + return 0; } EXPORT_SYMBOL(kcs_bmc_register_driver); diff --git a/drivers/char/ipmi/kcs_bmc.h b/drivers/char/ipmi/kcs_bmc.h index 880d835fb90c..979d673f8f56 100644 --- a/drivers/char/ipmi/kcs_bmc.h +++ b/drivers/char/ipmi/kcs_bmc.h @@ -7,6 +7,7 @@ #define __KCS_BMC_H__ #include +#include #include #define KCS_BMC_EVENT_TYPE_OBE BIT(0) diff --git a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c index 9fca31f8c7c2..21d4c4c11e07 100644 --- a/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c +++ b/drivers/char/ipmi/kcs_bmc_cdev_ipmi.c @@ -523,20 +523,7 @@ static struct kcs_bmc_driver kcs_bmc_ipmi_driver = { .ops = &kcs_bmc_ipmi_driver_ops, }; -static int __init kcs_bmc_ipmi_init(void) -{ - kcs_bmc_register_driver(&kcs_bmc_ipmi_driver); - - return 0; -} -module_init(kcs_bmc_ipmi_init); - -static void __exit kcs_bmc_ipmi_exit(void) -{ - kcs_bmc_unregister_driver(&kcs_bmc_ipmi_driver); -} -module_exit(kcs_bmc_ipmi_exit); - +module_kcs_bmc_driver(kcs_bmc_ipmi_driver); MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Haiyue Wang "); MODULE_AUTHOR("Andrew Jeffery "); diff --git a/drivers/char/ipmi/kcs_bmc_client.h b/drivers/char/ipmi/kcs_bmc_client.h index 1c6c812d6edc..afc9e71c9fc0 100644 --- a/drivers/char/ipmi/kcs_bmc_client.h +++ b/drivers/char/ipmi/kcs_bmc_client.h @@ -5,6 +5,7 @@ #define __KCS_BMC_CONSUMER_H__ #include +#include #include "kcs_bmc.h" @@ -44,9 +45,13 @@ struct kcs_bmc_driver { const struct kcs_bmc_driver_ops *ops; }; -void kcs_bmc_register_driver(struct kcs_bmc_driver *drv); +int kcs_bmc_register_driver(struct kcs_bmc_driver *drv); void kcs_bmc_unregister_driver(struct kcs_bmc_driver *drv); +#define module_kcs_bmc_driver(__kcs_bmc_driver) \ + module_driver(__kcs_bmc_driver, kcs_bmc_register_driver, \ + kcs_bmc_unregister_driver) + int kcs_bmc_enable_device(struct kcs_bmc_client *client); void kcs_bmc_disable_device(struct kcs_bmc_client *client); u8 kcs_bmc_read_data(struct kcs_bmc_client *client); diff --git a/drivers/char/ipmi/kcs_bmc_serio.c b/drivers/char/ipmi/kcs_bmc_serio.c index 3cfda39506f6..8bb598c2aa38 100644 --- a/drivers/char/ipmi/kcs_bmc_serio.c +++ b/drivers/char/ipmi/kcs_bmc_serio.c @@ -123,20 +123,7 @@ static struct kcs_bmc_driver kcs_bmc_serio_driver = { .ops = &kcs_bmc_serio_driver_ops, }; -static int __init kcs_bmc_serio_init(void) -{ - kcs_bmc_register_driver(&kcs_bmc_serio_driver); - - return 0; -} -module_init(kcs_bmc_serio_init); - -static void __exit kcs_bmc_serio_exit(void) -{ - kcs_bmc_unregister_driver(&kcs_bmc_serio_driver); -} -module_exit(kcs_bmc_serio_exit); - +module_kcs_bmc_driver(kcs_bmc_serio_driver); MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Andrew Jeffery "); MODULE_DESCRIPTION("Adapter driver for serio access to BMC KCS devices"); From patchwork Fri Nov 3 06:15:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jeffery X-Patchwork-Id: 161167 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp831120vqu; Thu, 2 Nov 2023 23:17:20 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFW1HGnnlvhQFzcQmwjEajXWktGKQHUhS6Py0WLAvyp0wfqnFkYKF1tj55rI8Hk0+R9J02v X-Received: by 2002:a17:903:2985:b0:1cc:492c:291b with SMTP id lm5-20020a170903298500b001cc492c291bmr16881943plb.36.1698992240108; Thu, 02 Nov 2023 23:17:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698992240; cv=none; d=google.com; s=arc-20160816; b=xxQN9/9tLTqpiYYc5hhUT+zVxZqc0slvOaT9q7XmtRh4V3jPdmTcgp9VGOMrprvJyq PE8lnsw6eUOPB8GWgpRCD1Ly57m+Kh0piMU1McAbSKcTkVqpkLek/5rpSs5cleyjZ18N pUYzYluCxx5xc3bzBMqmMUVgc5shdxjssL7ultvXQ61itk5hpVZqTTw4bbQJCoZv713F cfW15XlRXYD/K4E4M1GX1VJqRZJ9ubyBxphytD0WcfB7Rdapwkjoa7AxPRrJ4oibE0fS J6BChgvP7IhZdKnrQ7WQ8bZHIoIzJnqhc7SQq1cy5bRpnokY2tCgobKBs6s9YUGPxfFI lKYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=9ez+jYppJpUXtgGRwawEysVa+FEBxXGvdBY0x8TXWRE=; fh=J5fZGSGUmoD0NT+ZfFkgng7qPhvONoMGdVOrNctU85A=; b=X4BD7LnGS8Nlgegfa3F39tYKNhJaRzDcIYM7MWnX796bmhrfO6uysiKvCop4G/N1M6 6ifoA9mZJzbrxyuYlf8BHegDjZdPUrOxpaGUqB5aTpZJiyNIXd+ITUTI/pxx7YqCjz1L vusqaLXjJlQsafCeqwKO18egq3en1E6jmv+ru6+v9Ugf6h6dDX/NUh7vl3Jqvqb6Oi0U JlcXHIX7vLK7pM7XvCFXzYSjuygiykN/EepmZa7l5cVwlxZ7McQaVSXOdtR4wgCgDgrS 78K91S/NgDu2mfCjJ+C51f9NJnSMCuAk693baCtMOSVIRM7iuFZFTOdgVf+EGdNsjv8j mWEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=RAx4SnvK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id l13-20020a170903120d00b001c9ad30e4b8si977451plh.320.2023.11.02.23.17.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 23:17:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=RAx4SnvK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 787B181ED506; Thu, 2 Nov 2023 23:17:14 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231186AbjKCGQN (ORCPT + 36 others); Fri, 3 Nov 2023 02:16:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231162AbjKCGPy (ORCPT ); Fri, 3 Nov 2023 02:15:54 -0400 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B4AC1B5 for ; Thu, 2 Nov 2023 23:15:48 -0700 (PDT) Received: from localhost.localdomain (ppp14-2-79-67.adl-apt-pir-bras31.tpg.internode.on.net [14.2.79.67]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id D7E6720247; Fri, 3 Nov 2023 14:15:44 +0800 (AWST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1698992145; bh=9ez+jYppJpUXtgGRwawEysVa+FEBxXGvdBY0x8TXWRE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=RAx4SnvKH25eUYMO5wBc+ayPe3Uf32X7ELXscZw5i4NqybpqA9w7aqfk6g561Upsd Pndm6HIGA0eRspCy/fLPIygIBjALf7RhE+ixDa2jh7nL7FseVWsoeVdeMcEkxi9kTb 6Ti9cSEz1r62CUvhnSWvSBOwoDCioj10mKbW+wYWatkwUbcuBKdwMUtOswROMHigMZ pt/92xwGyzBgw58gbg/v/crdOK2+2618wvpuTzhecp6ftsJ39eJmubV/Zos7MN8pve 5uPNy86QcKnKjdn2VWkPUBIpy+S3KEpa88/dKALpk9kmUsOMlPeOfiI0Cpl0vl6dmR gWh2ScApilkeg== From: Andrew Jeffery To: minyard@acm.org, openipmi-developer@lists.sourceforge.net Cc: Andrew Jeffery , linux-kernel@vger.kernel.org, Jonathan.Cameron@Huawei.com, aladyshev22@gmail.com, jk@codeconstruct.com.au Subject: [PATCH 10/10] ipmi: kcs_bmc: Add subsystem kerneldoc Date: Fri, 3 Nov 2023 16:45:22 +1030 Message-Id: <20231103061522.1268637-11-andrew@codeconstruct.com.au> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231103061522.1268637-1-andrew@codeconstruct.com.au> References: <20231103061522.1268637-1-andrew@codeconstruct.com.au> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Thu, 02 Nov 2023 23:17:14 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781522487127197540 X-GMAIL-MSGID: 1781522487127197540 Provide kerneldoc describing the relationships between and the behaviours of the structures and functions of the KCS subsystem. Signed-off-by: Andrew Jeffery --- drivers/char/ipmi/kcs_bmc.h | 39 ++++++++ drivers/char/ipmi/kcs_bmc_client.h | 151 +++++++++++++++++++++++++++++ drivers/char/ipmi/kcs_bmc_device.h | 40 ++++++++ 3 files changed, 230 insertions(+) diff --git a/drivers/char/ipmi/kcs_bmc.h b/drivers/char/ipmi/kcs_bmc.h index 979d673f8f56..69eee539ec50 100644 --- a/drivers/char/ipmi/kcs_bmc.h +++ b/drivers/char/ipmi/kcs_bmc.h @@ -10,6 +10,36 @@ #include #include +/** + * DOC: KCS subsystem structure + * + * The KCS subsystem is split into three components: + * + * 1. &struct kcs_bmc_device + * 2. &struct kcs_bmc_driver + * 3. &struct kcs_bmc_client + * + * ``struct kcs_bmc_device`` (device) represents a driver instance for a + * particular KCS device. ``struct kcs_bmc_device``` abstracts away the device + * specifics allowing for device-independent implementation of protocols over + * KCS. + * + * ``struct kcs_bmc_driver`` (driver) represents an implementation of a KCS + * protocol. Implementations of a protocol either expose this behaviour out to + * userspace via a character device, or provide the glue into another kernel + * subsystem. + * + * ``struct kcs_bmc_client`` (client) associates a ``struct kcs_bmc_device`` + * instance (``D``) with a &struct kcs_bmc_driver instance (``P``). An instance + * of each protocol implementation is associated with each device, yielding + * ``D*P`` client instances. + * + * A device may only have one active client at a time. A client becomes active + * on its associated device whenever userspace "opens" its interface in some + * fashion, for example, opening a character device. If the device associated + * with a client already has an active client then an error is propagated. + */ + #define KCS_BMC_EVENT_TYPE_OBE BIT(0) #define KCS_BMC_EVENT_TYPE_IBF BIT(1) @@ -31,6 +61,15 @@ struct kcs_ioreg { struct kcs_bmc_device_ops; struct kcs_bmc_client; +/** + * struct kcs_bmc_device - An abstract representation of a KCS device + * @entry: A list node for the KCS core to track KCS device instances + * @dev: The kernel device object for the KCS hardware + * @channel: The IPMI channel number for the KCS device + * @ops: A set of callbacks for providing abstract access to the KCS hardware + * @lock: Protects accesses to, and operations on &kcs_bmc_device.client + * @client: The client instance, if any, currently associated with the device + */ struct kcs_bmc_device { struct list_head entry; diff --git a/drivers/char/ipmi/kcs_bmc_client.h b/drivers/char/ipmi/kcs_bmc_client.h index afc9e71c9fc0..8ccaaf10c10e 100644 --- a/drivers/char/ipmi/kcs_bmc_client.h +++ b/drivers/char/ipmi/kcs_bmc_client.h @@ -11,10 +11,24 @@ struct kcs_bmc_driver; +/** + * struct kcs_bmc_client_ops - Callbacks operating on a client instance + * @event: A notification to the client that the device has an active interrupt + */ struct kcs_bmc_client_ops { irqreturn_t (*event)(struct kcs_bmc_client *client); }; +/** + * struct kcs_bmc_client - Associates a KCS protocol implementation with a KCS device + * @ops: A set of callbacks for handling client events + * @drv: The KCS protocol implementation associated with the client instance + * @dev: The KCS device instance associated with the client instance + * @entry: A list node for the KCS core to track KCS client instances + * + * A ``struct kcs_bmc_client`` should be created for each device added via + * &kcs_bmc_driver_ops.add_device + */ struct kcs_bmc_client { const struct kcs_bmc_client_ops *ops; @@ -23,12 +37,32 @@ struct kcs_bmc_client { struct list_head entry; }; +/** + * struct kcs_bmc_driver_ops - KCS device lifecycle operations for a KCS protocol driver + * @add_device: A new device has appeared, a client instance is to be created + * @remove_device: A known device has been removed - a client instance should be destroyed + */ struct kcs_bmc_driver_ops { struct kcs_bmc_client *(*add_device)(struct kcs_bmc_driver *drv, struct kcs_bmc_device *dev); void (*remove_device)(struct kcs_bmc_client *client); }; +/** + * kcs_bmc_client_init() - Initialise an instance of &struct kcs_bmc_client + * @client: The &struct kcs_bmc_client instance of interest, usually embedded in + * an instance-private struct + * @ops: The &struct kcs_bmc_client_ops relevant for @client + * @drv: The &struct kcs_bmc_driver instance relevant for @client + * @dev: The &struct kcs_bmc_device instance relevant for @client + * + * It's intended that kcs_bmc_client_init() is invoked in the @add_device + * callback for the protocol driver where the protocol-private data is + * initialised for the new device instance. The function is provided to make + * sure that all required fields are initialised. + * + * Context: Any context + */ static inline void kcs_bmc_client_init(struct kcs_bmc_client *client, const struct kcs_bmc_client_ops *ops, struct kcs_bmc_driver *drv, @@ -39,24 +73,141 @@ static inline void kcs_bmc_client_init(struct kcs_bmc_client *client, client->dev = dev; } +/** + * struct kcs_bmc_driver - An implementation of a protocol run over a KCS channel + * @entry: A list node for the KCS core to track KCS protocol drivers + * @ops: A set of callbacks for handling device lifecycle events for the protocol driver + */ struct kcs_bmc_driver { struct list_head entry; const struct kcs_bmc_driver_ops *ops; }; +/** + * kcs_bmc_register_driver() - Register a KCS protocol driver with the KCS subsystem + * @drv: The &struct kcs_bmc_driver instance to register + * + * Generally only invoked on module init. + * + * Context: Process context. Takes and releases the internal KCS subsystem mutex. + * + * Return: 0 on succes. + */ int kcs_bmc_register_driver(struct kcs_bmc_driver *drv); + +/** + * kcs_bmc_unregister_driver() - Unregister a KCS protocol driver with the KCS + * subsystem + * @drv: The &struct kcs_bmc_driver instance to unregister + * + * Generally only invoked on module exit. + * + * Context: Process context. Takes and releases the internal KCS subsystem mutex. + */ void kcs_bmc_unregister_driver(struct kcs_bmc_driver *drv); +/** + * module_kcs_bmc_driver() - Helper macro for registering a module KCS protocol driver + * @__kcs_bmc_driver: A ``struct kcs_bmc_driver`` + * + * Helper macro for KCS protocol drivers which do not do anything special in + * module init/exit. This eliminates a lot of boilerplate. Each module may only + * use this macro once, and calling it replaces module_init() and module_exit() + */ #define module_kcs_bmc_driver(__kcs_bmc_driver) \ module_driver(__kcs_bmc_driver, kcs_bmc_register_driver, \ kcs_bmc_unregister_driver) +/** + * kcs_bmc_enable_device() - Prepare a KCS device for active use + * @client: The client whose KCS device should be enabled + * + * A client should enable its associated KCS device when the userspace + * interface for the client is "opened" in some fashion. Enabling the KCS device + * associates the client with the device and enables interrupts on the hardware. + * + * Context: Process context. Takes and releases ``client->dev->lock`` + * + * Return: 0 on success, or -EBUSY if a client is already associated with the + * device + */ int kcs_bmc_enable_device(struct kcs_bmc_client *client); + +/** + * kcs_bmc_disable_device() - Remove a KCS device from active use + * @client: The client whose KCS device should be disabled + * + * A client should disable its associated KCS device when the userspace + * interface for the client is "closed" in some fashion. The client is + * disassociated from the device iff it was the active client. If the client is + * disassociated then interrupts are disabled on the hardware. + * + * Context: Process context. Takes and releases ``client->dev->lock``. + */ void kcs_bmc_disable_device(struct kcs_bmc_client *client); + +/** + * kcs_bmc_read_data() - Read the Input Data Register (IDR) on a KCS device + * @client: The client whose device's IDR should be read + * + * Must only be called on a client that is currently active on its associated + * device. + * + * Context: Any context. Any spinlocks taken are also released. + * + * Return: The value of IDR + */ u8 kcs_bmc_read_data(struct kcs_bmc_client *client); + +/** + * kcs_bmc_write_data() - Write the Output Data Register (ODR) on a KCS device + * @client: The client whose device's ODR should be written + * @data: The value to write to ODR + * + * Must only be called on a client that is currently active on its associated + * device. + * + * Context: Any context. Any spinlocks taken are also released. + */ void kcs_bmc_write_data(struct kcs_bmc_client *client, u8 data); + +/** + * kcs_bmc_read_status() - Read the Status Register (STR) on a KCS device + * @client: The client whose device's STR should be read + * + * Must only be called on a client that is currently active on its associated + * device. + * + * Context: Any context. Any spinlocks taken are also released. + * + * Return: The value of STR + */ u8 kcs_bmc_read_status(struct kcs_bmc_client *client); + +/** + * kcs_bmc_write_status() - Write the Status Register (STR) on a KCS device + * @client: The client whose device's STR should be written + * @data: The value to write to STR + * + * Must only be called on a client that is currently active on its associated + * device. + * + * Context: Any context. Any spinlocks taken are also released. + */ void kcs_bmc_write_status(struct kcs_bmc_client *client, u8 data); + +/** + * kcs_bmc_update_status() - Update Status Register (STR) on a KCS device + * @client: The client whose device's STR should be updated + * @mask: A bit-mask defining the field in STR that should be updated + * @val: The new value of the field, specified in the position of the bit-mask + * defined by @mask + * + * Must only be called on a client that is currently active on its associated + * device. + * + * Context: Any context. Any spinlocks taken are also released. + */ void kcs_bmc_update_status(struct kcs_bmc_client *client, u8 mask, u8 val); #endif diff --git a/drivers/char/ipmi/kcs_bmc_device.h b/drivers/char/ipmi/kcs_bmc_device.h index ca2b5dc2031d..b17171d1c981 100644 --- a/drivers/char/ipmi/kcs_bmc_device.h +++ b/drivers/char/ipmi/kcs_bmc_device.h @@ -8,6 +8,13 @@ #include "kcs_bmc.h" +/** + * struct kcs_bmc_device_ops - Callbacks operating on a KCS device + * @irq_mask_update: Update the set of events of interest + * @io_inputb: A callback to read the specified KCS register from hardware + * @io_outputb: A callback to write the specified KCS register to hardware + * @io_updateb: A callback to update a subfield of the specified KCS register + */ struct kcs_bmc_device_ops { void (*irq_mask_update)(struct kcs_bmc_device *kcs_bmc, u8 mask, u8 enable); u8 (*io_inputb)(struct kcs_bmc_device *kcs_bmc, u32 reg); @@ -15,8 +22,41 @@ struct kcs_bmc_device_ops { void (*io_updateb)(struct kcs_bmc_device *kcs_bmc, u32 reg, u8 mask, u8 b); }; +/** + * kcs_bmc_handle_event() - Notify the active client of a hardware interrupt + * @kcs_bmc: The device instance whose interrupt was triggered + * + * Propagate a hardware interrupt as an event to the active client. The client's + * handler should take any necessary actions for the protocol it implements, but + * must read IDR to resolve the interrupt if the interrupt was generated by the + * KCS device. + * + * Context: Interrupt context. Takes and releases &kcs_bmc_device.lock. + * + * Return: An irqreturn_t value indicating whether the interrupt was handled. + */ irqreturn_t kcs_bmc_handle_event(struct kcs_bmc_device *kcs_bmc); + +/** + * kcs_bmc_add_device() - Register a KCS device instance with the KCS subsystem + * @dev: The &struct kcs_bmc_device instance to register + * + * Should be called by the probe() implementation of the KCS hardware's driver. + * + * Context: Process context. Takes and releases the internal KCS subsystem mutex. + * + * Return: 0 on success, or a negative errno on failure. + */ int kcs_bmc_add_device(struct kcs_bmc_device *dev); + +/** + * kcs_bmc_remove_device() - Unregister a KCS device instance with the KCS subsystem + * @dev: The &struct kcs_bmc_device instance to unregister + * + * Should be called by the remove() implementation of the KCS hardware's driver. + * + * Context: Process context. Takes and releases the internal KCS subsystem mutex. + */ void kcs_bmc_remove_device(struct kcs_bmc_device *dev); #endif