Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0413-4.9.314-all-fixes.patch

Parent Directory Parent Directory | Revision Log 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)
-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);