summaryrefslogtreecommitdiffstats
path: root/0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch')
-rw-r--r--0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch214
1 files changed, 214 insertions, 0 deletions
diff --git a/0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch b/0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch
new file mode 100644
index 000000000..4b895c6c4
--- /dev/null
+++ b/0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch
@@ -0,0 +1,214 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Myron Stowe <myron.stowe@redhat.com>
+Date: Fri, 29 Jun 2018 20:05:41 -0400
+Subject: [PATCH] kABI: Add generic kABI macros to use for kABI workarounds
+
+Message-id: <20180629200436.151355.18581.stgit@tak.stowe>
+Patchwork-id: 223206
+O-Subject: [RHEL8.0 PATCH v3] kABI: Add generic kABI macros to use for kABI workarounds
+Bugzilla: 1546831
+RH-Acked-by: Larry Woodman <lwoodman@redhat.com>
+RH-Acked-by: Jarod Wilson <jarod@redhat.com>
+
+Some kernel subsystem maintainers have asked about kABI for RHEL8.0
+- getting kABI related "extension" structures and such into place. The
+consensus was to wait until the 4.17 re-base. Now that that's occurred,
+lets get this first step, kABI macros, into RHEL8.0 so developers will
+notice, and use, them in subsequent kABI related efforts.
+
+Content taken from RHEL 7. No functional change intended.
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1546831
+Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=16694565
+Upstream Status: N/A (RHEL only)
+Testing: Passed through brew build.
+
+Upstream Status: RHEL only
+Signed-off-by: Myron Stowe <myron.stowe@redhat.com>
+Signed-off-by: Herton R. Krzesinski <herton@redhat.com>
+---
+ include/linux/rh_kabi.h | 172 ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 172 insertions(+)
+ create mode 100644 include/linux/rh_kabi.h
+
+diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h
+new file mode 100644
+index 000000000000..e0d3353802bb
+--- /dev/null
++++ b/include/linux/rh_kabi.h
+@@ -0,0 +1,172 @@
++/*
++ * rh_kabi.h - Red Hat kABI abstraction header
++ *
++ * Copyright (c) 2014 Don Zickus
++ * Copyright (c) 2015-2017 Jiri Benc
++ * Copyright (c) 2015 Sabrina Dubroca, Hannes Frederic Sowa
++ * Copyright (c) 2016-2018 Prarit Bhargava
++ * Copyright (c) 2017 Paolo Abeni, Larry Woodman
++ *
++ * This file is released under the GPLv2.
++ * See the file COPYING for more details.
++ *
++ * These kabi macros hide the changes from the kabi checker and from the
++ * process that computes the exported symbols' checksums.
++ * They have 2 variants: one (defined under __GENKSYMS__) used when
++ * generating the checksums, and the other used when building the kernel's
++ * binaries.
++ *
++ * The use of these macros does not guarantee that the usage and modification
++ * of code is correct. As with all Red Hat only changes, an engineer must
++ * explain why the use of the macro is valid in the patch containing the
++ * changes.
++ *
++ */
++
++#ifndef _LINUX_RH_KABI_H
++#define _LINUX_RH_KABI_H
++
++#include <linux/compiler.h>
++#include <linux/stringify.h>
++
++/*
++ * RH_KABI_CONST
++ * Adds a new const modifier to a function parameter preserving the old
++ * checksum.
++ *
++ * RH_KABI_DEPRECATE
++ * Mark the element as deprecated and make it unusable by modules while
++ * preserving kABI checksums.
++ *
++ * RH_KABI_DEPRECATE_FN
++ * Mark the function pointer as deprecated and make it unusable by modules
++ * while preserving kABI checksums.
++ *
++ * RH_KABI_EXTEND
++ * Simple macro for adding a new element to a struct.
++ *
++ * Warning: only use if a hole exists for _all_ arches. Use pahole to verify.
++ *
++ * RH_KABI_FILL_HOLE
++ * Simple macro for filling a hole in a struct.
++ *
++ * RH_KABI_RENAME
++ * Simple macro for renaming an element without changing its type. This
++ * macro can be used in bitfields, for example.
++ *
++ * NOTE: does not include the final ';'
++ *
++ * RH_KABI_REPLACE
++ * Simple replacement of _orig with a union of _orig and _new.
++ *
++ * The RH_KABI_REPLACE* macros attempt to add the ability to use the '_new'
++ * element while preserving size alignment with the '_orig' element.
++ *
++ * The #ifdef __GENKSYMS__ preserves the kABI agreement, while the anonymous
++ * union structure preserves the size alignment (assuming the '_new' element
++ * is not bigger than the '_orig' element).
++ *
++ * RH_KABI_REPLACE_UNSAFE
++ * Unsafe version of RH_KABI_REPLACE. Only use for typedefs.
++ *
++ * RH_KABI_FORCE_CHANGE
++ * Force change of the symbol checksum. The argument of the macro is a
++ * version for cases we need to do this more than once.
++ *
++ * This macro does the opposite: it changes the symbol checksum without
++ * actually changing anything about the exported symbol. It is useful for
++ * symbols that are not whitelisted, we're changing them in an
++ * incompatible way and want to prevent 3rd party modules to silently
++ * corrupt memory. Instead, by changing the symbol checksum, such modules
++ * won't be loaded by the kernel. This macro should only be used as a
++ * last resort when all other KABI workarounds have failed.
++ *
++ * NOTE
++ * Don't use ';' after these macros as it messes up the kABI checker by
++ * changing what the resulting token string looks like. Instead let this
++ * macro add the ';' so it can be properly hidden from the kABI checker
++ * (mainly for RH_KABI_EXTEND, but applied to all macros for uniformity).
++ *
++ */
++#ifdef __GENKSYMS__
++
++# define RH_KABI_CONST
++# define RH_KABI_EXTEND(_new)
++# define RH_KABI_FILL_HOLE(_new)
++# define RH_KABI_FORCE_CHANGE(ver) __attribute__((rh_kabi_change ## ver))
++# define RH_KABI_RENAME(_orig, _new) _orig
++
++# define _RH_KABI_DEPRECATE(_type, _orig) _type _orig
++# define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) _type (*_orig)(_args)
++# define _RH_KABI_REPLACE(_orig, _new) _orig
++# define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _orig
++
++#else
++
++# define RH_KABI_ALIGN_WARNING ". Disable CONFIG_RH_KABI_SIZE_ALIGN_CHECKS if debugging."
++
++# define RH_KABI_CONST const
++# define RH_KABI_EXTEND(_new) _new;
++# define RH_KABI_FILL_HOLE(_new) _new;
++# define RH_KABI_FORCE_CHANGE(ver)
++# define RH_KABI_RENAME(_orig, _new) _new
++
++
++#if IS_BUILTIN(CONFIG_RH_KABI_SIZE_ALIGN_CHECKS)
++# define __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new) \
++ union { \
++ _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}), \
++ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_new) " is larger than " __stringify(_orig) RH_KABI_ALIGN_WARNING); \
++ _Static_assert(__alignof__(struct{_new;}) <= __alignof__(struct{_orig;}), \
++ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_orig) " is not aligned the same as " __stringify(_new) RH_KABI_ALIGN_WARNING); \
++ }
++#else
++# define __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new)
++#endif
++
++# define _RH_KABI_DEPRECATE(_type, _orig) _type rh_reserved_##_orig
++# define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \
++ _type (* rh_reserved_##_orig)(_args)
++# define _RH_KABI_REPLACE(_orig, _new) \
++ union { \
++ _new; \
++ struct { \
++ _orig; \
++ } __UNIQUE_ID(rh_kabi_hide); \
++ __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new); \
++ }
++# define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _new
++
++#endif /* __GENKSYMS__ */
++
++/* semicolon added wrappers for the RH_KABI_REPLACE macros */
++# define RH_KABI_DEPRECATE(_type, _orig) _RH_KABI_DEPRECATE(_type, _orig);
++# define RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \
++ _RH_KABI_DEPRECATE_FN(_type, _orig, _args);
++# define RH_KABI_REPLACE(_orig, _new) _RH_KABI_REPLACE(_orig, _new);
++# define RH_KABI_REPLACE_UNSAFE(_orig, _new) _RH_KABI_REPLACE_UNSAFE(_orig, _new);
++/*
++ * Macro for breaking up a random element into two smaller chunks using an
++ * anonymous struct inside an anonymous union.
++ */
++# define RH_KABI_REPLACE2(orig, _new1, _new2) RH_KABI_REPLACE(orig, struct{ _new1; _new2;})
++
++# define RH_KABI_RESERVE(n) _RH_KABI_RESERVE(n);
++/*
++ * Simple wrappers to replace standard Red Hat reserved elements.
++ */
++# define RH_KABI_USE(n, _new) RH_KABI_REPLACE(_RH_KABI_RESERVE(n), _new)
++/*
++ * Macros for breaking up a reserved element into two smaller chunks using
++ * an anonymous struct inside an anonymous union.
++ */
++# define RH_KABI_USE2(n, _new1, _new2) RH_KABI_REPLACE(_RH_KABI_RESERVE(n), struct{ _new1; _new2; })
++
++/*
++ * We tried to standardize on Red Hat reserved names. These wrappers
++ * leverage those common names making it easier to read and find in the
++ * code.
++ */
++# define _RH_KABI_RESERVE(n) unsigned long rh_reserved##n
++
++#endif /* _LINUX_RH_KABI_H */
+--
+2.26.2
+