All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Boyd <sboyd@kernel.org>
To: Michael Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org,
	patches@lists.linux.dev, kunit-dev@googlegroups.com,
	linux-kselftest@vger.kernel.org, devicetree@vger.kernel.org,
	Brendan Higgins <brendan.higgins@linux.dev>,
	David Gow <davidgow@google.com>, Rae Moar <rmoar@google.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Rafael J . Wysocki <rafael@kernel.org>,
	Rob Herring <robh@kernel.org>,
	Saravana Kannan <saravanak@google.com>,
	Daniel Latypov <dlatypov@google.com>,
	Christian Marangi <ansuelsmth@gmail.com>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Maxime Ripard <maxime@cerno.tech>
Subject: Re: [PATCH v4 05/10] platform: Add test managed platform_device/driver APIs
Date: Wed, 24 Apr 2024 11:11:21 -0700	[thread overview]
Message-ID: <128dc42a50bfe166993205108a5b23cd.sboyd@kernel.org> (raw)
In-Reply-To: <20240422232404.213174-6-sboyd@kernel.org>

Quoting Stephen Boyd (2024-04-22 16:23:58)
> diff --git a/drivers/base/test/platform_kunit.c b/drivers/base/test/platform_kunit.c
> new file mode 100644
> index 000000000000..54af6db2a6d8
> --- /dev/null
> +++ b/drivers/base/test/platform_kunit.c
> @@ -0,0 +1,174 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Test managed platform driver
> + */
> +
[...]
> +
> +/**
> + * platform_driver_register_kunit() - Register a KUnit test managed platform driver
> + * @test: test context
> + * @drv: platform driver to register
> + *
> + * Register a test managed platform driver. This allows callers to embed the
> + * @drv in a container structure and use container_of() in the probe function
> + * to pass information to KUnit tests. It can be assumed that the driver has
> + * probed when this function returns.
> + *
> + * Example
> + *
> + * .. code-block:: c
> + *
> + *     struct kunit_test_context {
> + *             struct platform_driver pdrv;
> + *             const char *data;
> + *     };
> + *
> + *     static inline struct kunit_test_context *
> + *     to_test_context(struct platform_device *pdev)
> + *     {
> + *             return container_of(to_platform_driver(pdev->dev.driver),
> + *                                 struct kunit_test_context,
> + *                                 pdrv);
> + *     }
> + *
> + *     static int kunit_platform_driver_probe(struct platform_device *pdev)
> + *     {
> + *             struct kunit_test_context *ctx;
> + *
> + *             ctx = to_test_context(pdev);
> + *             ctx->data = "test data";
> + *
> + *             return 0;
> + *     }
> + *
> + *     static void kunit_platform_driver_test(struct kunit *test)
> + *     {
> + *             struct kunit_test_context *ctx;
> + *
> + *             ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
> + *             KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
> + *
> + *             ctx->pdrv.probe = kunit_platform_driver_probe;
> + *             ctx->pdrv.driver.name = "kunit-platform";
> + *             ctx->pdrv.driver.owner = THIS_MODULE;
> + *
> + *             KUNIT_EXPECT_EQ(test, 0, platform_driver_register_kunit(test, &ctx->pdrv));
> + *             KUNIT_EXPECT_STREQ(test, ctx->data, "test data");
> + *     }
> + *
> + * Return: 0 on success, negative errno on failure.
> + */
> +int platform_driver_register_kunit(struct kunit *test,
> +                                  struct platform_driver *drv)
> +{
> +       int ret;
> +
> +       ret = platform_driver_register(drv);
> +       if (ret)
> +               return ret;
> +
> +       /*
> +        * Wait for the driver to probe (or at least flush out of the deferred
> +        * workqueue)
> +        */
> +       wait_for_device_probe();

Should this be removed? I was thinking that this isn't a pure wrapper
around platform_driver_register() because it has this wait call.  Maybe
it's better to have some other kunit API that can wait for a specific
device to probe and timeout if it doesn't happen in that amount of time.
That API would use the bus notifiers and look for
BUS_NOTIFY_BOUND_DRIVER. Or maybe that function could setup a completion
that the test can wait on.

> +
> +       return kunit_add_action_or_reset(test,
> +                                        (kunit_action_t *)&platform_driver_unregister,
> +                                        drv);
> +}
> +EXPORT_SYMBOL_GPL(platform_driver_register_kunit);

  reply	other threads:[~2024-04-24 18:11 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-22 23:23 [PATCH v4 00/10] clk: Add kunit tests for fixed rate and parent data Stephen Boyd
2024-04-22 23:23 ` [PATCH v4 01/10] of: Add test managed wrappers for of_overlay_apply()/of_node_put() Stephen Boyd
2024-04-23 15:05   ` Rob Herring
2024-05-01  7:55   ` David Gow
2024-05-03  0:36     ` Stephen Boyd
2024-05-04  8:30       ` David Gow
2024-04-22 23:23 ` [PATCH v4 02/10] dt-bindings: vendor-prefixes: Add "test" vendor for KUnit and friends Stephen Boyd
2024-05-01  7:55   ` David Gow
2024-04-22 23:23 ` [PATCH v4 03/10] dt-bindings: test: Add KUnit empty node binding Stephen Boyd
2024-05-01  7:55   ` David Gow
2024-05-01  7:55     ` David Gow
2024-05-02 21:23     ` Brendan Higgins
2024-04-22 23:23 ` [PATCH v4 04/10] of: Add a KUnit test for overlays and test managed APIs Stephen Boyd
2024-04-23 15:07   ` Rob Herring
2024-04-22 23:23 ` [PATCH v4 05/10] platform: Add test managed platform_device/driver APIs Stephen Boyd
2024-04-24 18:11   ` Stephen Boyd [this message]
2024-04-30 21:32     ` Stephen Boyd
2024-05-01  7:55   ` David Gow
2024-05-03  1:03     ` Stephen Boyd
2024-05-04  8:30       ` David Gow
2024-05-10 20:12         ` Stephen Boyd
2024-05-14  3:35   ` Stephen Boyd
2024-04-22 23:23 ` [PATCH v4 06/10] dt-bindings: kunit: Add fixed rate clk consumer test Stephen Boyd
2024-06-03 22:02   ` Stephen Boyd
2024-04-22 23:24 ` [PATCH v4 07/10] clk: Add test managed clk provider/consumer APIs Stephen Boyd
2024-04-22 23:24 ` [PATCH v4 08/10] clk: Add KUnit tests for clk fixed rate basic type Stephen Boyd
2024-04-22 23:24 ` [PATCH v4 09/10] dt-bindings: clk: Add KUnit clk_parent_data test Stephen Boyd
2024-04-22 23:24 ` [PATCH v4 10/10] clk: Add KUnit tests for clks registered with struct clk_parent_data Stephen Boyd
2024-05-01  8:08 ` [PATCH v4 00/10] clk: Add kunit tests for fixed rate and parent data David Gow
2024-05-03  1:27   ` Stephen Boyd
2024-05-14 21:29     ` Stephen Boyd
2024-05-15 13:06       ` Rob Herring
2024-05-15 21:15         ` Stephen Boyd
2024-05-15 22:08           ` Rob Herring
2024-05-17  0:33             ` Stephen Boyd

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=128dc42a50bfe166993205108a5b23cd.sboyd@kernel.org \
    --to=sboyd@kernel.org \
    --cc=ansuelsmth@gmail.com \
    --cc=brendan.higgins@linux.dev \
    --cc=conor+dt@kernel.org \
    --cc=davidgow@google.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dlatypov@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=kunit-dev@googlegroups.com \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=maxime@cerno.tech \
    --cc=mturquette@baylibre.com \
    --cc=patches@lists.linux.dev \
    --cc=rafael@kernel.org \
    --cc=rmoar@google.com \
    --cc=robh@kernel.org \
    --cc=saravanak@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.