To compile this driver as a module, say M here: the module will be
          called firewire-core.
 
+config FIREWIRE_KUNIT_UAPI_TEST
+       tristate "KUnit tests for layout of structure in UAPI" if !KUNIT_ALL_TESTS
+       depends on FIREWIRE && KUNIT
+       default KUNIT_ALL_TESTS
+       help
+         This builds the KUnit tests whether structures exposed to user
+         space have expected layout.
+
+         KUnit tests run during boot and output the results to the debug
+         log in TAP format (https://testanything.org/). Only useful for
+         kernel devs running KUnit test harness and are not for inclusion
+         into a production build.
+
+         For more information on KUnit and unit tests in general, refer
+         to the KUnit documentation in Documentation/dev-tools/kunit/.
+
 config FIREWIRE_OHCI
        tristate "OHCI-1394 controllers"
        depends on PCI && FIREWIRE && MMU
 
--- /dev/null
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// uapi_test.c - An application of Kunit to check layout of structures exposed to user space for
+//              FireWire subsystem.
+//
+// Copyright (c) 2023 Takashi Sakamoto
+
+#include <kunit/test.h>
+#include <linux/firewire-cdev.h>
+
+// Known issue added at v2.6.27 kernel.
+static void structure_layout_event_response(struct kunit *test)
+{
+#if defined(CONFIG_X86_32)
+       // 4 bytes alignment for aggregate type including 8 bytes storage types.
+       KUNIT_EXPECT_EQ(test, 20, sizeof(struct fw_cdev_event_response));
+#else
+       // 8 bytes alignment for aggregate type including 8 bytes storage types.
+       KUNIT_EXPECT_EQ(test, 24, sizeof(struct fw_cdev_event_response));
+#endif
+
+       KUNIT_EXPECT_EQ(test, 0, offsetof(struct fw_cdev_event_response, closure));
+       KUNIT_EXPECT_EQ(test, 8, offsetof(struct fw_cdev_event_response, type));
+       KUNIT_EXPECT_EQ(test, 12, offsetof(struct fw_cdev_event_response, rcode));
+       KUNIT_EXPECT_EQ(test, 16, offsetof(struct fw_cdev_event_response, length));
+       KUNIT_EXPECT_EQ(test, 20, offsetof(struct fw_cdev_event_response, data));
+}
+
+static struct kunit_case structure_layout_test_cases[] = {
+       KUNIT_CASE(structure_layout_event_response),
+       {}
+};
+
+static struct kunit_suite structure_layout_test_suite = {
+       .name = "firewire-uapi-structure-layout",
+       .test_cases = structure_layout_test_cases,
+};
+kunit_test_suite(structure_layout_test_suite);