#ifndef _SCSI_DISK_H
#define _SCSI_DISK_H
+#include <linux/uek_kabi.h>
+
/*
* More than enough for everybody ;) The huge number of majors
* is a leftover from 16bit dev_t days, we don't really need that
unsigned lbpvpd : 1;
unsigned ws10 : 1;
unsigned ws16 : 1;
+ /* Oracle inc use only
+ *
+ * The following padding has been inserted before ABI freeze to
+ * allow extending the structure while preserving ABI.
+ */
+
+ UEK_KABI_RESERVED(1)
+ UEK_KABI_RESERVED(2)
};
#define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev)
#define __LINUX_BLK_TYPES_H
#include <linux/types.h>
+#include <linux/uek_kabi.h>
struct bio_set;
struct bio;
struct bio_vec *bi_io_vec; /* the actual vec list */
struct bio_set *bi_pool;
-
/*
* We can inline a number of vecs at the end of the bio, to avoid
* double allocations for a small number of bio_vecs. This member
#include <linux/smp.h>
#include <linux/rcupdate.h>
#include <linux/percpu-refcount.h>
+#include <linux/uek_kabi.h>
#include <asm/scatterlist.h>
unsigned char cluster;
unsigned char discard_zeroes_data;
unsigned char raid_partial_stripes_expensive;
+ /* Oracle inc use only
+ *
+ * The following padding has been inserted before ABI freeze to
+ * allow extending the structure while preserving ABI.
+ */
+
+ UEK_KABI_RESERVED(1)
+ UEK_KABI_RESERVED(2)
};
struct request_queue {
int (*getgeo)(struct block_device *, struct hd_geometry *);
/* this callback is with swap_lock and sometimes page table lock held */
void (*swap_slot_free_notify) (struct block_device *, unsigned long);
+ /* Oracle inc use only
+ *
+ * The following padding has been inserted before ABI freeze to
+ * allow extending the structure while preserving ABI.
+ */
+ int (*uek_reserved1) (struct block_device *, unsigned long);
struct module *owner;
};
#ifndef _LINUX_MM_TYPES_H
#define _LINUX_MM_TYPES_H
+#include <linux/uek_kabi.h>
#include <linux/auxvec.h>
#include <linux/types.h>
#include <linux/threads.h>
#ifdef CONFIG_NUMA
struct mempolicy *vm_policy; /* NUMA policy for the VMA */
#endif
+ /* Oracle inc use only
+ * The following padding has been inserted before ABI freeze to
+ * allow extending the structure while preserving ABI.
+ */
+ UEK_KABI_RESERVED(1)
+ UEK_KABI_RESERVED(2)
};
struct core_thread {
#include <linux/dma-mapping.h>
#include <linux/netdev_features.h>
#include <linux/sched.h>
+#include <linux/uek_kabi.h>
#include <net/flow_keys.h>
/* A. Checksumming of received packets by device.
__u8 csum_valid:1;
__u8 csum_complete_sw:1;
__u8 csum_level:2;
+ __u8 csum_pad:1;
__u8 csum_bad:1;
#ifdef CONFIG_IPV6_NDISC_NODETYPE
*data;
unsigned int truesize;
atomic_t users;
+ /* Oracle inc use only
+ *
+ * The following padding has been inserted before ABI freeze to
+ * allow extending the structure while preserving ABI.
+ */
+ UEK_KABI_RESERVED(1)
+ UEK_KABI_RESERVED(2)
};
#ifdef __KERNEL__
--- /dev/null
+ /*
+ * uek_abi.h - Oracle kabi abstraction header
+ *
+ * (C) 2015 Oracle, Inc. All rights reserved.
+ *
+ * This file is released under the GPLv2.
+ * See the file COPYING for more details.
+ */
+
+ #ifndef _LINUX_UEK_KABI_H
+ #define _LINUX_UEK_KABI_H
+
+ #include <linux/compiler.h>
+
+ /*
+ * The UEK_KABI_REPLACE* macros attempt to add the ability to use the '_new'
+ * element while preserving size alignment and kabi agreement 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).
+ *
+ * UEK_KABI_REPLACE - simple replacement of _orig with a union of _orig and _new
+ * UEK_KABI_DEPRECATE - mark the element as deprecated and make it unusable
+ * by modules while preserving KABI checksums
+ *
+ * UEK_KABI_EXTEND - simple macro for adding a new element to a struct while
+ * preserving the kabi agreement (by wrapping with GENKSYMS).
+ * UEK_KABI_FILL_HOLE - simple macro for filling a hole in a struct while
+ * preserving the kabi agreement (by wrapping with GENKSYMS).
+ * UEK_KABI_RENAME - simple macro for renaming an element without changing its type
+ * while preserving thi kabi agreement (by wrapping with GENKSYMS).
+ * This macro can be used in bitfields, for example.
+ * NOTE: does not include the final ';'
+ * UEK_KABI_REPLACE_UNSAFE - unsafe version of UEK_KABI_REPLACE. Only use for typedefs.
+ *
+ * NOTE NOTE 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 UEK_KABI_EXTEND, but applied to all macros for
+ * uniformity).
+ * NOTE NOTE NOTE
+ */
+ #ifdef __GENKSYMS__
+
+ # define _UEK_KABI_REPLACE(_orig, _new) _orig
+ # define _UEK_KABI_REPLACE_UNSAFE(_orig, _new) _orig
+ # define _UEK_KABI_DEPRECATE(_type, _orig) _type _orig
+
+ # define UEK_KABI_EXTEND(_new)
+ # define UEK_KABI_FILL_HOLE(_new)
+ # define UEK_KABI_RENAME(_orig, _new) _orig
+
+ #else
+
+ #if IS_BUILTIN(CONFIG_UEK_KABI_SIZE_ALIGN_CHECKS)
+ #define __UEK_KABI_CHECK_SIZE_ALIGN(_orig, _new) \
+ union { \
+ _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}), \
+ "kabi sizeof test panic"); \
+ _Static_assert(__alignof__(struct{_new;}) <= __alignof__(struct{_orig;}), \
+ "kabi alignof test panic"); \
+ }
+ #else
+ #define __UEK_KABI_CHECK_SIZE_ALIGN(_orig, _new)
+ #endif
+
+ # define _UEK_KABI_REPLACE(_orig, _new) \
+ union { \
+ _new; \
+ struct { \
+ _orig; \
+ } __UNIQUE_ID(uek_kabi_hide); \
+ __UEK_KABI_CHECK_SIZE_ALIGN(_orig, _new); \
+ }
+
+ #define _UEK_KABI_REPLACE_UNSAFE(_orig, _new) _new
+
+ #define _UEK_KABI_DEPRECATE(_type, _orig) _type uek_reserved_##_orig
+
+ #define UEK_KABI_EXTEND(_new) _new;
+
+ /* Warning, only use if a hole exists for _all_ arches. Use pahole to verify */
+ #define UEK_KABI_FILL_HOLE(_new) _new;
+ #define UEK_KABI_RENAME(_orig, _new) _new
+
+ #endif /* __GENKSYMS__ */
+
+ /* colon added wrappers for the UEK_KABI_REPLACE macros */
+ #define UEK_KABI_REPLACE(_orig, _new) _UEK_KABI_REPLACE(_orig, _new);
+ #define UEK_KABI_REPLACE_UNSAFE(_orig, _new) _UEK_KABI_REPLACE_UNSAFE(_orig, _new);
+ #define UEK_KABI_DEPRECATE(_type, _orig) _UEK_KABI_DEPRECATE(_type, _orig);
+
+ /*
+ * Standardization on Oracle inc reserved names. These wrappers leverage
+ * those common names making it easier to read and find in the code.
+ */
+ #define _UEK_KABI_RESERVED(n) unsigned long uek_reserved##n
+ #define _UEK_KABI_RESERVED_P(n) void (*uek_reserved##n)(void)
+ #define UEK_KABI_RESERVED(n) _UEK_KABI_RESERVED(n);
+ #define UEK_KABI_RESERVED_P(n) _UEK_KABI_RESERVED_P(n);
+
+ /*
+ * Simple wrappers to replace standard Oracle inc reserved elements.
+ */
+ #define UEK_KABI_USE(n, _new) UEK_KABI_REPLACE(_UEK_KABI_RESERVED(n), _new)
+ #define UEK_KABI_USE_P(n, _new) UEK_KABI_REPLACE(_UEK_KABI_RESERVED_P(n), _new)
+
+ /*
+ * Macros for breaking up a reserved element into two smaller chunks using an
+ * anonymous struct inside an anonymous union.
+ */
+ #define UEK_KABI_USE2(n, _new1, _new2) UEK_KABI_REPLACE(_UEK_KABI_RESERVED(n), struct{ _new1; _new2; })
+ #define UEK_KABI_USE2_P(n, _new1, _new2) UEK_KABI_REPLACE(_UEK_KABI_RESERVED_P(n), struct{ _new1; _new2;})
+
+ #endif /* _LINUX_UEK_KABI_H */
#include <linux/ns_common.h>
#include <linux/sched.h>
#include <linux/err.h>
+#include <linux/uek_kabi.h>
#define UID_GID_MAP_MAX_EXTENTS 5
struct key *persistent_keyring_register;
struct rw_semaphore persistent_keyring_register_sem;
#endif
+ /* Oracle use only
+ *
+ * The following padding has been inserted before ABI freeze to
+ * allow extending the structure while preserve ABI.
+ */
+ UEK_KABI_EXTEND(bool may_mount_sysfs)
+ UEK_KABI_EXTEND(bool may_mount_proc)
};
extern struct user_namespace init_user_ns;
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/types.h>
+#include <linux/uek_kabi.h>
#include <linux/u64_stats_sync.h>
#include <net/dsfield.h>
#include <net/gro_cells.h>
unsigned int prl_count; /* # of entries in PRL */
int ip_tnl_net_id;
struct gro_cells gro_cells;
+ /* Oracle inc use only
+ *
+ * The following padding has been inserted before ABI freeze to
+ * allow extending the structure while preserving ABI.
+ */
+ UEK_KABI_RESERVED(1)
+ UEK_KABI_RESERVED(2)
};
#define TUNNEL_CSUM __cpu_to_be16(0x01)
#include <net/netns/xfrm.h>
#include <net/netns/mpls.h>
#include <linux/ns_common.h>
+#include <linux/uek_kabi.h>
struct user_namespace;
struct proc_dir_entry;
#endif
struct sock *diag_nlsk;
atomic_t fnhe_genid;
+ /* Oracle use only
+ *
+ * The following padding has been inserted before ABI freeze to
+ * allow extending the structure while preserving ABI.
+ */
+ UEK_KABI_EXTEND(int sysctl_ip_no_pmtu_disc)
+ UEK_KABI_EXTEND(int sysctl_ip_fwd_use_pmtu)
+ /* upstream has this as part of netns_ipv4 */
+ UEK_KABI_EXTEND(struct local_ports ipv4_sysctl_local_ports)
+ UEK_KABI_EXTEND(spinlock_t nsid_lock)
+ /* upstream has this as part of netns_ipv4 */
+ UEK_KABI_EXTEND(struct sock * __percpu *ipv4_tcp_sk)
};
#include <linux/seq_file_net.h>
#include <linux/filter.h>
#include <linux/rculist_nulls.h>
#include <linux/poll.h>
+#include <linux/uek_kabi.h>
#include <linux/atomic.h>
#include <net/dst.h>
int (*sk_backlog_rcv)(struct sock *sk,
struct sk_buff *skb);
void (*sk_destruct)(struct sock *sk);
+ /* Oracle specific
+ * padding inserted before ABI freeze to
+ * allow extending the structure while preserving ABI. Feel free
+ * to replace reserved slots with required structure field
+ * additions of your backport.
+ */
+ UEK_KABI_RESERVED(1)
+ UEK_KABI_RESERVED(2)
};
#define __sk_user_data(sk) ((*((void __rcu **)&(sk)->sk_user_data)))
#include <linux/list.h>
#include <linux/types.h>
#include <linux/timer.h>
+#include <linux/uek_kabi.h>
#include <linux/scatterlist.h>
#include <scsi/scsi_device.h>
int flags; /* Command flags */
unsigned char tag; /* SCSI-II queued command tag */
+ /* Oracle inc use only
+ *
+ * The following padding has been inserted before ABI freeze to
+ * allow extending the structure while preserving ABI.
+ */
+ UEK_KABI_RESERVED(3)
+ UEK_KABI_RESERVED(4)
};
/*
#include <linux/blkdev.h>
#include <scsi/scsi.h>
#include <linux/atomic.h>
+#include <linux/uek_kabi.h>
struct device;
struct request_queue;
struct scsi_dh_data *scsi_dh_data;
enum scsi_device_state sdev_state;
+ /* Oracle inc use only
+ *
+ * The following padding has been inserted before ABI freeze to
+ * allow extending the structure while preserving ABI.
+ */
+ UEK_KABI_RESERVED(1)
+ UEK_KABI_RESERVED(2)
unsigned long sdev_data[0];
} __attribute__((aligned(sizeof(unsigned long))));