Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2737544imu; Mon, 17 Dec 2018 07:04:03 -0800 (PST) X-Google-Smtp-Source: AFSGD/W7HYqBnzLPnbOiedBSh0OZNiCTzcdFU/FGUkPeVXzM7jjjVgH34QWryHOaRmzNkixL2ifL X-Received: by 2002:a17:902:8f97:: with SMTP id z23mr13166372plo.283.1545059043012; Mon, 17 Dec 2018 07:04:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545059042; cv=none; d=google.com; s=arc-20160816; b=rMKGOTpq0hJxsGlsq7fNYCv2/ZsgabXy1P8FT+/h4k+vpqY3ppCISpeN2fBOpWQFIN hJ7WPMErQaeMPE0kcr/kQYokZMSIVgqtEejRjyoEB3aXfm3rcCRRtSz9pTo4WtipcAVW X4YiFjR86AYH1EVfIdYyyyQtFy+wDG0T3l6BhJ40rittPLnl7+aUSrDjk2UR17hWsUVm Lv3fR/zeliP+te2yYaRbUKVKVqfBDYKfJ77OMK5Azfvl9zbTRgPK3TrWIsFDTaR/7wNV Tqgz0SdSmUJVjuQTTFAdDbydJ+14276L+pM+dUG6q2v6D/g3hG1658GJlvapmCVf5JNA GneA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Wzegbj62oKFY0N23tiI9K4BZ0/ujbWxxaw1GF3q8v/o=; b=SkjCRErqGbhOc7mkWYV4vJnnrbWBimEzkeTmDubJFkn/UagGgdYZmgF59YE0UMW0eo CXUthoCOGGzjkzZHSa5gvHIPhNXUiH2xvfQTAq+Yi4Y/SL15yyVKypw66A/zRXlQRVRr 07yB18h5/v47rZ7l8ENq/QRHibMeMmwMG5tVcLS5QANZZuyz+prIUY3FmREN0sKgBjU8 b+oKkA7kcZpxFQbwGpRNsr3zlGrgmKvetXIWbfNQD3cRLJh7su77SHx8+uOyMXovwF6G +N4l+vEhkBcy1CJ7hfGKUVrGf+wactLs/SJAn7P5kx63YkArKpZPm4jJt3qIVeAJO78q N0CQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=a9curkAi; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e8si11739455pfc.248.2018.12.17.07.03.45; Mon, 17 Dec 2018 07:04:02 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=a9curkAi; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387574AbeLQPC0 (ORCPT + 99 others); Mon, 17 Dec 2018 10:02:26 -0500 Received: from mail-ed1-f65.google.com ([209.85.208.65]:43521 "EHLO mail-ed1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387551AbeLQPCX (ORCPT ); Mon, 17 Dec 2018 10:02:23 -0500 Received: by mail-ed1-f65.google.com with SMTP id f9so10980037eds.10 for ; Mon, 17 Dec 2018 07:02:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Wzegbj62oKFY0N23tiI9K4BZ0/ujbWxxaw1GF3q8v/o=; b=a9curkAiGadYYithTEranfnV6iucbdeWLEMPIbcQSjNyWsEg1htVElYT+iCWUNKuno jMj4RrUT/ajCJiV6vEZj7GeSLhC+tvR7TYqnAMjwqHjKKJCnpesKFahK2MHTXzHlyXNS Kdvnm4OwRDPxuPpqmRcv86mQaf42Ycc1RhZJTaeXRjt2ViYKx7NqjKyIVnNp0rPfOPiM kKhAV76kyBt1SDYuShxGKYTVGHwRWKx7zF180P9+zTafOu2ObXqqD+3VRBAXtFSV7IVp dFCYZyBhMgJ405WSNcH+V8shRXIiXEsKju4D6IzsiTg4QZyvCbTFf0WdhdH6u8BQf2Av 7Qxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Wzegbj62oKFY0N23tiI9K4BZ0/ujbWxxaw1GF3q8v/o=; b=nIDhDPfBM13PNPHqg1ZaJjN5Rk6apK/KKxQ6uaThyyxezy8j1Hjm77tYMAmqYDX9Ax kN9VSZygUqF7SBK5jXwdARHDPCz/LBDhMQo+lNSdvo7k2V2NCp9RXkogrDmFnCU2ZzKg sSXcZvmxjPvRkbHS6UIQD0ZVrUwOx1S6N2ydZL8Fz+5BrtoUxP1hm1DMwJfE5oQAw5Hy 9jB3njCyolzpqH0kmfpDRT5Lnr+jfAbt3wA48de8TzGn9k+2Rv8s20LKowcfX/bvQYmQ jzR5Aqa7HvlAnyd/or91p4LJVG/uanzSTWN/EP6ShU8Mv9wtBNa1heV6nHK8ocmTr0I9 G63Q== X-Gm-Message-State: AA+aEWYwqFndy5FAhkpttVaZXDgeq7VC3eHQDbUnjblEWyAff3rVW4k3 06t2q0ZiGvjJtYaDxus/PAs= X-Received: by 2002:a17:906:7c92:: with SMTP id w18-v6mr10612233ejo.236.1545058941580; Mon, 17 Dec 2018 07:02:21 -0800 (PST) Received: from localhost (pD9E51040.dip0.t-ipconnect.de. [217.229.16.64]) by smtp.gmail.com with ESMTPSA id t10-v6sm1914483ejg.41.2018.12.17.07.02.20 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 17 Dec 2018 07:02:20 -0800 (PST) From: Thierry Reding To: Jassi Brar Cc: linux-kernel@vger.kernel.org, Andy Gospodarek , Anup Patel , Bjorn Andersson , Caesar Wang , CK Hu , Dong Aisheng , Duc Dang , Eric Anholt , Fabien Dessenne , Feng Kan , Florian Fainelli , Georgi Djakov , Houlong Wei , HS Liao , Jon Mason , Kaihua Zhong , Kevin Wangtao , Lee Jones , Leo Yan , Ley Foon Tan , Ludovic Barre , Neil Armstrong , Nishanth Menon , Oleksij Rempel , Ray Jui , Rob Rice , Ruyi Wang , Scott Branden , Sibi Sankar , Stefan Wahren , Steve Lin , Sudeep Holla , Suman Anna , Tony Lindgren , Vikram Prakash , Vladimir Zapolskiy Subject: [PATCH v2 01/19] mailbox: Add device-managed registration functions Date: Mon, 17 Dec 2018 16:01:59 +0100 Message-Id: <20181217150217.32435-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181217150217.32435-1-thierry.reding@gmail.com> References: <20181217150217.32435-1-thierry.reding@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Thierry Reding Add device-managed equivalents of the mbox_controller_register() and mbox_controller_unregister() functions that can be used to have the devres infrastructure automatically unregister mailbox controllers on driver probe failure or driver removal. This can help remove a lot of boiler plate code from drivers. Signed-off-by: Thierry Reding --- drivers/mailbox/mailbox.c | 70 ++++++++++++++++++++++++++++++ include/linux/mailbox_controller.h | 5 +++ 2 files changed, 75 insertions(+) diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c index 674b35f402f5..eb781e2b19cb 100644 --- a/drivers/mailbox/mailbox.c +++ b/drivers/mailbox/mailbox.c @@ -515,3 +515,73 @@ void mbox_controller_unregister(struct mbox_controller *mbox) mutex_unlock(&con_mutex); } EXPORT_SYMBOL_GPL(mbox_controller_unregister); + +static void __devm_mbox_controller_unregister(struct device *dev, void *res) +{ + struct mbox_controller *mbox = res; + + mbox_controller_unregister(mbox); +} + +static int devm_mbox_controller_match(struct device *dev, void *res, void *data) +{ + struct mbox_controller **mbox = res; + + if (WARN_ON(!mbox || !*mbox)) + return 0; + + return *mbox == data; +} + +/** + * devm_mbox_controller_register() - managed mbox_controller_register() + * @dev: device owning the mailbox controller being registered + * @mbox: mailbox controller being registered + * + * This function adds a device-managed resource that will make sure that the + * mailbox controller, which is registered using mbox_controller_register() + * as part of this function, will be unregistered along with the rest of + * device-managed resources upon driver probe failure or driver removal. + * + * Returns 0 on success or a negative error code on failure. + */ +int devm_mbox_controller_register(struct device *dev, + struct mbox_controller *mbox) +{ + struct mbox_controller **ptr; + int err; + + ptr = devres_alloc(__devm_mbox_controller_unregister, sizeof(*ptr), + GFP_KERNEL); + if (!ptr) + return -ENOMEM; + + err = mbox_controller_register(mbox); + if (err < 0) { + devres_free(ptr); + return err; + } + + devres_add(dev, ptr); + *ptr = mbox; + + return 0; +} +EXPORT_SYMBOL_GPL(devm_mbox_controller_register); + +/** + * devm_mbox_controller_unregister() - managed mbox_controller_unregister() + * @dev: device owning the mailbox controller being unregistered + * @mbox: mailbox controller being unregistered + * + * This function unregisters the mailbox controller and removes the device- + * managed resource that was set up to automatically unregister the mailbox + * controller on driver probe failure or driver removal. It's typically not + * necessary to call this function. + */ +void devm_mbox_controller_unregister(struct device *dev, struct mbox_controller *mbox) +{ + WARN_ON(devres_release(dev, __devm_mbox_controller_unregister, + devm_mbox_controller_match, mbox)); +} +EXPORT_SYMBOL_GPL(devm_mbox_controller_unregister); diff --git a/include/linux/mailbox_controller.h b/include/linux/mailbox_controller.h index 74deadb42d76..9b0b21207345 100644 --- a/include/linux/mailbox_controller.h +++ b/include/linux/mailbox_controller.h @@ -131,4 +131,9 @@ void mbox_controller_unregister(struct mbox_controller *mbox); /* can sleep */ void mbox_chan_received_data(struct mbox_chan *chan, void *data); /* atomic */ void mbox_chan_txdone(struct mbox_chan *chan, int r); /* atomic */ +int devm_mbox_controller_register(struct device *dev, + struct mbox_controller *mbox); +void devm_mbox_controller_unregister(struct device *dev, + struct mbox_controller *mbox); + #endif /* __MAILBOX_CONTROLLER_H */ -- 2.19.1