Annotation of /trunk/kernel-alx/patches-4.9/0274-4.9.175-all-fixes.patch
Parent Directory | Revision Log
Revision 3351 -
(hide annotations)
(download)
Tue Jun 18 09:42:04 2019 UTC (5 years ago) by niro
File size: 25218 byte(s)
Tue Jun 18 09:42:04 2019 UTC (5 years ago) by niro
File size: 25218 byte(s)
-linux-4.9.175
1 | niro | 3351 | diff --git a/Makefile b/Makefile |
2 | index f5836837df15..e52b0579e176 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 174 | ||
9 | +SUBLEVEL = 175 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | diff --git a/arch/arm/boot/compressed/efi-header.S b/arch/arm/boot/compressed/efi-header.S | ||
14 | index 3f7d1b74c5e0..a17ca8d78656 100644 | ||
15 | --- a/arch/arm/boot/compressed/efi-header.S | ||
16 | +++ b/arch/arm/boot/compressed/efi-header.S | ||
17 | @@ -17,7 +17,8 @@ | ||
18 | @ there. | ||
19 | .inst 'M' | ('Z' << 8) | (0x1310 << 16) @ tstne r0, #0x4d000 | ||
20 | #else | ||
21 | - W(mov) r0, r0 | ||
22 | + AR_CLASS( mov r0, r0 ) | ||
23 | + M_CLASS( nop.w ) | ||
24 | #endif | ||
25 | .endm | ||
26 | |||
27 | diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c | ||
28 | index 098ab775135f..a30829052a00 100644 | ||
29 | --- a/arch/x86/events/intel/core.c | ||
30 | +++ b/arch/x86/events/intel/core.c | ||
31 | @@ -2867,7 +2867,7 @@ static int intel_pmu_hw_config(struct perf_event *event) | ||
32 | return ret; | ||
33 | |||
34 | if (event->attr.precise_ip) { | ||
35 | - if (!event->attr.freq) { | ||
36 | + if (!(event->attr.freq || event->attr.wakeup_events)) { | ||
37 | event->hw.flags |= PERF_X86_EVENT_AUTO_RELOAD; | ||
38 | if (!(event->attr.sample_type & | ||
39 | ~intel_pmu_free_running_flags(event))) | ||
40 | diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c | ||
41 | index 10332c24f961..44ef1d66caa6 100644 | ||
42 | --- a/drivers/block/virtio_blk.c | ||
43 | +++ b/drivers/block/virtio_blk.c | ||
44 | @@ -392,6 +392,8 @@ static int init_vq(struct virtio_blk *vblk) | ||
45 | if (err) | ||
46 | num_vqs = 1; | ||
47 | |||
48 | + num_vqs = min_t(unsigned int, nr_cpu_ids, num_vqs); | ||
49 | + | ||
50 | vblk->vqs = kmalloc_array(num_vqs, sizeof(*vblk->vqs), GFP_KERNEL); | ||
51 | if (!vblk->vqs) | ||
52 | return -ENOMEM; | ||
53 | diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c | ||
54 | index 863d030786e5..e7a6651ceeab 100644 | ||
55 | --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c | ||
56 | +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c | ||
57 | @@ -1473,7 +1473,6 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi, | ||
58 | if (IS_ERR(regmap)) | ||
59 | ret = PTR_ERR(regmap); | ||
60 | if (ret) { | ||
61 | - ret = PTR_ERR(regmap); | ||
62 | dev_err(dev, | ||
63 | "Failed to get system configuration registers: %d\n", | ||
64 | ret); | ||
65 | @@ -1529,6 +1528,7 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi, | ||
66 | of_node_put(remote); | ||
67 | |||
68 | hdmi->ddc_adpt = of_find_i2c_adapter_by_node(i2c_np); | ||
69 | + of_node_put(i2c_np); | ||
70 | if (!hdmi->ddc_adpt) { | ||
71 | dev_err(dev, "Failed to get ddc i2c adapter by node\n"); | ||
72 | return -EINVAL; | ||
73 | diff --git a/drivers/infiniband/hw/hfi1/rc.c b/drivers/infiniband/hw/hfi1/rc.c | ||
74 | index e8e0fa58cb71..b08786614c1b 100644 | ||
75 | --- a/drivers/infiniband/hw/hfi1/rc.c | ||
76 | +++ b/drivers/infiniband/hw/hfi1/rc.c | ||
77 | @@ -2394,7 +2394,7 @@ send_last: | ||
78 | update_ack_queue(qp, next); | ||
79 | } | ||
80 | e = &qp->s_ack_queue[qp->r_head_ack_queue]; | ||
81 | - if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) { | ||
82 | + if (e->rdma_sge.mr) { | ||
83 | rvt_put_mr(e->rdma_sge.mr); | ||
84 | e->rdma_sge.mr = NULL; | ||
85 | } | ||
86 | @@ -2469,7 +2469,7 @@ send_last: | ||
87 | update_ack_queue(qp, next); | ||
88 | } | ||
89 | e = &qp->s_ack_queue[qp->r_head_ack_queue]; | ||
90 | - if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) { | ||
91 | + if (e->rdma_sge.mr) { | ||
92 | rvt_put_mr(e->rdma_sge.mr); | ||
93 | e->rdma_sge.mr = NULL; | ||
94 | } | ||
95 | diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c | ||
96 | index 157e93421fb8..13bbe5795e4e 100644 | ||
97 | --- a/drivers/iommu/amd_iommu_init.c | ||
98 | +++ b/drivers/iommu/amd_iommu_init.c | ||
99 | @@ -318,7 +318,7 @@ static void iommu_write_l2(struct amd_iommu *iommu, u8 address, u32 val) | ||
100 | static void iommu_set_exclusion_range(struct amd_iommu *iommu) | ||
101 | { | ||
102 | u64 start = iommu->exclusion_start & PAGE_MASK; | ||
103 | - u64 limit = (start + iommu->exclusion_length) & PAGE_MASK; | ||
104 | + u64 limit = (start + iommu->exclusion_length - 1) & PAGE_MASK; | ||
105 | u64 entry; | ||
106 | |||
107 | if (!iommu->exclusion_start) | ||
108 | diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c | ||
109 | index 89a52b941ea8..894d97e4ace5 100644 | ||
110 | --- a/drivers/scsi/csiostor/csio_scsi.c | ||
111 | +++ b/drivers/scsi/csiostor/csio_scsi.c | ||
112 | @@ -1713,8 +1713,11 @@ csio_scsi_err_handler(struct csio_hw *hw, struct csio_ioreq *req) | ||
113 | } | ||
114 | |||
115 | out: | ||
116 | - if (req->nsge > 0) | ||
117 | + if (req->nsge > 0) { | ||
118 | scsi_dma_unmap(cmnd); | ||
119 | + if (req->dcopy && (host_status == DID_OK)) | ||
120 | + host_status = csio_scsi_copy_to_sgl(hw, req); | ||
121 | + } | ||
122 | |||
123 | cmnd->result = (((host_status) << 16) | scsi_status); | ||
124 | cmnd->scsi_done(cmnd); | ||
125 | diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c | ||
126 | index 7be581f7c35d..1a6f65db615e 100644 | ||
127 | --- a/drivers/scsi/libsas/sas_expander.c | ||
128 | +++ b/drivers/scsi/libsas/sas_expander.c | ||
129 | @@ -47,17 +47,16 @@ static void smp_task_timedout(unsigned long _task) | ||
130 | unsigned long flags; | ||
131 | |||
132 | spin_lock_irqsave(&task->task_state_lock, flags); | ||
133 | - if (!(task->task_state_flags & SAS_TASK_STATE_DONE)) | ||
134 | + if (!(task->task_state_flags & SAS_TASK_STATE_DONE)) { | ||
135 | task->task_state_flags |= SAS_TASK_STATE_ABORTED; | ||
136 | + complete(&task->slow_task->completion); | ||
137 | + } | ||
138 | spin_unlock_irqrestore(&task->task_state_lock, flags); | ||
139 | - | ||
140 | - complete(&task->slow_task->completion); | ||
141 | } | ||
142 | |||
143 | static void smp_task_done(struct sas_task *task) | ||
144 | { | ||
145 | - if (!del_timer(&task->slow_task->timer)) | ||
146 | - return; | ||
147 | + del_timer(&task->slow_task->timer); | ||
148 | complete(&task->slow_task->completion); | ||
149 | } | ||
150 | |||
151 | diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c | ||
152 | index 9a34afcb1c4c..5c3dfd92ea02 100644 | ||
153 | --- a/drivers/scsi/qla2xxx/qla_attr.c | ||
154 | +++ b/drivers/scsi/qla2xxx/qla_attr.c | ||
155 | @@ -345,7 +345,7 @@ qla2x00_sysfs_write_optrom_ctl(struct file *filp, struct kobject *kobj, | ||
156 | } | ||
157 | |||
158 | ha->optrom_region_start = start; | ||
159 | - ha->optrom_region_size = start + size; | ||
160 | + ha->optrom_region_size = size; | ||
161 | |||
162 | ha->optrom_state = QLA_SREADING; | ||
163 | ha->optrom_buffer = vmalloc(ha->optrom_region_size); | ||
164 | @@ -418,7 +418,7 @@ qla2x00_sysfs_write_optrom_ctl(struct file *filp, struct kobject *kobj, | ||
165 | } | ||
166 | |||
167 | ha->optrom_region_start = start; | ||
168 | - ha->optrom_region_size = start + size; | ||
169 | + ha->optrom_region_size = size; | ||
170 | |||
171 | ha->optrom_state = QLA_SWRITING; | ||
172 | ha->optrom_buffer = vmalloc(ha->optrom_region_size); | ||
173 | diff --git a/drivers/staging/greybus/power_supply.c b/drivers/staging/greybus/power_supply.c | ||
174 | index e85c988b7034..adea629b8065 100644 | ||
175 | --- a/drivers/staging/greybus/power_supply.c | ||
176 | +++ b/drivers/staging/greybus/power_supply.c | ||
177 | @@ -521,7 +521,7 @@ static int gb_power_supply_prop_descriptors_get(struct gb_power_supply *gbpsy) | ||
178 | |||
179 | op = gb_operation_create(connection, | ||
180 | GB_POWER_SUPPLY_TYPE_GET_PROP_DESCRIPTORS, | ||
181 | - sizeof(req), sizeof(*resp) + props_count * | ||
182 | + sizeof(*req), sizeof(*resp) + props_count * | ||
183 | sizeof(struct gb_power_supply_props_desc), | ||
184 | GFP_KERNEL); | ||
185 | if (!op) | ||
186 | diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c | ||
187 | index 1e91b803ee4e..73dc5a6c6108 100644 | ||
188 | --- a/drivers/usb/dwc3/core.c | ||
189 | +++ b/drivers/usb/dwc3/core.c | ||
190 | @@ -991,7 +991,7 @@ static int dwc3_probe(struct platform_device *pdev) | ||
191 | dwc->regs_size = resource_size(res); | ||
192 | |||
193 | /* default to highest possible threshold */ | ||
194 | - lpm_nyet_threshold = 0xff; | ||
195 | + lpm_nyet_threshold = 0xf; | ||
196 | |||
197 | /* default to -3.5dB de-emphasis */ | ||
198 | tx_de_emphasis = 1; | ||
199 | diff --git a/drivers/usb/serial/f81232.c b/drivers/usb/serial/f81232.c | ||
200 | index 972f5a5fe577..1f20fa0a67c0 100644 | ||
201 | --- a/drivers/usb/serial/f81232.c | ||
202 | +++ b/drivers/usb/serial/f81232.c | ||
203 | @@ -560,9 +560,12 @@ static int f81232_open(struct tty_struct *tty, struct usb_serial_port *port) | ||
204 | |||
205 | static void f81232_close(struct usb_serial_port *port) | ||
206 | { | ||
207 | + struct f81232_private *port_priv = usb_get_serial_port_data(port); | ||
208 | + | ||
209 | f81232_port_disable(port); | ||
210 | usb_serial_generic_close(port); | ||
211 | usb_kill_urb(port->interrupt_in_urb); | ||
212 | + flush_work(&port_priv->interrupt_work); | ||
213 | } | ||
214 | |||
215 | static void f81232_dtr_rts(struct usb_serial_port *port, int on) | ||
216 | @@ -656,6 +659,40 @@ static int f81232_port_remove(struct usb_serial_port *port) | ||
217 | return 0; | ||
218 | } | ||
219 | |||
220 | +static int f81232_suspend(struct usb_serial *serial, pm_message_t message) | ||
221 | +{ | ||
222 | + struct usb_serial_port *port = serial->port[0]; | ||
223 | + struct f81232_private *port_priv = usb_get_serial_port_data(port); | ||
224 | + int i; | ||
225 | + | ||
226 | + for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) | ||
227 | + usb_kill_urb(port->read_urbs[i]); | ||
228 | + | ||
229 | + usb_kill_urb(port->interrupt_in_urb); | ||
230 | + | ||
231 | + if (port_priv) | ||
232 | + flush_work(&port_priv->interrupt_work); | ||
233 | + | ||
234 | + return 0; | ||
235 | +} | ||
236 | + | ||
237 | +static int f81232_resume(struct usb_serial *serial) | ||
238 | +{ | ||
239 | + struct usb_serial_port *port = serial->port[0]; | ||
240 | + int result; | ||
241 | + | ||
242 | + if (tty_port_initialized(&port->port)) { | ||
243 | + result = usb_submit_urb(port->interrupt_in_urb, GFP_NOIO); | ||
244 | + if (result) { | ||
245 | + dev_err(&port->dev, "submit interrupt urb failed: %d\n", | ||
246 | + result); | ||
247 | + return result; | ||
248 | + } | ||
249 | + } | ||
250 | + | ||
251 | + return usb_serial_generic_resume(serial); | ||
252 | +} | ||
253 | + | ||
254 | static struct usb_serial_driver f81232_device = { | ||
255 | .driver = { | ||
256 | .owner = THIS_MODULE, | ||
257 | @@ -679,6 +716,8 @@ static struct usb_serial_driver f81232_device = { | ||
258 | .read_int_callback = f81232_read_int_callback, | ||
259 | .port_probe = f81232_port_probe, | ||
260 | .port_remove = f81232_port_remove, | ||
261 | + .suspend = f81232_suspend, | ||
262 | + .resume = f81232_resume, | ||
263 | }; | ||
264 | |||
265 | static struct usb_serial_driver * const serial_drivers[] = { | ||
266 | diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c | ||
267 | index 13f2c051dbf2..afb4b0bf47b3 100644 | ||
268 | --- a/drivers/usb/storage/scsiglue.c | ||
269 | +++ b/drivers/usb/storage/scsiglue.c | ||
270 | @@ -81,6 +81,7 @@ static const char* host_info(struct Scsi_Host *host) | ||
271 | static int slave_alloc (struct scsi_device *sdev) | ||
272 | { | ||
273 | struct us_data *us = host_to_us(sdev->host); | ||
274 | + int maxp; | ||
275 | |||
276 | /* | ||
277 | * Set the INQUIRY transfer length to 36. We don't use any of | ||
278 | @@ -90,20 +91,17 @@ static int slave_alloc (struct scsi_device *sdev) | ||
279 | sdev->inquiry_len = 36; | ||
280 | |||
281 | /* | ||
282 | - * USB has unusual DMA-alignment requirements: Although the | ||
283 | - * starting address of each scatter-gather element doesn't matter, | ||
284 | - * the length of each element except the last must be divisible | ||
285 | - * by the Bulk maxpacket value. There's currently no way to | ||
286 | - * express this by block-layer constraints, so we'll cop out | ||
287 | - * and simply require addresses to be aligned at 512-byte | ||
288 | - * boundaries. This is okay since most block I/O involves | ||
289 | - * hardware sectors that are multiples of 512 bytes in length, | ||
290 | - * and since host controllers up through USB 2.0 have maxpacket | ||
291 | - * values no larger than 512. | ||
292 | - * | ||
293 | - * But it doesn't suffice for Wireless USB, where Bulk maxpacket | ||
294 | - * values can be as large as 2048. To make that work properly | ||
295 | - * will require changes to the block layer. | ||
296 | + * USB has unusual scatter-gather requirements: the length of each | ||
297 | + * scatterlist element except the last must be divisible by the | ||
298 | + * Bulk maxpacket value. Fortunately this value is always a | ||
299 | + * power of 2. Inform the block layer about this requirement. | ||
300 | + */ | ||
301 | + maxp = usb_maxpacket(us->pusb_dev, us->recv_bulk_pipe, 0); | ||
302 | + blk_queue_virt_boundary(sdev->request_queue, maxp - 1); | ||
303 | + | ||
304 | + /* | ||
305 | + * Some host controllers may have alignment requirements. | ||
306 | + * We'll play it safe by requiring 512-byte alignment always. | ||
307 | */ | ||
308 | blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1)); | ||
309 | |||
310 | diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c | ||
311 | index 64af88977b03..97621e5bdad7 100644 | ||
312 | --- a/drivers/usb/storage/uas.c | ||
313 | +++ b/drivers/usb/storage/uas.c | ||
314 | @@ -796,24 +796,33 @@ static int uas_slave_alloc(struct scsi_device *sdev) | ||
315 | { | ||
316 | struct uas_dev_info *devinfo = | ||
317 | (struct uas_dev_info *)sdev->host->hostdata; | ||
318 | + int maxp; | ||
319 | |||
320 | sdev->hostdata = devinfo; | ||
321 | |||
322 | /* | ||
323 | - * USB has unusual DMA-alignment requirements: Although the | ||
324 | - * starting address of each scatter-gather element doesn't matter, | ||
325 | - * the length of each element except the last must be divisible | ||
326 | - * by the Bulk maxpacket value. There's currently no way to | ||
327 | - * express this by block-layer constraints, so we'll cop out | ||
328 | - * and simply require addresses to be aligned at 512-byte | ||
329 | - * boundaries. This is okay since most block I/O involves | ||
330 | - * hardware sectors that are multiples of 512 bytes in length, | ||
331 | - * and since host controllers up through USB 2.0 have maxpacket | ||
332 | - * values no larger than 512. | ||
333 | + * We have two requirements here. We must satisfy the requirements | ||
334 | + * of the physical HC and the demands of the protocol, as we | ||
335 | + * definitely want no additional memory allocation in this path | ||
336 | + * ruling out using bounce buffers. | ||
337 | * | ||
338 | - * But it doesn't suffice for Wireless USB, where Bulk maxpacket | ||
339 | - * values can be as large as 2048. To make that work properly | ||
340 | - * will require changes to the block layer. | ||
341 | + * For a transmission on USB to continue we must never send | ||
342 | + * a package that is smaller than maxpacket. Hence the length of each | ||
343 | + * scatterlist element except the last must be divisible by the | ||
344 | + * Bulk maxpacket value. | ||
345 | + * If the HC does not ensure that through SG, | ||
346 | + * the upper layer must do that. We must assume nothing | ||
347 | + * about the capabilities off the HC, so we use the most | ||
348 | + * pessimistic requirement. | ||
349 | + */ | ||
350 | + | ||
351 | + maxp = usb_maxpacket(devinfo->udev, devinfo->data_in_pipe, 0); | ||
352 | + blk_queue_virt_boundary(sdev->request_queue, maxp - 1); | ||
353 | + | ||
354 | + /* | ||
355 | + * The protocol has no requirements on alignment in the strict sense. | ||
356 | + * Controllers may or may not have alignment restrictions. | ||
357 | + * As this is not exported, we use an extremely conservative guess. | ||
358 | */ | ||
359 | blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1)); | ||
360 | |||
361 | diff --git a/include/linux/kernel.h b/include/linux/kernel.h | ||
362 | index 61054f12be7c..d83fc669eeac 100644 | ||
363 | --- a/include/linux/kernel.h | ||
364 | +++ b/include/linux/kernel.h | ||
365 | @@ -55,8 +55,8 @@ | ||
366 | |||
367 | #define u64_to_user_ptr(x) ( \ | ||
368 | { \ | ||
369 | - typecheck(u64, x); \ | ||
370 | - (void __user *)(uintptr_t)x; \ | ||
371 | + typecheck(u64, (x)); \ | ||
372 | + (void __user *)(uintptr_t)(x); \ | ||
373 | } \ | ||
374 | ) | ||
375 | |||
376 | diff --git a/include/linux/mm.h b/include/linux/mm.h | ||
377 | index 11a5a46ce72b..e3c8d40a18b5 100644 | ||
378 | --- a/include/linux/mm.h | ||
379 | +++ b/include/linux/mm.h | ||
380 | @@ -777,6 +777,15 @@ static inline void get_page(struct page *page) | ||
381 | get_zone_device_page(page); | ||
382 | } | ||
383 | |||
384 | +static inline __must_check bool try_get_page(struct page *page) | ||
385 | +{ | ||
386 | + page = compound_head(page); | ||
387 | + if (WARN_ON_ONCE(page_ref_count(page) <= 0)) | ||
388 | + return false; | ||
389 | + page_ref_inc(page); | ||
390 | + return true; | ||
391 | +} | ||
392 | + | ||
393 | static inline void put_page(struct page *page) | ||
394 | { | ||
395 | page = compound_head(page); | ||
396 | diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h | ||
397 | index 4931787193c3..57a7dba49d29 100644 | ||
398 | --- a/include/net/bluetooth/hci_core.h | ||
399 | +++ b/include/net/bluetooth/hci_core.h | ||
400 | @@ -176,6 +176,9 @@ struct adv_info { | ||
401 | |||
402 | #define HCI_MAX_SHORT_NAME_LENGTH 10 | ||
403 | |||
404 | +/* Min encryption key size to match with SMP */ | ||
405 | +#define HCI_MIN_ENC_KEY_SIZE 7 | ||
406 | + | ||
407 | /* Default LE RPA expiry time, 15 minutes */ | ||
408 | #define HCI_DEFAULT_RPA_TIMEOUT (15 * 60) | ||
409 | |||
410 | diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c | ||
411 | index cf94460504bb..be7f489788e2 100644 | ||
412 | --- a/kernel/irq/manage.c | ||
413 | +++ b/kernel/irq/manage.c | ||
414 | @@ -332,8 +332,10 @@ irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify) | ||
415 | desc->affinity_notify = notify; | ||
416 | raw_spin_unlock_irqrestore(&desc->lock, flags); | ||
417 | |||
418 | - if (old_notify) | ||
419 | + if (old_notify) { | ||
420 | + cancel_work_sync(&old_notify->work); | ||
421 | kref_put(&old_notify->kref, old_notify->release); | ||
422 | + } | ||
423 | |||
424 | return 0; | ||
425 | } | ||
426 | diff --git a/kernel/time/timer_stats.c b/kernel/time/timer_stats.c | ||
427 | index 087204c733eb..c74920f318c5 100644 | ||
428 | --- a/kernel/time/timer_stats.c | ||
429 | +++ b/kernel/time/timer_stats.c | ||
430 | @@ -417,7 +417,7 @@ static int __init init_tstats_procfs(void) | ||
431 | { | ||
432 | struct proc_dir_entry *pe; | ||
433 | |||
434 | - pe = proc_create("timer_stats", 0644, NULL, &tstats_fops); | ||
435 | + pe = proc_create("timer_stats", 0600, NULL, &tstats_fops); | ||
436 | if (!pe) | ||
437 | return -ENOMEM; | ||
438 | return 0; | ||
439 | diff --git a/lib/ubsan.c b/lib/ubsan.c | ||
440 | index 60e108c5c173..c652b4a820cc 100644 | ||
441 | --- a/lib/ubsan.c | ||
442 | +++ b/lib/ubsan.c | ||
443 | @@ -86,11 +86,13 @@ static bool is_inline_int(struct type_descriptor *type) | ||
444 | return bits <= inline_bits; | ||
445 | } | ||
446 | |||
447 | -static s_max get_signed_val(struct type_descriptor *type, unsigned long val) | ||
448 | +static s_max get_signed_val(struct type_descriptor *type, void *val) | ||
449 | { | ||
450 | if (is_inline_int(type)) { | ||
451 | unsigned extra_bits = sizeof(s_max)*8 - type_bit_width(type); | ||
452 | - return ((s_max)val) << extra_bits >> extra_bits; | ||
453 | + unsigned long ulong_val = (unsigned long)val; | ||
454 | + | ||
455 | + return ((s_max)ulong_val) << extra_bits >> extra_bits; | ||
456 | } | ||
457 | |||
458 | if (type_bit_width(type) == 64) | ||
459 | @@ -99,15 +101,15 @@ static s_max get_signed_val(struct type_descriptor *type, unsigned long val) | ||
460 | return *(s_max *)val; | ||
461 | } | ||
462 | |||
463 | -static bool val_is_negative(struct type_descriptor *type, unsigned long val) | ||
464 | +static bool val_is_negative(struct type_descriptor *type, void *val) | ||
465 | { | ||
466 | return type_is_signed(type) && get_signed_val(type, val) < 0; | ||
467 | } | ||
468 | |||
469 | -static u_max get_unsigned_val(struct type_descriptor *type, unsigned long val) | ||
470 | +static u_max get_unsigned_val(struct type_descriptor *type, void *val) | ||
471 | { | ||
472 | if (is_inline_int(type)) | ||
473 | - return val; | ||
474 | + return (unsigned long)val; | ||
475 | |||
476 | if (type_bit_width(type) == 64) | ||
477 | return *(u64 *)val; | ||
478 | @@ -116,7 +118,7 @@ static u_max get_unsigned_val(struct type_descriptor *type, unsigned long val) | ||
479 | } | ||
480 | |||
481 | static void val_to_string(char *str, size_t size, struct type_descriptor *type, | ||
482 | - unsigned long value) | ||
483 | + void *value) | ||
484 | { | ||
485 | if (type_is_int(type)) { | ||
486 | if (type_bit_width(type) == 128) { | ||
487 | @@ -168,8 +170,8 @@ static void ubsan_epilogue(unsigned long *flags) | ||
488 | current->in_ubsan--; | ||
489 | } | ||
490 | |||
491 | -static void handle_overflow(struct overflow_data *data, unsigned long lhs, | ||
492 | - unsigned long rhs, char op) | ||
493 | +static void handle_overflow(struct overflow_data *data, void *lhs, | ||
494 | + void *rhs, char op) | ||
495 | { | ||
496 | |||
497 | struct type_descriptor *type = data->type; | ||
498 | @@ -196,8 +198,7 @@ static void handle_overflow(struct overflow_data *data, unsigned long lhs, | ||
499 | } | ||
500 | |||
501 | void __ubsan_handle_add_overflow(struct overflow_data *data, | ||
502 | - unsigned long lhs, | ||
503 | - unsigned long rhs) | ||
504 | + void *lhs, void *rhs) | ||
505 | { | ||
506 | |||
507 | handle_overflow(data, lhs, rhs, '+'); | ||
508 | @@ -205,23 +206,21 @@ void __ubsan_handle_add_overflow(struct overflow_data *data, | ||
509 | EXPORT_SYMBOL(__ubsan_handle_add_overflow); | ||
510 | |||
511 | void __ubsan_handle_sub_overflow(struct overflow_data *data, | ||
512 | - unsigned long lhs, | ||
513 | - unsigned long rhs) | ||
514 | + void *lhs, void *rhs) | ||
515 | { | ||
516 | handle_overflow(data, lhs, rhs, '-'); | ||
517 | } | ||
518 | EXPORT_SYMBOL(__ubsan_handle_sub_overflow); | ||
519 | |||
520 | void __ubsan_handle_mul_overflow(struct overflow_data *data, | ||
521 | - unsigned long lhs, | ||
522 | - unsigned long rhs) | ||
523 | + void *lhs, void *rhs) | ||
524 | { | ||
525 | handle_overflow(data, lhs, rhs, '*'); | ||
526 | } | ||
527 | EXPORT_SYMBOL(__ubsan_handle_mul_overflow); | ||
528 | |||
529 | void __ubsan_handle_negate_overflow(struct overflow_data *data, | ||
530 | - unsigned long old_val) | ||
531 | + void *old_val) | ||
532 | { | ||
533 | unsigned long flags; | ||
534 | char old_val_str[VALUE_LENGTH]; | ||
535 | @@ -242,8 +241,7 @@ EXPORT_SYMBOL(__ubsan_handle_negate_overflow); | ||
536 | |||
537 | |||
538 | void __ubsan_handle_divrem_overflow(struct overflow_data *data, | ||
539 | - unsigned long lhs, | ||
540 | - unsigned long rhs) | ||
541 | + void *lhs, void *rhs) | ||
542 | { | ||
543 | unsigned long flags; | ||
544 | char rhs_val_str[VALUE_LENGTH]; | ||
545 | @@ -328,7 +326,7 @@ static void ubsan_type_mismatch_common(struct type_mismatch_data_common *data, | ||
546 | } | ||
547 | |||
548 | void __ubsan_handle_type_mismatch(struct type_mismatch_data *data, | ||
549 | - unsigned long ptr) | ||
550 | + void *ptr) | ||
551 | { | ||
552 | struct type_mismatch_data_common common_data = { | ||
553 | .location = &data->location, | ||
554 | @@ -337,12 +335,12 @@ void __ubsan_handle_type_mismatch(struct type_mismatch_data *data, | ||
555 | .type_check_kind = data->type_check_kind | ||
556 | }; | ||
557 | |||
558 | - ubsan_type_mismatch_common(&common_data, ptr); | ||
559 | + ubsan_type_mismatch_common(&common_data, (unsigned long)ptr); | ||
560 | } | ||
561 | EXPORT_SYMBOL(__ubsan_handle_type_mismatch); | ||
562 | |||
563 | void __ubsan_handle_type_mismatch_v1(struct type_mismatch_data_v1 *data, | ||
564 | - unsigned long ptr) | ||
565 | + void *ptr) | ||
566 | { | ||
567 | |||
568 | struct type_mismatch_data_common common_data = { | ||
569 | @@ -352,7 +350,7 @@ void __ubsan_handle_type_mismatch_v1(struct type_mismatch_data_v1 *data, | ||
570 | .type_check_kind = data->type_check_kind | ||
571 | }; | ||
572 | |||
573 | - ubsan_type_mismatch_common(&common_data, ptr); | ||
574 | + ubsan_type_mismatch_common(&common_data, (unsigned long)ptr); | ||
575 | } | ||
576 | EXPORT_SYMBOL(__ubsan_handle_type_mismatch_v1); | ||
577 | |||
578 | @@ -376,7 +374,7 @@ void __ubsan_handle_nonnull_return(struct nonnull_return_data *data) | ||
579 | EXPORT_SYMBOL(__ubsan_handle_nonnull_return); | ||
580 | |||
581 | void __ubsan_handle_vla_bound_not_positive(struct vla_bound_data *data, | ||
582 | - unsigned long bound) | ||
583 | + void *bound) | ||
584 | { | ||
585 | unsigned long flags; | ||
586 | char bound_str[VALUE_LENGTH]; | ||
587 | @@ -393,8 +391,7 @@ void __ubsan_handle_vla_bound_not_positive(struct vla_bound_data *data, | ||
588 | } | ||
589 | EXPORT_SYMBOL(__ubsan_handle_vla_bound_not_positive); | ||
590 | |||
591 | -void __ubsan_handle_out_of_bounds(struct out_of_bounds_data *data, | ||
592 | - unsigned long index) | ||
593 | +void __ubsan_handle_out_of_bounds(struct out_of_bounds_data *data, void *index) | ||
594 | { | ||
595 | unsigned long flags; | ||
596 | char index_str[VALUE_LENGTH]; | ||
597 | @@ -412,7 +409,7 @@ void __ubsan_handle_out_of_bounds(struct out_of_bounds_data *data, | ||
598 | EXPORT_SYMBOL(__ubsan_handle_out_of_bounds); | ||
599 | |||
600 | void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data, | ||
601 | - unsigned long lhs, unsigned long rhs) | ||
602 | + void *lhs, void *rhs) | ||
603 | { | ||
604 | unsigned long flags; | ||
605 | struct type_descriptor *rhs_type = data->rhs_type; | ||
606 | @@ -463,7 +460,7 @@ void __ubsan_handle_builtin_unreachable(struct unreachable_data *data) | ||
607 | EXPORT_SYMBOL(__ubsan_handle_builtin_unreachable); | ||
608 | |||
609 | void __ubsan_handle_load_invalid_value(struct invalid_value_data *data, | ||
610 | - unsigned long val) | ||
611 | + void *val) | ||
612 | { | ||
613 | unsigned long flags; | ||
614 | char val_str[VALUE_LENGTH]; | ||
615 | diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c | ||
616 | index cc061495f653..fe4fb0c1fa61 100644 | ||
617 | --- a/net/bluetooth/hci_conn.c | ||
618 | +++ b/net/bluetooth/hci_conn.c | ||
619 | @@ -1165,6 +1165,14 @@ int hci_conn_check_link_mode(struct hci_conn *conn) | ||
620 | !test_bit(HCI_CONN_ENCRYPT, &conn->flags)) | ||
621 | return 0; | ||
622 | |||
623 | + /* The minimum encryption key size needs to be enforced by the | ||
624 | + * host stack before establishing any L2CAP connections. The | ||
625 | + * specification in theory allows a minimum of 1, but to align | ||
626 | + * BR/EDR and LE transports, a minimum of 7 is chosen. | ||
627 | + */ | ||
628 | + if (conn->enc_key_size < HCI_MIN_ENC_KEY_SIZE) | ||
629 | + return 0; | ||
630 | + | ||
631 | return 1; | ||
632 | } | ||
633 | |||
634 | diff --git a/net/bluetooth/hidp/sock.c b/net/bluetooth/hidp/sock.c | ||
635 | index 008ba439bd62..cc80c76177b6 100644 | ||
636 | --- a/net/bluetooth/hidp/sock.c | ||
637 | +++ b/net/bluetooth/hidp/sock.c | ||
638 | @@ -76,6 +76,7 @@ static int hidp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long | ||
639 | sockfd_put(csock); | ||
640 | return err; | ||
641 | } | ||
642 | + ca.name[sizeof(ca.name)-1] = 0; | ||
643 | |||
644 | err = hidp_connection_add(&ca, csock, isock); | ||
645 | if (!err && copy_to_user(argp, &ca, sizeof(ca))) | ||
646 | diff --git a/sound/soc/codecs/cs4270.c b/sound/soc/codecs/cs4270.c | ||
647 | index 84f86745c30e..828bc615a190 100644 | ||
648 | --- a/sound/soc/codecs/cs4270.c | ||
649 | +++ b/sound/soc/codecs/cs4270.c | ||
650 | @@ -643,6 +643,7 @@ static const struct regmap_config cs4270_regmap = { | ||
651 | .reg_defaults = cs4270_reg_defaults, | ||
652 | .num_reg_defaults = ARRAY_SIZE(cs4270_reg_defaults), | ||
653 | .cache_type = REGCACHE_RBTREE, | ||
654 | + .write_flag_mask = CS4270_I2C_INCR, | ||
655 | |||
656 | .readable_reg = cs4270_reg_is_readable, | ||
657 | .volatile_reg = cs4270_reg_is_volatile, | ||
658 | diff --git a/sound/soc/codecs/nau8810.c b/sound/soc/codecs/nau8810.c | ||
659 | index e45518629968..2234d0c04165 100644 | ||
660 | --- a/sound/soc/codecs/nau8810.c | ||
661 | +++ b/sound/soc/codecs/nau8810.c | ||
662 | @@ -414,9 +414,9 @@ static const struct snd_soc_dapm_widget nau8810_dapm_widgets[] = { | ||
663 | SND_SOC_DAPM_MIXER("Mono Mixer", NAU8810_REG_POWER3, | ||
664 | NAU8810_MOUTMX_EN_SFT, 0, &nau8810_mono_mixer_controls[0], | ||
665 | ARRAY_SIZE(nau8810_mono_mixer_controls)), | ||
666 | - SND_SOC_DAPM_DAC("DAC", "HiFi Playback", NAU8810_REG_POWER3, | ||
667 | + SND_SOC_DAPM_DAC("DAC", "Playback", NAU8810_REG_POWER3, | ||
668 | NAU8810_DAC_EN_SFT, 0), | ||
669 | - SND_SOC_DAPM_ADC("ADC", "HiFi Capture", NAU8810_REG_POWER2, | ||
670 | + SND_SOC_DAPM_ADC("ADC", "Capture", NAU8810_REG_POWER2, | ||
671 | NAU8810_ADC_EN_SFT, 0), | ||
672 | SND_SOC_DAPM_PGA("SpkN Out", NAU8810_REG_POWER3, | ||
673 | NAU8810_NSPK_EN_SFT, 0, NULL, 0), | ||
674 | diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c | ||
675 | index 28fdfc5ec544..c27e3476848a 100644 | ||
676 | --- a/sound/soc/codecs/tlv320aic32x4.c | ||
677 | +++ b/sound/soc/codecs/tlv320aic32x4.c | ||
678 | @@ -316,6 +316,8 @@ static const struct snd_soc_dapm_widget aic32x4_dapm_widgets[] = { | ||
679 | SND_SOC_DAPM_INPUT("IN2_R"), | ||
680 | SND_SOC_DAPM_INPUT("IN3_L"), | ||
681 | SND_SOC_DAPM_INPUT("IN3_R"), | ||
682 | + SND_SOC_DAPM_INPUT("CM_L"), | ||
683 | + SND_SOC_DAPM_INPUT("CM_R"), | ||
684 | }; | ||
685 | |||
686 | static const struct snd_soc_dapm_route aic32x4_dapm_routes[] = { | ||
687 | diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c | ||
688 | index 79a9fdf94d38..582b30a5118d 100644 | ||
689 | --- a/sound/soc/intel/common/sst-firmware.c | ||
690 | +++ b/sound/soc/intel/common/sst-firmware.c | ||
691 | @@ -1252,11 +1252,15 @@ struct sst_dsp *sst_dsp_new(struct device *dev, | ||
692 | goto irq_err; | ||
693 | |||
694 | err = sst_dma_new(sst); | ||
695 | - if (err) | ||
696 | - dev_warn(dev, "sst_dma_new failed %d\n", err); | ||
697 | + if (err) { | ||
698 | + dev_err(dev, "sst_dma_new failed %d\n", err); | ||
699 | + goto dma_err; | ||
700 | + } | ||
701 | |||
702 | return sst; | ||
703 | |||
704 | +dma_err: | ||
705 | + free_irq(sst->irq, sst); | ||
706 | irq_err: | ||
707 | if (sst->ops->free) | ||
708 | sst->ops->free(sst); | ||
709 | diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c | ||
710 | index b111ecda6439..1dbcdc99dbe3 100644 | ||
711 | --- a/sound/soc/soc-pcm.c | ||
712 | +++ b/sound/soc/soc-pcm.c | ||
713 | @@ -894,10 +894,13 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream, | ||
714 | codec_params = *params; | ||
715 | |||
716 | /* fixup params based on TDM slot masks */ | ||
717 | - if (codec_dai->tx_mask) | ||
718 | + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK && | ||
719 | + codec_dai->tx_mask) | ||
720 | soc_pcm_codec_params_fixup(&codec_params, | ||
721 | codec_dai->tx_mask); | ||
722 | - if (codec_dai->rx_mask) | ||
723 | + | ||
724 | + if (substream->stream == SNDRV_PCM_STREAM_CAPTURE && | ||
725 | + codec_dai->rx_mask) | ||
726 | soc_pcm_codec_params_fixup(&codec_params, | ||
727 | codec_dai->rx_mask); | ||
728 |