drivers/of/overlay_test.c
Source file repositories/reference/linux-study-clean/drivers/of/overlay_test.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/of/overlay_test.c- Extension
.c- Size
- 3328 bytes
- Lines
- 121
- Domain
- Driver Families
- Bucket
- drivers/of
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/device/bus.hlinux/kconfig.hlinux/of.hlinux/of_platform.hlinux/platform_device.hkunit/of.hkunit/test.hof_private.h
Detected Declarations
function of_overlay_apply_kunit_applyfunction of_overlay_apply_kunitfunction of_overlay_bus_match_compatiblefunction of_overlay_apply_kunit_cleanup
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
/*
* KUnit tests for device tree overlays
*/
#include <linux/device/bus.h>
#include <linux/kconfig.h>
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/platform_device.h>
#include <kunit/of.h>
#include <kunit/test.h>
#include "of_private.h"
static const char * const kunit_node_name = "kunit-test";
static const char * const kunit_compatible = "test,empty";
/* Test that of_overlay_apply_kunit() adds a node to the live tree */
static void of_overlay_apply_kunit_apply(struct kunit *test)
{
struct device_node *np;
KUNIT_ASSERT_EQ(test, 0,
of_overlay_apply_kunit(test, kunit_overlay_test));
np = of_find_node_by_name(NULL, kunit_node_name);
KUNIT_EXPECT_NOT_ERR_OR_NULL(test, np);
of_node_put(np);
}
/*
* Test that of_overlay_apply_kunit() creates platform devices with the
* expected device_node
*/
static void of_overlay_apply_kunit_platform_device(struct kunit *test)
{
struct platform_device *pdev;
struct device_node *np;
KUNIT_ASSERT_EQ(test, 0,
of_overlay_apply_kunit(test, kunit_overlay_test));
np = of_find_node_by_name(NULL, kunit_node_name);
of_node_put_kunit(test, np);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, np);
pdev = of_find_device_by_node(np);
KUNIT_EXPECT_NOT_ERR_OR_NULL(test, pdev);
if (pdev)
put_device(&pdev->dev);
}
static int of_overlay_bus_match_compatible(struct device *dev, const void *data)
{
return of_device_is_compatible(dev->of_node, data);
}
/* Test that of_overlay_apply_kunit() cleans up after the test is finished */
static void of_overlay_apply_kunit_cleanup(struct kunit *test)
{
struct kunit fake;
struct platform_device *pdev;
struct device *dev;
struct device_node *np;
of_root_kunit_skip(test);
if (!IS_ENABLED(CONFIG_OF_OVERLAY))
kunit_skip(test, "requires CONFIG_OF_OVERLAY to apply overlay");
if (!IS_ENABLED(CONFIG_OF_EARLY_FLATTREE))
kunit_skip(test, "requires CONFIG_OF_EARLY_FLATTREE for root node");
kunit_init_test(&fake, "fake test", NULL);
KUNIT_ASSERT_EQ(test, fake.status, KUNIT_SUCCESS);
KUNIT_ASSERT_EQ(test, 0,
of_overlay_apply_kunit(&fake, kunit_overlay_test));
np = of_find_node_by_name(NULL, kunit_node_name);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, np);
of_node_put_kunit(&fake, np);
pdev = of_find_device_by_node(np);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, pdev);
put_device(&pdev->dev); /* Not derefing 'pdev' after this */
/* Remove overlay */
kunit_cleanup(&fake);
/* The node and device should be removed */
Annotation
- Immediate include surface: `linux/device/bus.h`, `linux/kconfig.h`, `linux/of.h`, `linux/of_platform.h`, `linux/platform_device.h`, `kunit/of.h`, `kunit/test.h`, `of_private.h`.
- Detected declarations: `function of_overlay_apply_kunit_apply`, `function of_overlay_apply_kunit`, `function of_overlay_bus_match_compatible`, `function of_overlay_apply_kunit_cleanup`.
- Atlas domain: Driver Families / drivers/of.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.