Contents of /trunk/kernel-alx-legacy/patches-4.9/0413-4.9.314-all-fixes.patch
Parent Directory | Revision Log
Revision 3715 -
(show annotations)
(download)
Mon Oct 24 14:08:27 2022 UTC (18 months, 3 weeks ago) by niro
File size: 11040 byte(s)
Mon Oct 24 14:08:27 2022 UTC (18 months, 3 weeks ago) by niro
File size: 11040 byte(s)
-linux-4.9.314
1 | diff --git a/Makefile b/Makefile |
2 | index 0c13bf09d17dc..734a4cc6ac464 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 9 |
8 | -SUBLEVEL = 313 |
9 | +SUBLEVEL = 314 |
10 | EXTRAVERSION = |
11 | NAME = Roaring Lionus |
12 | |
13 | diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c |
14 | index 3b6f687f177cd..32f8c501f6cb1 100644 |
15 | --- a/arch/mips/bmips/setup.c |
16 | +++ b/arch/mips/bmips/setup.c |
17 | @@ -174,7 +174,7 @@ void __init plat_mem_setup(void) |
18 | dtb = phys_to_virt(fw_arg2); |
19 | else if (fw_passed_dtb) /* UHI interface */ |
20 | dtb = (void *)fw_passed_dtb; |
21 | - else if (__dtb_start != __dtb_end) |
22 | + else if (&__dtb_start != &__dtb_end) |
23 | dtb = (void *)__dtb_start; |
24 | else |
25 | panic("no dtb found"); |
26 | diff --git a/arch/mips/lantiq/prom.c b/arch/mips/lantiq/prom.c |
27 | index 4cbb000e778e3..9b30e46e91a75 100644 |
28 | --- a/arch/mips/lantiq/prom.c |
29 | +++ b/arch/mips/lantiq/prom.c |
30 | @@ -76,7 +76,7 @@ void __init plat_mem_setup(void) |
31 | |
32 | if (fw_passed_dtb) /* UHI interface */ |
33 | dtb = (void *)fw_passed_dtb; |
34 | - else if (__dtb_start != __dtb_end) |
35 | + else if (&__dtb_start != &__dtb_end) |
36 | dtb = (void *)__dtb_start; |
37 | else |
38 | panic("no dtb found"); |
39 | diff --git a/arch/mips/pic32/pic32mzda/init.c b/arch/mips/pic32/pic32mzda/init.c |
40 | index 51599710472bc..406c6c5cec29b 100644 |
41 | --- a/arch/mips/pic32/pic32mzda/init.c |
42 | +++ b/arch/mips/pic32/pic32mzda/init.c |
43 | @@ -36,7 +36,7 @@ static ulong get_fdtaddr(void) |
44 | if (fw_passed_dtb && !fw_arg2 && !fw_arg3) |
45 | return (ulong)fw_passed_dtb; |
46 | |
47 | - if (__dtb_start < __dtb_end) |
48 | + if (&__dtb_start < &__dtb_end) |
49 | ftaddr = (ulong)__dtb_start; |
50 | |
51 | return ftaddr; |
52 | diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c |
53 | index 3c9cee9520ed5..ef51f811d4d9c 100644 |
54 | --- a/drivers/block/drbd/drbd_nl.c |
55 | +++ b/drivers/block/drbd/drbd_nl.c |
56 | @@ -774,9 +774,11 @@ int drbd_adm_set_role(struct sk_buff *skb, struct genl_info *info) |
57 | mutex_lock(&adm_ctx.resource->adm_mutex); |
58 | |
59 | if (info->genlhdr->cmd == DRBD_ADM_PRIMARY) |
60 | - retcode = drbd_set_role(adm_ctx.device, R_PRIMARY, parms.assume_uptodate); |
61 | + retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device, |
62 | + R_PRIMARY, parms.assume_uptodate); |
63 | else |
64 | - retcode = drbd_set_role(adm_ctx.device, R_SECONDARY, 0); |
65 | + retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device, |
66 | + R_SECONDARY, 0); |
67 | |
68 | mutex_unlock(&adm_ctx.resource->adm_mutex); |
69 | genl_lock(); |
70 | @@ -1933,7 +1935,7 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info) |
71 | drbd_flush_workqueue(&connection->sender_work); |
72 | |
73 | rv = _drbd_request_state(device, NS(disk, D_ATTACHING), CS_VERBOSE); |
74 | - retcode = rv; /* FIXME: Type mismatch. */ |
75 | + retcode = (enum drbd_ret_code)rv; |
76 | drbd_resume_io(device); |
77 | if (rv < SS_SUCCESS) |
78 | goto fail; |
79 | @@ -2684,7 +2686,8 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info) |
80 | } |
81 | rcu_read_unlock(); |
82 | |
83 | - retcode = conn_request_state(connection, NS(conn, C_UNCONNECTED), CS_VERBOSE); |
84 | + retcode = (enum drbd_ret_code)conn_request_state(connection, |
85 | + NS(conn, C_UNCONNECTED), CS_VERBOSE); |
86 | |
87 | conn_reconfig_done(connection); |
88 | mutex_unlock(&adm_ctx.resource->adm_mutex); |
89 | @@ -2790,7 +2793,7 @@ int drbd_adm_disconnect(struct sk_buff *skb, struct genl_info *info) |
90 | mutex_lock(&adm_ctx.resource->adm_mutex); |
91 | rv = conn_try_disconnect(connection, parms.force_disconnect); |
92 | if (rv < SS_SUCCESS) |
93 | - retcode = rv; /* FIXME: Type mismatch. */ |
94 | + retcode = (enum drbd_ret_code)rv; |
95 | else |
96 | retcode = NO_ERROR; |
97 | mutex_unlock(&adm_ctx.resource->adm_mutex); |
98 | diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_sdmmc.c |
99 | index efd995e3cb0b9..2c56f094b4974 100644 |
100 | --- a/drivers/mmc/host/rtsx_pci_sdmmc.c |
101 | +++ b/drivers/mmc/host/rtsx_pci_sdmmc.c |
102 | @@ -49,10 +49,7 @@ struct realtek_pci_sdmmc { |
103 | bool double_clk; |
104 | bool eject; |
105 | bool initial_mode; |
106 | - int power_state; |
107 | -#define SDMMC_POWER_ON 1 |
108 | -#define SDMMC_POWER_OFF 0 |
109 | - |
110 | + int prev_power_state; |
111 | int sg_count; |
112 | s32 cookie; |
113 | int cookie_sg_count; |
114 | @@ -914,14 +911,21 @@ static int sd_set_bus_width(struct realtek_pci_sdmmc *host, |
115 | return err; |
116 | } |
117 | |
118 | -static int sd_power_on(struct realtek_pci_sdmmc *host) |
119 | +static int sd_power_on(struct realtek_pci_sdmmc *host, unsigned char power_mode) |
120 | { |
121 | struct rtsx_pcr *pcr = host->pcr; |
122 | int err; |
123 | |
124 | - if (host->power_state == SDMMC_POWER_ON) |
125 | + if (host->prev_power_state == MMC_POWER_ON) |
126 | return 0; |
127 | |
128 | + if (host->prev_power_state == MMC_POWER_UP) { |
129 | + rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 0); |
130 | + goto finish; |
131 | + } |
132 | + |
133 | + msleep(100); |
134 | + |
135 | rtsx_pci_init_cmd(pcr); |
136 | rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SELECT, 0x07, SD_MOD_SEL); |
137 | rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SHARE_MODE, |
138 | @@ -940,11 +944,17 @@ static int sd_power_on(struct realtek_pci_sdmmc *host) |
139 | if (err < 0) |
140 | return err; |
141 | |
142 | + mdelay(1); |
143 | + |
144 | err = rtsx_pci_write_register(pcr, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN); |
145 | if (err < 0) |
146 | return err; |
147 | |
148 | - host->power_state = SDMMC_POWER_ON; |
149 | + /* send at least 74 clocks */ |
150 | + rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, SD_CLK_TOGGLE_EN); |
151 | + |
152 | +finish: |
153 | + host->prev_power_state = power_mode; |
154 | return 0; |
155 | } |
156 | |
157 | @@ -953,7 +963,7 @@ static int sd_power_off(struct realtek_pci_sdmmc *host) |
158 | struct rtsx_pcr *pcr = host->pcr; |
159 | int err; |
160 | |
161 | - host->power_state = SDMMC_POWER_OFF; |
162 | + host->prev_power_state = MMC_POWER_OFF; |
163 | |
164 | rtsx_pci_init_cmd(pcr); |
165 | |
166 | @@ -979,7 +989,7 @@ static int sd_set_power_mode(struct realtek_pci_sdmmc *host, |
167 | if (power_mode == MMC_POWER_OFF) |
168 | err = sd_power_off(host); |
169 | else |
170 | - err = sd_power_on(host); |
171 | + err = sd_power_on(host, power_mode); |
172 | |
173 | return err; |
174 | } |
175 | @@ -1417,7 +1427,7 @@ static int rtsx_pci_sdmmc_drv_probe(struct platform_device *pdev) |
176 | host->mmc = mmc; |
177 | host->pdev = pdev; |
178 | host->cookie = -1; |
179 | - host->power_state = SDMMC_POWER_OFF; |
180 | + host->prev_power_state = MMC_POWER_OFF; |
181 | INIT_WORK(&host->work, sd_request); |
182 | platform_set_drvdata(pdev, host); |
183 | pcr->slots[RTSX_SD_CARD].p_dev = pdev; |
184 | diff --git a/drivers/net/can/grcan.c b/drivers/net/can/grcan.c |
185 | index a2dbd7ae9db24..c6a176d8681c0 100644 |
186 | --- a/drivers/net/can/grcan.c |
187 | +++ b/drivers/net/can/grcan.c |
188 | @@ -245,7 +245,7 @@ struct grcan_device_config { |
189 | .rxsize = GRCAN_DEFAULT_BUFFER_SIZE, \ |
190 | } |
191 | |
192 | -#define GRCAN_TXBUG_SAFE_GRLIB_VERSION 0x4100 |
193 | +#define GRCAN_TXBUG_SAFE_GRLIB_VERSION 4100 |
194 | #define GRLIB_VERSION_MASK 0xffff |
195 | |
196 | /* GRCAN private data structure */ |
197 | @@ -1141,7 +1141,7 @@ static int grcan_close(struct net_device *dev) |
198 | return 0; |
199 | } |
200 | |
201 | -static int grcan_transmit_catch_up(struct net_device *dev, int budget) |
202 | +static void grcan_transmit_catch_up(struct net_device *dev) |
203 | { |
204 | struct grcan_priv *priv = netdev_priv(dev); |
205 | unsigned long flags; |
206 | @@ -1149,7 +1149,7 @@ static int grcan_transmit_catch_up(struct net_device *dev, int budget) |
207 | |
208 | spin_lock_irqsave(&priv->lock, flags); |
209 | |
210 | - work_done = catch_up_echo_skb(dev, budget, true); |
211 | + work_done = catch_up_echo_skb(dev, -1, true); |
212 | if (work_done) { |
213 | if (!priv->resetting && !priv->closing && |
214 | !(priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)) |
215 | @@ -1163,8 +1163,6 @@ static int grcan_transmit_catch_up(struct net_device *dev, int budget) |
216 | } |
217 | |
218 | spin_unlock_irqrestore(&priv->lock, flags); |
219 | - |
220 | - return work_done; |
221 | } |
222 | |
223 | static int grcan_receive(struct net_device *dev, int budget) |
224 | @@ -1246,19 +1244,13 @@ static int grcan_poll(struct napi_struct *napi, int budget) |
225 | struct net_device *dev = priv->dev; |
226 | struct grcan_registers __iomem *regs = priv->regs; |
227 | unsigned long flags; |
228 | - int tx_work_done, rx_work_done; |
229 | - int rx_budget = budget / 2; |
230 | - int tx_budget = budget - rx_budget; |
231 | + int work_done; |
232 | |
233 | - /* Half of the budget for receiveing messages */ |
234 | - rx_work_done = grcan_receive(dev, rx_budget); |
235 | + work_done = grcan_receive(dev, budget); |
236 | |
237 | - /* Half of the budget for transmitting messages as that can trigger echo |
238 | - * frames being received |
239 | - */ |
240 | - tx_work_done = grcan_transmit_catch_up(dev, tx_budget); |
241 | + grcan_transmit_catch_up(dev); |
242 | |
243 | - if (rx_work_done < rx_budget && tx_work_done < tx_budget) { |
244 | + if (work_done < budget) { |
245 | napi_complete(napi); |
246 | |
247 | /* Guarantee no interference with a running reset that otherwise |
248 | @@ -1275,7 +1267,7 @@ static int grcan_poll(struct napi_struct *napi, int budget) |
249 | spin_unlock_irqrestore(&priv->lock, flags); |
250 | } |
251 | |
252 | - return rx_work_done + tx_work_done; |
253 | + return work_done; |
254 | } |
255 | |
256 | /* Work tx bug by waiting while for the risky situation to clear. If that fails, |
257 | @@ -1665,6 +1657,7 @@ exit_free_candev: |
258 | static int grcan_probe(struct platform_device *ofdev) |
259 | { |
260 | struct device_node *np = ofdev->dev.of_node; |
261 | + struct device_node *sysid_parent; |
262 | struct resource *res; |
263 | u32 sysid, ambafreq; |
264 | int irq, err; |
265 | @@ -1674,10 +1667,15 @@ static int grcan_probe(struct platform_device *ofdev) |
266 | /* Compare GRLIB version number with the first that does not |
267 | * have the tx bug (see start_xmit) |
268 | */ |
269 | - err = of_property_read_u32(np, "systemid", &sysid); |
270 | - if (!err && ((sysid & GRLIB_VERSION_MASK) |
271 | - >= GRCAN_TXBUG_SAFE_GRLIB_VERSION)) |
272 | - txbug = false; |
273 | + sysid_parent = of_find_node_by_path("/ambapp0"); |
274 | + if (sysid_parent) { |
275 | + of_node_get(sysid_parent); |
276 | + err = of_property_read_u32(sysid_parent, "systemid", &sysid); |
277 | + if (!err && ((sysid & GRLIB_VERSION_MASK) >= |
278 | + GRCAN_TXBUG_SAFE_GRLIB_VERSION)) |
279 | + txbug = false; |
280 | + of_node_put(sysid_parent); |
281 | + } |
282 | |
283 | err = of_property_read_u32(np, "freq", &ambafreq); |
284 | if (err) { |
285 | diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h |
286 | index 819796fb9d46f..0f231e96ae25f 100644 |
287 | --- a/include/net/bluetooth/hci_core.h |
288 | +++ b/include/net/bluetooth/hci_core.h |
289 | @@ -32,6 +32,9 @@ |
290 | /* HCI priority */ |
291 | #define HCI_PRIO_MAX 7 |
292 | |
293 | +/* HCI maximum id value */ |
294 | +#define HCI_MAX_ID 10000 |
295 | + |
296 | /* HCI Core structures */ |
297 | struct inquiry_data { |
298 | bdaddr_t bdaddr; |
299 | diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c |
300 | index af817e5060fbf..bb6cb42656b16 100644 |
301 | --- a/mm/userfaultfd.c |
302 | +++ b/mm/userfaultfd.c |
303 | @@ -50,6 +50,8 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm, |
304 | /* don't free the page */ |
305 | goto out; |
306 | } |
307 | + |
308 | + flush_dcache_page(page); |
309 | } else { |
310 | page = *pagep; |
311 | *pagep = NULL; |
312 | @@ -267,6 +269,7 @@ retry: |
313 | err = -EFAULT; |
314 | goto out; |
315 | } |
316 | + flush_dcache_page(page); |
317 | goto retry; |
318 | } else |
319 | BUG_ON(page); |
320 | diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c |
321 | index 40e6e5feb1e06..6f99da11d2073 100644 |
322 | --- a/net/bluetooth/hci_core.c |
323 | +++ b/net/bluetooth/hci_core.c |
324 | @@ -3064,10 +3064,10 @@ int hci_register_dev(struct hci_dev *hdev) |
325 | */ |
326 | switch (hdev->dev_type) { |
327 | case HCI_PRIMARY: |
328 | - id = ida_simple_get(&hci_index_ida, 0, 0, GFP_KERNEL); |
329 | + id = ida_simple_get(&hci_index_ida, 0, HCI_MAX_ID, GFP_KERNEL); |
330 | break; |
331 | case HCI_AMP: |
332 | - id = ida_simple_get(&hci_index_ida, 1, 0, GFP_KERNEL); |
333 | + id = ida_simple_get(&hci_index_ida, 1, HCI_MAX_ID, GFP_KERNEL); |
334 | break; |
335 | default: |
336 | return -EINVAL; |
337 | @@ -3076,7 +3076,7 @@ int hci_register_dev(struct hci_dev *hdev) |
338 | if (id < 0) |
339 | return id; |
340 | |
341 | - sprintf(hdev->name, "hci%d", id); |
342 | + snprintf(hdev->name, sizeof(hdev->name), "hci%d", id); |
343 | hdev->id = id; |
344 | |
345 | BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus); |