The only slightly tricky merge conflict was the netdevsim because the mutex locking fix overlapped a lot of driver reload reorganization. The rest were (relatively) trivial in nature.
Showing the changes to include/linux (20 of 623 files). Show all
Unified · Split
| @@ -13,6 +13,7 @@ · 12 unmodified lines | ||
| 13 | 13 | #include <linux/completion.h> |
| 14 | 14 | #include <linux/kobject.h> |
| 15 | 15 | #include <linux/notifier.h> |
| 16 | +#include <linux/pm_qos.h> | |
| 16 | 17 | #include <linux/spinlock.h> |
| 17 | 18 | #include <linux/sysfs.h> |
| 18 | 19 | |
| @@ -76,8 +77,10 @@ struct cpufreq_policy { · 57 unmodified lines | ||
| 76 | 77 | struct work_struct update; /* if update_policy() needs to be |
| 77 | 78 | * called, but you're in IRQ context */ |
| 78 | 79 | |
| 79 | − struct dev_pm_qos_request *min_freq_req; | |
| 80 | − struct dev_pm_qos_request *max_freq_req; | |
| 80 | + struct freq_constraints constraints; | |
| 81 | + struct freq_qos_request *min_freq_req; | |
| 82 | + struct freq_qos_request *max_freq_req; | |
| 83 | + | |
| 81 | 84 | struct cpufreq_frequency_table *freq_table; |
| 82 | 85 | enum cpufreq_table_sorting freq_table_sorted; |
| 83 | 86 | |
| @@ -204,6 +204,12 @@ static inline int ddebug_dyndbg_module_param_cb(char *param, char *val, · 203 unmodified lines | ||
| 204 | 204 | do { if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); } while (0) |
| 205 | 205 | #define dynamic_dev_dbg(dev, fmt, ...) \ |
| 206 | 206 | do { if (0) dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); } while (0) |
| 207 | +#define dynamic_hex_dump(prefix_str, prefix_type, rowsize, \ | |
| 208 | + groupsize, buf, len, ascii) \ | |
| 209 | + do { if (0) \ | |
| 210 | + print_hex_dump(KERN_DEBUG, prefix_str, prefix_type, \ | |
| 211 | + rowsize, groupsize, buf, len, ascii); \ | |
| 212 | + } while (0) | |
| 207 | 213 | #endif |
| 208 | 214 | |
| 209 | 215 | #endif |
| @@ -1579,9 +1579,22 @@ char *efi_convert_cmdline(efi_system_table_t *sys_table_arg, · 1578 unmodified lines | ||
| 1579 | 1579 | efi_status_t efi_get_memory_map(efi_system_table_t *sys_table_arg, |
| 1580 | 1580 | struct efi_boot_memmap *map); |
| 1581 | 1581 | |
| 1582 | +efi_status_t efi_low_alloc_above(efi_system_table_t *sys_table_arg, | |
| 1583 | + unsigned long size, unsigned long align, | |
| 1584 | + unsigned long *addr, unsigned long min); | |
| 1585 | + | |
| 1586 | +static inline | |
| 1582 | 1587 | efi_status_t efi_low_alloc(efi_system_table_t *sys_table_arg, |
| 1583 | 1588 | unsigned long size, unsigned long align, |
| 1584 | − unsigned long *addr); | |
| 1589 | + unsigned long *addr) | |
| 1590 | +{ | |
| 1591 | + /* | |
| 1592 | + * Don't allocate at 0x0. It will confuse code that | |
| 1593 | + * checks pointers against NULL. Skip the first 8 | |
| 1594 | + * bytes so we start at a nice even number. | |
| 1595 | + */ | |
| 1596 | + return efi_low_alloc_above(sys_table_arg, size, align, addr, 0x8); | |
| 1597 | +} | |
| 1585 | 1598 | |
| 1586 | 1599 | efi_status_t efi_high_alloc(efi_system_table_t *sys_table_arg, |
| 1587 | 1600 | unsigned long size, unsigned long align, |
| @@ -1592,7 +1605,8 @@ efi_status_t efi_relocate_kernel(efi_system_table_t *sys_table_arg, · 4 unmodified lines | ||
| 1592 | 1605 | unsigned long image_size, |
| 1593 | 1606 | unsigned long alloc_size, |
| 1594 | 1607 | unsigned long preferred_addr, |
| 1595 | − unsigned long alignment); | |
| 1608 | + unsigned long alignment, | |
| 1609 | + unsigned long min_addr); | |
| 1596 | 1610 | |
| 1597 | 1611 | efi_status_t handle_cmdline_files(efi_system_table_t *sys_table_arg, |
| 1598 | 1612 | efi_loaded_image_t *image, |
| @@ -18,8 +18,6 @@ extern struct module __this_module; · 17 unmodified lines | ||
| 18 | 18 | #define THIS_MODULE ((struct module *)0) |
| 19 | 19 | #endif |
| 20 | 20 | |
| 21 | −#define NS_SEPARATOR "." | |
| 22 | − | |
| 23 | 21 | #ifdef CONFIG_MODVERSIONS |
| 24 | 22 | /* Mark the CRC weak since genksyms apparently decides not to |
| 25 | 23 | * generate a checksums for some symbols */ |
| @@ -48,11 +46,11 @@ extern struct module __this_module; · 22 unmodified lines | ||
| 48 | 46 | * absolute relocations that require runtime processing on relocatable |
| 49 | 47 | * kernels. |
| 50 | 48 | */ |
| 51 | −#define __KSYMTAB_ENTRY_NS(sym, sec, ns) \ | |
| 49 | +#define __KSYMTAB_ENTRY_NS(sym, sec) \ | |
| 52 | 50 | __ADDRESSABLE(sym) \ |
| 53 | 51 | asm(" .section \"___ksymtab" sec "+" #sym "\", \"a\" \n" \ |
| 54 | 52 | " .balign 4 \n" \ |
| 55 | − "__ksymtab_" #ns NS_SEPARATOR #sym ": \n" \ | |
| 53 | + "__ksymtab_" #sym ": \n" \ | |
| 56 | 54 | " .long " #sym "- . \n" \ |
| 57 | 55 | " .long __kstrtab_" #sym "- . \n" \ |
| 58 | 56 | " .long __kstrtabns_" #sym "- . \n" \ |
| @@ -74,16 +72,14 @@ struct kernel_symbol { · 15 unmodified lines | ||
| 74 | 72 | int namespace_offset; |
| 75 | 73 | }; |
| 76 | 74 | #else |
| 77 | −#define __KSYMTAB_ENTRY_NS(sym, sec, ns) \ | |
| 78 | − static const struct kernel_symbol __ksymtab_##sym##__##ns \ | |
| 79 | − asm("__ksymtab_" #ns NS_SEPARATOR #sym) \ | |
| 75 | +#define __KSYMTAB_ENTRY_NS(sym, sec) \ | |
| 76 | + static const struct kernel_symbol __ksymtab_##sym \ | |
| 80 | 77 | __attribute__((section("___ksymtab" sec "+" #sym), used)) \ |
| 81 | 78 | __aligned(sizeof(void *)) \ |
| 82 | 79 | = { (unsigned long)&sym, __kstrtab_##sym, __kstrtabns_##sym } |
| 83 | 80 | |
| 84 | 81 | #define __KSYMTAB_ENTRY(sym, sec) \ |
| 85 | 82 | static const struct kernel_symbol __ksymtab_##sym \ |
| 86 | − asm("__ksymtab_" #sym) \ | |
| 87 | 83 | __attribute__((section("___ksymtab" sec "+" #sym), used)) \ |
| 88 | 84 | __aligned(sizeof(void *)) \ |
| 89 | 85 | = { (unsigned long)&sym, __kstrtab_##sym, NULL } |
| @@ -115,7 +111,7 @@ struct kernel_symbol { · 25 unmodified lines | ||
| 115 | 111 | static const char __kstrtabns_##sym[] \ |
| 116 | 112 | __attribute__((section("__ksymtab_strings"), used, aligned(1))) \ |
| 117 | 113 | = #ns; \ |
| 118 | − __KSYMTAB_ENTRY_NS(sym, sec, ns) | |
| 114 | + __KSYMTAB_ENTRY_NS(sym, sec) | |
| 119 | 115 | |
| 120 | 116 | #define ___EXPORT_SYMBOL(sym, sec) \ |
| 121 | 117 | ___export_symbol_common(sym, sec); \ |
| @@ -1103,7 +1103,6 @@ static inline void bpf_get_prog_name(const struct bpf_prog *prog, char *sym) · 1102 unmodified lines | ||
| 1103 | 1103 | |
| 1104 | 1104 | #endif /* CONFIG_BPF_JIT */ |
| 1105 | 1105 | |
| 1106 | −void bpf_prog_kallsyms_del_subprogs(struct bpf_prog *fp); | |
| 1107 | 1106 | void bpf_prog_kallsyms_del_all(struct bpf_prog *fp); |
| 1108 | 1107 | |
| 1109 | 1108 | #define BPF_ANC BIT(15) |
| @@ -325,6 +325,29 @@ static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags) · 324 unmodified lines | ||
| 325 | 325 | return !!(gfp_flags & __GFP_DIRECT_RECLAIM); |
| 326 | 326 | } |
| 327 | 327 | |
| 328 | +/** | |
| 329 | + * gfpflags_normal_context - is gfp_flags a normal sleepable context? | |
| 330 | + * @gfp_flags: gfp_flags to test | |
| 331 | + * | |
| 332 | + * Test whether @gfp_flags indicates that the allocation is from the | |
| 333 | + * %current context and allowed to sleep. | |
| 334 | + * | |
| 335 | + * An allocation being allowed to block doesn't mean it owns the %current | |
| 336 | + * context. When direct reclaim path tries to allocate memory, the | |
| 337 | + * allocation context is nested inside whatever %current was doing at the | |
| 338 | + * time of the original allocation. The nested allocation may be allowed | |
| 339 | + * to block but modifying anything %current owns can corrupt the outer | |
| 340 | + * context's expectations. | |
| 341 | + * | |
| 342 | + * %true result from this function indicates that the allocation context | |
| 343 | + * can sleep and use anything that's associated with %current. | |
| 344 | + */ | |
| 345 | +static inline bool gfpflags_normal_context(const gfp_t gfp_flags) | |
| 346 | +{ | |
| 347 | + return (gfp_flags & (__GFP_DIRECT_RECLAIM | __GFP_MEMALLOC)) == | |
| 348 | + __GFP_DIRECT_RECLAIM; | |
| 349 | +} | |
| 350 | + | |
| 328 | 351 | #ifdef CONFIG_HIGHMEM |
| 329 | 352 | #define OPT_ZONE_HIGHMEM ZONE_HIGHMEM |
| 330 | 353 | #else |
| @@ -29,7 +29,6 @@ struct macvlan_dev { · 28 unmodified lines | ||
| 29 | 29 | netdev_features_t set_features; |
| 30 | 30 | enum macvlan_mode mode; |
| 31 | 31 | u16 flags; |
| 32 | − int nest_level; | |
| 33 | 32 | unsigned int macaddr_count; |
| 34 | 33 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| 35 | 34 | struct netpoll *netpoll; |
| @@ -223,6 +223,7 @@ struct team { · 222 unmodified lines | ||
| 223 | 223 | atomic_t count_pending; |
| 224 | 224 | struct delayed_work dw; |
| 225 | 225 | } mcast_rejoin; |
| 226 | + struct lock_class_key team_lock_key; | |
| 226 | 227 | long mode_priv[TEAM_MODE_PRIV_LONGS]; |
| 227 | 228 | }; |
| 228 | 229 | |
| @@ -182,7 +182,6 @@ struct vlan_dev_priv { · 181 unmodified lines | ||
| 182 | 182 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| 183 | 183 | struct netpoll *netpoll; |
| 184 | 184 | #endif |
| 185 | − unsigned int nest_level; | |
| 186 | 185 | }; |
| 187 | 186 | |
| 188 | 187 | static inline struct vlan_dev_priv *vlan_dev_priv(const struct net_device *dev) |
| @@ -221,11 +220,6 @@ extern void vlan_vids_del_by_dev(struct net_device *dev, · 32 unmodified lines | ||
| 221 | 220 | |
| 222 | 221 | extern bool vlan_uses_dev(const struct net_device *dev); |
| 223 | 222 | |
| 224 | −static inline int vlan_get_encap_level(struct net_device *dev) | |
| 225 | −{ | |
| 226 | − BUG_ON(!is_vlan_dev(dev)); | |
| 227 | − return vlan_dev_priv(dev)->nest_level; | |
| 228 | −} | |
| 229 | 223 | #else |
| 230 | 224 | static inline struct net_device * |
| 231 | 225 | __vlan_find_dev_deep_rcu(struct net_device *real_dev, |
| @@ -295,11 +289,6 @@ static inline bool vlan_uses_dev(const struct net_device *dev) · 63 unmodified lines | ||
| 295 | 289 | { |
| 296 | 290 | return false; |
| 297 | 291 | } |
| 298 | −static inline int vlan_get_encap_level(struct net_device *dev) | |
| 299 | −{ | |
| 300 | − BUG(); | |
| 301 | − return 0; | |
| 302 | −} | |
| 303 | 292 | #endif |
| 304 | 293 | |
| 305 | 294 | /** |
| @@ -1545,9 +1545,8 @@ struct mlx5_ifc_extended_dest_format_bits { · 1544 unmodified lines | ||
| 1545 | 1545 | }; |
| 1546 | 1546 | |
| 1547 | 1547 | union mlx5_ifc_dest_format_struct_flow_counter_list_auto_bits { |
| 1548 | − struct mlx5_ifc_dest_format_struct_bits dest_format_struct; | |
| 1548 | + struct mlx5_ifc_extended_dest_format_bits extended_dest_format; | |
| 1549 | 1549 | struct mlx5_ifc_flow_counter_list_bits flow_counter_list; |
| 1550 | − u8 reserved_at_0[0x40]; | |
| 1551 | 1550 | }; |
| 1552 | 1551 | |
| 1553 | 1552 | struct mlx5_ifc_fte_match_param_bits { |
| @@ -1431,7 +1431,6 @@ struct net_device_ops { · 1430 unmodified lines | ||
| 1431 | 1431 | void (*ndo_dfwd_del_station)(struct net_device *pdev, |
| 1432 | 1432 | void *priv); |
| 1433 | 1433 | |
| 1434 | − int (*ndo_get_lock_subclass)(struct net_device *dev); | |
| 1435 | 1434 | int (*ndo_set_tx_maxrate)(struct net_device *dev, |
| 1436 | 1435 | int queue_index, |
| 1437 | 1436 | u32 maxrate); |
| @@ -1659,6 +1658,8 @@ enum netdev_priv_flags { · 221 unmodified lines | ||
| 1659 | 1658 | * @perm_addr: Permanent hw address |
| 1660 | 1659 | * @addr_assign_type: Hw address assignment type |
| 1661 | 1660 | * @addr_len: Hardware address length |
| 1661 | + * @upper_level: Maximum depth level of upper devices. | |
| 1662 | + * @lower_level: Maximum depth level of lower devices. | |
| 1662 | 1663 | * @neigh_priv_len: Used in neigh_alloc() |
| 1663 | 1664 | * @dev_id: Used to differentiate devices that share |
| 1664 | 1665 | * the same link layer address |
| @@ -1768,9 +1769,13 @@ enum netdev_priv_flags { · 103 unmodified lines | ||
| 1768 | 1769 | * @phydev: Physical device may attach itself |
| 1769 | 1770 | * for hardware timestamping |
| 1770 | 1771 | * @sfp_bus: attached &struct sfp_bus structure. |
| 1771 | − * | |
| 1772 | − * @qdisc_tx_busylock: lockdep class annotating Qdisc->busylock spinlock | |
| 1773 | − * @qdisc_running_key: lockdep class annotating Qdisc->running seqcount | |
| 1772 | + * @qdisc_tx_busylock_key: lockdep class annotating Qdisc->busylock | |
| 1773 | + spinlock | |
| 1774 | + * @qdisc_running_key: lockdep class annotating Qdisc->running seqcount | |
| 1775 | + * @qdisc_xmit_lock_key: lockdep class annotating | |
| 1776 | + * netdev_queue->_xmit_lock spinlock | |
| 1777 | + * @addr_list_lock_key: lockdep class annotating | |
| 1778 | + * net_device->addr_list_lock spinlock | |
| 1774 | 1779 | * |
| 1775 | 1780 | * @proto_down: protocol port state information can be sent to the |
| 1776 | 1781 | * switch driver and used to set the phys state of the |
| @@ -1885,6 +1890,8 @@ struct net_device { · 108 unmodified lines | ||
| 1885 | 1890 | unsigned char perm_addr[MAX_ADDR_LEN]; |
| 1886 | 1891 | unsigned char addr_assign_type; |
| 1887 | 1892 | unsigned char addr_len; |
| 1893 | + unsigned char upper_level; | |
| 1894 | + unsigned char lower_level; | |
| 1888 | 1895 | unsigned short neigh_priv_len; |
| 1889 | 1896 | unsigned short dev_id; |
| 1890 | 1897 | unsigned short dev_port; |
| @@ -2055,8 +2062,10 @@ struct net_device { · 164 unmodified lines | ||
| 2055 | 2062 | #endif |
| 2056 | 2063 | struct phy_device *phydev; |
| 2057 | 2064 | struct sfp_bus *sfp_bus; |
| 2058 | − struct lock_class_key *qdisc_tx_busylock; | |
| 2059 | − struct lock_class_key *qdisc_running_key; | |
| 2065 | + struct lock_class_key qdisc_tx_busylock_key; | |
| 2066 | + struct lock_class_key qdisc_running_key; | |
| 2067 | + struct lock_class_key qdisc_xmit_lock_key; | |
| 2068 | + struct lock_class_key addr_list_lock_key; | |
| 2060 | 2069 | bool proto_down; |
| 2061 | 2070 | unsigned wol_enabled:1; |
| 2062 | 2071 | }; |
| @@ -2134,23 +2143,6 @@ static inline void netdev_for_each_tx_queue(struct net_device *dev, · 71 unmodified lines | ||
| 2134 | 2143 | f(dev, &dev->_tx[i], arg); |
| 2135 | 2144 | } |
| 2136 | 2145 | |
| 2137 | −#define netdev_lockdep_set_classes(dev) \ | |
| 2138 | −{ \ | |
| 2139 | − static struct lock_class_key qdisc_tx_busylock_key; \ | |
| 2140 | − static struct lock_class_key qdisc_running_key; \ | |
| 2141 | − static struct lock_class_key qdisc_xmit_lock_key; \ | |
| 2142 | − static struct lock_class_key dev_addr_list_lock_key; \ | |
| 2143 | − unsigned int i; \ | |
| 2144 | − \ | |
| 2145 | − (dev)->qdisc_tx_busylock = &qdisc_tx_busylock_key; \ | |
| 2146 | − (dev)->qdisc_running_key = &qdisc_running_key; \ | |
| 2147 | − lockdep_set_class(&(dev)->addr_list_lock, \ | |
| 2148 | − &dev_addr_list_lock_key); \ | |
| 2149 | − for (i = 0; i < (dev)->num_tx_queues; i++) \ | |
| 2150 | − lockdep_set_class(&(dev)->_tx[i]._xmit_lock, \ | |
| 2151 | − &qdisc_xmit_lock_key); \ | |
| 2152 | −} | |
| 2153 | − | |
| 2154 | 2146 | u16 netdev_pick_tx(struct net_device *dev, struct sk_buff *skb, |
| 2155 | 2147 | struct net_device *sb_dev); |
| 2156 | 2148 | struct netdev_queue *netdev_core_pick_tx(struct net_device *dev, |
| @@ -3155,6 +3147,7 @@ static inline void netif_stop_queue(struct net_device *dev) · 998 unmodified lines | ||
| 3155 | 3147 | } |
| 3156 | 3148 | |
| 3157 | 3149 | void netif_tx_stop_all_queues(struct net_device *dev); |
| 3150 | +void netdev_update_lockdep_key(struct net_device *dev); | |
| 3158 | 3151 | |
| 3159 | 3152 | static inline bool netif_tx_queue_stopped(const struct netdev_queue *dev_queue) |
| 3160 | 3153 | { |
| @@ -4072,16 +4065,6 @@ static inline void netif_addr_lock(struct net_device *dev) · 911 unmodified lines | ||
| 4072 | 4065 | spin_lock(&dev->addr_list_lock); |
| 4073 | 4066 | } |
| 4074 | 4067 | |
| 4075 | −static inline void netif_addr_lock_nested(struct net_device *dev) | |
| 4076 | −{ | |
| 4077 | − int subclass = SINGLE_DEPTH_NESTING; | |
| 4078 | − | |
| 4079 | − if (dev->netdev_ops->ndo_get_lock_subclass) | |
| 4080 | − subclass = dev->netdev_ops->ndo_get_lock_subclass(dev); | |
| 4081 | − | |
| 4082 | − spin_lock_nested(&dev->addr_list_lock, subclass); | |
| 4083 | −} | |
| 4084 | − | |
| 4085 | 4068 | static inline void netif_addr_lock_bh(struct net_device *dev) |
| 4086 | 4069 | { |
| 4087 | 4070 | spin_lock_bh(&dev->addr_list_lock); |
| @@ -4342,6 +4325,16 @@ int netdev_master_upper_dev_link(struct net_device *dev, · 254 unmodified lines | ||
| 4342 | 4325 | struct netlink_ext_ack *extack); |
| 4343 | 4326 | void netdev_upper_dev_unlink(struct net_device *dev, |
| 4344 | 4327 | struct net_device *upper_dev); |
| 4328 | +int netdev_adjacent_change_prepare(struct net_device *old_dev, | |
| 4329 | + struct net_device *new_dev, | |
| 4330 | + struct net_device *dev, | |
| 4331 | + struct netlink_ext_ack *extack); | |
| 4332 | +void netdev_adjacent_change_commit(struct net_device *old_dev, | |
| 4333 | + struct net_device *new_dev, | |
| 4334 | + struct net_device *dev); | |
| 4335 | +void netdev_adjacent_change_abort(struct net_device *old_dev, | |
| 4336 | + struct net_device *new_dev, | |
| 4337 | + struct net_device *dev); | |
| 4345 | 4338 | void netdev_adjacent_rename_links(struct net_device *dev, char *oldname); |
| 4346 | 4339 | void *netdev_lower_dev_get_private(struct net_device *dev, |
| 4347 | 4340 | struct net_device *lower_dev); |
| @@ -4353,7 +4346,6 @@ void netdev_lower_state_changed(struct net_device *lower_dev, · 5 unmodified lines | ||
| 4353 | 4346 | extern u8 netdev_rss_key[NETDEV_RSS_KEY_LEN] __read_mostly; |
| 4354 | 4347 | void netdev_rss_key_fill(void *buffer, size_t len); |
| 4355 | 4348 | |
| 4356 | −int dev_get_nest_level(struct net_device *dev); | |
| 4357 | 4349 | int skb_checksum_help(struct sk_buff *skb); |
| 4358 | 4350 | int skb_crc32c_csum_help(struct sk_buff *skb); |
| 4359 | 4351 | int skb_csum_hwoffload_help(struct sk_buff *skb, |
| @@ -292,7 +292,7 @@ struct pmu { · 291 unmodified lines | ||
| 292 | 292 | * -EBUSY -- @event is for this PMU but PMU temporarily unavailable |
| 293 | 293 | * -EINVAL -- @event is for this PMU but @event is not valid |
| 294 | 294 | * -EOPNOTSUPP -- @event is for this PMU, @event is valid, but not supported |
| 295 | − * -EACCESS -- @event is for this PMU, @event is valid, but no privilidges | |
| 295 | + * -EACCES -- @event is for this PMU, @event is valid, but no privileges | |
| 296 | 296 | * |
| 297 | 297 | * 0 -- @event is for this PMU and valid |
| 298 | 298 | * |
| @@ -51,7 +51,10 @@ struct sdma_script_start_addrs { · 50 unmodified lines | ||
| 51 | 51 | /* End of v2 array */ |
| 52 | 52 | s32 zcanfd_2_mcu_addr; |
| 53 | 53 | s32 zqspi_2_mcu_addr; |
| 54 | + s32 mcu_2_ecspi_addr; | |
| 54 | 55 | /* End of v3 array */ |
| 56 | + s32 mcu_2_zqspi_addr; | |
| 57 | + /* End of v4 array */ | |
| 55 | 58 | }; |
| 56 | 59 | |
| 57 | 60 | /** |
| @@ -34,8 +34,6 @@ enum pm_qos_flags_status { · 33 unmodified lines | ||
| 34 | 34 | #define PM_QOS_RESUME_LATENCY_NO_CONSTRAINT PM_QOS_LATENCY_ANY |
| 35 | 35 | #define PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS PM_QOS_LATENCY_ANY_NS |
| 36 | 36 | #define PM_QOS_LATENCY_TOLERANCE_DEFAULT_VALUE 0 |
| 37 | −#define PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE 0 | |
| 38 | −#define PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE (-1) | |
| 39 | 37 | #define PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT (-1) |
| 40 | 38 | |
| 41 | 39 | #define PM_QOS_FLAG_NO_POWER_OFF (1 << 0) |
| @@ -54,8 +52,6 @@ struct pm_qos_flags_request { · 12 unmodified lines | ||
| 54 | 52 | enum dev_pm_qos_req_type { |
| 55 | 53 | DEV_PM_QOS_RESUME_LATENCY = 1, |
| 56 | 54 | DEV_PM_QOS_LATENCY_TOLERANCE, |
| 57 | − DEV_PM_QOS_MIN_FREQUENCY, | |
| 58 | − DEV_PM_QOS_MAX_FREQUENCY, | |
| 59 | 55 | DEV_PM_QOS_FLAGS, |
| 60 | 56 | }; |
| 61 | 57 | |
| @@ -97,14 +93,10 @@ struct pm_qos_flags { · 35 unmodified lines | ||
| 97 | 93 | struct dev_pm_qos { |
| 98 | 94 | struct pm_qos_constraints resume_latency; |
| 99 | 95 | struct pm_qos_constraints latency_tolerance; |
| 100 | − struct pm_qos_constraints min_frequency; | |
| 101 | − struct pm_qos_constraints max_frequency; | |
| 102 | 96 | struct pm_qos_flags flags; |
| 103 | 97 | struct dev_pm_qos_request *resume_latency_req; |
| 104 | 98 | struct dev_pm_qos_request *latency_tolerance_req; |
| 105 | 99 | struct dev_pm_qos_request *flags_req; |
| 106 | − struct dev_pm_qos_request *min_frequency_req; | |
| 107 | − struct dev_pm_qos_request *max_frequency_req; | |
| 108 | 100 | }; |
| 109 | 101 | |
| 110 | 102 | /* Action requested to pm_qos_update_target */ |
| @@ -199,10 +191,6 @@ static inline s32 dev_pm_qos_read_value(struct device *dev, · 88 unmodified lines | ||
| 199 | 191 | switch (type) { |
| 200 | 192 | case DEV_PM_QOS_RESUME_LATENCY: |
| 201 | 193 | return PM_QOS_RESUME_LATENCY_NO_CONSTRAINT; |
| 202 | − case DEV_PM_QOS_MIN_FREQUENCY: | |
| 203 | − return PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE; | |
| 204 | − case DEV_PM_QOS_MAX_FREQUENCY: | |
| 205 | − return PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE; | |
| 206 | 194 | default: |
| 207 | 195 | WARN_ON(1); |
| 208 | 196 | return 0; |
| @@ -267,4 +255,48 @@ static inline s32 dev_pm_qos_raw_resume_latency(struct device *dev) · 58 unmodified lines | ||
| 267 | 255 | } |
| 268 | 256 | #endif |
| 269 | 257 | |
| 258 | +#define FREQ_QOS_MIN_DEFAULT_VALUE 0 | |
| 259 | +#define FREQ_QOS_MAX_DEFAULT_VALUE (-1) | |
| 260 | + | |
| 261 | +enum freq_qos_req_type { | |
| 262 | + FREQ_QOS_MIN = 1, | |
| 263 | + FREQ_QOS_MAX, | |
| 264 | +}; | |
| 265 | + | |
| 266 | +struct freq_constraints { | |
| 267 | + struct pm_qos_constraints min_freq; | |
| 268 | + struct blocking_notifier_head min_freq_notifiers; | |
| 269 | + struct pm_qos_constraints max_freq; | |
| 270 | + struct blocking_notifier_head max_freq_notifiers; | |
| 271 | +}; | |
| 272 | + | |
| 273 | +struct freq_qos_request { | |
| 274 | + enum freq_qos_req_type type; | |
| 275 | + struct plist_node pnode; | |
| 276 | + struct freq_constraints *qos; | |
| 277 | +}; | |
| 278 | + | |
| 279 | +static inline int freq_qos_request_active(struct freq_qos_request *req) | |
| 280 | +{ | |
| 281 | + return !IS_ERR_OR_NULL(req->qos); | |
| 282 | +} | |
| 283 | + | |
| 284 | +void freq_constraints_init(struct freq_constraints *qos); | |
| 285 | + | |
| 286 | +s32 freq_qos_read_value(struct freq_constraints *qos, | |
| 287 | + enum freq_qos_req_type type); | |
| 288 | + | |
| 289 | +int freq_qos_add_request(struct freq_constraints *qos, | |
| 290 | + struct freq_qos_request *req, | |
| 291 | + enum freq_qos_req_type type, s32 value); | |
| 292 | +int freq_qos_update_request(struct freq_qos_request *req, s32 new_value); | |
| 293 | +int freq_qos_remove_request(struct freq_qos_request *req); | |
| 294 | + | |
| 295 | +int freq_qos_add_notifier(struct freq_constraints *qos, | |
| 296 | + enum freq_qos_req_type type, | |
| 297 | + struct notifier_block *notifier); | |
| 298 | +int freq_qos_remove_notifier(struct freq_constraints *qos, | |
| 299 | + enum freq_qos_req_type type, | |
| 300 | + struct notifier_block *notifier); | |
| 301 | + | |
| 270 | 302 | #endif |
| @@ -105,6 +105,7 @@ enum lockdown_reason { · 104 unmodified lines | ||
| 105 | 105 | LOCKDOWN_NONE, |
| 106 | 106 | LOCKDOWN_MODULE_SIGNATURE, |
| 107 | 107 | LOCKDOWN_DEV_MEM, |
| 108 | + LOCKDOWN_EFI_TEST, | |
| 108 | 109 | LOCKDOWN_KEXEC, |
| 109 | 110 | LOCKDOWN_HIBERNATION, |
| 110 | 111 | LOCKDOWN_PCI_ACCESS, |
| @@ -1354,7 +1354,8 @@ static inline __u32 skb_get_hash_flowi6(struct sk_buff *skb, const struct flowi6 · 1353 unmodified lines | ||
| 1354 | 1354 | return skb->hash; |
| 1355 | 1355 | } |
| 1356 | 1356 | |
| 1357 | −__u32 skb_get_hash_perturb(const struct sk_buff *skb, u32 perturb); | |
| 1357 | +__u32 skb_get_hash_perturb(const struct sk_buff *skb, | |
| 1358 | + const siphash_key_t *perturb); | |
| 1358 | 1359 | |
| 1359 | 1360 | static inline __u32 skb_get_hash_raw(const struct sk_buff *skb) |
| 1360 | 1361 | { |
| @@ -1494,6 +1495,19 @@ static inline int skb_queue_empty(const struct sk_buff_head *list) · 133 unmodified lines | ||
| 1494 | 1495 | return list->next == (const struct sk_buff *) list; |
| 1495 | 1496 | } |
| 1496 | 1497 | |
| 1498 | +/** | |
| 1499 | + * skb_queue_empty_lockless - check if a queue is empty | |
| 1500 | + * @list: queue head | |
| 1501 | + * | |
| 1502 | + * Returns true if the queue is empty, false otherwise. | |
| 1503 | + * This variant can be used in lockless contexts. | |
| 1504 | + */ | |
| 1505 | +static inline bool skb_queue_empty_lockless(const struct sk_buff_head *list) | |
| 1506 | +{ | |
| 1507 | + return READ_ONCE(list->next) == (const struct sk_buff *) list; | |
| 1508 | +} | |
| 1509 | + | |
| 1510 | + | |
| 1497 | 1511 | /** |
| 1498 | 1512 | * skb_queue_is_last - check if skb is the last entry in the queue |
| 1499 | 1513 | * @list: queue head |
| @@ -1847,9 +1861,11 @@ static inline void __skb_insert(struct sk_buff *newsk, · 347 unmodified lines | ||
| 1847 | 1861 | struct sk_buff *prev, struct sk_buff *next, |
| 1848 | 1862 | struct sk_buff_head *list) |
| 1849 | 1863 | { |
| 1850 | − newsk->next = next; | |
| 1851 | − newsk->prev = prev; | |
| 1852 | − next->prev = prev->next = newsk; | |
| 1864 | + /* see skb_queue_empty_lockless() for the opposite READ_ONCE() */ | |
| 1865 | + WRITE_ONCE(newsk->next, next); | |
| 1866 | + WRITE_ONCE(newsk->prev, prev); | |
| 1867 | + WRITE_ONCE(next->prev, newsk); | |
| 1868 | + WRITE_ONCE(prev->next, newsk); | |
| 1853 | 1869 | list->qlen++; |
| 1854 | 1870 | } |
| 1855 | 1871 | |
| @@ -1860,11 +1876,11 @@ static inline void __skb_queue_splice(const struct sk_buff_head *list, · 4 unmodified lines | ||
| 1860 | 1876 | struct sk_buff *first = list->next; |
| 1861 | 1877 | struct sk_buff *last = list->prev; |
| 1862 | 1878 | |
| 1863 | − first->prev = prev; | |
| 1864 | − prev->next = first; | |
| 1879 | + WRITE_ONCE(first->prev, prev); | |
| 1880 | + WRITE_ONCE(prev->next, first); | |
| 1865 | 1881 | |
| 1866 | − last->next = next; | |
| 1867 | − next->prev = last; | |
| 1882 | + WRITE_ONCE(last->next, next); | |
| 1883 | + WRITE_ONCE(next->prev, last); | |
| 1868 | 1884 | } |
| 1869 | 1885 | |
| 1870 | 1886 | /** |
| @@ -2005,8 +2021,8 @@ static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list) · 134 unmodified lines | ||
| 2005 | 2021 | next = skb->next; |
| 2006 | 2022 | prev = skb->prev; |
| 2007 | 2023 | skb->next = skb->prev = NULL; |
| 2008 | − next->prev = prev; | |
| 2009 | − prev->next = next; | |
| 2024 | + WRITE_ONCE(next->prev, prev); | |
| 2025 | + WRITE_ONCE(prev->next, next); | |
| 2010 | 2026 | } |
| 2011 | 2027 | |
| 2012 | 2028 | /** |
| @@ -263,7 +263,7 @@ struct ucred { · 262 unmodified lines | ||
| 263 | 263 | #define PF_MAX AF_MAX |
| 264 | 264 | |
| 265 | 265 | /* Maximum queue length specifiable by listen. */ |
| 266 | −#define SOMAXCONN 128 | |
| 266 | +#define SOMAXCONN 4096 | |
| 267 | 267 | |
| 268 | 268 | /* Flags we can use with send/ and recv. |
| 269 | 269 | Added those for 1003.1g not all are supported yet |
| @@ -64,6 +64,11 @@ static inline int xprt_setup_backchannel(struct rpc_xprt *xprt, · 63 unmodified lines | ||
| 64 | 64 | return 0; |
| 65 | 65 | } |
| 66 | 66 | |
| 67 | +static inline void xprt_destroy_backchannel(struct rpc_xprt *xprt, | |
| 68 | + unsigned int max_reqs) | |
| 69 | +{ | |
| 70 | +} | |
| 71 | + | |
| 67 | 72 | static inline bool svc_is_backchannel(const struct svc_rqst *rqstp) |
| 68 | 73 | { |
| 69 | 74 | return false; |
| @@ -196,9 +196,9 @@ struct bin_attribute { · 195 unmodified lines | ||
| 196 | 196 | .size = _size, \ |
| 197 | 197 | } |
| 198 | 198 | |
| 199 | −#define __BIN_ATTR_WO(_name) { \ | |
| 199 | +#define __BIN_ATTR_WO(_name, _size) { \ | |
| 200 | 200 | .attr = { .name = __stringify(_name), .mode = 0200 }, \ |
| 201 | − .store = _name##_store, \ | |
| 201 | + .write = _name##_write, \ | |
| 202 | 202 | .size = _size, \ |
| 203 | 203 | } |
| 204 | 204 | |
| @@ -48,7 +48,6 @@ struct virtio_vsock_sock { · 47 unmodified lines | ||
| 48 | 48 | |
| 49 | 49 | struct virtio_vsock_pkt { |
| 50 | 50 | struct virtio_vsock_hdr hdr; |
| 51 | − struct work_struct work; | |
| 52 | 51 | struct list_head list; |
| 53 | 52 | /* socket refcnt not held, only use for cancellation */ |
| 54 | 53 | struct vsock_sock *vsk; |