1 |
commit: 50884cd0bee3e7a80b7899fa36abcaaa0bb85c43 |
2 |
Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
3 |
AuthorDate: Tue Sep 20 12:03:15 2022 +0000 |
4 |
Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue Sep 20 12:03:15 2022 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=50884cd0 |
7 |
|
8 |
Linux patch 4.19.259 |
9 |
|
10 |
Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> |
11 |
|
12 |
0000_README | 4 + |
13 |
1258_linux-4.19.259.patch | 284 ++++++++++++++++++++++++++++++++++++++++++++++ |
14 |
2 files changed, 288 insertions(+) |
15 |
|
16 |
diff --git a/0000_README b/0000_README |
17 |
index f372055b..e00dbd74 100644 |
18 |
--- a/0000_README |
19 |
+++ b/0000_README |
20 |
@@ -1075,6 +1075,10 @@ Patch: 1257_linux-4.19.258.patch |
21 |
From: https://www.kernel.org |
22 |
Desc: Linux 4.19.258 |
23 |
|
24 |
+Patch: 1258_linux-4.19.259.patch |
25 |
+From: https://www.kernel.org |
26 |
+Desc: Linux 4.19.259 |
27 |
+ |
28 |
Patch: 1500_XATTR_USER_PREFIX.patch |
29 |
From: https://bugs.gentoo.org/show_bug.cgi?id=470644 |
30 |
Desc: Support for namespace user.pax.* on tmpfs. |
31 |
|
32 |
diff --git a/1258_linux-4.19.259.patch b/1258_linux-4.19.259.patch |
33 |
new file mode 100644 |
34 |
index 00000000..bc8a1105 |
35 |
--- /dev/null |
36 |
+++ b/1258_linux-4.19.259.patch |
37 |
@@ -0,0 +1,284 @@ |
38 |
+diff --git a/Documentation/input/joydev/joystick.rst b/Documentation/input/joydev/joystick.rst |
39 |
+index 9746fd76cc581..f38c330c028e5 100644 |
40 |
+--- a/Documentation/input/joydev/joystick.rst |
41 |
++++ b/Documentation/input/joydev/joystick.rst |
42 |
+@@ -517,6 +517,7 @@ All I-Force devices are supported by the iforce module. This includes: |
43 |
+ * AVB Mag Turbo Force |
44 |
+ * AVB Top Shot Pegasus |
45 |
+ * AVB Top Shot Force Feedback Racing Wheel |
46 |
++* Boeder Force Feedback Wheel |
47 |
+ * Logitech WingMan Force |
48 |
+ * Logitech WingMan Force Wheel |
49 |
+ * Guillemot Race Leader Force Feedback |
50 |
+diff --git a/Makefile b/Makefile |
51 |
+index e35356f7a1e66..133683dfc7b89 100644 |
52 |
+--- a/Makefile |
53 |
++++ b/Makefile |
54 |
+@@ -1,7 +1,7 @@ |
55 |
+ # SPDX-License-Identifier: GPL-2.0 |
56 |
+ VERSION = 4 |
57 |
+ PATCHLEVEL = 19 |
58 |
+-SUBLEVEL = 258 |
59 |
++SUBLEVEL = 259 |
60 |
+ EXTRAVERSION = |
61 |
+ NAME = "People's Front" |
62 |
+ |
63 |
+diff --git a/drivers/gpu/drm/msm/msm_rd.c b/drivers/gpu/drm/msm/msm_rd.c |
64 |
+index d4cc5ceb22d01..bb65aab49c214 100644 |
65 |
+--- a/drivers/gpu/drm/msm/msm_rd.c |
66 |
++++ b/drivers/gpu/drm/msm/msm_rd.c |
67 |
+@@ -199,6 +199,9 @@ static int rd_open(struct inode *inode, struct file *file) |
68 |
+ file->private_data = rd; |
69 |
+ rd->open = true; |
70 |
+ |
71 |
++ /* Reset fifo to clear any previously unread data: */ |
72 |
++ rd->fifo.head = rd->fifo.tail = 0; |
73 |
++ |
74 |
+ /* the parsing tools need to know gpu-id to know which |
75 |
+ * register database to load. |
76 |
+ */ |
77 |
+diff --git a/drivers/hid/intel-ish-hid/ishtp-hid.h b/drivers/hid/intel-ish-hid/ishtp-hid.h |
78 |
+index f5c7eb79b7b53..fa16983007f60 100644 |
79 |
+--- a/drivers/hid/intel-ish-hid/ishtp-hid.h |
80 |
++++ b/drivers/hid/intel-ish-hid/ishtp-hid.h |
81 |
+@@ -118,7 +118,7 @@ struct report_list { |
82 |
+ * @multi_packet_cnt: Count of fragmented packet count |
83 |
+ * |
84 |
+ * This structure is used to store completion flags and per client data like |
85 |
+- * like report description, number of HID devices etc. |
86 |
++ * report description, number of HID devices etc. |
87 |
+ */ |
88 |
+ struct ishtp_cl_data { |
89 |
+ /* completion flags */ |
90 |
+diff --git a/drivers/input/joystick/iforce/iforce-main.c b/drivers/input/joystick/iforce/iforce-main.c |
91 |
+index 58d5cfe465263..12d96937c83f0 100644 |
92 |
+--- a/drivers/input/joystick/iforce/iforce-main.c |
93 |
++++ b/drivers/input/joystick/iforce/iforce-main.c |
94 |
+@@ -64,6 +64,7 @@ static struct iforce_device iforce_device[] = { |
95 |
+ { 0x046d, 0xc291, "Logitech WingMan Formula Force", btn_wheel, abs_wheel, ff_iforce }, |
96 |
+ { 0x05ef, 0x020a, "AVB Top Shot Pegasus", btn_joystick_avb, abs_avb_pegasus, ff_iforce }, |
97 |
+ { 0x05ef, 0x8884, "AVB Mag Turbo Force", btn_wheel, abs_wheel, ff_iforce }, |
98 |
++ { 0x05ef, 0x8886, "Boeder Force Feedback Wheel", btn_wheel, abs_wheel, ff_iforce }, |
99 |
+ { 0x05ef, 0x8888, "AVB Top Shot Force Feedback Racing Wheel", btn_wheel, abs_wheel, ff_iforce }, //? |
100 |
+ { 0x061c, 0xc0a4, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, //? |
101 |
+ { 0x061c, 0xc084, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, |
102 |
+diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c |
103 |
+index 6fcf9646d141b..d1ca3d3f51a7a 100644 |
104 |
+--- a/drivers/net/ethernet/broadcom/tg3.c |
105 |
++++ b/drivers/net/ethernet/broadcom/tg3.c |
106 |
+@@ -18207,16 +18207,20 @@ static void tg3_shutdown(struct pci_dev *pdev) |
107 |
+ struct net_device *dev = pci_get_drvdata(pdev); |
108 |
+ struct tg3 *tp = netdev_priv(dev); |
109 |
+ |
110 |
++ tg3_reset_task_cancel(tp); |
111 |
++ |
112 |
+ rtnl_lock(); |
113 |
++ |
114 |
+ netif_device_detach(dev); |
115 |
+ |
116 |
+ if (netif_running(dev)) |
117 |
+ dev_close(dev); |
118 |
+ |
119 |
+- if (system_state == SYSTEM_POWER_OFF) |
120 |
+- tg3_power_down(tp); |
121 |
++ tg3_power_down(tp); |
122 |
+ |
123 |
+ rtnl_unlock(); |
124 |
++ |
125 |
++ pci_disable_device(pdev); |
126 |
+ } |
127 |
+ |
128 |
+ /** |
129 |
+diff --git a/drivers/net/ieee802154/cc2520.c b/drivers/net/ieee802154/cc2520.c |
130 |
+index 0c89d3edf901c..fa3a4db517d69 100644 |
131 |
+--- a/drivers/net/ieee802154/cc2520.c |
132 |
++++ b/drivers/net/ieee802154/cc2520.c |
133 |
+@@ -512,6 +512,7 @@ cc2520_tx(struct ieee802154_hw *hw, struct sk_buff *skb) |
134 |
+ goto err_tx; |
135 |
+ |
136 |
+ if (status & CC2520_STATUS_TX_UNDERFLOW) { |
137 |
++ rc = -EINVAL; |
138 |
+ dev_err(&priv->spi->dev, "cc2520 tx underflow exception\n"); |
139 |
+ goto err_tx; |
140 |
+ } |
141 |
+diff --git a/drivers/net/phy/dp83822.c b/drivers/net/phy/dp83822.c |
142 |
+index cffa0cb517204..3738beb0fb40b 100644 |
143 |
+--- a/drivers/net/phy/dp83822.c |
144 |
++++ b/drivers/net/phy/dp83822.c |
145 |
+@@ -203,8 +203,7 @@ static int dp83822_config_intr(struct phy_device *phydev) |
146 |
+ if (misr_status < 0) |
147 |
+ return misr_status; |
148 |
+ |
149 |
+- misr_status |= (DP83822_RX_ERR_HF_INT_EN | |
150 |
+- DP83822_ANEG_COMPLETE_INT_EN | |
151 |
++ misr_status |= (DP83822_ANEG_COMPLETE_INT_EN | |
152 |
+ DP83822_DUP_MODE_CHANGE_INT_EN | |
153 |
+ DP83822_SPEED_CHANGED_INT_EN | |
154 |
+ DP83822_LINK_STAT_INT_EN | |
155 |
+diff --git a/drivers/perf/arm_pmu_platform.c b/drivers/perf/arm_pmu_platform.c |
156 |
+index 199293450acfc..0ffa4f45a8391 100644 |
157 |
+--- a/drivers/perf/arm_pmu_platform.c |
158 |
++++ b/drivers/perf/arm_pmu_platform.c |
159 |
+@@ -118,7 +118,7 @@ static int pmu_parse_irqs(struct arm_pmu *pmu) |
160 |
+ |
161 |
+ if (num_irqs == 1) { |
162 |
+ int irq = platform_get_irq(pdev, 0); |
163 |
+- if (irq && irq_is_percpu_devid(irq)) |
164 |
++ if ((irq > 0) && irq_is_percpu_devid(irq)) |
165 |
+ return pmu_parse_percpu_irq(pmu, irq); |
166 |
+ } |
167 |
+ |
168 |
+diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c |
169 |
+index bd25c8a156d24..c73ce07b66c9a 100644 |
170 |
+--- a/drivers/platform/x86/acer-wmi.c |
171 |
++++ b/drivers/platform/x86/acer-wmi.c |
172 |
+@@ -106,6 +106,7 @@ static const struct key_entry acer_wmi_keymap[] __initconst = { |
173 |
+ {KE_KEY, 0x22, {KEY_PROG2} }, /* Arcade */ |
174 |
+ {KE_KEY, 0x23, {KEY_PROG3} }, /* P_Key */ |
175 |
+ {KE_KEY, 0x24, {KEY_PROG4} }, /* Social networking_Key */ |
176 |
++ {KE_KEY, 0x27, {KEY_HELP} }, |
177 |
+ {KE_KEY, 0x29, {KEY_PROG3} }, /* P_Key for TM8372 */ |
178 |
+ {KE_IGNORE, 0x41, {KEY_MUTE} }, |
179 |
+ {KE_IGNORE, 0x42, {KEY_PREVIOUSSONG} }, |
180 |
+@@ -119,7 +120,13 @@ static const struct key_entry acer_wmi_keymap[] __initconst = { |
181 |
+ {KE_IGNORE, 0x48, {KEY_VOLUMEUP} }, |
182 |
+ {KE_IGNORE, 0x49, {KEY_VOLUMEDOWN} }, |
183 |
+ {KE_IGNORE, 0x4a, {KEY_VOLUMEDOWN} }, |
184 |
+- {KE_IGNORE, 0x61, {KEY_SWITCHVIDEOMODE} }, |
185 |
++ /* |
186 |
++ * 0x61 is KEY_SWITCHVIDEOMODE. Usually this is a duplicate input event |
187 |
++ * with the "Video Bus" input device events. But sometimes it is not |
188 |
++ * a dup. Map it to KEY_UNKNOWN instead of using KE_IGNORE so that |
189 |
++ * udev/hwdb can override it on systems where it is not a dup. |
190 |
++ */ |
191 |
++ {KE_KEY, 0x61, {KEY_UNKNOWN} }, |
192 |
+ {KE_IGNORE, 0x62, {KEY_BRIGHTNESSUP} }, |
193 |
+ {KE_IGNORE, 0x63, {KEY_BRIGHTNESSDOWN} }, |
194 |
+ {KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */ |
195 |
+diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h |
196 |
+index 2f72753c3e225..0b37c8e550e7d 100644 |
197 |
+--- a/drivers/usb/storage/unusual_uas.h |
198 |
++++ b/drivers/usb/storage/unusual_uas.h |
199 |
+@@ -62,6 +62,13 @@ UNUSUAL_DEV(0x0984, 0x0301, 0x0128, 0x0128, |
200 |
+ USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
201 |
+ US_FL_IGNORE_UAS), |
202 |
+ |
203 |
++/* Reported-by: Tom Hu <huxiaoying@×××××××.cn> */ |
204 |
++UNUSUAL_DEV(0x0b05, 0x1932, 0x0000, 0x9999, |
205 |
++ "ASUS", |
206 |
++ "External HDD", |
207 |
++ USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
208 |
++ US_FL_IGNORE_UAS), |
209 |
++ |
210 |
+ /* Reported-by: David Webb <djw@××××××.uk> */ |
211 |
+ UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999, |
212 |
+ "Seagate", |
213 |
+diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c |
214 |
+index 01b0eec4140d4..4ad24d0371c8c 100644 |
215 |
+--- a/fs/tracefs/inode.c |
216 |
++++ b/fs/tracefs/inode.c |
217 |
+@@ -142,6 +142,8 @@ struct tracefs_mount_opts { |
218 |
+ kuid_t uid; |
219 |
+ kgid_t gid; |
220 |
+ umode_t mode; |
221 |
++ /* Opt_* bitfield. */ |
222 |
++ unsigned int opts; |
223 |
+ }; |
224 |
+ |
225 |
+ enum { |
226 |
+@@ -242,6 +244,7 @@ static int tracefs_parse_options(char *data, struct tracefs_mount_opts *opts) |
227 |
+ kgid_t gid; |
228 |
+ char *p; |
229 |
+ |
230 |
++ opts->opts = 0; |
231 |
+ opts->mode = TRACEFS_DEFAULT_MODE; |
232 |
+ |
233 |
+ while ((p = strsep(&data, ",")) != NULL) { |
234 |
+@@ -276,24 +279,36 @@ static int tracefs_parse_options(char *data, struct tracefs_mount_opts *opts) |
235 |
+ * but traditionally tracefs has ignored all mount options |
236 |
+ */ |
237 |
+ } |
238 |
++ |
239 |
++ opts->opts |= BIT(token); |
240 |
+ } |
241 |
+ |
242 |
+ return 0; |
243 |
+ } |
244 |
+ |
245 |
+-static int tracefs_apply_options(struct super_block *sb) |
246 |
++static int tracefs_apply_options(struct super_block *sb, bool remount) |
247 |
+ { |
248 |
+ struct tracefs_fs_info *fsi = sb->s_fs_info; |
249 |
+ struct inode *inode = sb->s_root->d_inode; |
250 |
+ struct tracefs_mount_opts *opts = &fsi->mount_opts; |
251 |
+ |
252 |
+- inode->i_mode &= ~S_IALLUGO; |
253 |
+- inode->i_mode |= opts->mode; |
254 |
++ /* |
255 |
++ * On remount, only reset mode/uid/gid if they were provided as mount |
256 |
++ * options. |
257 |
++ */ |
258 |
++ |
259 |
++ if (!remount || opts->opts & BIT(Opt_mode)) { |
260 |
++ inode->i_mode &= ~S_IALLUGO; |
261 |
++ inode->i_mode |= opts->mode; |
262 |
++ } |
263 |
+ |
264 |
+- inode->i_uid = opts->uid; |
265 |
++ if (!remount || opts->opts & BIT(Opt_uid)) |
266 |
++ inode->i_uid = opts->uid; |
267 |
+ |
268 |
+- /* Set all the group ids to the mount option */ |
269 |
+- set_gid(sb->s_root, opts->gid); |
270 |
++ if (!remount || opts->opts & BIT(Opt_gid)) { |
271 |
++ /* Set all the group ids to the mount option */ |
272 |
++ set_gid(sb->s_root, opts->gid); |
273 |
++ } |
274 |
+ |
275 |
+ return 0; |
276 |
+ } |
277 |
+@@ -308,7 +323,7 @@ static int tracefs_remount(struct super_block *sb, int *flags, char *data) |
278 |
+ if (err) |
279 |
+ goto fail; |
280 |
+ |
281 |
+- tracefs_apply_options(sb); |
282 |
++ tracefs_apply_options(sb, true); |
283 |
+ |
284 |
+ fail: |
285 |
+ return err; |
286 |
+@@ -360,7 +375,7 @@ static int trace_fill_super(struct super_block *sb, void *data, int silent) |
287 |
+ |
288 |
+ sb->s_op = &tracefs_super_operations; |
289 |
+ |
290 |
+- tracefs_apply_options(sb); |
291 |
++ tracefs_apply_options(sb, false); |
292 |
+ |
293 |
+ return 0; |
294 |
+ |
295 |
+diff --git a/mm/mmap.c b/mm/mmap.c |
296 |
+index 5ee3c91450de1..38541885ea450 100644 |
297 |
+--- a/mm/mmap.c |
298 |
++++ b/mm/mmap.c |
299 |
+@@ -2567,6 +2567,7 @@ static void unmap_region(struct mm_struct *mm, |
300 |
+ { |
301 |
+ struct vm_area_struct *next = prev ? prev->vm_next : mm->mmap; |
302 |
+ struct mmu_gather tlb; |
303 |
++ struct vm_area_struct *cur_vma; |
304 |
+ |
305 |
+ lru_add_drain(); |
306 |
+ tlb_gather_mmu(&tlb, mm, start, end); |
307 |
+@@ -2581,8 +2582,12 @@ static void unmap_region(struct mm_struct *mm, |
308 |
+ * concurrent flush in this region has to be coming through the rmap, |
309 |
+ * and we synchronize against that using the rmap lock. |
310 |
+ */ |
311 |
+- if ((vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) != 0) |
312 |
+- tlb_flush_mmu(&tlb); |
313 |
++ for (cur_vma = vma; cur_vma; cur_vma = cur_vma->vm_next) { |
314 |
++ if ((cur_vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) != 0) { |
315 |
++ tlb_flush_mmu(&tlb); |
316 |
++ break; |
317 |
++ } |
318 |
++ } |
319 |
+ |
320 |
+ free_pgtables(&tlb, vma, prev ? prev->vm_end : FIRST_USER_ADDRESS, |
321 |
+ next ? next->vm_start : USER_PGTABLES_CEILING); |