[RFC PATCH kernel 05/17] tsm-core: Register nevertheless

From: Alexey Kardashevskiy

Date: Wed Sep 16 2026 - 07:56:24 EST


When this and platform TSM are built-in, there is no way to control
the init order other than alphabetical.

Force the class init when a TSM platform driver registers itself.

Signed-off-by: Alexey Kardashevskiy <aik@xxxxxxx>
---

The alternative is making it a subsys_init() and drop tsm_exit().
---
drivers/virt/coco/tsm-core.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/virt/coco/tsm-core.c b/drivers/virt/coco/tsm-core.c
index 0843b77c6549..accee6a5cba8 100644
--- a/drivers/virt/coco/tsm-core.c
+++ b/drivers/virt/coco/tsm-core.c
@@ -51,6 +51,7 @@ static const struct attribute_group *tsm_pci_groups[] = {
};

static void tsm_release(struct device *);
+static bool tsm_class_registered;
static const struct class tsm_class = {
.name = "tsm",
.dev_release = tsm_release,
@@ -58,6 +59,14 @@ static const struct class tsm_class = {
};
static DEFINE_IDA(tsm_ida);

+static int tsm_class_init(void)
+{
+ int ret = class_register(&tsm_class);
+
+ tsm_class_registered = ret == 0;
+ return ret;
+}
+
static int match_id(struct device *dev, const void *data)
{
struct tsm_dev *tsm_dev = container_of(dev, struct tsm_dev, dev);
@@ -82,6 +91,9 @@ static struct tsm_dev *alloc_tsm_dev(struct device *parent)

struct tsm_dev *tsm_dev __free(kfree) =
kzalloc_obj(*tsm_dev);
+
+ tsm_class_init();
+
if (!tsm_dev)
return ERR_PTR(-ENOMEM);

@@ -254,12 +266,14 @@ static void tsm_release(struct device *dev)

static int __init tsm_init(void)
{
- return class_register(&tsm_class);
+ return tsm_class_init();
}
module_init(tsm_init)

static void __exit tsm_exit(void)
{
+ if (!tsm_class_registered)
+ return;
class_unregister(&tsm_class);
xa_destroy(&tsm_ide_streams);
}
--
2.55.0