Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0184-5.4.85-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3635 - (hide annotations) (download)
Mon Oct 24 12:34:12 2022 UTC (20 months ago) by niro
File size: 46827 byte(s)
-sync kernel patches
1 niro 3635 diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
2     index fea15cd49fbc7..74ba077e99e56 100644
3     --- a/Documentation/admin-guide/kernel-parameters.txt
4     +++ b/Documentation/admin-guide/kernel-parameters.txt
5     @@ -5151,6 +5151,7 @@
6     device);
7     j = NO_REPORT_LUNS (don't use report luns
8     command, uas only);
9     + k = NO_SAME (do not use WRITE_SAME, uas only)
10     l = NOT_LOCKABLE (don't try to lock and
11     unlock ejectable media, not on uas);
12     m = MAX_SECTORS_64 (don't transfer more
13     diff --git a/Documentation/virt/kvm/mmu.txt b/Documentation/virt/kvm/mmu.txt
14     index dadb29e8738fe..ec072c6bc03f8 100644
15     --- a/Documentation/virt/kvm/mmu.txt
16     +++ b/Documentation/virt/kvm/mmu.txt
17     @@ -420,7 +420,7 @@ If the generation number of the spte does not equal the global generation
18     number, it will ignore the cached MMIO information and handle the page
19     fault through the slow path.
20    
21     -Since only 19 bits are used to store generation-number on mmio spte, all
22     +Since only 18 bits are used to store generation-number on mmio spte, all
23     pages are zapped when there is an overflow.
24    
25     Unfortunately, a single memory access might access kvm_memslots(kvm) multiple
26     diff --git a/Makefile b/Makefile
27     index fe0ab15cfd835..a2a2546fcda80 100644
28     --- a/Makefile
29     +++ b/Makefile
30     @@ -1,7 +1,7 @@
31     # SPDX-License-Identifier: GPL-2.0
32     VERSION = 5
33     PATCHLEVEL = 4
34     -SUBLEVEL = 84
35     +SUBLEVEL = 85
36     EXTRAVERSION =
37     NAME = Kleptomaniac Octopus
38    
39     diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
40     index 17095435c875c..499cb2e727a09 100644
41     --- a/arch/x86/kernel/cpu/resctrl/internal.h
42     +++ b/arch/x86/kernel/cpu/resctrl/internal.h
43     @@ -276,7 +276,6 @@ struct rftype {
44     * struct mbm_state - status for each MBM counter in each domain
45     * @chunks: Total data moved (multiply by rdt_group.mon_scale to get bytes)
46     * @prev_msr Value of IA32_QM_CTR for this RMID last time we read it
47     - * @chunks_bw Total local data moved. Used for bandwidth calculation
48     * @prev_bw_msr:Value of previous IA32_QM_CTR for bandwidth counting
49     * @prev_bw The most recent bandwidth in MBps
50     * @delta_bw Difference between the current and previous bandwidth
51     @@ -285,7 +284,6 @@ struct rftype {
52     struct mbm_state {
53     u64 chunks;
54     u64 prev_msr;
55     - u64 chunks_bw;
56     u64 prev_bw_msr;
57     u32 prev_bw;
58     u32 delta_bw;
59     diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
60     index 0cf4f87f60126..50f683ecd2c6c 100644
61     --- a/arch/x86/kernel/cpu/resctrl/monitor.c
62     +++ b/arch/x86/kernel/cpu/resctrl/monitor.c
63     @@ -280,8 +280,6 @@ static void mbm_bw_count(u32 rmid, struct rmid_read *rr)
64     return;
65    
66     chunks = mbm_overflow_count(m->prev_bw_msr, tval);
67     - m->chunks_bw += chunks;
68     - m->chunks = m->chunks_bw;
69     cur_bw = (chunks * r->mon_scale) >> 20;
70    
71     if (m->delta_comp)
72     @@ -451,15 +449,14 @@ static void mbm_update(struct rdt_domain *d, int rmid)
73     }
74     if (is_mbm_local_enabled()) {
75     rr.evtid = QOS_L3_MBM_LOCAL_EVENT_ID;
76     + __mon_event_count(rmid, &rr);
77    
78     /*
79     * Call the MBA software controller only for the
80     * control groups and when user has enabled
81     * the software controller explicitly.
82     */
83     - if (!is_mba_sc(NULL))
84     - __mon_event_count(rmid, &rr);
85     - else
86     + if (is_mba_sc(NULL))
87     mbm_bw_count(rmid, &rr);
88     }
89     }
90     diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
91     index b90e8fd2f6ced..47c27c6e38426 100644
92     --- a/arch/x86/kvm/mmu.c
93     +++ b/arch/x86/kvm/mmu.c
94     @@ -407,11 +407,11 @@ static inline bool is_access_track_spte(u64 spte)
95     }
96    
97     /*
98     - * Due to limited space in PTEs, the MMIO generation is a 19 bit subset of
99     + * Due to limited space in PTEs, the MMIO generation is a 18 bit subset of
100     * the memslots generation and is derived as follows:
101     *
102     * Bits 0-8 of the MMIO generation are propagated to spte bits 3-11
103     - * Bits 9-18 of the MMIO generation are propagated to spte bits 52-61
104     + * Bits 9-17 of the MMIO generation are propagated to spte bits 54-62
105     *
106     * The KVM_MEMSLOT_GEN_UPDATE_IN_PROGRESS flag is intentionally not included in
107     * the MMIO generation number, as doing so would require stealing a bit from
108     @@ -420,18 +420,29 @@ static inline bool is_access_track_spte(u64 spte)
109     * requires a full MMU zap). The flag is instead explicitly queried when
110     * checking for MMIO spte cache hits.
111     */
112     -#define MMIO_SPTE_GEN_MASK GENMASK_ULL(17, 0)
113    
114     #define MMIO_SPTE_GEN_LOW_START 3
115     #define MMIO_SPTE_GEN_LOW_END 11
116     -#define MMIO_SPTE_GEN_LOW_MASK GENMASK_ULL(MMIO_SPTE_GEN_LOW_END, \
117     - MMIO_SPTE_GEN_LOW_START)
118    
119     #define MMIO_SPTE_GEN_HIGH_START PT64_SECOND_AVAIL_BITS_SHIFT
120     #define MMIO_SPTE_GEN_HIGH_END 62
121     +
122     +#define MMIO_SPTE_GEN_LOW_MASK GENMASK_ULL(MMIO_SPTE_GEN_LOW_END, \
123     + MMIO_SPTE_GEN_LOW_START)
124     #define MMIO_SPTE_GEN_HIGH_MASK GENMASK_ULL(MMIO_SPTE_GEN_HIGH_END, \
125     MMIO_SPTE_GEN_HIGH_START)
126    
127     +#define MMIO_SPTE_GEN_LOW_BITS (MMIO_SPTE_GEN_LOW_END - MMIO_SPTE_GEN_LOW_START + 1)
128     +#define MMIO_SPTE_GEN_HIGH_BITS (MMIO_SPTE_GEN_HIGH_END - MMIO_SPTE_GEN_HIGH_START + 1)
129     +
130     +/* remember to adjust the comment above as well if you change these */
131     +static_assert(MMIO_SPTE_GEN_LOW_BITS == 9 && MMIO_SPTE_GEN_HIGH_BITS == 9);
132     +
133     +#define MMIO_SPTE_GEN_LOW_SHIFT (MMIO_SPTE_GEN_LOW_START - 0)
134     +#define MMIO_SPTE_GEN_HIGH_SHIFT (MMIO_SPTE_GEN_HIGH_START - MMIO_SPTE_GEN_LOW_BITS)
135     +
136     +#define MMIO_SPTE_GEN_MASK GENMASK_ULL(MMIO_SPTE_GEN_LOW_BITS + MMIO_SPTE_GEN_HIGH_BITS - 1, 0)
137     +
138     static u64 generation_mmio_spte_mask(u64 gen)
139     {
140     u64 mask;
141     @@ -439,8 +450,8 @@ static u64 generation_mmio_spte_mask(u64 gen)
142     WARN_ON(gen & ~MMIO_SPTE_GEN_MASK);
143     BUILD_BUG_ON((MMIO_SPTE_GEN_HIGH_MASK | MMIO_SPTE_GEN_LOW_MASK) & SPTE_SPECIAL_MASK);
144    
145     - mask = (gen << MMIO_SPTE_GEN_LOW_START) & MMIO_SPTE_GEN_LOW_MASK;
146     - mask |= (gen << MMIO_SPTE_GEN_HIGH_START) & MMIO_SPTE_GEN_HIGH_MASK;
147     + mask = (gen << MMIO_SPTE_GEN_LOW_SHIFT) & MMIO_SPTE_GEN_LOW_MASK;
148     + mask |= (gen << MMIO_SPTE_GEN_HIGH_SHIFT) & MMIO_SPTE_GEN_HIGH_MASK;
149     return mask;
150     }
151    
152     @@ -448,8 +459,8 @@ static u64 get_mmio_spte_generation(u64 spte)
153     {
154     u64 gen;
155    
156     - gen = (spte & MMIO_SPTE_GEN_LOW_MASK) >> MMIO_SPTE_GEN_LOW_START;
157     - gen |= (spte & MMIO_SPTE_GEN_HIGH_MASK) >> MMIO_SPTE_GEN_HIGH_START;
158     + gen = (spte & MMIO_SPTE_GEN_LOW_MASK) >> MMIO_SPTE_GEN_LOW_SHIFT;
159     + gen |= (spte & MMIO_SPTE_GEN_HIGH_MASK) >> MMIO_SPTE_GEN_HIGH_SHIFT;
160     return gen;
161     }
162    
163     diff --git a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c
164     index fcb52efec0753..89121d7ce3e6f 100644
165     --- a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c
166     +++ b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c
167     @@ -141,8 +141,8 @@ static const struct {
168     { ENETC_PM0_R255, "MAC rx 128-255 byte packets" },
169     { ENETC_PM0_R511, "MAC rx 256-511 byte packets" },
170     { ENETC_PM0_R1023, "MAC rx 512-1023 byte packets" },
171     - { ENETC_PM0_R1518, "MAC rx 1024-1518 byte packets" },
172     - { ENETC_PM0_R1519X, "MAC rx 1519 to max-octet packets" },
173     + { ENETC_PM0_R1522, "MAC rx 1024-1522 byte packets" },
174     + { ENETC_PM0_R1523X, "MAC rx 1523 to max-octet packets" },
175     { ENETC_PM0_ROVR, "MAC rx oversized packets" },
176     { ENETC_PM0_RJBR, "MAC rx jabber packets" },
177     { ENETC_PM0_RFRG, "MAC rx fragment packets" },
178     @@ -161,9 +161,13 @@ static const struct {
179     { ENETC_PM0_TBCA, "MAC tx broadcast frames" },
180     { ENETC_PM0_TPKT, "MAC tx packets" },
181     { ENETC_PM0_TUND, "MAC tx undersized packets" },
182     + { ENETC_PM0_T64, "MAC tx 64 byte packets" },
183     { ENETC_PM0_T127, "MAC tx 65-127 byte packets" },
184     + { ENETC_PM0_T255, "MAC tx 128-255 byte packets" },
185     + { ENETC_PM0_T511, "MAC tx 256-511 byte packets" },
186     { ENETC_PM0_T1023, "MAC tx 512-1023 byte packets" },
187     - { ENETC_PM0_T1518, "MAC tx 1024-1518 byte packets" },
188     + { ENETC_PM0_T1522, "MAC tx 1024-1522 byte packets" },
189     + { ENETC_PM0_T1523X, "MAC tx 1523 to max-octet packets" },
190     { ENETC_PM0_TCNP, "MAC tx control packets" },
191     { ENETC_PM0_TDFR, "MAC tx deferred packets" },
192     { ENETC_PM0_TMCOL, "MAC tx multiple collisions" },
193     diff --git a/drivers/net/ethernet/freescale/enetc/enetc_hw.h b/drivers/net/ethernet/freescale/enetc/enetc_hw.h
194     index 88276299f4473..7428f62408a20 100644
195     --- a/drivers/net/ethernet/freescale/enetc/enetc_hw.h
196     +++ b/drivers/net/ethernet/freescale/enetc/enetc_hw.h
197     @@ -239,8 +239,8 @@ enum enetc_bdr_type {TX, RX};
198     #define ENETC_PM0_R255 0x8180
199     #define ENETC_PM0_R511 0x8188
200     #define ENETC_PM0_R1023 0x8190
201     -#define ENETC_PM0_R1518 0x8198
202     -#define ENETC_PM0_R1519X 0x81A0
203     +#define ENETC_PM0_R1522 0x8198
204     +#define ENETC_PM0_R1523X 0x81A0
205     #define ENETC_PM0_ROVR 0x81A8
206     #define ENETC_PM0_RJBR 0x81B0
207     #define ENETC_PM0_RFRG 0x81B8
208     @@ -259,9 +259,13 @@ enum enetc_bdr_type {TX, RX};
209     #define ENETC_PM0_TBCA 0x8250
210     #define ENETC_PM0_TPKT 0x8260
211     #define ENETC_PM0_TUND 0x8268
212     +#define ENETC_PM0_T64 0x8270
213     #define ENETC_PM0_T127 0x8278
214     +#define ENETC_PM0_T255 0x8280
215     +#define ENETC_PM0_T511 0x8288
216     #define ENETC_PM0_T1023 0x8290
217     -#define ENETC_PM0_T1518 0x8298
218     +#define ENETC_PM0_T1522 0x8298
219     +#define ENETC_PM0_T1523X 0x82A0
220     #define ENETC_PM0_TCNP 0x82C0
221     #define ENETC_PM0_TDFR 0x82D0
222     #define ENETC_PM0_TMCOL 0x82D8
223     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h
224     index 38b79321c4c44..de69ebf688577 100644
225     --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h
226     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h
227     @@ -35,8 +35,6 @@
228    
229     #define HCLGE_DBG_DFX_SSU_2_OFFSET 12
230    
231     -#pragma pack(1)
232     -
233     struct hclge_qos_pri_map_cmd {
234     u8 pri0_tc : 4,
235     pri1_tc : 4;
236     @@ -85,8 +83,6 @@ struct hclge_dbg_reg_type_info {
237     struct hclge_dbg_reg_common_msg reg_msg;
238     };
239    
240     -#pragma pack()
241     -
242     static struct hclge_dbg_dfx_message hclge_dbg_bios_common_reg[] = {
243     {false, "Reserved"},
244     {true, "BP_CPU_STATE"},
245     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
246     index 70fd246840e21..b5eb116249dda 100644
247     --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
248     +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
249     @@ -1383,8 +1383,10 @@ static void mlx4_en_tx_timeout(struct net_device *dev)
250     }
251    
252     priv->port_stats.tx_timeout++;
253     - en_dbg(DRV, priv, "Scheduling watchdog\n");
254     - queue_work(mdev->workqueue, &priv->watchdog_task);
255     + if (!test_and_set_bit(MLX4_EN_STATE_FLAG_RESTARTING, &priv->state)) {
256     + en_dbg(DRV, priv, "Scheduling port restart\n");
257     + queue_work(mdev->workqueue, &priv->restart_task);
258     + }
259     }
260    
261    
262     @@ -1738,6 +1740,7 @@ int mlx4_en_start_port(struct net_device *dev)
263     mlx4_en_deactivate_cq(priv, cq);
264     goto tx_err;
265     }
266     + clear_bit(MLX4_EN_TX_RING_STATE_RECOVERING, &tx_ring->state);
267     if (t != TX_XDP) {
268     tx_ring->tx_queue = netdev_get_tx_queue(dev, i);
269     tx_ring->recycle_ring = NULL;
270     @@ -1834,6 +1837,7 @@ int mlx4_en_start_port(struct net_device *dev)
271     local_bh_enable();
272     }
273    
274     + clear_bit(MLX4_EN_STATE_FLAG_RESTARTING, &priv->state);
275     netif_tx_start_all_queues(dev);
276     netif_device_attach(dev);
277    
278     @@ -2004,7 +2008,7 @@ void mlx4_en_stop_port(struct net_device *dev, int detach)
279     static void mlx4_en_restart(struct work_struct *work)
280     {
281     struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv,
282     - watchdog_task);
283     + restart_task);
284     struct mlx4_en_dev *mdev = priv->mdev;
285     struct net_device *dev = priv->dev;
286    
287     @@ -2386,7 +2390,7 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)
288     if (netif_running(dev)) {
289     mutex_lock(&mdev->state_lock);
290     if (!mdev->device_up) {
291     - /* NIC is probably restarting - let watchdog task reset
292     + /* NIC is probably restarting - let restart task reset
293     * the port */
294     en_dbg(DRV, priv, "Change MTU called with card down!?\n");
295     } else {
296     @@ -2395,7 +2399,9 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)
297     if (err) {
298     en_err(priv, "Failed restarting port:%d\n",
299     priv->port);
300     - queue_work(mdev->workqueue, &priv->watchdog_task);
301     + if (!test_and_set_bit(MLX4_EN_STATE_FLAG_RESTARTING,
302     + &priv->state))
303     + queue_work(mdev->workqueue, &priv->restart_task);
304     }
305     }
306     mutex_unlock(&mdev->state_lock);
307     @@ -2865,7 +2871,8 @@ static int mlx4_xdp_set(struct net_device *dev, struct bpf_prog *prog)
308     if (err) {
309     en_err(priv, "Failed starting port %d for XDP change\n",
310     priv->port);
311     - queue_work(mdev->workqueue, &priv->watchdog_task);
312     + if (!test_and_set_bit(MLX4_EN_STATE_FLAG_RESTARTING, &priv->state))
313     + queue_work(mdev->workqueue, &priv->restart_task);
314     }
315     }
316    
317     @@ -3263,7 +3270,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
318     priv->counter_index = MLX4_SINK_COUNTER_INDEX(mdev->dev);
319     spin_lock_init(&priv->stats_lock);
320     INIT_WORK(&priv->rx_mode_task, mlx4_en_do_set_rx_mode);
321     - INIT_WORK(&priv->watchdog_task, mlx4_en_restart);
322     + INIT_WORK(&priv->restart_task, mlx4_en_restart);
323     INIT_WORK(&priv->linkstate_task, mlx4_en_linkstate);
324     INIT_DELAYED_WORK(&priv->stats_task, mlx4_en_do_get_stats);
325     INIT_DELAYED_WORK(&priv->service_task, mlx4_en_service_task);
326     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
327     index 191ead7a7fa59..605c079d48417 100644
328     --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
329     +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
330     @@ -392,6 +392,35 @@ int mlx4_en_free_tx_buf(struct net_device *dev, struct mlx4_en_tx_ring *ring)
331     return cnt;
332     }
333    
334     +static void mlx4_en_handle_err_cqe(struct mlx4_en_priv *priv, struct mlx4_err_cqe *err_cqe,
335     + u16 cqe_index, struct mlx4_en_tx_ring *ring)
336     +{
337     + struct mlx4_en_dev *mdev = priv->mdev;
338     + struct mlx4_en_tx_info *tx_info;
339     + struct mlx4_en_tx_desc *tx_desc;
340     + u16 wqe_index;
341     + int desc_size;
342     +
343     + en_err(priv, "CQE error - cqn 0x%x, ci 0x%x, vendor syndrome: 0x%x syndrome: 0x%x\n",
344     + ring->sp_cqn, cqe_index, err_cqe->vendor_err_syndrome, err_cqe->syndrome);
345     + print_hex_dump(KERN_WARNING, "", DUMP_PREFIX_OFFSET, 16, 1, err_cqe, sizeof(*err_cqe),
346     + false);
347     +
348     + wqe_index = be16_to_cpu(err_cqe->wqe_index) & ring->size_mask;
349     + tx_info = &ring->tx_info[wqe_index];
350     + desc_size = tx_info->nr_txbb << LOG_TXBB_SIZE;
351     + en_err(priv, "Related WQE - qpn 0x%x, wqe index 0x%x, wqe size 0x%x\n", ring->qpn,
352     + wqe_index, desc_size);
353     + tx_desc = ring->buf + (wqe_index << LOG_TXBB_SIZE);
354     + print_hex_dump(KERN_WARNING, "", DUMP_PREFIX_OFFSET, 16, 1, tx_desc, desc_size, false);
355     +
356     + if (test_and_set_bit(MLX4_EN_STATE_FLAG_RESTARTING, &priv->state))
357     + return;
358     +
359     + en_err(priv, "Scheduling port restart\n");
360     + queue_work(mdev->workqueue, &priv->restart_task);
361     +}
362     +
363     bool mlx4_en_process_tx_cq(struct net_device *dev,
364     struct mlx4_en_cq *cq, int napi_budget)
365     {
366     @@ -438,13 +467,10 @@ bool mlx4_en_process_tx_cq(struct net_device *dev,
367     dma_rmb();
368    
369     if (unlikely((cqe->owner_sr_opcode & MLX4_CQE_OPCODE_MASK) ==
370     - MLX4_CQE_OPCODE_ERROR)) {
371     - struct mlx4_err_cqe *cqe_err = (struct mlx4_err_cqe *)cqe;
372     -
373     - en_err(priv, "CQE error - vendor syndrome: 0x%x syndrome: 0x%x\n",
374     - cqe_err->vendor_err_syndrome,
375     - cqe_err->syndrome);
376     - }
377     + MLX4_CQE_OPCODE_ERROR))
378     + if (!test_and_set_bit(MLX4_EN_TX_RING_STATE_RECOVERING, &ring->state))
379     + mlx4_en_handle_err_cqe(priv, (struct mlx4_err_cqe *)cqe, index,
380     + ring);
381    
382     /* Skip over last polled CQE */
383     new_index = be16_to_cpu(cqe->wqe_index) & size_mask;
384     diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
385     index 630f15977f091..a2f69c6f0c79f 100644
386     --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
387     +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
388     @@ -271,6 +271,10 @@ struct mlx4_en_page_cache {
389     } buf[MLX4_EN_CACHE_SIZE];
390     };
391    
392     +enum {
393     + MLX4_EN_TX_RING_STATE_RECOVERING,
394     +};
395     +
396     struct mlx4_en_priv;
397    
398     struct mlx4_en_tx_ring {
399     @@ -317,6 +321,7 @@ struct mlx4_en_tx_ring {
400     * Only queue_stopped might be used if BQL is not properly working.
401     */
402     unsigned long queue_stopped;
403     + unsigned long state;
404     struct mlx4_hwq_resources sp_wqres;
405     struct mlx4_qp sp_qp;
406     struct mlx4_qp_context sp_context;
407     @@ -530,6 +535,10 @@ struct mlx4_en_stats_bitmap {
408     struct mutex mutex; /* for mutual access to stats bitmap */
409     };
410    
411     +enum {
412     + MLX4_EN_STATE_FLAG_RESTARTING,
413     +};
414     +
415     struct mlx4_en_priv {
416     struct mlx4_en_dev *mdev;
417     struct mlx4_en_port_profile *prof;
418     @@ -595,7 +604,7 @@ struct mlx4_en_priv {
419     struct mlx4_en_cq *rx_cq[MAX_RX_RINGS];
420     struct mlx4_qp drop_qp;
421     struct work_struct rx_mode_task;
422     - struct work_struct watchdog_task;
423     + struct work_struct restart_task;
424     struct work_struct linkstate_task;
425     struct delayed_work stats_task;
426     struct delayed_work service_task;
427     @@ -643,6 +652,7 @@ struct mlx4_en_priv {
428     u32 pflags;
429     u8 rss_key[MLX4_EN_RSS_KEY_SIZE];
430     u8 rss_hash_fn;
431     + unsigned long state;
432     };
433    
434     enum mlx4_en_wol {
435     diff --git a/drivers/net/ethernet/microchip/lan743x_ethtool.c b/drivers/net/ethernet/microchip/lan743x_ethtool.c
436     index 3a0b289d97719..eedec13460787 100644
437     --- a/drivers/net/ethernet/microchip/lan743x_ethtool.c
438     +++ b/drivers/net/ethernet/microchip/lan743x_ethtool.c
439     @@ -780,7 +780,9 @@ static void lan743x_ethtool_get_wol(struct net_device *netdev,
440    
441     wol->supported = 0;
442     wol->wolopts = 0;
443     - phy_ethtool_get_wol(netdev->phydev, wol);
444     +
445     + if (netdev->phydev)
446     + phy_ethtool_get_wol(netdev->phydev, wol);
447    
448     wol->supported |= WAKE_BCAST | WAKE_UCAST | WAKE_MCAST |
449     WAKE_MAGIC | WAKE_PHY | WAKE_ARP;
450     @@ -809,9 +811,8 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,
451    
452     device_set_wakeup_enable(&adapter->pdev->dev, (bool)wol->wolopts);
453    
454     - phy_ethtool_set_wol(netdev->phydev, wol);
455     -
456     - return 0;
457     + return netdev->phydev ? phy_ethtool_set_wol(netdev->phydev, wol)
458     + : -ENETDOWN;
459     }
460     #endif /* CONFIG_PM */
461    
462     diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c
463     index d1d6ba9cdccdd..2788d4c5b1926 100644
464     --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c
465     +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c
466     @@ -29,7 +29,6 @@
467     #define PRG_ETH0_EXT_RMII_MODE 4
468    
469     /* mux to choose between fclk_div2 (bit unset) and mpll2 (bit set) */
470     -#define PRG_ETH0_CLK_M250_SEL_SHIFT 4
471     #define PRG_ETH0_CLK_M250_SEL_MASK GENMASK(4, 4)
472    
473     #define PRG_ETH0_TXDLY_SHIFT 5
474     @@ -143,8 +142,9 @@ static int meson8b_init_rgmii_tx_clk(struct meson8b_dwmac *dwmac)
475     }
476    
477     clk_configs->m250_mux.reg = dwmac->regs + PRG_ETH0;
478     - clk_configs->m250_mux.shift = PRG_ETH0_CLK_M250_SEL_SHIFT;
479     - clk_configs->m250_mux.mask = PRG_ETH0_CLK_M250_SEL_MASK;
480     + clk_configs->m250_mux.shift = __ffs(PRG_ETH0_CLK_M250_SEL_MASK);
481     + clk_configs->m250_mux.mask = PRG_ETH0_CLK_M250_SEL_MASK >>
482     + clk_configs->m250_mux.shift;
483     clk = meson8b_dwmac_register_clk(dwmac, "m250_sel", mux_parent_names,
484     MUX_CLK_NUM_PARENTS, &clk_mux_ops,
485     &clk_configs->m250_mux.hw);
486     diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
487     index 189cdb7633671..18c5a9bb6759c 100644
488     --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
489     +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
490     @@ -1441,6 +1441,19 @@ static void dma_free_tx_skbufs(struct stmmac_priv *priv, u32 queue)
491     stmmac_free_tx_buffer(priv, queue, i);
492     }
493    
494     +/**
495     + * stmmac_free_tx_skbufs - free TX skb buffers
496     + * @priv: private structure
497     + */
498     +static void stmmac_free_tx_skbufs(struct stmmac_priv *priv)
499     +{
500     + u32 tx_queue_cnt = priv->plat->tx_queues_to_use;
501     + u32 queue;
502     +
503     + for (queue = 0; queue < tx_queue_cnt; queue++)
504     + dma_free_tx_skbufs(priv, queue);
505     +}
506     +
507     /**
508     * free_dma_rx_desc_resources - free RX dma desc resources
509     * @priv: private structure
510     @@ -2745,9 +2758,6 @@ static int stmmac_release(struct net_device *dev)
511     struct stmmac_priv *priv = netdev_priv(dev);
512     u32 chan;
513    
514     - if (priv->eee_enabled)
515     - del_timer_sync(&priv->eee_ctrl_timer);
516     -
517     /* Stop and disconnect the PHY */
518     phylink_stop(priv->phylink);
519     phylink_disconnect_phy(priv->phylink);
520     @@ -2764,6 +2774,11 @@ static int stmmac_release(struct net_device *dev)
521     if (priv->lpi_irq > 0)
522     free_irq(priv->lpi_irq, dev);
523    
524     + if (priv->eee_enabled) {
525     + priv->tx_path_in_lpi_mode = false;
526     + del_timer_sync(&priv->eee_ctrl_timer);
527     + }
528     +
529     /* Stop TX/RX DMA and clear the descriptors */
530     stmmac_stop_all_dma(priv);
531    
532     @@ -4748,6 +4763,11 @@ int stmmac_suspend(struct device *dev)
533     for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
534     del_timer_sync(&priv->tx_queue[chan].txtimer);
535    
536     + if (priv->eee_enabled) {
537     + priv->tx_path_in_lpi_mode = false;
538     + del_timer_sync(&priv->eee_ctrl_timer);
539     + }
540     +
541     /* Stop TX/RX DMA */
542     stmmac_stop_all_dma(priv);
543    
544     @@ -4846,6 +4866,7 @@ int stmmac_resume(struct device *dev)
545    
546     stmmac_reset_queues_param(priv);
547    
548     + stmmac_free_tx_skbufs(priv);
549     stmmac_clear_descriptors(priv);
550    
551     stmmac_hw_setup(ndev, false);
552     diff --git a/drivers/net/ethernet/xilinx/ll_temac_main.c b/drivers/net/ethernet/xilinx/ll_temac_main.c
553     index eb480204cdbeb..5b8451c58aa4c 100644
554     --- a/drivers/net/ethernet/xilinx/ll_temac_main.c
555     +++ b/drivers/net/ethernet/xilinx/ll_temac_main.c
556     @@ -1425,9 +1425,7 @@ static int temac_probe(struct platform_device *pdev)
557     of_node_put(dma_np);
558     } else if (pdata) {
559     /* 2nd memory resource specifies DMA registers */
560     - res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
561     - lp->sdma_regs = devm_ioremap_nocache(&pdev->dev, res->start,
562     - resource_size(res));
563     + lp->sdma_regs = devm_platform_ioremap_resource(pdev, 1);
564     if (IS_ERR(lp->sdma_regs)) {
565     dev_err(&pdev->dev,
566     "could not map DMA registers\n");
567     diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
568     index 0c7d746c03304..14dfb92783456 100644
569     --- a/drivers/net/vrf.c
570     +++ b/drivers/net/vrf.c
571     @@ -1038,11 +1038,17 @@ static struct sk_buff *vrf_ip6_rcv(struct net_device *vrf_dev,
572     int orig_iif = skb->skb_iif;
573     bool need_strict = rt6_need_strict(&ipv6_hdr(skb)->daddr);
574     bool is_ndisc = ipv6_ndisc_frame(skb);
575     + bool is_ll_src;
576    
577     /* loopback, multicast & non-ND link-local traffic; do not push through
578     - * packet taps again. Reset pkt_type for upper layers to process skb
579     + * packet taps again. Reset pkt_type for upper layers to process skb.
580     + * for packets with lladdr src, however, skip so that the dst can be
581     + * determine at input using original ifindex in the case that daddr
582     + * needs strict
583     */
584     - if (skb->pkt_type == PACKET_LOOPBACK || (need_strict && !is_ndisc)) {
585     + is_ll_src = ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL;
586     + if (skb->pkt_type == PACKET_LOOPBACK ||
587     + (need_strict && !is_ndisc && !is_ll_src)) {
588     skb->dev = vrf_dev;
589     skb->skb_iif = vrf_dev->ifindex;
590     IP6CB(skb)->flags |= IP6SKB_L3SLAVE;
591     diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
592     index f2c6d9d3bb28f..efe793a2fc65d 100644
593     --- a/drivers/tty/serial/8250/8250_omap.c
594     +++ b/drivers/tty/serial/8250/8250_omap.c
595     @@ -170,11 +170,6 @@ static void omap_8250_mdr1_errataset(struct uart_8250_port *up,
596     struct omap8250_priv *priv)
597     {
598     u8 timeout = 255;
599     - u8 old_mdr1;
600     -
601     - old_mdr1 = serial_in(up, UART_OMAP_MDR1);
602     - if (old_mdr1 == priv->mdr1)
603     - return;
604    
605     serial_out(up, UART_OMAP_MDR1, priv->mdr1);
606     udelay(2);
607     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
608     index b55c3a699fc65..c1592403222f5 100644
609     --- a/drivers/usb/core/quirks.c
610     +++ b/drivers/usb/core/quirks.c
611     @@ -342,6 +342,9 @@ static const struct usb_device_id usb_quirk_list[] = {
612     { USB_DEVICE(0x06a3, 0x0006), .driver_info =
613     USB_QUIRK_CONFIG_INTF_STRINGS },
614    
615     + /* Agfa SNAPSCAN 1212U */
616     + { USB_DEVICE(0x06bd, 0x0001), .driver_info = USB_QUIRK_RESET_RESUME },
617     +
618     /* Guillemot Webcam Hercules Dualpix Exchange (2nd ID) */
619     { USB_DEVICE(0x06f8, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME },
620    
621     diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
622     index 4c9d1e49d5ed1..a49c27b2ba16d 100644
623     --- a/drivers/usb/gadget/udc/dummy_hcd.c
624     +++ b/drivers/usb/gadget/udc/dummy_hcd.c
625     @@ -2733,7 +2733,7 @@ static int __init init(void)
626     {
627     int retval = -ENOMEM;
628     int i;
629     - struct dummy *dum[MAX_NUM_UDC];
630     + struct dummy *dum[MAX_NUM_UDC] = {};
631    
632     if (usb_disabled())
633     return -ENODEV;
634     diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
635     index 933936abb6fb7..1a274f8a5bf11 100644
636     --- a/drivers/usb/host/xhci-hub.c
637     +++ b/drivers/usb/host/xhci-hub.c
638     @@ -1705,6 +1705,10 @@ retry:
639     hcd->state = HC_STATE_SUSPENDED;
640     bus_state->next_statechange = jiffies + msecs_to_jiffies(10);
641     spin_unlock_irqrestore(&xhci->lock, flags);
642     +
643     + if (bus_state->bus_suspended)
644     + usleep_range(5000, 10000);
645     +
646     return 0;
647     }
648    
649     diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
650     index 3c90c14390d60..d08b0079eecb1 100644
651     --- a/drivers/usb/host/xhci-pci.c
652     +++ b/drivers/usb/host/xhci-pci.c
653     @@ -45,6 +45,7 @@
654     #define PCI_DEVICE_ID_INTEL_DNV_XHCI 0x19d0
655     #define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_XHCI 0x15b5
656     #define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_XHCI 0x15b6
657     +#define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_LP_XHCI 0x15c1
658     #define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_2C_XHCI 0x15db
659     #define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_4C_XHCI 0x15d4
660     #define PCI_DEVICE_ID_INTEL_TITAN_RIDGE_2C_XHCI 0x15e9
661     @@ -220,6 +221,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
662     if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
663     (pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_XHCI ||
664     pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_XHCI ||
665     + pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_LP_XHCI ||
666     pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_2C_XHCI ||
667     pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_4C_XHCI ||
668     pdev->device == PCI_DEVICE_ID_INTEL_TITAN_RIDGE_2C_XHCI ||
669     diff --git a/drivers/usb/misc/sisusbvga/Kconfig b/drivers/usb/misc/sisusbvga/Kconfig
670     index 9b632ab24f033..df7404c526c8b 100644
671     --- a/drivers/usb/misc/sisusbvga/Kconfig
672     +++ b/drivers/usb/misc/sisusbvga/Kconfig
673     @@ -16,7 +16,7 @@ config USB_SISUSBVGA
674    
675     config USB_SISUSBVGA_CON
676     bool "Text console and mode switching support" if USB_SISUSBVGA
677     - depends on VT
678     + depends on VT && BROKEN
679     select FONT_8x16
680     ---help---
681     Say Y here if you want a VGA text console via the USB dongle or
682     diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
683     index 1ec1baa7604ed..678903d1ce4da 100644
684     --- a/drivers/usb/storage/uas.c
685     +++ b/drivers/usb/storage/uas.c
686     @@ -867,6 +867,9 @@ static int uas_slave_configure(struct scsi_device *sdev)
687     if (devinfo->flags & US_FL_NO_READ_CAPACITY_16)
688     sdev->no_read_capacity_16 = 1;
689    
690     + /* Some disks cannot handle WRITE_SAME */
691     + if (devinfo->flags & US_FL_NO_SAME)
692     + sdev->no_write_same = 1;
693     /*
694     * Some disks return the total number of blocks in response
695     * to READ CAPACITY rather than the highest block number.
696     diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
697     index dcdfcdfd2ad13..749c69be091cc 100644
698     --- a/drivers/usb/storage/unusual_uas.h
699     +++ b/drivers/usb/storage/unusual_uas.h
700     @@ -35,12 +35,15 @@ UNUSUAL_DEV(0x054c, 0x087d, 0x0000, 0x9999,
701     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
702     US_FL_NO_REPORT_OPCODES),
703    
704     -/* Reported-by: Julian Groß <julian.g@posteo.de> */
705     +/*
706     + * Initially Reported-by: Julian Groß <julian.g@posteo.de>
707     + * Further reports David C. Partridge <david.partridge@perdrix.co.uk>
708     + */
709     UNUSUAL_DEV(0x059f, 0x105f, 0x0000, 0x9999,
710     "LaCie",
711     "2Big Quadra USB3",
712     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
713     - US_FL_NO_REPORT_OPCODES),
714     + US_FL_NO_REPORT_OPCODES | US_FL_NO_SAME),
715    
716     /*
717     * Apricorn USB3 dongle sometimes returns "USBSUSBSUSBS" in response to SCSI
718     diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
719     index 9a79cd9762f31..2349dfa3b1762 100644
720     --- a/drivers/usb/storage/usb.c
721     +++ b/drivers/usb/storage/usb.c
722     @@ -541,6 +541,9 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags)
723     case 'j':
724     f |= US_FL_NO_REPORT_LUNS;
725     break;
726     + case 'k':
727     + f |= US_FL_NO_SAME;
728     + break;
729     case 'l':
730     f |= US_FL_NOT_LOCKABLE;
731     break;
732     diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h
733     index 000a5954b2e89..a7f7ebdd3069e 100644
734     --- a/include/linux/usb_usual.h
735     +++ b/include/linux/usb_usual.h
736     @@ -84,6 +84,8 @@
737     /* Cannot handle REPORT_LUNS */ \
738     US_FLAG(ALWAYS_SYNC, 0x20000000) \
739     /* lies about caching, so always sync */ \
740     + US_FLAG(NO_SAME, 0x40000000) \
741     + /* Cannot handle WRITE_SAME */ \
742    
743     #define US_FLAG(name, value) US_FL_##name = value ,
744     enum { US_DO_ALL_FLAGS };
745     diff --git a/include/uapi/linux/ptrace.h b/include/uapi/linux/ptrace.h
746     index a71b6e3b03ebc..83ee45fa634b9 100644
747     --- a/include/uapi/linux/ptrace.h
748     +++ b/include/uapi/linux/ptrace.h
749     @@ -81,7 +81,8 @@ struct seccomp_metadata {
750    
751     struct ptrace_syscall_info {
752     __u8 op; /* PTRACE_SYSCALL_INFO_* */
753     - __u32 arch __attribute__((__aligned__(sizeof(__u32))));
754     + __u8 pad[3];
755     + __u32 arch;
756     __u64 instruction_pointer;
757     __u64 stack_pointer;
758     union {
759     diff --git a/kernel/sched/membarrier.c b/kernel/sched/membarrier.c
760     index 168479a7d61b8..be0ca3306be8c 100644
761     --- a/kernel/sched/membarrier.c
762     +++ b/kernel/sched/membarrier.c
763     @@ -30,6 +30,23 @@ static void ipi_mb(void *info)
764     smp_mb(); /* IPIs should be serializing but paranoid. */
765     }
766    
767     +static void ipi_sync_core(void *info)
768     +{
769     + /*
770     + * The smp_mb() in membarrier after all the IPIs is supposed to
771     + * ensure that memory on remote CPUs that occur before the IPI
772     + * become visible to membarrier()'s caller -- see scenario B in
773     + * the big comment at the top of this file.
774     + *
775     + * A sync_core() would provide this guarantee, but
776     + * sync_core_before_usermode() might end up being deferred until
777     + * after membarrier()'s smp_mb().
778     + */
779     + smp_mb(); /* IPIs should be serializing but paranoid. */
780     +
781     + sync_core_before_usermode();
782     +}
783     +
784     static void ipi_sync_rq_state(void *info)
785     {
786     struct mm_struct *mm = (struct mm_struct *) info;
787     @@ -134,6 +151,7 @@ static int membarrier_private_expedited(int flags)
788     int cpu;
789     cpumask_var_t tmpmask;
790     struct mm_struct *mm = current->mm;
791     + smp_call_func_t ipi_func = ipi_mb;
792    
793     if (flags & MEMBARRIER_FLAG_SYNC_CORE) {
794     if (!IS_ENABLED(CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE))
795     @@ -141,6 +159,7 @@ static int membarrier_private_expedited(int flags)
796     if (!(atomic_read(&mm->membarrier_state) &
797     MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY))
798     return -EPERM;
799     + ipi_func = ipi_sync_core;
800     } else {
801     if (!(atomic_read(&mm->membarrier_state) &
802     MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY))
803     @@ -181,7 +200,7 @@ static int membarrier_private_expedited(int flags)
804     rcu_read_unlock();
805    
806     preempt_disable();
807     - smp_call_function_many(tmpmask, ipi_mb, NULL, 1);
808     + smp_call_function_many(tmpmask, ipi_func, NULL, 1);
809     preempt_enable();
810    
811     free_cpumask_var(tmpmask);
812     diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
813     index b99efa42e81dc..0dd8984a261da 100644
814     --- a/net/bridge/br_device.c
815     +++ b/net/bridge/br_device.c
816     @@ -168,6 +168,9 @@ static int br_dev_open(struct net_device *dev)
817     br_stp_enable_bridge(br);
818     br_multicast_open(br);
819    
820     + if (br_opt_get(br, BROPT_MULTICAST_ENABLED))
821     + br_multicast_join_snoopers(br);
822     +
823     return 0;
824     }
825    
826     @@ -188,6 +191,9 @@ static int br_dev_stop(struct net_device *dev)
827     br_stp_disable_bridge(br);
828     br_multicast_stop(br);
829    
830     + if (br_opt_get(br, BROPT_MULTICAST_ENABLED))
831     + br_multicast_leave_snoopers(br);
832     +
833     netif_stop_queue(dev);
834    
835     return 0;
836     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
837     index ee2902b51d45a..066cd3c59cfdb 100644
838     --- a/net/bridge/br_multicast.c
839     +++ b/net/bridge/br_multicast.c
840     @@ -1848,7 +1848,7 @@ static inline void br_ip6_multicast_join_snoopers(struct net_bridge *br)
841     }
842     #endif
843    
844     -static void br_multicast_join_snoopers(struct net_bridge *br)
845     +void br_multicast_join_snoopers(struct net_bridge *br)
846     {
847     br_ip4_multicast_join_snoopers(br);
848     br_ip6_multicast_join_snoopers(br);
849     @@ -1879,7 +1879,7 @@ static inline void br_ip6_multicast_leave_snoopers(struct net_bridge *br)
850     }
851     #endif
852    
853     -static void br_multicast_leave_snoopers(struct net_bridge *br)
854     +void br_multicast_leave_snoopers(struct net_bridge *br)
855     {
856     br_ip4_multicast_leave_snoopers(br);
857     br_ip6_multicast_leave_snoopers(br);
858     @@ -1898,9 +1898,6 @@ static void __br_multicast_open(struct net_bridge *br,
859    
860     void br_multicast_open(struct net_bridge *br)
861     {
862     - if (br_opt_get(br, BROPT_MULTICAST_ENABLED))
863     - br_multicast_join_snoopers(br);
864     -
865     __br_multicast_open(br, &br->ip4_own_query);
866     #if IS_ENABLED(CONFIG_IPV6)
867     __br_multicast_open(br, &br->ip6_own_query);
868     @@ -1916,9 +1913,6 @@ void br_multicast_stop(struct net_bridge *br)
869     del_timer_sync(&br->ip6_other_query.timer);
870     del_timer_sync(&br->ip6_own_query.timer);
871     #endif
872     -
873     - if (br_opt_get(br, BROPT_MULTICAST_ENABLED))
874     - br_multicast_leave_snoopers(br);
875     }
876    
877     void br_multicast_dev_del(struct net_bridge *br)
878     @@ -2049,6 +2043,7 @@ static void br_multicast_start_querier(struct net_bridge *br,
879     int br_multicast_toggle(struct net_bridge *br, unsigned long val)
880     {
881     struct net_bridge_port *port;
882     + bool change_snoopers = false;
883    
884     spin_lock_bh(&br->multicast_lock);
885     if (!!br_opt_get(br, BROPT_MULTICAST_ENABLED) == !!val)
886     @@ -2057,7 +2052,7 @@ int br_multicast_toggle(struct net_bridge *br, unsigned long val)
887     br_mc_disabled_update(br->dev, val);
888     br_opt_toggle(br, BROPT_MULTICAST_ENABLED, !!val);
889     if (!br_opt_get(br, BROPT_MULTICAST_ENABLED)) {
890     - br_multicast_leave_snoopers(br);
891     + change_snoopers = true;
892     goto unlock;
893     }
894    
895     @@ -2068,9 +2063,30 @@ int br_multicast_toggle(struct net_bridge *br, unsigned long val)
896     list_for_each_entry(port, &br->port_list, list)
897     __br_multicast_enable_port(port);
898    
899     + change_snoopers = true;
900     +
901     unlock:
902     spin_unlock_bh(&br->multicast_lock);
903    
904     + /* br_multicast_join_snoopers has the potential to cause
905     + * an MLD Report/Leave to be delivered to br_multicast_rcv,
906     + * which would in turn call br_multicast_add_group, which would
907     + * attempt to acquire multicast_lock. This function should be
908     + * called after the lock has been released to avoid deadlocks on
909     + * multicast_lock.
910     + *
911     + * br_multicast_leave_snoopers does not have the problem since
912     + * br_multicast_rcv first checks BROPT_MULTICAST_ENABLED, and
913     + * returns without calling br_multicast_ipv4/6_rcv if it's not
914     + * enabled. Moved both functions out just for symmetry.
915     + */
916     + if (change_snoopers) {
917     + if (br_opt_get(br, BROPT_MULTICAST_ENABLED))
918     + br_multicast_join_snoopers(br);
919     + else
920     + br_multicast_leave_snoopers(br);
921     + }
922     +
923     return 0;
924     }
925    
926     diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
927     index cecb4223440e7..7615c2210e0da 100644
928     --- a/net/bridge/br_private.h
929     +++ b/net/bridge/br_private.h
930     @@ -665,6 +665,8 @@ void br_multicast_del_port(struct net_bridge_port *port);
931     void br_multicast_enable_port(struct net_bridge_port *port);
932     void br_multicast_disable_port(struct net_bridge_port *port);
933     void br_multicast_init(struct net_bridge *br);
934     +void br_multicast_join_snoopers(struct net_bridge *br);
935     +void br_multicast_leave_snoopers(struct net_bridge *br);
936     void br_multicast_open(struct net_bridge *br);
937     void br_multicast_stop(struct net_bridge *br);
938     void br_multicast_dev_del(struct net_bridge *br);
939     @@ -792,6 +794,14 @@ static inline void br_multicast_init(struct net_bridge *br)
940     {
941     }
942    
943     +static inline void br_multicast_join_snoopers(struct net_bridge *br)
944     +{
945     +}
946     +
947     +static inline void br_multicast_leave_snoopers(struct net_bridge *br)
948     +{
949     +}
950     +
951     static inline void br_multicast_open(struct net_bridge *br)
952     {
953     }
954     diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c
955     index 48413b5eb61fc..9257292bd1aed 100644
956     --- a/net/bridge/br_vlan.c
957     +++ b/net/bridge/br_vlan.c
958     @@ -260,8 +260,10 @@ static int __vlan_add(struct net_bridge_vlan *v, u16 flags,
959     }
960    
961     masterv = br_vlan_get_master(br, v->vid, extack);
962     - if (!masterv)
963     + if (!masterv) {
964     + err = -ENOMEM;
965     goto out_filt;
966     + }
967     v->brvlan = masterv;
968     if (br_opt_get(br, BROPT_VLAN_STATS_PER_PORT)) {
969     v->stats = netdev_alloc_pcpu_stats(struct br_vlan_stats);
970     diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
971     index ed2ab03cf971c..da994f7e3def9 100644
972     --- a/net/ipv4/fib_frontend.c
973     +++ b/net/ipv4/fib_frontend.c
974     @@ -835,7 +835,7 @@ static int rtm_to_fib_config(struct net *net, struct sk_buff *skb,
975     if (has_gw && has_via) {
976     NL_SET_ERR_MSG(extack,
977     "Nexthop configuration can not contain both GATEWAY and VIA");
978     - goto errout;
979     + return -EINVAL;
980     }
981    
982     return 0;
983     diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
984     index 54fd6bc5adcca..adace90f49fac 100644
985     --- a/net/ipv4/tcp_input.c
986     +++ b/net/ipv4/tcp_input.c
987     @@ -446,7 +446,6 @@ void tcp_init_buffer_space(struct sock *sk)
988     if (!(sk->sk_userlocks & SOCK_SNDBUF_LOCK))
989     tcp_sndbuf_expand(sk);
990    
991     - tp->rcvq_space.space = min_t(u32, tp->rcv_wnd, TCP_INIT_CWND * tp->advmss);
992     tcp_mstamp_refresh(tp);
993     tp->rcvq_space.time = tp->tcp_mstamp;
994     tp->rcvq_space.seq = tp->copied_seq;
995     @@ -470,6 +469,8 @@ void tcp_init_buffer_space(struct sock *sk)
996    
997     tp->rcv_ssthresh = min(tp->rcv_ssthresh, tp->window_clamp);
998     tp->snd_cwnd_stamp = tcp_jiffies32;
999     + tp->rcvq_space.space = min3(tp->rcv_ssthresh, tp->rcv_wnd,
1000     + (u32)TCP_INIT_CWND * tp->advmss);
1001     }
1002    
1003     /* 4. Recalculate window clamp after socket hit its memory bounds. */
1004     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
1005     index 4407193bd7029..5e311e6a31d51 100644
1006     --- a/net/ipv4/tcp_output.c
1007     +++ b/net/ipv4/tcp_output.c
1008     @@ -1654,7 +1654,8 @@ static void tcp_cwnd_validate(struct sock *sk, bool is_cwnd_limited)
1009     * window, and remember whether we were cwnd-limited then.
1010     */
1011     if (!before(tp->snd_una, tp->max_packets_seq) ||
1012     - tp->packets_out > tp->max_packets_out) {
1013     + tp->packets_out > tp->max_packets_out ||
1014     + is_cwnd_limited) {
1015     tp->max_packets_out = tp->packets_out;
1016     tp->max_packets_seq = tp->snd_nxt;
1017     tp->is_cwnd_limited = is_cwnd_limited;
1018     @@ -2476,6 +2477,10 @@ repair:
1019     else
1020     tcp_chrono_stop(sk, TCP_CHRONO_RWND_LIMITED);
1021    
1022     + is_cwnd_limited |= (tcp_packets_in_flight(tp) >= tp->snd_cwnd);
1023     + if (likely(sent_pkts || is_cwnd_limited))
1024     + tcp_cwnd_validate(sk, is_cwnd_limited);
1025     +
1026     if (likely(sent_pkts)) {
1027     if (tcp_in_cwnd_reduction(sk))
1028     tp->prr_out += sent_pkts;
1029     @@ -2483,8 +2488,6 @@ repair:
1030     /* Send one loss probe per tail loss episode. */
1031     if (push_one != 2)
1032     tcp_schedule_loss_probe(sk, false);
1033     - is_cwnd_limited |= (tcp_packets_in_flight(tp) >= tp->snd_cwnd);
1034     - tcp_cwnd_validate(sk, is_cwnd_limited);
1035     return false;
1036     }
1037     return !tp->packets_out && !tcp_write_queue_empty(sk);
1038     diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
1039     index 5d016bbdf16e8..c7ff200d0bd41 100644
1040     --- a/net/ipv4/udp.c
1041     +++ b/net/ipv4/udp.c
1042     @@ -2117,7 +2117,7 @@ static int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
1043     __skb_pull(skb, skb_transport_offset(skb));
1044     ret = udp_queue_rcv_one_skb(sk, skb);
1045     if (ret > 0)
1046     - ip_protocol_deliver_rcu(dev_net(skb->dev), skb, -ret);
1047     + ip_protocol_deliver_rcu(dev_net(skb->dev), skb, ret);
1048     }
1049     return 0;
1050     }
1051     diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c
1052     index aca608ae313fe..1708b64d41094 100644
1053     --- a/net/mac80211/mesh_pathtbl.c
1054     +++ b/net/mac80211/mesh_pathtbl.c
1055     @@ -60,6 +60,7 @@ static struct mesh_table *mesh_table_alloc(void)
1056     atomic_set(&newtbl->entries, 0);
1057     spin_lock_init(&newtbl->gates_lock);
1058     spin_lock_init(&newtbl->walk_lock);
1059     + rhashtable_init(&newtbl->rhead, &mesh_rht_params);
1060    
1061     return newtbl;
1062     }
1063     @@ -775,9 +776,6 @@ int mesh_pathtbl_init(struct ieee80211_sub_if_data *sdata)
1064     goto free_path;
1065     }
1066    
1067     - rhashtable_init(&tbl_path->rhead, &mesh_rht_params);
1068     - rhashtable_init(&tbl_mpp->rhead, &mesh_rht_params);
1069     -
1070     sdata->u.mesh.mesh_paths = tbl_path;
1071     sdata->u.mesh.mpp_paths = tbl_mpp;
1072    
1073     diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
1074     index f57c610d75237..46004e329a24a 100644
1075     --- a/sound/core/oss/pcm_oss.c
1076     +++ b/sound/core/oss/pcm_oss.c
1077     @@ -1934,11 +1934,15 @@ static int snd_pcm_oss_set_subdivide(struct snd_pcm_oss_file *pcm_oss_file, int
1078     static int snd_pcm_oss_set_fragment1(struct snd_pcm_substream *substream, unsigned int val)
1079     {
1080     struct snd_pcm_runtime *runtime;
1081     + int fragshift;
1082    
1083     runtime = substream->runtime;
1084     if (runtime->oss.subdivision || runtime->oss.fragshift)
1085     return -EINVAL;
1086     - runtime->oss.fragshift = val & 0xffff;
1087     + fragshift = val & 0xffff;
1088     + if (fragshift >= 31)
1089     + return -EINVAL;
1090     + runtime->oss.fragshift = fragshift;
1091     runtime->oss.maxfrags = (val >> 16) & 0xffff;
1092     if (runtime->oss.fragshift < 4) /* < 16 */
1093     runtime->oss.fragshift = 4;
1094     diff --git a/sound/usb/format.c b/sound/usb/format.c
1095     index 1f9ea513230a6..9e9d4c10dfac6 100644
1096     --- a/sound/usb/format.c
1097     +++ b/sound/usb/format.c
1098     @@ -40,6 +40,8 @@ static u64 parse_audio_format_i_type(struct snd_usb_audio *chip,
1099     case UAC_VERSION_1:
1100     default: {
1101     struct uac_format_type_i_discrete_descriptor *fmt = _fmt;
1102     + if (format >= 64)
1103     + return 0; /* invalid format */
1104     sample_width = fmt->bBitResolution;
1105     sample_bytes = fmt->bSubframeSize;
1106     format = 1ULL << format;
1107     diff --git a/sound/usb/stream.c b/sound/usb/stream.c
1108     index d01edd5da6cf8..c5cbba9fdf0da 100644
1109     --- a/sound/usb/stream.c
1110     +++ b/sound/usb/stream.c
1111     @@ -193,16 +193,16 @@ static int usb_chmap_ctl_get(struct snd_kcontrol *kcontrol,
1112     struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol);
1113     struct snd_usb_substream *subs = info->private_data;
1114     struct snd_pcm_chmap_elem *chmap = NULL;
1115     - int i;
1116     + int i = 0;
1117    
1118     - memset(ucontrol->value.integer.value, 0,
1119     - sizeof(ucontrol->value.integer.value));
1120     if (subs->cur_audiofmt)
1121     chmap = subs->cur_audiofmt->chmap;
1122     if (chmap) {
1123     for (i = 0; i < chmap->channels; i++)
1124     ucontrol->value.integer.value[i] = chmap->map[i];
1125     }
1126     + for (; i < subs->channels_max; i++)
1127     + ucontrol->value.integer.value[i] = 0;
1128     return 0;
1129     }
1130    
1131     diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl
1132     index 6c4f21db5fbad..fe587a9594634 100755
1133     --- a/tools/testing/ktest/ktest.pl
1134     +++ b/tools/testing/ktest/ktest.pl
1135     @@ -4197,7 +4197,12 @@ sub do_send_mail {
1136     $mail_command =~ s/\$SUBJECT/$subject/g;
1137     $mail_command =~ s/\$MESSAGE/$message/g;
1138    
1139     - run_command $mail_command;
1140     + my $ret = run_command $mail_command;
1141     + if (!$ret && defined($file)) {
1142     + # try again without the file
1143     + $message .= "\n\n*** FAILED TO SEND LOG ***\n\n";
1144     + do_send_email($subject, $message);
1145     + }
1146     }
1147    
1148     sub send_email {
1149     diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_user.tc b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_user.tc
1150     index a753c73d869ab..0f60087583d8f 100644
1151     --- a/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_user.tc
1152     +++ b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_user.tc
1153     @@ -11,16 +11,12 @@ grep -A10 "fetcharg:" README | grep -q '\[u\]<offset>' || exit_unsupported
1154     :;: "user-memory access syntax and ustring working on user memory";:
1155     echo 'p:myevent do_sys_open path=+0($arg2):ustring path2=+u0($arg2):string' \
1156     > kprobe_events
1157     -echo 'p:myevent2 do_sys_openat2 path=+0($arg2):ustring path2=+u0($arg2):string' \
1158     - >> kprobe_events
1159    
1160     grep myevent kprobe_events | \
1161     grep -q 'path=+0($arg2):ustring path2=+u0($arg2):string'
1162     echo 1 > events/kprobes/myevent/enable
1163     -echo 1 > events/kprobes/myevent2/enable
1164     echo > /dev/null
1165     echo 0 > events/kprobes/myevent/enable
1166     -echo 0 > events/kprobes/myevent2/enable
1167    
1168     grep myevent trace | grep -q 'path="/dev/null" path2="/dev/null"'
1169    
1170     diff --git a/tools/testing/selftests/net/fcnal-test.sh b/tools/testing/selftests/net/fcnal-test.sh
1171     index 9fd3a0b97f0db..38133da2973d4 100755
1172     --- a/tools/testing/selftests/net/fcnal-test.sh
1173     +++ b/tools/testing/selftests/net/fcnal-test.sh
1174     @@ -239,6 +239,28 @@ setup_cmd_nsb()
1175     fi
1176     }
1177    
1178     +setup_cmd_nsc()
1179     +{
1180     + local cmd="$*"
1181     + local rc
1182     +
1183     + run_cmd_nsc ${cmd}
1184     + rc=$?
1185     + if [ $rc -ne 0 ]; then
1186     + # show user the command if not done so already
1187     + if [ "$VERBOSE" = "0" ]; then
1188     + echo "setup command: $cmd"
1189     + fi
1190     + echo "failed. stopping tests"
1191     + if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
1192     + echo
1193     + echo "hit enter to continue"
1194     + read a
1195     + fi
1196     + exit $rc
1197     + fi
1198     +}
1199     +
1200     # set sysctl values in NS-A
1201     set_sysctl()
1202     {
1203     @@ -447,6 +469,36 @@ setup()
1204     sleep 1
1205     }
1206    
1207     +setup_lla_only()
1208     +{
1209     + # make sure we are starting with a clean slate
1210     + kill_procs
1211     + cleanup 2>/dev/null
1212     +
1213     + log_debug "Configuring network namespaces"
1214     + set -e
1215     +
1216     + create_ns ${NSA} "-" "-"
1217     + create_ns ${NSB} "-" "-"
1218     + create_ns ${NSC} "-" "-"
1219     + connect_ns ${NSA} ${NSA_DEV} "-" "-" \
1220     + ${NSB} ${NSB_DEV} "-" "-"
1221     + connect_ns ${NSA} ${NSA_DEV2} "-" "-" \
1222     + ${NSC} ${NSC_DEV} "-" "-"
1223     +
1224     + NSA_LINKIP6=$(get_linklocal ${NSA} ${NSA_DEV})
1225     + NSB_LINKIP6=$(get_linklocal ${NSB} ${NSB_DEV})
1226     + NSC_LINKIP6=$(get_linklocal ${NSC} ${NSC_DEV})
1227     +
1228     + create_vrf ${NSA} ${VRF} ${VRF_TABLE} "-" "-"
1229     + ip -netns ${NSA} link set dev ${NSA_DEV} vrf ${VRF}
1230     + ip -netns ${NSA} link set dev ${NSA_DEV2} vrf ${VRF}
1231     +
1232     + set +e
1233     +
1234     + sleep 1
1235     +}
1236     +
1237     ################################################################################
1238     # IPv4
1239    
1240     @@ -3329,10 +3381,53 @@ use_case_br()
1241     setup_cmd_nsb ip li del vlan100 2>/dev/null
1242     }
1243    
1244     +# VRF only.
1245     +# ns-A device is connected to both ns-B and ns-C on a single VRF but only has
1246     +# LLA on the interfaces
1247     +use_case_ping_lla_multi()
1248     +{
1249     + setup_lla_only
1250     + # only want reply from ns-A
1251     + setup_cmd_nsb sysctl -qw net.ipv6.icmp.echo_ignore_multicast=1
1252     + setup_cmd_nsc sysctl -qw net.ipv6.icmp.echo_ignore_multicast=1
1253     +
1254     + log_start
1255     + run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
1256     + log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Pre cycle, ping out ns-B"
1257     +
1258     + run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
1259     + log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Pre cycle, ping out ns-C"
1260     +
1261     + # cycle/flap the first ns-A interface
1262     + setup_cmd ip link set ${NSA_DEV} down
1263     + setup_cmd ip link set ${NSA_DEV} up
1264     + sleep 1
1265     +
1266     + log_start
1267     + run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
1268     + log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-B"
1269     + run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
1270     + log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-C"
1271     +
1272     + # cycle/flap the second ns-A interface
1273     + setup_cmd ip link set ${NSA_DEV2} down
1274     + setup_cmd ip link set ${NSA_DEV2} up
1275     + sleep 1
1276     +
1277     + log_start
1278     + run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
1279     + log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-B"
1280     + run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
1281     + log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-C"
1282     +}
1283     +
1284     use_cases()
1285     {
1286     log_section "Use cases"
1287     + log_subsection "Device enslaved to bridge"
1288     use_case_br
1289     + log_subsection "Ping LLA with multiple interfaces"
1290     + use_case_ping_lla_multi
1291     }
1292    
1293     ################################################################################