Contents of /trunk/kernel-alx-legacy/patches-4.9/0265-4.9.166-all-fixes.patch
Parent Directory | Revision Log
Revision 3608 -
(show annotations)
(download)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 24691 byte(s)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 24691 byte(s)
-added kerenl-alx-legacy pkg
1 | diff --git a/Makefile b/Makefile |
2 | index 9b61da532c42..90478086eff5 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 9 |
8 | -SUBLEVEL = 165 |
9 | +SUBLEVEL = 166 |
10 | EXTRAVERSION = |
11 | NAME = Roaring Lionus |
12 | |
13 | diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c |
14 | index 5963be2e05f0..28bef94cf792 100644 |
15 | --- a/arch/arm64/kernel/traps.c |
16 | +++ b/arch/arm64/kernel/traps.c |
17 | @@ -266,10 +266,12 @@ void die(const char *str, struct pt_regs *regs, int err) |
18 | { |
19 | struct thread_info *thread = current_thread_info(); |
20 | int ret; |
21 | + unsigned long flags; |
22 | + |
23 | + raw_spin_lock_irqsave(&die_lock, flags); |
24 | |
25 | oops_enter(); |
26 | |
27 | - raw_spin_lock_irq(&die_lock); |
28 | console_verbose(); |
29 | bust_spinlocks(1); |
30 | ret = __die(str, err, thread, regs); |
31 | @@ -279,13 +281,15 @@ void die(const char *str, struct pt_regs *regs, int err) |
32 | |
33 | bust_spinlocks(0); |
34 | add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE); |
35 | - raw_spin_unlock_irq(&die_lock); |
36 | oops_exit(); |
37 | |
38 | if (in_interrupt()) |
39 | panic("Fatal exception in interrupt"); |
40 | if (panic_on_oops) |
41 | panic("Fatal exception"); |
42 | + |
43 | + raw_spin_unlock_irqrestore(&die_lock, flags); |
44 | + |
45 | if (ret != NOTIFY_STOP) |
46 | do_exit(SIGSEGV); |
47 | } |
48 | diff --git a/arch/mips/include/asm/jump_label.h b/arch/mips/include/asm/jump_label.h |
49 | index e77672539e8e..e4456e450f94 100644 |
50 | --- a/arch/mips/include/asm/jump_label.h |
51 | +++ b/arch/mips/include/asm/jump_label.h |
52 | @@ -21,15 +21,15 @@ |
53 | #endif |
54 | |
55 | #ifdef CONFIG_CPU_MICROMIPS |
56 | -#define NOP_INSN "nop32" |
57 | +#define B_INSN "b32" |
58 | #else |
59 | -#define NOP_INSN "nop" |
60 | +#define B_INSN "b" |
61 | #endif |
62 | |
63 | static __always_inline bool arch_static_branch(struct static_key *key, bool branch) |
64 | { |
65 | - asm_volatile_goto("1:\t" NOP_INSN "\n\t" |
66 | - "nop\n\t" |
67 | + asm_volatile_goto("1:\t" B_INSN " 2f\n\t" |
68 | + "2:\tnop\n\t" |
69 | ".pushsection __jump_table, \"aw\"\n\t" |
70 | WORD_INSN " 1b, %l[l_yes], %0\n\t" |
71 | ".popsection\n\t" |
72 | diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S |
73 | index f0a0e6d62be3..2d965d91fee4 100644 |
74 | --- a/arch/mips/kernel/vmlinux.lds.S |
75 | +++ b/arch/mips/kernel/vmlinux.lds.S |
76 | @@ -138,6 +138,13 @@ SECTIONS |
77 | PERCPU_SECTION(1 << CONFIG_MIPS_L1_CACHE_SHIFT) |
78 | #endif |
79 | |
80 | +#ifdef CONFIG_MIPS_ELF_APPENDED_DTB |
81 | + .appended_dtb : AT(ADDR(.appended_dtb) - LOAD_OFFSET) { |
82 | + *(.appended_dtb) |
83 | + KEEP(*(.appended_dtb)) |
84 | + } |
85 | +#endif |
86 | + |
87 | #ifdef CONFIG_RELOCATABLE |
88 | . = ALIGN(4); |
89 | |
90 | @@ -162,11 +169,6 @@ SECTIONS |
91 | __appended_dtb = .; |
92 | /* leave space for appended DTB */ |
93 | . += 0x100000; |
94 | -#elif defined(CONFIG_MIPS_ELF_APPENDED_DTB) |
95 | - .appended_dtb : AT(ADDR(.appended_dtb) - LOAD_OFFSET) { |
96 | - *(.appended_dtb) |
97 | - KEEP(*(.appended_dtb)) |
98 | - } |
99 | #endif |
100 | /* |
101 | * Align to 64K in attempt to eliminate holes before the |
102 | diff --git a/arch/mips/loongson64/lemote-2f/irq.c b/arch/mips/loongson64/lemote-2f/irq.c |
103 | index cab5f43e0e29..d371f0294cbb 100644 |
104 | --- a/arch/mips/loongson64/lemote-2f/irq.c |
105 | +++ b/arch/mips/loongson64/lemote-2f/irq.c |
106 | @@ -102,7 +102,7 @@ static struct irqaction ip6_irqaction = { |
107 | static struct irqaction cascade_irqaction = { |
108 | .handler = no_action, |
109 | .name = "cascade", |
110 | - .flags = IRQF_NO_THREAD, |
111 | + .flags = IRQF_NO_THREAD | IRQF_NO_SUSPEND, |
112 | }; |
113 | |
114 | void __init mach_init_irq(void) |
115 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c |
116 | index aec6e9eef489..55884cb5a0fc 100644 |
117 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c |
118 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c |
119 | @@ -531,11 +531,9 @@ static int vmw_fb_set_par(struct fb_info *info) |
120 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
121 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) |
122 | }; |
123 | - struct drm_display_mode *old_mode; |
124 | struct drm_display_mode *mode; |
125 | int ret; |
126 | |
127 | - old_mode = par->set_mode; |
128 | mode = drm_mode_duplicate(vmw_priv->dev, &new_mode); |
129 | if (!mode) { |
130 | DRM_ERROR("Could not create new fb mode.\n"); |
131 | @@ -546,11 +544,7 @@ static int vmw_fb_set_par(struct fb_info *info) |
132 | mode->vdisplay = var->yres; |
133 | vmw_guess_mode_timing(mode); |
134 | |
135 | - if (old_mode && drm_mode_equal(old_mode, mode)) { |
136 | - drm_mode_destroy(vmw_priv->dev, mode); |
137 | - mode = old_mode; |
138 | - old_mode = NULL; |
139 | - } else if (!vmw_kms_validate_mode_vram(vmw_priv, |
140 | + if (!vmw_kms_validate_mode_vram(vmw_priv, |
141 | mode->hdisplay * |
142 | DIV_ROUND_UP(var->bits_per_pixel, 8), |
143 | mode->vdisplay)) { |
144 | @@ -613,8 +607,8 @@ static int vmw_fb_set_par(struct fb_info *info) |
145 | schedule_delayed_work(&par->local_work, 0); |
146 | |
147 | out_unlock: |
148 | - if (old_mode) |
149 | - drm_mode_destroy(vmw_priv->dev, old_mode); |
150 | + if (par->set_mode) |
151 | + drm_mode_destroy(vmw_priv->dev, par->set_mode); |
152 | par->set_mode = mode; |
153 | |
154 | drm_modeset_unlock_all(vmw_priv->dev); |
155 | diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c |
156 | index ca22483d253f..c1233d0288a0 100644 |
157 | --- a/drivers/iommu/amd_iommu.c |
158 | +++ b/drivers/iommu/amd_iommu.c |
159 | @@ -2599,7 +2599,12 @@ static int map_sg(struct device *dev, struct scatterlist *sglist, |
160 | |
161 | /* Everything is mapped - write the right values into s->dma_address */ |
162 | for_each_sg(sglist, s, nelems, i) { |
163 | - s->dma_address += address + s->offset; |
164 | + /* |
165 | + * Add in the remaining piece of the scatter-gather offset that |
166 | + * was masked out when we were determining the physical address |
167 | + * via (sg_phys(s) & PAGE_MASK) earlier. |
168 | + */ |
169 | + s->dma_address += address + (s->offset & ~PAGE_MASK); |
170 | s->dma_length = s->length; |
171 | } |
172 | |
173 | diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c |
174 | index 20397aba6849..d92967e2e385 100644 |
175 | --- a/drivers/media/usb/uvc/uvc_ctrl.c |
176 | +++ b/drivers/media/usb/uvc/uvc_ctrl.c |
177 | @@ -1203,7 +1203,7 @@ static void uvc_ctrl_fill_event(struct uvc_video_chain *chain, |
178 | |
179 | __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl); |
180 | |
181 | - memset(ev->reserved, 0, sizeof(ev->reserved)); |
182 | + memset(ev, 0, sizeof(*ev)); |
183 | ev->type = V4L2_EVENT_CTRL; |
184 | ev->id = v4l2_ctrl.id; |
185 | ev->u.ctrl.value = value; |
186 | diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c |
187 | index bd6884223a0d..c56d649fa7da 100644 |
188 | --- a/drivers/media/v4l2-core/v4l2-ctrls.c |
189 | +++ b/drivers/media/v4l2-core/v4l2-ctrls.c |
190 | @@ -1231,7 +1231,7 @@ static u32 user_flags(const struct v4l2_ctrl *ctrl) |
191 | |
192 | static void fill_event(struct v4l2_event *ev, struct v4l2_ctrl *ctrl, u32 changes) |
193 | { |
194 | - memset(ev->reserved, 0, sizeof(ev->reserved)); |
195 | + memset(ev, 0, sizeof(*ev)); |
196 | ev->type = V4L2_EVENT_CTRL; |
197 | ev->id = ctrl->id; |
198 | ev->u.ctrl.changes = changes; |
199 | diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c |
200 | index c763b404510f..3e139692fe8f 100644 |
201 | --- a/drivers/mmc/host/pxamci.c |
202 | +++ b/drivers/mmc/host/pxamci.c |
203 | @@ -181,7 +181,7 @@ static void pxamci_dma_irq(void *param); |
204 | static void pxamci_setup_data(struct pxamci_host *host, struct mmc_data *data) |
205 | { |
206 | struct dma_async_tx_descriptor *tx; |
207 | - enum dma_data_direction direction; |
208 | + enum dma_transfer_direction direction; |
209 | struct dma_slave_config config; |
210 | struct dma_chan *chan; |
211 | unsigned int nob = data->blocks; |
212 | diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c |
213 | index 21aec5c252ee..bbfe7be214e1 100644 |
214 | --- a/drivers/net/wireless/ath/ath10k/wmi.c |
215 | +++ b/drivers/net/wireless/ath/ath10k/wmi.c |
216 | @@ -4277,7 +4277,7 @@ static void ath10k_tpc_config_disp_tables(struct ath10k *ar, |
217 | rate_code[i], |
218 | type); |
219 | snprintf(buff, sizeof(buff), "%8d ", tpc[j]); |
220 | - strncat(tpc_value, buff, strlen(buff)); |
221 | + strlcat(tpc_value, buff, sizeof(tpc_value)); |
222 | } |
223 | tpc_stats->tpc_table[type].pream_idx[i] = pream_idx; |
224 | tpc_stats->tpc_table[type].rate_code[i] = rate_code[i]; |
225 | diff --git a/drivers/power/supply/charger-manager.c b/drivers/power/supply/charger-manager.c |
226 | index e664ca7c0afd..13f23c00538b 100644 |
227 | --- a/drivers/power/supply/charger-manager.c |
228 | +++ b/drivers/power/supply/charger-manager.c |
229 | @@ -1212,7 +1212,6 @@ static int charger_extcon_init(struct charger_manager *cm, |
230 | if (ret < 0) { |
231 | pr_info("Cannot register extcon_dev for %s(cable: %s)\n", |
232 | cable->extcon_name, cable->name); |
233 | - ret = -EINVAL; |
234 | } |
235 | |
236 | return ret; |
237 | @@ -1634,7 +1633,7 @@ static int charger_manager_probe(struct platform_device *pdev) |
238 | |
239 | if (IS_ERR(desc)) { |
240 | dev_err(&pdev->dev, "No platform data (desc) found\n"); |
241 | - return -ENODEV; |
242 | + return PTR_ERR(desc); |
243 | } |
244 | |
245 | cm = devm_kzalloc(&pdev->dev, |
246 | diff --git a/drivers/rtc/rtc-lib.c b/drivers/rtc/rtc-lib.c |
247 | index e6bfb9c42a10..5b136bdc03d4 100644 |
248 | --- a/drivers/rtc/rtc-lib.c |
249 | +++ b/drivers/rtc/rtc-lib.c |
250 | @@ -52,13 +52,11 @@ EXPORT_SYMBOL(rtc_year_days); |
251 | */ |
252 | void rtc_time64_to_tm(time64_t time, struct rtc_time *tm) |
253 | { |
254 | - unsigned int month, year; |
255 | - unsigned long secs; |
256 | + unsigned int month, year, secs; |
257 | int days; |
258 | |
259 | /* time must be positive */ |
260 | - days = div_s64(time, 86400); |
261 | - secs = time - (unsigned int) days * 86400; |
262 | + days = div_s64_rem(time, 86400, &secs); |
263 | |
264 | /* day of the week, 1970-01-01 was a Thursday */ |
265 | tm->tm_wday = (days + 4) % 7; |
266 | diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c |
267 | index 5cfd56f08ffb..0b858414c558 100644 |
268 | --- a/drivers/scsi/ufs/ufshcd.c |
269 | +++ b/drivers/scsi/ufs/ufshcd.c |
270 | @@ -1348,10 +1348,11 @@ static int ufshcd_comp_devman_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) |
271 | u32 upiu_flags; |
272 | int ret = 0; |
273 | |
274 | - if (hba->ufs_version == UFSHCI_VERSION_20) |
275 | - lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; |
276 | - else |
277 | + if ((hba->ufs_version == UFSHCI_VERSION_10) || |
278 | + (hba->ufs_version == UFSHCI_VERSION_11)) |
279 | lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; |
280 | + else |
281 | + lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; |
282 | |
283 | ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); |
284 | if (hba->dev_cmd.type == DEV_CMD_TYPE_QUERY) |
285 | @@ -1375,10 +1376,11 @@ static int ufshcd_comp_scsi_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) |
286 | u32 upiu_flags; |
287 | int ret = 0; |
288 | |
289 | - if (hba->ufs_version == UFSHCI_VERSION_20) |
290 | - lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; |
291 | - else |
292 | + if ((hba->ufs_version == UFSHCI_VERSION_10) || |
293 | + (hba->ufs_version == UFSHCI_VERSION_11)) |
294 | lrbp->command_type = UTP_CMD_TYPE_SCSI; |
295 | + else |
296 | + lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; |
297 | |
298 | if (likely(lrbp->cmd)) { |
299 | ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, |
300 | diff --git a/drivers/tty/serial/sprd_serial.c b/drivers/tty/serial/sprd_serial.c |
301 | index 699447aa8b43..747560feb63e 100644 |
302 | --- a/drivers/tty/serial/sprd_serial.c |
303 | +++ b/drivers/tty/serial/sprd_serial.c |
304 | @@ -36,7 +36,7 @@ |
305 | #define SPRD_FIFO_SIZE 128 |
306 | #define SPRD_DEF_RATE 26000000 |
307 | #define SPRD_BAUD_IO_LIMIT 3000000 |
308 | -#define SPRD_TIMEOUT 256 |
309 | +#define SPRD_TIMEOUT 256000 |
310 | |
311 | /* the offset of serial registers and BITs for them */ |
312 | /* data registers */ |
313 | @@ -63,6 +63,7 @@ |
314 | |
315 | /* interrupt clear register */ |
316 | #define SPRD_ICLR 0x0014 |
317 | +#define SPRD_ICLR_TIMEOUT BIT(13) |
318 | |
319 | /* line control register */ |
320 | #define SPRD_LCR 0x0018 |
321 | @@ -298,7 +299,8 @@ static irqreturn_t sprd_handle_irq(int irq, void *dev_id) |
322 | return IRQ_NONE; |
323 | } |
324 | |
325 | - serial_out(port, SPRD_ICLR, ~0); |
326 | + if (ims & SPRD_IMSR_TIMEOUT) |
327 | + serial_out(port, SPRD_ICLR, SPRD_ICLR_TIMEOUT); |
328 | |
329 | if (ims & (SPRD_IMSR_RX_FIFO_FULL | |
330 | SPRD_IMSR_BREAK_DETECT | SPRD_IMSR_TIMEOUT)) |
331 | diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c |
332 | index 5e6136d2ed71..c6578b321838 100644 |
333 | --- a/drivers/usb/core/config.c |
334 | +++ b/drivers/usb/core/config.c |
335 | @@ -763,18 +763,21 @@ void usb_destroy_configuration(struct usb_device *dev) |
336 | return; |
337 | |
338 | if (dev->rawdescriptors) { |
339 | - for (i = 0; i < dev->descriptor.bNumConfigurations; i++) |
340 | + for (i = 0; i < dev->descriptor.bNumConfigurations && |
341 | + i < USB_MAXCONFIG; i++) |
342 | kfree(dev->rawdescriptors[i]); |
343 | |
344 | kfree(dev->rawdescriptors); |
345 | dev->rawdescriptors = NULL; |
346 | } |
347 | |
348 | - for (c = 0; c < dev->descriptor.bNumConfigurations; c++) { |
349 | + for (c = 0; c < dev->descriptor.bNumConfigurations && |
350 | + c < USB_MAXCONFIG; c++) { |
351 | struct usb_host_config *cf = &dev->config[c]; |
352 | |
353 | kfree(cf->string); |
354 | - for (i = 0; i < cf->desc.bNumInterfaces; i++) { |
355 | + for (i = 0; i < cf->desc.bNumInterfaces && |
356 | + i < USB_MAXINTERFACES; i++) { |
357 | if (cf->intf_cache[i]) |
358 | kref_put(&cf->intf_cache[i]->ref, |
359 | usb_release_interface_cache); |
360 | diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c |
361 | index d95ae092f154..baa1510a5298 100644 |
362 | --- a/drivers/video/backlight/pwm_bl.c |
363 | +++ b/drivers/video/backlight/pwm_bl.c |
364 | @@ -54,10 +54,11 @@ static void pwm_backlight_power_on(struct pwm_bl_data *pb, int brightness) |
365 | if (err < 0) |
366 | dev_err(pb->dev, "failed to enable power supply\n"); |
367 | |
368 | + pwm_enable(pb->pwm); |
369 | + |
370 | if (pb->enable_gpio) |
371 | gpiod_set_value_cansleep(pb->enable_gpio, 1); |
372 | |
373 | - pwm_enable(pb->pwm); |
374 | pb->enabled = true; |
375 | } |
376 | |
377 | @@ -66,12 +67,12 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb) |
378 | if (!pb->enabled) |
379 | return; |
380 | |
381 | - pwm_config(pb->pwm, 0, pb->period); |
382 | - pwm_disable(pb->pwm); |
383 | - |
384 | if (pb->enable_gpio) |
385 | gpiod_set_value_cansleep(pb->enable_gpio, 0); |
386 | |
387 | + pwm_config(pb->pwm, 0, pb->period); |
388 | + pwm_disable(pb->pwm); |
389 | + |
390 | regulator_disable(pb->power_supply); |
391 | pb->enabled = false; |
392 | } |
393 | diff --git a/fs/dcache.c b/fs/dcache.c |
394 | index 29c0286bd638..05bad55352bb 100644 |
395 | --- a/fs/dcache.c |
396 | +++ b/fs/dcache.c |
397 | @@ -1522,7 +1522,7 @@ static void check_and_drop(void *_data) |
398 | { |
399 | struct detach_data *data = _data; |
400 | |
401 | - if (!data->mountpoint && !data->select.found) |
402 | + if (!data->mountpoint && list_empty(&data->select.dispose)) |
403 | __d_drop(data->select.start); |
404 | } |
405 | |
406 | @@ -1564,17 +1564,15 @@ void d_invalidate(struct dentry *dentry) |
407 | |
408 | d_walk(dentry, &data, detach_and_collect, check_and_drop); |
409 | |
410 | - if (data.select.found) |
411 | + if (!list_empty(&data.select.dispose)) |
412 | shrink_dentry_list(&data.select.dispose); |
413 | + else if (!data.mountpoint) |
414 | + return; |
415 | |
416 | if (data.mountpoint) { |
417 | detach_mounts(data.mountpoint); |
418 | dput(data.mountpoint); |
419 | } |
420 | - |
421 | - if (!data.mountpoint && !data.select.found) |
422 | - break; |
423 | - |
424 | cond_resched(); |
425 | } |
426 | } |
427 | diff --git a/fs/ext4/ext4_jbd2.h b/fs/ext4/ext4_jbd2.h |
428 | index f97611171023..4b7cc1af03a0 100644 |
429 | --- a/fs/ext4/ext4_jbd2.h |
430 | +++ b/fs/ext4/ext4_jbd2.h |
431 | @@ -391,7 +391,7 @@ static inline void ext4_update_inode_fsync_trans(handle_t *handle, |
432 | { |
433 | struct ext4_inode_info *ei = EXT4_I(inode); |
434 | |
435 | - if (ext4_handle_valid(handle)) { |
436 | + if (ext4_handle_valid(handle) && !is_handle_aborted(handle)) { |
437 | ei->i_sync_tid = handle->h_transaction->t_tid; |
438 | if (datasync) |
439 | ei->i_datasync_tid = handle->h_transaction->t_tid; |
440 | diff --git a/fs/ext4/file.c b/fs/ext4/file.c |
441 | index 08fca4add1e2..fe76d0957a1f 100644 |
442 | --- a/fs/ext4/file.c |
443 | +++ b/fs/ext4/file.c |
444 | @@ -79,7 +79,7 @@ ext4_unaligned_aio(struct inode *inode, struct iov_iter *from, loff_t pos) |
445 | struct super_block *sb = inode->i_sb; |
446 | int blockmask = sb->s_blocksize - 1; |
447 | |
448 | - if (pos >= i_size_read(inode)) |
449 | + if (pos >= ALIGN(i_size_read(inode), sb->s_blocksize)) |
450 | return 0; |
451 | |
452 | if ((pos | iov_iter_alignment(from)) & blockmask) |
453 | diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c |
454 | index 58229c1b4a3d..14007e621d2a 100644 |
455 | --- a/fs/ext4/indirect.c |
456 | +++ b/fs/ext4/indirect.c |
457 | @@ -1385,10 +1385,14 @@ end_range: |
458 | partial->p + 1, |
459 | partial2->p, |
460 | (chain+n-1) - partial); |
461 | - BUFFER_TRACE(partial->bh, "call brelse"); |
462 | - brelse(partial->bh); |
463 | - BUFFER_TRACE(partial2->bh, "call brelse"); |
464 | - brelse(partial2->bh); |
465 | + while (partial > chain) { |
466 | + BUFFER_TRACE(partial->bh, "call brelse"); |
467 | + brelse(partial->bh); |
468 | + } |
469 | + while (partial2 > chain2) { |
470 | + BUFFER_TRACE(partial2->bh, "call brelse"); |
471 | + brelse(partial2->bh); |
472 | + } |
473 | return 0; |
474 | } |
475 | |
476 | diff --git a/fs/udf/truncate.c b/fs/udf/truncate.c |
477 | index 42b8c57795cb..c6ce7503a329 100644 |
478 | --- a/fs/udf/truncate.c |
479 | +++ b/fs/udf/truncate.c |
480 | @@ -260,6 +260,9 @@ void udf_truncate_extents(struct inode *inode) |
481 | epos.block = eloc; |
482 | epos.bh = udf_tread(sb, |
483 | udf_get_lb_pblock(sb, &eloc, 0)); |
484 | + /* Error reading indirect block? */ |
485 | + if (!epos.bh) |
486 | + return; |
487 | if (elen) |
488 | indirect_ext_len = |
489 | (elen + sb->s_blocksize - 1) >> |
490 | diff --git a/include/linux/ceph/libceph.h b/include/linux/ceph/libceph.h |
491 | index a8a574897d3c..fe757514feb1 100644 |
492 | --- a/include/linux/ceph/libceph.h |
493 | +++ b/include/linux/ceph/libceph.h |
494 | @@ -276,6 +276,8 @@ extern void ceph_destroy_client(struct ceph_client *client); |
495 | extern int __ceph_open_session(struct ceph_client *client, |
496 | unsigned long started); |
497 | extern int ceph_open_session(struct ceph_client *client); |
498 | +int ceph_wait_for_latest_osdmap(struct ceph_client *client, |
499 | + unsigned long timeout); |
500 | |
501 | /* pagevec.c */ |
502 | extern void ceph_release_page_vector(struct page **pages, int num_pages); |
503 | diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h |
504 | index 197a30d221e9..146054ceea8e 100644 |
505 | --- a/include/net/inet_connection_sock.h |
506 | +++ b/include/net/inet_connection_sock.h |
507 | @@ -289,11 +289,6 @@ static inline int inet_csk_reqsk_queue_len(const struct sock *sk) |
508 | return reqsk_queue_len(&inet_csk(sk)->icsk_accept_queue); |
509 | } |
510 | |
511 | -static inline int inet_csk_reqsk_queue_young(const struct sock *sk) |
512 | -{ |
513 | - return reqsk_queue_len_young(&inet_csk(sk)->icsk_accept_queue); |
514 | -} |
515 | - |
516 | static inline int inet_csk_reqsk_queue_is_full(const struct sock *sk) |
517 | { |
518 | return inet_csk_reqsk_queue_len(sk) >= sk->sk_max_ack_backlog; |
519 | diff --git a/kernel/futex.c b/kernel/futex.c |
520 | index 30fe0432c46d..2e766ffff2cb 100644 |
521 | --- a/kernel/futex.c |
522 | +++ b/kernel/futex.c |
523 | @@ -3110,6 +3110,10 @@ int handle_futex_death(u32 __user *uaddr, struct task_struct *curr, int pi) |
524 | { |
525 | u32 uval, uninitialized_var(nval), mval; |
526 | |
527 | + /* Futex address must be 32bit aligned */ |
528 | + if ((((unsigned long)uaddr) % sizeof(*uaddr)) != 0) |
529 | + return -1; |
530 | + |
531 | retry: |
532 | if (get_user(uval, uaddr)) |
533 | return -1; |
534 | diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c |
535 | index 26fc428476b9..d5b779d7e79f 100644 |
536 | --- a/kernel/locking/lockdep.c |
537 | +++ b/kernel/locking/lockdep.c |
538 | @@ -3446,6 +3446,9 @@ __lock_set_class(struct lockdep_map *lock, const char *name, |
539 | unsigned int depth; |
540 | int i; |
541 | |
542 | + if (unlikely(!debug_locks)) |
543 | + return 0; |
544 | + |
545 | depth = curr->lockdep_depth; |
546 | /* |
547 | * This function is about (re)setting the class of a held lock, |
548 | diff --git a/lib/int_sqrt.c b/lib/int_sqrt.c |
549 | index 1ef4cc344977..1afb545a37c5 100644 |
550 | --- a/lib/int_sqrt.c |
551 | +++ b/lib/int_sqrt.c |
552 | @@ -22,6 +22,9 @@ unsigned long int_sqrt(unsigned long x) |
553 | return x; |
554 | |
555 | m = 1UL << (BITS_PER_LONG - 2); |
556 | + while (m > x) |
557 | + m >>= 2; |
558 | + |
559 | while (m != 0) { |
560 | b = y + m; |
561 | y >>= 1; |
562 | diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c |
563 | index c88a6007e643..ca1836941f3c 100644 |
564 | --- a/net/bluetooth/hci_sock.c |
565 | +++ b/net/bluetooth/hci_sock.c |
566 | @@ -826,8 +826,6 @@ static int hci_sock_release(struct socket *sock) |
567 | if (!sk) |
568 | return 0; |
569 | |
570 | - hdev = hci_pi(sk)->hdev; |
571 | - |
572 | switch (hci_pi(sk)->channel) { |
573 | case HCI_CHANNEL_MONITOR: |
574 | atomic_dec(&monitor_promisc); |
575 | @@ -849,6 +847,7 @@ static int hci_sock_release(struct socket *sock) |
576 | |
577 | bt_sock_unlink(&hci_sk_list, sk); |
578 | |
579 | + hdev = hci_pi(sk)->hdev; |
580 | if (hdev) { |
581 | if (hci_pi(sk)->channel == HCI_CHANNEL_USER) { |
582 | /* When releasing an user channel exclusive access, |
583 | diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c |
584 | index 464e88599b9d..bf0294cf4d22 100644 |
585 | --- a/net/ceph/ceph_common.c |
586 | +++ b/net/ceph/ceph_common.c |
587 | @@ -699,7 +699,6 @@ int __ceph_open_session(struct ceph_client *client, unsigned long started) |
588 | } |
589 | EXPORT_SYMBOL(__ceph_open_session); |
590 | |
591 | - |
592 | int ceph_open_session(struct ceph_client *client) |
593 | { |
594 | int ret; |
595 | @@ -715,6 +714,23 @@ int ceph_open_session(struct ceph_client *client) |
596 | } |
597 | EXPORT_SYMBOL(ceph_open_session); |
598 | |
599 | +int ceph_wait_for_latest_osdmap(struct ceph_client *client, |
600 | + unsigned long timeout) |
601 | +{ |
602 | + u64 newest_epoch; |
603 | + int ret; |
604 | + |
605 | + ret = ceph_monc_get_version(&client->monc, "osdmap", &newest_epoch); |
606 | + if (ret) |
607 | + return ret; |
608 | + |
609 | + if (client->osdc.osdmap->epoch >= newest_epoch) |
610 | + return 0; |
611 | + |
612 | + ceph_osdc_maybe_request_map(&client->osdc); |
613 | + return ceph_monc_wait_osdmap(&client->monc, newest_epoch, timeout); |
614 | +} |
615 | +EXPORT_SYMBOL(ceph_wait_for_latest_osdmap); |
616 | |
617 | static int __init init_ceph_lib(void) |
618 | { |
619 | diff --git a/net/ceph/mon_client.c b/net/ceph/mon_client.c |
620 | index 500481003de4..288c1fcbcdf6 100644 |
621 | --- a/net/ceph/mon_client.c |
622 | +++ b/net/ceph/mon_client.c |
623 | @@ -914,6 +914,15 @@ int ceph_monc_blacklist_add(struct ceph_mon_client *monc, |
624 | mutex_unlock(&monc->mutex); |
625 | |
626 | ret = wait_generic_request(req); |
627 | + if (!ret) |
628 | + /* |
629 | + * Make sure we have the osdmap that includes the blacklist |
630 | + * entry. This is needed to ensure that the OSDs pick up the |
631 | + * new blacklist before processing any future requests from |
632 | + * this client. |
633 | + */ |
634 | + ret = ceph_wait_for_latest_osdmap(monc->client, 0); |
635 | + |
636 | out: |
637 | put_generic_request(req); |
638 | return ret; |
639 | diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c |
640 | index 28ad6f187e19..1d6d3aaa8c3d 100644 |
641 | --- a/net/dccp/ipv4.c |
642 | +++ b/net/dccp/ipv4.c |
643 | @@ -596,13 +596,7 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) |
644 | if (inet_csk_reqsk_queue_is_full(sk)) |
645 | goto drop; |
646 | |
647 | - /* |
648 | - * Accept backlog is full. If we have already queued enough |
649 | - * of warm entries in syn queue, drop request. It is better than |
650 | - * clogging syn queue with openreqs with exponentially increasing |
651 | - * timeout. |
652 | - */ |
653 | - if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) |
654 | + if (sk_acceptq_is_full(sk)) |
655 | goto drop; |
656 | |
657 | req = inet_reqsk_alloc(&dccp_request_sock_ops, sk, true); |
658 | diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c |
659 | index 6cbcf399d22b..93c706172f40 100644 |
660 | --- a/net/dccp/ipv6.c |
661 | +++ b/net/dccp/ipv6.c |
662 | @@ -328,7 +328,7 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) |
663 | if (inet_csk_reqsk_queue_is_full(sk)) |
664 | goto drop; |
665 | |
666 | - if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) |
667 | + if (sk_acceptq_is_full(sk)) |
668 | goto drop; |
669 | |
670 | req = inet_reqsk_alloc(&dccp6_request_sock_ops, sk, true); |
671 | diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c |
672 | index 48fe63c4fe24..cd4f13dda49e 100644 |
673 | --- a/net/ipv4/tcp_input.c |
674 | +++ b/net/ipv4/tcp_input.c |
675 | @@ -6374,13 +6374,7 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops, |
676 | goto drop; |
677 | } |
678 | |
679 | - |
680 | - /* Accept backlog is full. If we have already queued enough |
681 | - * of warm entries in syn queue, drop request. It is better than |
682 | - * clogging syn queue with openreqs with exponentially increasing |
683 | - * timeout. |
684 | - */ |
685 | - if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) { |
686 | + if (sk_acceptq_is_full(sk)) { |
687 | NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS); |
688 | goto drop; |
689 | } |
690 | diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c |
691 | index c6b046ddefdd..1b5e217d1bb2 100644 |
692 | --- a/sound/pci/hda/hda_codec.c |
693 | +++ b/sound/pci/hda/hda_codec.c |
694 | @@ -3004,6 +3004,7 @@ static void hda_call_codec_resume(struct hda_codec *codec) |
695 | hda_jackpoll_work(&codec->jackpoll_work.work); |
696 | else |
697 | snd_hda_jack_report_sync(codec); |
698 | + codec->core.dev.power.power_state = PMSG_ON; |
699 | atomic_dec(&codec->core.in_pm); |
700 | } |
701 | |
702 | @@ -3036,10 +3037,62 @@ static int hda_codec_runtime_resume(struct device *dev) |
703 | } |
704 | #endif /* CONFIG_PM */ |
705 | |
706 | +#ifdef CONFIG_PM_SLEEP |
707 | +static int hda_codec_force_resume(struct device *dev) |
708 | +{ |
709 | + int ret; |
710 | + |
711 | + /* The get/put pair below enforces the runtime resume even if the |
712 | + * device hasn't been used at suspend time. This trick is needed to |
713 | + * update the jack state change during the sleep. |
714 | + */ |
715 | + pm_runtime_get_noresume(dev); |
716 | + ret = pm_runtime_force_resume(dev); |
717 | + pm_runtime_put(dev); |
718 | + return ret; |
719 | +} |
720 | + |
721 | +static int hda_codec_pm_suspend(struct device *dev) |
722 | +{ |
723 | + dev->power.power_state = PMSG_SUSPEND; |
724 | + return pm_runtime_force_suspend(dev); |
725 | +} |
726 | + |
727 | +static int hda_codec_pm_resume(struct device *dev) |
728 | +{ |
729 | + dev->power.power_state = PMSG_RESUME; |
730 | + return hda_codec_force_resume(dev); |
731 | +} |
732 | + |
733 | +static int hda_codec_pm_freeze(struct device *dev) |
734 | +{ |
735 | + dev->power.power_state = PMSG_FREEZE; |
736 | + return pm_runtime_force_suspend(dev); |
737 | +} |
738 | + |
739 | +static int hda_codec_pm_thaw(struct device *dev) |
740 | +{ |
741 | + dev->power.power_state = PMSG_THAW; |
742 | + return hda_codec_force_resume(dev); |
743 | +} |
744 | + |
745 | +static int hda_codec_pm_restore(struct device *dev) |
746 | +{ |
747 | + dev->power.power_state = PMSG_RESTORE; |
748 | + return hda_codec_force_resume(dev); |
749 | +} |
750 | +#endif /* CONFIG_PM_SLEEP */ |
751 | + |
752 | /* referred in hda_bind.c */ |
753 | const struct dev_pm_ops hda_codec_driver_pm = { |
754 | - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, |
755 | - pm_runtime_force_resume) |
756 | +#ifdef CONFIG_PM_SLEEP |
757 | + .suspend = hda_codec_pm_suspend, |
758 | + .resume = hda_codec_pm_resume, |
759 | + .freeze = hda_codec_pm_freeze, |
760 | + .thaw = hda_codec_pm_thaw, |
761 | + .poweroff = hda_codec_pm_suspend, |
762 | + .restore = hda_codec_pm_restore, |
763 | +#endif /* CONFIG_PM_SLEEP */ |
764 | SET_RUNTIME_PM_OPS(hda_codec_runtime_suspend, hda_codec_runtime_resume, |
765 | NULL) |
766 | }; |
767 | diff --git a/tools/objtool/check.c b/tools/objtool/check.c |
768 | index e128d1c71c30..3ff025b64527 100644 |
769 | --- a/tools/objtool/check.c |
770 | +++ b/tools/objtool/check.c |
771 | @@ -2132,9 +2132,10 @@ static void cleanup(struct objtool_file *file) |
772 | elf_close(file->elf); |
773 | } |
774 | |
775 | +static struct objtool_file file; |
776 | + |
777 | int check(const char *_objname, bool orc) |
778 | { |
779 | - struct objtool_file file; |
780 | int ret, warnings = 0; |
781 | |
782 | objname = _objname; |