Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.4/0150-4.4.51-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2886 - (hide annotations) (download)
Mon Mar 27 13:49:24 2017 UTC (7 years, 1 month ago) by niro
File size: 11502 byte(s)
linux-4.4.51
1 niro 2886 diff --git a/Makefile b/Makefile
2     index 10993715abb8..117357188f01 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 4
8     -SUBLEVEL = 50
9     +SUBLEVEL = 51
10     EXTRAVERSION =
11     NAME = Blurry Fish Butt
12    
13     diff --git a/arch/arm/lib/getuser.S b/arch/arm/lib/getuser.S
14     index 8ecfd15c3a02..df73914e81c8 100644
15     --- a/arch/arm/lib/getuser.S
16     +++ b/arch/arm/lib/getuser.S
17     @@ -67,7 +67,7 @@ ENTRY(__get_user_4)
18     ENDPROC(__get_user_4)
19    
20     ENTRY(__get_user_8)
21     - check_uaccess r0, 8, r1, r2, __get_user_bad
22     + check_uaccess r0, 8, r1, r2, __get_user_bad8
23     #ifdef CONFIG_THUMB2_KERNEL
24     5: TUSER(ldr) r2, [r0]
25     6: TUSER(ldr) r3, [r0, #4]
26     diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
27     index 7cb2815e815e..a3b96d691ac9 100644
28     --- a/drivers/gpu/drm/drm_dp_mst_topology.c
29     +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
30     @@ -1812,7 +1812,7 @@ int drm_dp_update_payload_part1(struct drm_dp_mst_topology_mgr *mgr)
31     mgr->payloads[i].num_slots = req_payload.num_slots;
32     } else if (mgr->payloads[i].num_slots) {
33     mgr->payloads[i].num_slots = 0;
34     - drm_dp_destroy_payload_step1(mgr, port, port->vcpi.vcpi, &mgr->payloads[i]);
35     + drm_dp_destroy_payload_step1(mgr, port, mgr->payloads[i].vcpi, &mgr->payloads[i]);
36     req_payload.payload_state = mgr->payloads[i].payload_state;
37     mgr->payloads[i].start_slot = 0;
38     }
39     diff --git a/drivers/gpu/drm/radeon/radeon_cursor.c b/drivers/gpu/drm/radeon/radeon_cursor.c
40     index 04cec0da5d1e..8901228b5d5d 100644
41     --- a/drivers/gpu/drm/radeon/radeon_cursor.c
42     +++ b/drivers/gpu/drm/radeon/radeon_cursor.c
43     @@ -205,8 +205,8 @@ static int radeon_cursor_move_locked(struct drm_crtc *crtc, int x, int y)
44     }
45    
46     if (x <= (crtc->x - w) || y <= (crtc->y - radeon_crtc->cursor_height) ||
47     - x >= (crtc->x + crtc->mode.crtc_hdisplay) ||
48     - y >= (crtc->y + crtc->mode.crtc_vdisplay))
49     + x >= (crtc->x + crtc->mode.hdisplay) ||
50     + y >= (crtc->y + crtc->mode.vdisplay))
51     goto out_of_bounds;
52    
53     x += xorigin;
54     diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
55     index d15b33813021..ed1935f300a7 100644
56     --- a/drivers/input/mouse/elan_i2c_core.c
57     +++ b/drivers/input/mouse/elan_i2c_core.c
58     @@ -1232,6 +1232,7 @@ static const struct acpi_device_id elan_acpi_id[] = {
59     { "ELAN0000", 0 },
60     { "ELAN0100", 0 },
61     { "ELAN0600", 0 },
62     + { "ELAN0605", 0 },
63     { "ELAN1000", 0 },
64     { }
65     };
66     diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h
67     index 6b420a55c745..c3ea03c9a1a8 100644
68     --- a/drivers/md/bcache/bcache.h
69     +++ b/drivers/md/bcache/bcache.h
70     @@ -425,7 +425,7 @@ struct cache {
71     * until a gc finishes - otherwise we could pointlessly burn a ton of
72     * cpu
73     */
74     - unsigned invalidate_needs_gc:1;
75     + unsigned invalidate_needs_gc;
76    
77     bool discard; /* Get rid of? */
78    
79     @@ -593,8 +593,8 @@ struct cache_set {
80    
81     /* Counts how many sectors bio_insert has added to the cache */
82     atomic_t sectors_to_gc;
83     + wait_queue_head_t gc_wait;
84    
85     - wait_queue_head_t moving_gc_wait;
86     struct keybuf moving_gc_keys;
87     /* Number of moving GC bios in flight */
88     struct semaphore moving_in_flight;
89     diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
90     index 22b9e34ceb75..5b815e64c1c9 100644
91     --- a/drivers/md/bcache/btree.c
92     +++ b/drivers/md/bcache/btree.c
93     @@ -1762,33 +1762,34 @@ static void bch_btree_gc(struct cache_set *c)
94     bch_moving_gc(c);
95     }
96    
97     -static int bch_gc_thread(void *arg)
98     +static bool gc_should_run(struct cache_set *c)
99     {
100     - struct cache_set *c = arg;
101     struct cache *ca;
102     unsigned i;
103    
104     - while (1) {
105     -again:
106     - bch_btree_gc(c);
107     + for_each_cache(ca, c, i)
108     + if (ca->invalidate_needs_gc)
109     + return true;
110    
111     - set_current_state(TASK_INTERRUPTIBLE);
112     - if (kthread_should_stop())
113     - break;
114     + if (atomic_read(&c->sectors_to_gc) < 0)
115     + return true;
116    
117     - mutex_lock(&c->bucket_lock);
118     + return false;
119     +}
120    
121     - for_each_cache(ca, c, i)
122     - if (ca->invalidate_needs_gc) {
123     - mutex_unlock(&c->bucket_lock);
124     - set_current_state(TASK_RUNNING);
125     - goto again;
126     - }
127     +static int bch_gc_thread(void *arg)
128     +{
129     + struct cache_set *c = arg;
130    
131     - mutex_unlock(&c->bucket_lock);
132     + while (1) {
133     + wait_event_interruptible(c->gc_wait,
134     + kthread_should_stop() || gc_should_run(c));
135    
136     - try_to_freeze();
137     - schedule();
138     + if (kthread_should_stop())
139     + break;
140     +
141     + set_gc_sectors(c);
142     + bch_btree_gc(c);
143     }
144    
145     return 0;
146     @@ -1796,11 +1797,10 @@ again:
147    
148     int bch_gc_thread_start(struct cache_set *c)
149     {
150     - c->gc_thread = kthread_create(bch_gc_thread, c, "bcache_gc");
151     + c->gc_thread = kthread_run(bch_gc_thread, c, "bcache_gc");
152     if (IS_ERR(c->gc_thread))
153     return PTR_ERR(c->gc_thread);
154    
155     - set_task_state(c->gc_thread, TASK_INTERRUPTIBLE);
156     return 0;
157     }
158    
159     diff --git a/drivers/md/bcache/btree.h b/drivers/md/bcache/btree.h
160     index 5c391fa01bed..9b80417cd547 100644
161     --- a/drivers/md/bcache/btree.h
162     +++ b/drivers/md/bcache/btree.h
163     @@ -260,8 +260,7 @@ void bch_initial_mark_key(struct cache_set *, int, struct bkey *);
164    
165     static inline void wake_up_gc(struct cache_set *c)
166     {
167     - if (c->gc_thread)
168     - wake_up_process(c->gc_thread);
169     + wake_up(&c->gc_wait);
170     }
171    
172     #define MAP_DONE 0
173     diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
174     index 25fa8445bb24..2410df1c2a05 100644
175     --- a/drivers/md/bcache/request.c
176     +++ b/drivers/md/bcache/request.c
177     @@ -196,10 +196,8 @@ static void bch_data_insert_start(struct closure *cl)
178     struct data_insert_op *op = container_of(cl, struct data_insert_op, cl);
179     struct bio *bio = op->bio, *n;
180    
181     - if (atomic_sub_return(bio_sectors(bio), &op->c->sectors_to_gc) < 0) {
182     - set_gc_sectors(op->c);
183     + if (atomic_sub_return(bio_sectors(bio), &op->c->sectors_to_gc) < 0)
184     wake_up_gc(op->c);
185     - }
186    
187     if (op->bypass)
188     return bch_data_invalidate(cl);
189     diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
190     index 3d5c0ba13181..7b5880b8874c 100644
191     --- a/drivers/md/bcache/super.c
192     +++ b/drivers/md/bcache/super.c
193     @@ -1489,6 +1489,7 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
194     mutex_init(&c->bucket_lock);
195     init_waitqueue_head(&c->btree_cache_wait);
196     init_waitqueue_head(&c->bucket_wait);
197     + init_waitqueue_head(&c->gc_wait);
198     sema_init(&c->uuid_write_mutex, 1);
199    
200     spin_lock_init(&c->btree_gc_time.lock);
201     @@ -1547,6 +1548,7 @@ static void run_cache_set(struct cache_set *c)
202    
203     for_each_cache(ca, c, i)
204     c->nbuckets += ca->sb.nbuckets;
205     + set_gc_sectors(c);
206    
207     if (CACHE_SYNC(&c->sb)) {
208     LIST_HEAD(journal);
209     diff --git a/drivers/media/usb/siano/smsusb.c b/drivers/media/usb/siano/smsusb.c
210     index c945e4c2fbd4..ec30a004f319 100644
211     --- a/drivers/media/usb/siano/smsusb.c
212     +++ b/drivers/media/usb/siano/smsusb.c
213     @@ -200,22 +200,30 @@ static int smsusb_start_streaming(struct smsusb_device_t *dev)
214     static int smsusb_sendrequest(void *context, void *buffer, size_t size)
215     {
216     struct smsusb_device_t *dev = (struct smsusb_device_t *) context;
217     - struct sms_msg_hdr *phdr = (struct sms_msg_hdr *) buffer;
218     - int dummy;
219     + struct sms_msg_hdr *phdr;
220     + int dummy, ret;
221    
222     if (dev->state != SMSUSB_ACTIVE) {
223     pr_debug("Device not active yet\n");
224     return -ENOENT;
225     }
226    
227     + phdr = kmalloc(size, GFP_KERNEL);
228     + if (!phdr)
229     + return -ENOMEM;
230     + memcpy(phdr, buffer, size);
231     +
232     pr_debug("sending %s(%d) size: %d\n",
233     smscore_translate_msg(phdr->msg_type), phdr->msg_type,
234     phdr->msg_length);
235    
236     smsendian_handle_tx_message((struct sms_msg_data *) phdr);
237     - smsendian_handle_message_header((struct sms_msg_hdr *)buffer);
238     - return usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2),
239     - buffer, size, &dummy, 1000);
240     + smsendian_handle_message_header((struct sms_msg_hdr *)phdr);
241     + ret = usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2),
242     + phdr, size, &dummy, 1000);
243     +
244     + kfree(phdr);
245     + return ret;
246     }
247    
248     static char *smsusb1_fw_lkup[] = {
249     diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
250     index 78187699467a..79a0c26e1419 100644
251     --- a/drivers/mmc/core/mmc.c
252     +++ b/drivers/mmc/core/mmc.c
253     @@ -1581,10 +1581,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
254     err = mmc_select_hs400(card);
255     if (err)
256     goto free_card;
257     - } else if (mmc_card_hs(card)) {
258     + } else {
259     /* Select the desired bus width optionally */
260     err = mmc_select_bus_width(card);
261     - if (!IS_ERR_VALUE(err)) {
262     + if (!IS_ERR_VALUE(err) && mmc_card_hs(card)) {
263     err = mmc_select_hs_ddr(card);
264     if (err)
265     goto free_card;
266     diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
267     index 60654d524858..ecc6fb9ca92f 100644
268     --- a/drivers/ntb/ntb_transport.c
269     +++ b/drivers/ntb/ntb_transport.c
270     @@ -1623,7 +1623,7 @@ ntb_transport_create_queue(void *data, struct device *client_dev,
271    
272     node = dev_to_node(&ndev->dev);
273    
274     - free_queue = ffs(nt->qp_bitmap);
275     + free_queue = ffs(nt->qp_bitmap_free);
276     if (!free_queue)
277     goto err;
278    
279     @@ -2082,9 +2082,8 @@ module_init(ntb_transport_init);
280    
281     static void __exit ntb_transport_exit(void)
282     {
283     - debugfs_remove_recursive(nt_debugfs_dir);
284     -
285     ntb_unregister_client(&ntb_transport_client);
286     bus_unregister(&ntb_transport_bus);
287     + debugfs_remove_recursive(nt_debugfs_dir);
288     }
289     module_exit(ntb_transport_exit);
290     diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
291     index cf5b99e1f12b..8558e3886960 100644
292     --- a/drivers/scsi/scsi_lib.c
293     +++ b/drivers/scsi/scsi_lib.c
294     @@ -1120,7 +1120,8 @@ int scsi_init_io(struct scsi_cmnd *cmd)
295     bool is_mq = (rq->mq_ctx != NULL);
296     int error;
297    
298     - BUG_ON(!rq->nr_phys_segments);
299     + if (WARN_ON_ONCE(!rq->nr_phys_segments))
300     + return -EINVAL;
301    
302     error = scsi_init_sgtable(rq, &cmd->sdb);
303     if (error)
304     diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
305     index a1c29b0afb22..dedcff9cabb5 100644
306     --- a/drivers/scsi/sg.c
307     +++ b/drivers/scsi/sg.c
308     @@ -1763,6 +1763,10 @@ sg_start_req(Sg_request *srp, unsigned char *cmd)
309     return res;
310    
311     iov_iter_truncate(&i, hp->dxfer_len);
312     + if (!iov_iter_count(&i)) {
313     + kfree(iov);
314     + return -EINVAL;
315     + }
316    
317     res = blk_rq_map_user_iov(q, rq, md, &i, GFP_ATOMIC);
318     kfree(iov);
319     diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
320     index 9096d44eb221..d0cf1f010fbe 100644
321     --- a/fs/fuse/dev.c
322     +++ b/fs/fuse/dev.c
323     @@ -418,6 +418,10 @@ static void request_end(struct fuse_conn *fc, struct fuse_req *req)
324     static void queue_interrupt(struct fuse_iqueue *fiq, struct fuse_req *req)
325     {
326     spin_lock(&fiq->waitq.lock);
327     + if (test_bit(FR_FINISHED, &req->flags)) {
328     + spin_unlock(&fiq->waitq.lock);
329     + return;
330     + }
331     if (list_empty(&req->intr_entry)) {
332     list_add_tail(&req->intr_entry, &fiq->interrupts);
333     wake_up_locked(&fiq->waitq);
334     diff --git a/fs/splice.c b/fs/splice.c
335     index 0f77e9682857..8398974e1538 100644
336     --- a/fs/splice.c
337     +++ b/fs/splice.c
338     @@ -211,6 +211,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
339     buf->len = spd->partial[page_nr].len;
340     buf->private = spd->partial[page_nr].private;
341     buf->ops = spd->ops;
342     + buf->flags = 0;
343     if (spd->flags & SPLICE_F_GIFT)
344     buf->flags |= PIPE_BUF_FLAG_GIFT;
345    
346     diff --git a/kernel/futex.c b/kernel/futex.c
347     index 9d8163afd87c..9d251dc3ec40 100644
348     --- a/kernel/futex.c
349     +++ b/kernel/futex.c
350     @@ -3199,4 +3199,4 @@ static int __init futex_init(void)
351    
352     return 0;
353     }
354     -__initcall(futex_init);
355     +core_initcall(futex_init);
356     diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
357     index c048e34b177f..0b5613554769 100644
358     --- a/kernel/printk/printk.c
359     +++ b/kernel/printk/printk.c
360     @@ -1436,7 +1436,7 @@ static void call_console_drivers(int level,
361     {
362     struct console *con;
363    
364     - trace_console(text, len);
365     + trace_console_rcuidle(text, len);
366    
367     if (level >= console_loglevel && !ignore_loglevel)
368     return;