Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.9 commit in: /
Date: Fri, 03 Sep 2021 11:24:51
Message-Id: 1630668269.f24fa29fe8e70c34ad53adcc5fb899d84d1269c7.mpagano@gentoo
1 commit: f24fa29fe8e70c34ad53adcc5fb899d84d1269c7
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Fri Sep 3 11:24:29 2021 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Fri Sep 3 11:24:29 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=f24fa29f
7
8 Linux patch 4.9.282
9
10 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>
11
12 1281_linux-4.9.282.patch | 357 +++++++++++++++++++++++++++++++++++++++++++++++
13 1 file changed, 357 insertions(+)
14
15 diff --git a/1281_linux-4.9.282.patch b/1281_linux-4.9.282.patch
16 new file mode 100644
17 index 0000000..0e7dfba
18 --- /dev/null
19 +++ b/1281_linux-4.9.282.patch
20 @@ -0,0 +1,357 @@
21 +diff --git a/Makefile b/Makefile
22 +index 08bbebb4acbf1..ca08ef26f416b 100644
23 +--- a/Makefile
24 ++++ b/Makefile
25 +@@ -1,6 +1,6 @@
26 + VERSION = 4
27 + PATCHLEVEL = 9
28 +-SUBLEVEL = 281
29 ++SUBLEVEL = 282
30 + EXTRAVERSION =
31 + NAME = Roaring Lionus
32 +
33 +diff --git a/arch/arc/kernel/vmlinux.lds.S b/arch/arc/kernel/vmlinux.lds.S
34 +index f35ed578e007e..4d823d3f65bb3 100644
35 +--- a/arch/arc/kernel/vmlinux.lds.S
36 ++++ b/arch/arc/kernel/vmlinux.lds.S
37 +@@ -92,6 +92,8 @@ SECTIONS
38 + CPUIDLE_TEXT
39 + LOCK_TEXT
40 + KPROBES_TEXT
41 ++ IRQENTRY_TEXT
42 ++ SOFTIRQENTRY_TEXT
43 + *(.fixup)
44 + *(.gnu.warning)
45 + }
46 +diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
47 +index 5cbc6591fa1d3..c16d24ad83560 100644
48 +--- a/arch/x86/kvm/mmu.c
49 ++++ b/arch/x86/kvm/mmu.c
50 +@@ -3927,7 +3927,16 @@ static void reset_rsvds_bits_mask_ept(struct kvm_vcpu *vcpu,
51 + void
52 + reset_shadow_zero_bits_mask(struct kvm_vcpu *vcpu, struct kvm_mmu *context)
53 + {
54 +- bool uses_nx = context->nx || context->base_role.smep_andnot_wp;
55 ++ /*
56 ++ * KVM uses NX when TDP is disabled to handle a variety of scenarios,
57 ++ * notably for huge SPTEs if iTLB multi-hit mitigation is enabled and
58 ++ * to generate correct permissions for CR0.WP=0/CR4.SMEP=1/EFER.NX=0.
59 ++ * The iTLB multi-hit workaround can be toggled at any time, so assume
60 ++ * NX can be used by any non-nested shadow MMU to avoid having to reset
61 ++ * MMU contexts. Note, KVM forces EFER.NX=1 when TDP is disabled.
62 ++ */
63 ++ bool uses_nx = context->nx || !tdp_enabled ||
64 ++ context->base_role.smep_andnot_wp;
65 +
66 + /*
67 + * Passing "true" to the last argument is okay; it adds a check
68 +diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
69 +index 64a3dae5381ef..4496e7a492352 100644
70 +--- a/drivers/block/floppy.c
71 ++++ b/drivers/block/floppy.c
72 +@@ -4067,22 +4067,21 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
73 + if (UFDCS->rawcmd == 1)
74 + UFDCS->rawcmd = 2;
75 +
76 +- if (mode & (FMODE_READ|FMODE_WRITE)) {
77 +- UDRS->last_checked = 0;
78 +- clear_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags);
79 +- check_disk_change(bdev);
80 +- if (test_bit(FD_DISK_CHANGED_BIT, &UDRS->flags))
81 +- goto out;
82 +- if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags))
83 ++ if (!(mode & FMODE_NDELAY)) {
84 ++ if (mode & (FMODE_READ|FMODE_WRITE)) {
85 ++ UDRS->last_checked = 0;
86 ++ clear_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags);
87 ++ check_disk_change(bdev);
88 ++ if (test_bit(FD_DISK_CHANGED_BIT, &UDRS->flags))
89 ++ goto out;
90 ++ if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags))
91 ++ goto out;
92 ++ }
93 ++ res = -EROFS;
94 ++ if ((mode & FMODE_WRITE) &&
95 ++ !test_bit(FD_DISK_WRITABLE_BIT, &UDRS->flags))
96 + goto out;
97 + }
98 +-
99 +- res = -EROFS;
100 +-
101 +- if ((mode & FMODE_WRITE) &&
102 +- !test_bit(FD_DISK_WRITABLE_BIT, &UDRS->flags))
103 +- goto out;
104 +-
105 + mutex_unlock(&open_lock);
106 + mutex_unlock(&floppy_mutex);
107 + return 0;
108 +diff --git a/drivers/infiniband/hw/hfi1/sdma.c b/drivers/infiniband/hw/hfi1/sdma.c
109 +index 76e63c88a87a8..e9313e6f4b0e3 100644
110 +--- a/drivers/infiniband/hw/hfi1/sdma.c
111 ++++ b/drivers/infiniband/hw/hfi1/sdma.c
112 +@@ -3028,6 +3028,7 @@ static void __sdma_process_event(struct sdma_engine *sde,
113 + static int _extend_sdma_tx_descs(struct hfi1_devdata *dd, struct sdma_txreq *tx)
114 + {
115 + int i;
116 ++ struct sdma_desc *descp;
117 +
118 + /* Handle last descriptor */
119 + if (unlikely((tx->num_desc == (MAX_DESC - 1)))) {
120 +@@ -3048,12 +3049,10 @@ static int _extend_sdma_tx_descs(struct hfi1_devdata *dd, struct sdma_txreq *tx)
121 + if (unlikely(tx->num_desc == MAX_DESC))
122 + goto enomem;
123 +
124 +- tx->descp = kmalloc_array(
125 +- MAX_DESC,
126 +- sizeof(struct sdma_desc),
127 +- GFP_ATOMIC);
128 +- if (!tx->descp)
129 ++ descp = kmalloc_array(MAX_DESC, sizeof(struct sdma_desc), GFP_ATOMIC);
130 ++ if (!descp)
131 + goto enomem;
132 ++ tx->descp = descp;
133 +
134 + /* reserve last descriptor for coalescing */
135 + tx->desc_limit = MAX_DESC - 1;
136 +diff --git a/drivers/net/can/usb/esd_usb2.c b/drivers/net/can/usb/esd_usb2.c
137 +index 592c6e7f3dca4..fbe1173b2651f 100644
138 +--- a/drivers/net/can/usb/esd_usb2.c
139 ++++ b/drivers/net/can/usb/esd_usb2.c
140 +@@ -236,8 +236,8 @@ static void esd_usb2_rx_event(struct esd_usb2_net_priv *priv,
141 + if (id == ESD_EV_CAN_ERROR_EXT) {
142 + u8 state = msg->msg.rx.data[0];
143 + u8 ecc = msg->msg.rx.data[1];
144 +- u8 txerr = msg->msg.rx.data[2];
145 +- u8 rxerr = msg->msg.rx.data[3];
146 ++ u8 rxerr = msg->msg.rx.data[2];
147 ++ u8 txerr = msg->msg.rx.data[3];
148 +
149 + skb = alloc_can_err_skb(priv->netdev, &cf);
150 + if (skb == NULL) {
151 +diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
152 +index 625008e8cb0df..500016209ae0c 100644
153 +--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
154 ++++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
155 +@@ -1010,6 +1010,8 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link)
156 + {
157 + u32 reg = link << (E1000_LTRV_REQ_SHIFT + E1000_LTRV_NOSNOOP_SHIFT) |
158 + link << E1000_LTRV_REQ_SHIFT | E1000_LTRV_SEND;
159 ++ u16 max_ltr_enc_d = 0; /* maximum LTR decoded by platform */
160 ++ u16 lat_enc_d = 0; /* latency decoded */
161 + u16 lat_enc = 0; /* latency encoded */
162 +
163 + if (link) {
164 +@@ -1063,7 +1065,17 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link)
165 + E1000_PCI_LTR_CAP_LPT + 2, &max_nosnoop);
166 + max_ltr_enc = max_t(u16, max_snoop, max_nosnoop);
167 +
168 +- if (lat_enc > max_ltr_enc)
169 ++ lat_enc_d = (lat_enc & E1000_LTRV_VALUE_MASK) *
170 ++ (1U << (E1000_LTRV_SCALE_FACTOR *
171 ++ ((lat_enc & E1000_LTRV_SCALE_MASK)
172 ++ >> E1000_LTRV_SCALE_SHIFT)));
173 ++
174 ++ max_ltr_enc_d = (max_ltr_enc & E1000_LTRV_VALUE_MASK) *
175 ++ (1U << (E1000_LTRV_SCALE_FACTOR *
176 ++ ((max_ltr_enc & E1000_LTRV_SCALE_MASK)
177 ++ >> E1000_LTRV_SCALE_SHIFT)));
178 ++
179 ++ if (lat_enc_d > max_ltr_enc_d)
180 + lat_enc = max_ltr_enc;
181 + }
182 +
183 +diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.h b/drivers/net/ethernet/intel/e1000e/ich8lan.h
184 +index 6374c8fc76a8d..9957a4ffdc6dc 100644
185 +--- a/drivers/net/ethernet/intel/e1000e/ich8lan.h
186 ++++ b/drivers/net/ethernet/intel/e1000e/ich8lan.h
187 +@@ -291,8 +291,11 @@
188 +
189 + /* Latency Tolerance Reporting */
190 + #define E1000_LTRV 0x000F8
191 ++#define E1000_LTRV_VALUE_MASK 0x000003FF
192 + #define E1000_LTRV_SCALE_MAX 5
193 + #define E1000_LTRV_SCALE_FACTOR 5
194 ++#define E1000_LTRV_SCALE_SHIFT 10
195 ++#define E1000_LTRV_SCALE_MASK 0x00001C00
196 + #define E1000_LTRV_REQ_SHIFT 15
197 + #define E1000_LTRV_NOSNOOP_SHIFT 16
198 + #define E1000_LTRV_SEND (1 << 30)
199 +diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
200 +index bb6bc84995a2f..ccacdcfb59321 100644
201 +--- a/drivers/net/ethernet/marvell/mvneta.c
202 ++++ b/drivers/net/ethernet/marvell/mvneta.c
203 +@@ -100,7 +100,7 @@
204 + #define MVNETA_DESC_SWAP BIT(6)
205 + #define MVNETA_TX_BRST_SZ_MASK(burst) ((burst) << 22)
206 + #define MVNETA_PORT_STATUS 0x2444
207 +-#define MVNETA_TX_IN_PRGRS BIT(1)
208 ++#define MVNETA_TX_IN_PRGRS BIT(0)
209 + #define MVNETA_TX_FIFO_EMPTY BIT(8)
210 + #define MVNETA_RX_MIN_FRAME_SIZE 0x247c
211 + #define MVNETA_SERDES_CFG 0x24A0
212 +diff --git a/drivers/tty/vt/vt_ioctl.c b/drivers/tty/vt/vt_ioctl.c
213 +index 9206fd2489353..e1c1627a3356b 100644
214 +--- a/drivers/tty/vt/vt_ioctl.c
215 ++++ b/drivers/tty/vt/vt_ioctl.c
216 +@@ -487,16 +487,19 @@ int vt_ioctl(struct tty_struct *tty,
217 + ret = -EINVAL;
218 + goto out;
219 + }
220 +- /* FIXME: this needs the console lock extending */
221 +- if (vc->vc_mode == (unsigned char) arg)
222 ++ console_lock();
223 ++ if (vc->vc_mode == (unsigned char) arg) {
224 ++ console_unlock();
225 + break;
226 ++ }
227 + vc->vc_mode = (unsigned char) arg;
228 +- if (console != fg_console)
229 ++ if (console != fg_console) {
230 ++ console_unlock();
231 + break;
232 ++ }
233 + /*
234 + * explicitly blank/unblank the screen if switching modes
235 + */
236 +- console_lock();
237 + if (arg == KD_TEXT)
238 + do_unblank_screen(1);
239 + else
240 +diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
241 +index cca51553e0fb0..e340ef67321e5 100644
242 +--- a/drivers/usb/dwc3/gadget.c
243 ++++ b/drivers/usb/dwc3/gadget.c
244 +@@ -928,19 +928,19 @@ static struct dwc3_trb *dwc3_ep_prev_trb(struct dwc3_ep *dep, u8 index)
245 +
246 + static u32 dwc3_calc_trbs_left(struct dwc3_ep *dep)
247 + {
248 +- struct dwc3_trb *tmp;
249 + u8 trbs_left;
250 +
251 + /*
252 +- * If enqueue & dequeue are equal than it is either full or empty.
253 +- *
254 +- * One way to know for sure is if the TRB right before us has HWO bit
255 +- * set or not. If it has, then we're definitely full and can't fit any
256 +- * more transfers in our ring.
257 ++ * If the enqueue & dequeue are equal then the TRB ring is either full
258 ++ * or empty. It's considered full when there are DWC3_TRB_NUM-1 of TRBs
259 ++ * pending to be processed by the driver.
260 + */
261 + if (dep->trb_enqueue == dep->trb_dequeue) {
262 +- tmp = dwc3_ep_prev_trb(dep, dep->trb_enqueue);
263 +- if (tmp->ctrl & DWC3_TRB_CTRL_HWO)
264 ++ /*
265 ++ * If there is any request remained in the started_list at
266 ++ * this point, that means there is no TRB available.
267 ++ */
268 ++ if (!list_empty(&dep->started_list))
269 + return 0;
270 +
271 + return DWC3_TRB_NUM - 1;
272 +diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
273 +index 2e92c6fef683f..c6ff79360302f 100644
274 +--- a/drivers/usb/serial/ch341.c
275 ++++ b/drivers/usb/serial/ch341.c
276 +@@ -585,7 +585,6 @@ static struct usb_serial_driver ch341_device = {
277 + .owner = THIS_MODULE,
278 + .name = "ch341-uart",
279 + },
280 +- .bulk_in_size = 512,
281 + .id_table = id_table,
282 + .num_ports = 1,
283 + .open = ch341_open,
284 +diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
285 +index b3336a7c09e0b..02ded56bcbc6b 100644
286 +--- a/drivers/usb/serial/option.c
287 ++++ b/drivers/usb/serial/option.c
288 +@@ -2058,6 +2058,8 @@ static const struct usb_device_id option_ids[] = {
289 + .driver_info = RSVD(4) | RSVD(5) },
290 + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */
291 + .driver_info = RSVD(6) },
292 ++ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */
293 ++ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */
294 + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */
295 + { USB_DEVICE_INTERFACE_CLASS(0x2df3, 0x9d03, 0xff) }, /* LongSung M5710 */
296 + { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) }, /* GosunCn GM500 RNDIS */
297 +diff --git a/drivers/vhost/vringh.c b/drivers/vhost/vringh.c
298 +index d56736655dec4..da47542496cc3 100644
299 +--- a/drivers/vhost/vringh.c
300 ++++ b/drivers/vhost/vringh.c
301 +@@ -329,7 +329,7 @@ __vringh_iov(struct vringh *vrh, u16 i,
302 + iov = wiov;
303 + else {
304 + iov = riov;
305 +- if (unlikely(wiov && wiov->i)) {
306 ++ if (unlikely(wiov && wiov->used)) {
307 + vringh_bad("Readable desc %p after writable",
308 + &descs[i]);
309 + err = -EINVAL;
310 +diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
311 +index ae623cd04d6ca..16f5f56332433 100644
312 +--- a/drivers/video/fbdev/core/fbmem.c
313 ++++ b/drivers/video/fbdev/core/fbmem.c
314 +@@ -1001,6 +1001,10 @@ fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)
315 + goto done;
316 + }
317 +
318 ++ /* bitfill_aligned() assumes that it's at least 8x8 */
319 ++ if (var->xres < 8 || var->yres < 8)
320 ++ return -EINVAL;
321 ++
322 + ret = info->fbops->fb_check_var(var, info);
323 +
324 + if (ret)
325 +diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
326 +index 5cad9f41c238b..cf7eccfe3469b 100644
327 +--- a/drivers/virtio/virtio_ring.c
328 ++++ b/drivers/virtio/virtio_ring.c
329 +@@ -1150,7 +1150,7 @@ bool virtqueue_is_broken(struct virtqueue *_vq)
330 + {
331 + struct vring_virtqueue *vq = to_vvq(_vq);
332 +
333 +- return vq->broken;
334 ++ return READ_ONCE(vq->broken);
335 + }
336 + EXPORT_SYMBOL_GPL(virtqueue_is_broken);
337 +
338 +@@ -1164,7 +1164,9 @@ void virtio_break_device(struct virtio_device *dev)
339 +
340 + list_for_each_entry(_vq, &dev->vqs, list) {
341 + struct vring_virtqueue *vq = to_vvq(_vq);
342 +- vq->broken = true;
343 ++
344 ++ /* Pairs with READ_ONCE() in virtqueue_is_broken(). */
345 ++ WRITE_ONCE(vq->broken, true);
346 + }
347 + }
348 + EXPORT_SYMBOL_GPL(virtio_break_device);
349 +diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
350 +index 9609ad71dd260..fe1801d9f0598 100644
351 +--- a/net/ipv4/ip_gre.c
352 ++++ b/net/ipv4/ip_gre.c
353 +@@ -353,6 +353,8 @@ static void __gre_xmit(struct sk_buff *skb, struct net_device *dev,
354 +
355 + static int gre_handle_offloads(struct sk_buff *skb, bool csum)
356 + {
357 ++ if (csum && skb_checksum_start(skb) < skb->data)
358 ++ return -EINVAL;
359 + return iptunnel_handle_offloads(skb, csum ? SKB_GSO_GRE_CSUM : SKB_GSO_GRE);
360 + }
361 +
362 +diff --git a/net/rds/ib_frmr.c b/net/rds/ib_frmr.c
363 +index 3d9c4c6397c3d..20d045faf07c6 100644
364 +--- a/net/rds/ib_frmr.c
365 ++++ b/net/rds/ib_frmr.c
366 +@@ -112,9 +112,9 @@ static int rds_ib_post_reg_frmr(struct rds_ib_mr *ibmr)
367 + cpu_relax();
368 + }
369 +
370 +- ret = ib_map_mr_sg_zbva(frmr->mr, ibmr->sg, ibmr->sg_len,
371 ++ ret = ib_map_mr_sg_zbva(frmr->mr, ibmr->sg, ibmr->sg_dma_len,
372 + &off, PAGE_SIZE);
373 +- if (unlikely(ret != ibmr->sg_len))
374 ++ if (unlikely(ret != ibmr->sg_dma_len))
375 + return ret < 0 ? ret : -EINVAL;
376 +
377 + /* Perform a WR for the fast_reg_mr. Each individual page