|
|
|
@ -0,0 +1,447 @@
|
|
|
|
|
SPDX-FileCopyrightText: 1991-2024 kernel.org contributors
|
|
|
|
|
SPDX-FileCopyrightText: 2023-2024 Open Enterprise Linux Association <kernel-lts@openela.org>
|
|
|
|
|
|
|
|
|
|
SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
|
|
|
|
|
|
Patch kernel headers up to 4.14.341-openela
|
|
|
|
|
|
|
|
|
|
diff --git include/crypto/if_alg.h include/crypto/if_alg.h
|
|
|
|
|
index 2ea6a95ca825..f803dc8c45ad 100644
|
|
|
|
|
--- include/crypto/if_alg.h
|
|
|
|
|
+++ include/crypto/if_alg.h
|
|
|
|
|
@@ -146,6 +146,7 @@ struct af_alg_async_req {
|
|
|
|
|
* @enc: Cryptographic operation to be performed when
|
|
|
|
|
* recvmsg is invoked.
|
|
|
|
|
* @len: Length of memory allocated for this data structure.
|
|
|
|
|
+ * @inflight: Non-zero when AIO requests are in flight.
|
|
|
|
|
*/
|
|
|
|
|
struct af_alg_ctx {
|
|
|
|
|
struct list_head tsgl_list;
|
|
|
|
|
@@ -163,6 +164,8 @@ struct af_alg_ctx {
|
|
|
|
|
bool enc;
|
|
|
|
|
|
|
|
|
|
unsigned int len;
|
|
|
|
|
+
|
|
|
|
|
+ unsigned int inflight;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
int af_alg_register_type(const struct af_alg_type *type);
|
|
|
|
|
diff --git include/drm/drm_bridge.h include/drm/drm_bridge.h
|
|
|
|
|
index 6522d4cbc9d9..bfbd38c0b609 100644
|
|
|
|
|
--- include/drm/drm_bridge.h
|
|
|
|
|
+++ include/drm/drm_bridge.h
|
|
|
|
|
@@ -161,7 +161,7 @@ struct drm_bridge_funcs {
|
|
|
|
|
* or &drm_encoder_helper_funcs.dpms hook.
|
|
|
|
|
*
|
|
|
|
|
* The bridge must assume that the display pipe (i.e. clocks and timing
|
|
|
|
|
- * singals) feeding it is no longer running when this callback is
|
|
|
|
|
+ * signals) feeding it is no longer running when this callback is
|
|
|
|
|
* called.
|
|
|
|
|
*
|
|
|
|
|
* The post_disable callback is optional.
|
|
|
|
|
diff --git include/drm/drm_mipi_dsi.h include/drm/drm_mipi_dsi.h
|
|
|
|
|
index 689f615471ab..a059f1d968b7 100644
|
|
|
|
|
--- include/drm/drm_mipi_dsi.h
|
|
|
|
|
+++ include/drm/drm_mipi_dsi.h
|
|
|
|
|
@@ -163,6 +163,7 @@ struct mipi_dsi_device_info {
|
|
|
|
|
* struct mipi_dsi_device - DSI peripheral device
|
|
|
|
|
* @host: DSI host for this peripheral
|
|
|
|
|
* @dev: driver model device node for this peripheral
|
|
|
|
|
+ * @attached: the DSI device has been successfully attached
|
|
|
|
|
* @name: DSI peripheral chip type
|
|
|
|
|
* @channel: virtual channel assigned to the peripheral
|
|
|
|
|
* @format: pixel format for video mode
|
|
|
|
|
@@ -172,6 +173,7 @@ struct mipi_dsi_device_info {
|
|
|
|
|
struct mipi_dsi_device {
|
|
|
|
|
struct mipi_dsi_host *host;
|
|
|
|
|
struct device dev;
|
|
|
|
|
+ bool attached;
|
|
|
|
|
|
|
|
|
|
char name[DSI_DEV_NAME_SIZE];
|
|
|
|
|
unsigned int channel;
|
|
|
|
|
diff --git include/linux/bpf.h include/linux/bpf.h
|
|
|
|
|
index 3aa05ea79ba1..0d7a61df056b 100644
|
|
|
|
|
--- include/linux/bpf.h
|
|
|
|
|
+++ include/linux/bpf.h
|
|
|
|
|
@@ -38,7 +38,11 @@ struct bpf_map_ops {
|
|
|
|
|
/* funcs called by prog_array and perf_event_array map */
|
|
|
|
|
void *(*map_fd_get_ptr)(struct bpf_map *map, struct file *map_file,
|
|
|
|
|
int fd);
|
|
|
|
|
- void (*map_fd_put_ptr)(void *ptr);
|
|
|
|
|
+ /* If need_defer is true, the implementation should guarantee that
|
|
|
|
|
+ * the to-be-put element is still alive before the bpf program, which
|
|
|
|
|
+ * may manipulate it, exists.
|
|
|
|
|
+ */
|
|
|
|
|
+ void (*map_fd_put_ptr)(struct bpf_map *map, void *ptr, bool need_defer);
|
|
|
|
|
u32 (*map_gen_lookup)(struct bpf_map *map, struct bpf_insn *insn_buf);
|
|
|
|
|
u32 (*map_fd_sys_lookup_elem)(void *ptr);
|
|
|
|
|
};
|
|
|
|
|
diff --git include/linux/device.h include/linux/device.h
|
|
|
|
|
index 65e06a066b67..27b70b810463 100644
|
|
|
|
|
--- include/linux/device.h
|
|
|
|
|
+++ include/linux/device.h
|
|
|
|
|
@@ -1474,6 +1474,9 @@ do { \
|
|
|
|
|
WARN_ONCE(condition, "%s %s: " format, \
|
|
|
|
|
dev_driver_string(dev), dev_name(dev), ## arg)
|
|
|
|
|
|
|
|
|
|
+extern __printf(3, 4)
|
|
|
|
|
+int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
|
|
|
|
|
+
|
|
|
|
|
/* Create alias, so I can be autoloaded. */
|
|
|
|
|
#define MODULE_ALIAS_CHARDEV(major,minor) \
|
|
|
|
|
MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor))
|
|
|
|
|
diff --git include/linux/dmaengine.h include/linux/dmaengine.h
|
|
|
|
|
index 8089e28539f1..d5a7d320e05c 100644
|
|
|
|
|
--- include/linux/dmaengine.h
|
|
|
|
|
+++ include/linux/dmaengine.h
|
|
|
|
|
@@ -816,7 +816,8 @@ static inline int dmaengine_slave_config(struct dma_chan *chan,
|
|
|
|
|
|
|
|
|
|
static inline bool is_slave_direction(enum dma_transfer_direction direction)
|
|
|
|
|
{
|
|
|
|
|
- return (direction == DMA_MEM_TO_DEV) || (direction == DMA_DEV_TO_MEM);
|
|
|
|
|
+ return (direction == DMA_MEM_TO_DEV) || (direction == DMA_DEV_TO_MEM) ||
|
|
|
|
|
+ (direction == DMA_DEV_TO_DEV);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_single(
|
|
|
|
|
diff --git include/linux/fs.h include/linux/fs.h
|
|
|
|
|
index ff0a992846a3..bd6072556269 100644
|
|
|
|
|
--- include/linux/fs.h
|
|
|
|
|
+++ include/linux/fs.h
|
|
|
|
|
@@ -296,6 +296,8 @@ enum rw_hint {
|
|
|
|
|
#define IOCB_SYNC (1 << 5)
|
|
|
|
|
#define IOCB_WRITE (1 << 6)
|
|
|
|
|
#define IOCB_NOWAIT (1 << 7)
|
|
|
|
|
+/* kiocb is a read or write operation submitted by fs/aio.c. */
|
|
|
|
|
+#define IOCB_AIO_RW (1 << 23)
|
|
|
|
|
|
|
|
|
|
struct kiocb {
|
|
|
|
|
struct file *ki_filp;
|
|
|
|
|
diff --git include/linux/lsm_hooks.h include/linux/lsm_hooks.h
|
|
|
|
|
index 569debc49f3d..28ff40daccff 100644
|
|
|
|
|
--- include/linux/lsm_hooks.h
|
|
|
|
|
+++ include/linux/lsm_hooks.h
|
|
|
|
|
@@ -466,6 +466,12 @@
|
|
|
|
|
* simple integer value. When @arg represents a user space pointer, it
|
|
|
|
|
* should never be used by the security module.
|
|
|
|
|
* Return 0 if permission is granted.
|
|
|
|
|
+ * @file_ioctl_compat:
|
|
|
|
|
+ * @file contains the file structure.
|
|
|
|
|
+ * @cmd contains the operation to perform.
|
|
|
|
|
+ * @arg contains the operational arguments.
|
|
|
|
|
+ * Check permission for a compat ioctl operation on @file.
|
|
|
|
|
+ * Return 0 if permission is granted.
|
|
|
|
|
* @mmap_addr :
|
|
|
|
|
* Check permissions for a mmap operation at @addr.
|
|
|
|
|
* @addr contains virtual address that will be used for the operation.
|
|
|
|
|
@@ -1486,6 +1492,8 @@ union security_list_options {
|
|
|
|
|
void (*file_free_security)(struct file *file);
|
|
|
|
|
int (*file_ioctl)(struct file *file, unsigned int cmd,
|
|
|
|
|
unsigned long arg);
|
|
|
|
|
+ int (*file_ioctl_compat)(struct file *file, unsigned int cmd,
|
|
|
|
|
+ unsigned long arg);
|
|
|
|
|
int (*mmap_addr)(unsigned long addr);
|
|
|
|
|
int (*mmap_file)(struct file *file, unsigned long reqprot,
|
|
|
|
|
unsigned long prot, unsigned long flags);
|
|
|
|
|
@@ -1764,6 +1772,7 @@ struct security_hook_heads {
|
|
|
|
|
struct list_head file_alloc_security;
|
|
|
|
|
struct list_head file_free_security;
|
|
|
|
|
struct list_head file_ioctl;
|
|
|
|
|
+ struct list_head file_ioctl_compat;
|
|
|
|
|
struct list_head mmap_addr;
|
|
|
|
|
struct list_head mmap_file;
|
|
|
|
|
struct list_head file_mprotect;
|
|
|
|
|
diff --git include/linux/pci_ids.h include/linux/pci_ids.h
|
|
|
|
|
index 83f576d45d78..c977e636a1dd 100644
|
|
|
|
|
--- include/linux/pci_ids.h
|
|
|
|
|
+++ include/linux/pci_ids.h
|
|
|
|
|
@@ -2953,6 +2953,7 @@
|
|
|
|
|
#define PCI_DEVICE_ID_INTEL_82443GX_0 0x71a0
|
|
|
|
|
#define PCI_DEVICE_ID_INTEL_82443GX_2 0x71a2
|
|
|
|
|
#define PCI_DEVICE_ID_INTEL_82372FB_1 0x7601
|
|
|
|
|
+#define PCI_DEVICE_ID_INTEL_HDA_ARL 0x7728
|
|
|
|
|
#define PCI_DEVICE_ID_INTEL_SCH_LPC 0x8119
|
|
|
|
|
#define PCI_DEVICE_ID_INTEL_SCH_IDE 0x811a
|
|
|
|
|
#define PCI_DEVICE_ID_INTEL_E6XX_CU 0x8183
|
|
|
|
|
diff --git include/linux/security.h include/linux/security.h
|
|
|
|
|
index 1c8968a267c2..cf77cd971795 100644
|
|
|
|
|
--- include/linux/security.h
|
|
|
|
|
+++ include/linux/security.h
|
|
|
|
|
@@ -306,6 +306,8 @@ int security_file_permission(struct file *file, int mask);
|
|
|
|
|
int security_file_alloc(struct file *file);
|
|
|
|
|
void security_file_free(struct file *file);
|
|
|
|
|
int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
|
|
|
|
+int security_file_ioctl_compat(struct file *file, unsigned int cmd,
|
|
|
|
|
+ unsigned long arg);
|
|
|
|
|
int security_mmap_file(struct file *file, unsigned long prot,
|
|
|
|
|
unsigned long flags);
|
|
|
|
|
int security_mmap_addr(unsigned long addr);
|
|
|
|
|
@@ -827,6 +829,13 @@ static inline int security_file_ioctl(struct file *file, unsigned int cmd,
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
+static inline int security_file_ioctl_compat(struct file *file,
|
|
|
|
|
+ unsigned int cmd,
|
|
|
|
|
+ unsigned long arg)
|
|
|
|
|
+{
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
static inline int security_mmap_file(struct file *file, unsigned long prot,
|
|
|
|
|
unsigned long flags)
|
|
|
|
|
{
|
|
|
|
|
diff --git include/linux/spi/spi.h include/linux/spi/spi.h
|
|
|
|
|
index a8f6606dd498..5c7741ca3b99 100644
|
|
|
|
|
--- include/linux/spi/spi.h
|
|
|
|
|
+++ include/linux/spi/spi.h
|
|
|
|
|
@@ -153,6 +153,7 @@ struct spi_device {
|
|
|
|
|
#define SPI_MODE_1 (0|SPI_CPHA)
|
|
|
|
|
#define SPI_MODE_2 (SPI_CPOL|0)
|
|
|
|
|
#define SPI_MODE_3 (SPI_CPOL|SPI_CPHA)
|
|
|
|
|
+#define SPI_MODE_X_MASK (SPI_CPOL|SPI_CPHA)
|
|
|
|
|
#define SPI_CS_HIGH 0x04 /* chipselect active high? */
|
|
|
|
|
#define SPI_LSB_FIRST 0x08 /* per-word bits-on-wire */
|
|
|
|
|
#define SPI_3WIRE 0x10 /* SI/SO signals shared */
|
|
|
|
|
diff --git include/linux/units.h include/linux/units.h
|
|
|
|
|
new file mode 100644
|
|
|
|
|
index 000000000000..a0af6d2ef4e5
|
|
|
|
|
--- /dev/null
|
|
|
|
|
+++ include/linux/units.h
|
|
|
|
|
@@ -0,0 +1,92 @@
|
|
|
|
|
+/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
|
+#ifndef _LINUX_UNITS_H
|
|
|
|
|
+#define _LINUX_UNITS_H
|
|
|
|
|
+
|
|
|
|
|
+#include <linux/kernel.h>
|
|
|
|
|
+
|
|
|
|
|
+#define HZ_PER_KHZ 1000UL
|
|
|
|
|
+#define KHZ_PER_MHZ 1000UL
|
|
|
|
|
+#define HZ_PER_MHZ 1000000UL
|
|
|
|
|
+
|
|
|
|
|
+#define MILLIWATT_PER_WATT 1000UL
|
|
|
|
|
+#define MICROWATT_PER_MILLIWATT 1000UL
|
|
|
|
|
+#define MICROWATT_PER_WATT 1000000UL
|
|
|
|
|
+
|
|
|
|
|
+#define ABSOLUTE_ZERO_MILLICELSIUS -273150
|
|
|
|
|
+
|
|
|
|
|
+static inline long milli_kelvin_to_millicelsius(long t)
|
|
|
|
|
+{
|
|
|
|
|
+ return t + ABSOLUTE_ZERO_MILLICELSIUS;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static inline long millicelsius_to_milli_kelvin(long t)
|
|
|
|
|
+{
|
|
|
|
|
+ return t - ABSOLUTE_ZERO_MILLICELSIUS;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#define MILLIDEGREE_PER_DEGREE 1000
|
|
|
|
|
+#define MILLIDEGREE_PER_DECIDEGREE 100
|
|
|
|
|
+
|
|
|
|
|
+static inline long kelvin_to_millicelsius(long t)
|
|
|
|
|
+{
|
|
|
|
|
+ return milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DEGREE);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static inline long millicelsius_to_kelvin(long t)
|
|
|
|
|
+{
|
|
|
|
|
+ t = millicelsius_to_milli_kelvin(t);
|
|
|
|
|
+
|
|
|
|
|
+ return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DEGREE);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static inline long deci_kelvin_to_celsius(long t)
|
|
|
|
|
+{
|
|
|
|
|
+ t = milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DECIDEGREE);
|
|
|
|
|
+
|
|
|
|
|
+ return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DEGREE);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static inline long celsius_to_deci_kelvin(long t)
|
|
|
|
|
+{
|
|
|
|
|
+ t = millicelsius_to_milli_kelvin(t * MILLIDEGREE_PER_DEGREE);
|
|
|
|
|
+
|
|
|
|
|
+ return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DECIDEGREE);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * deci_kelvin_to_millicelsius_with_offset - convert Kelvin to Celsius
|
|
|
|
|
+ * @t: temperature value in decidegrees Kelvin
|
|
|
|
|
+ * @offset: difference between Kelvin and Celsius in millidegrees
|
|
|
|
|
+ *
|
|
|
|
|
+ * Return: temperature value in millidegrees Celsius
|
|
|
|
|
+ */
|
|
|
|
|
+static inline long deci_kelvin_to_millicelsius_with_offset(long t, long offset)
|
|
|
|
|
+{
|
|
|
|
|
+ return t * MILLIDEGREE_PER_DECIDEGREE - offset;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static inline long deci_kelvin_to_millicelsius(long t)
|
|
|
|
|
+{
|
|
|
|
|
+ return milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DECIDEGREE);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static inline long millicelsius_to_deci_kelvin(long t)
|
|
|
|
|
+{
|
|
|
|
|
+ t = millicelsius_to_milli_kelvin(t);
|
|
|
|
|
+
|
|
|
|
|
+ return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DECIDEGREE);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static inline long kelvin_to_celsius(long t)
|
|
|
|
|
+{
|
|
|
|
|
+ return t + DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS,
|
|
|
|
|
+ MILLIDEGREE_PER_DEGREE);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static inline long celsius_to_kelvin(long t)
|
|
|
|
|
+{
|
|
|
|
|
+ return t - DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS,
|
|
|
|
|
+ MILLIDEGREE_PER_DEGREE);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#endif /* _LINUX_UNITS_H */
|
|
|
|
|
diff --git include/net/af_unix.h include/net/af_unix.h
|
|
|
|
|
index 7ec1cdb66be8..e514508bdc92 100644
|
|
|
|
|
--- include/net/af_unix.h
|
|
|
|
|
+++ include/net/af_unix.h
|
|
|
|
|
@@ -43,12 +43,6 @@ struct unix_skb_parms {
|
|
|
|
|
|
|
|
|
|
#define UNIXCB(skb) (*(struct unix_skb_parms *)&((skb)->cb))
|
|
|
|
|
|
|
|
|
|
-#define unix_state_lock(s) spin_lock(&unix_sk(s)->lock)
|
|
|
|
|
-#define unix_state_unlock(s) spin_unlock(&unix_sk(s)->lock)
|
|
|
|
|
-#define unix_state_lock_nested(s) \
|
|
|
|
|
- spin_lock_nested(&unix_sk(s)->lock, \
|
|
|
|
|
- SINGLE_DEPTH_NESTING)
|
|
|
|
|
-
|
|
|
|
|
/* The AF_UNIX socket */
|
|
|
|
|
struct unix_sock {
|
|
|
|
|
/* WARNING: sk has to be the first member */
|
|
|
|
|
@@ -72,6 +66,20 @@ static inline struct unix_sock *unix_sk(const struct sock *sk)
|
|
|
|
|
return (struct unix_sock *)sk;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
+#define unix_state_lock(s) spin_lock(&unix_sk(s)->lock)
|
|
|
|
|
+#define unix_state_unlock(s) spin_unlock(&unix_sk(s)->lock)
|
|
|
|
|
+enum unix_socket_lock_class {
|
|
|
|
|
+ U_LOCK_NORMAL,
|
|
|
|
|
+ U_LOCK_SECOND, /* for double locking, see unix_state_double_lock(). */
|
|
|
|
|
+ U_LOCK_DIAG, /* used while dumping icons, see sk_diag_dump_icons(). */
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+static inline void unix_state_lock_nested(struct sock *sk,
|
|
|
|
|
+ enum unix_socket_lock_class subclass)
|
|
|
|
|
+{
|
|
|
|
|
+ spin_lock_nested(&unix_sk(sk)->lock, subclass);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
#define peer_wait peer_wq.wait
|
|
|
|
|
|
|
|
|
|
long unix_inq_len(struct sock *sk);
|
|
|
|
|
diff --git include/net/bluetooth/hci_core.h include/net/bluetooth/hci_core.h
|
|
|
|
|
index 8f899ad4a754..bac3d79139b2 100644
|
|
|
|
|
--- include/net/bluetooth/hci_core.h
|
|
|
|
|
+++ include/net/bluetooth/hci_core.h
|
|
|
|
|
@@ -647,7 +647,6 @@ void hci_inquiry_cache_flush(struct hci_dev *hdev);
|
|
|
|
|
/* ----- HCI Connections ----- */
|
|
|
|
|
enum {
|
|
|
|
|
HCI_CONN_AUTH_PEND,
|
|
|
|
|
- HCI_CONN_REAUTH_PEND,
|
|
|
|
|
HCI_CONN_ENCRYPT_PEND,
|
|
|
|
|
HCI_CONN_RSWITCH_PEND,
|
|
|
|
|
HCI_CONN_MODE_CHANGE_PEND,
|
|
|
|
|
diff --git include/net/dst_ops.h include/net/dst_ops.h
|
|
|
|
|
index 443863c7b8da..632086b2f644 100644
|
|
|
|
|
--- include/net/dst_ops.h
|
|
|
|
|
+++ include/net/dst_ops.h
|
|
|
|
|
@@ -16,7 +16,7 @@ struct dst_ops {
|
|
|
|
|
unsigned short family;
|
|
|
|
|
unsigned int gc_thresh;
|
|
|
|
|
|
|
|
|
|
- int (*gc)(struct dst_ops *ops);
|
|
|
|
|
+ void (*gc)(struct dst_ops *ops);
|
|
|
|
|
struct dst_entry * (*check)(struct dst_entry *, __u32 cookie);
|
|
|
|
|
unsigned int (*default_advmss)(const struct dst_entry *);
|
|
|
|
|
unsigned int (*mtu)(const struct dst_entry *);
|
|
|
|
|
@@ -53,9 +53,11 @@ static inline int dst_entries_get_slow(struct dst_ops *dst)
|
|
|
|
|
return percpu_counter_sum_positive(&dst->pcpuc_entries);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
+#define DST_PERCPU_COUNTER_BATCH 32
|
|
|
|
|
static inline void dst_entries_add(struct dst_ops *dst, int val)
|
|
|
|
|
{
|
|
|
|
|
- percpu_counter_add(&dst->pcpuc_entries, val);
|
|
|
|
|
+ percpu_counter_add_batch(&dst->pcpuc_entries, val,
|
|
|
|
|
+ DST_PERCPU_COUNTER_BATCH);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline int dst_entries_init(struct dst_ops *dst)
|
|
|
|
|
diff --git include/net/llc_pdu.h include/net/llc_pdu.h
|
|
|
|
|
index 49aa79c7b278..581cd37aa98b 100644
|
|
|
|
|
--- include/net/llc_pdu.h
|
|
|
|
|
+++ include/net/llc_pdu.h
|
|
|
|
|
@@ -262,8 +262,7 @@ static inline void llc_pdu_header_init(struct sk_buff *skb, u8 type,
|
|
|
|
|
*/
|
|
|
|
|
static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa)
|
|
|
|
|
{
|
|
|
|
|
- if (skb->protocol == htons(ETH_P_802_2))
|
|
|
|
|
- memcpy(sa, eth_hdr(skb)->h_source, ETH_ALEN);
|
|
|
|
|
+ memcpy(sa, eth_hdr(skb)->h_source, ETH_ALEN);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -275,8 +274,7 @@ static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa)
|
|
|
|
|
*/
|
|
|
|
|
static inline void llc_pdu_decode_da(struct sk_buff *skb, u8 *da)
|
|
|
|
|
{
|
|
|
|
|
- if (skb->protocol == htons(ETH_P_802_2))
|
|
|
|
|
- memcpy(da, eth_hdr(skb)->h_dest, ETH_ALEN);
|
|
|
|
|
+ memcpy(da, eth_hdr(skb)->h_dest, ETH_ALEN);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
diff --git include/net/netns/ipv6.h include/net/netns/ipv6.h
|
|
|
|
|
index c004d051c2d3..290ca18589ee 100644
|
|
|
|
|
--- include/net/netns/ipv6.h
|
|
|
|
|
+++ include/net/netns/ipv6.h
|
|
|
|
|
@@ -64,8 +64,8 @@ struct netns_ipv6 {
|
|
|
|
|
struct dst_ops ip6_dst_ops;
|
|
|
|
|
rwlock_t fib6_walker_lock;
|
|
|
|
|
spinlock_t fib6_gc_lock;
|
|
|
|
|
- unsigned int ip6_rt_gc_expire;
|
|
|
|
|
- unsigned long ip6_rt_last_gc;
|
|
|
|
|
+ atomic_t ip6_rt_gc_expire;
|
|
|
|
|
+ unsigned long ip6_rt_last_gc;
|
|
|
|
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
|
|
|
|
bool fib6_has_custom_rules;
|
|
|
|
|
struct rt6_info *ip6_prohibit_entry;
|
|
|
|
|
diff --git include/uapi/linux/btrfs.h include/uapi/linux/btrfs.h
|
|
|
|
|
index 86d2a52b4665..ee7a34c237a5 100644
|
|
|
|
|
--- include/uapi/linux/btrfs.h
|
|
|
|
|
+++ include/uapi/linux/btrfs.h
|
|
|
|
|
@@ -522,6 +522,9 @@ struct btrfs_ioctl_clone_range_args {
|
|
|
|
|
*/
|
|
|
|
|
#define BTRFS_DEFRAG_RANGE_COMPRESS 1
|
|
|
|
|
#define BTRFS_DEFRAG_RANGE_START_IO 2
|
|
|
|
|
+#define BTRFS_DEFRAG_RANGE_FLAGS_SUPP (BTRFS_DEFRAG_RANGE_COMPRESS | \
|
|
|
|
|
+ BTRFS_DEFRAG_RANGE_START_IO)
|
|
|
|
|
+
|
|
|
|
|
struct btrfs_ioctl_defrag_range_args {
|
|
|
|
|
/* start of the defrag operation */
|
|
|
|
|
__u64 start;
|
|
|
|
|
diff --git include/uapi/linux/netfilter/nf_tables.h include/uapi/linux/netfilter/nf_tables.h
|
|
|
|
|
index c7bb18ea4962..835e9f345f35 100644
|
|
|
|
|
--- include/uapi/linux/netfilter/nf_tables.h
|
|
|
|
|
+++ include/uapi/linux/netfilter/nf_tables.h
|
|
|
|
|
@@ -229,9 +229,11 @@ enum nft_rule_attributes {
|
|
|
|
|
/**
|
|
|
|
|
* enum nft_rule_compat_flags - nf_tables rule compat flags
|
|
|
|
|
*
|
|
|
|
|
+ * @NFT_RULE_COMPAT_F_UNUSED: unused
|
|
|
|
|
* @NFT_RULE_COMPAT_F_INV: invert the check result
|
|
|
|
|
*/
|
|
|
|
|
enum nft_rule_compat_flags {
|
|
|
|
|
+ NFT_RULE_COMPAT_F_UNUSED = (1 << 0),
|
|
|
|
|
NFT_RULE_COMPAT_F_INV = (1 << 1),
|
|
|
|
|
NFT_RULE_COMPAT_F_MASK = NFT_RULE_COMPAT_F_INV,
|
|
|
|
|
};
|