#define cache_line_size()      L1_CACHE_BYTES
 #endif
 
+#ifndef __cacheline_group_begin
+#define __cacheline_group_begin(GROUP) \
+       __u8 __cacheline_group_begin__##GROUP[0]
+#endif
+
+#ifndef __cacheline_group_end
+#define __cacheline_group_end(GROUP) \
+       __u8 __cacheline_group_end__##GROUP[0]
+#endif
+
+#ifndef CACHELINE_ASSERT_GROUP_MEMBER
+#define CACHELINE_ASSERT_GROUP_MEMBER(TYPE, GROUP, MEMBER) \
+       BUILD_BUG_ON(!(offsetof(TYPE, MEMBER) >= \
+                      offsetofend(TYPE, __cacheline_group_begin__##GROUP) && \
+                      offsetofend(TYPE, MEMBER) <= \
+                      offsetof(TYPE, __cacheline_group_end__##GROUP)))
+#endif
+
+#ifndef CACHELINE_ASSERT_GROUP_SIZE
+#define CACHELINE_ASSERT_GROUP_SIZE(TYPE, GROUP, SIZE) \
+       BUILD_BUG_ON(offsetof(TYPE, __cacheline_group_end__##GROUP) - \
+                    offsetofend(TYPE, __cacheline_group_begin__##GROUP) > \
+                    SIZE)
+#endif
+
 /*
  * Helper to add padding within a struct to ensure data fall into separate
  * cachelines.
 
                $parameterdescs{$param} = "anonymous\n";
                $anon_struct_union = 1;
        }
+       elsif ($param =~ "__cacheline_group" )
+       # handle cache group enforcing variables: they do not need be described in header files
+       {
+               return; # ignore __cacheline_group_begin and __cacheline_group_end
+       }
 
        # warn if parameter has no description
        # (but ignore ones starting with # as these are not parameters