Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.10/0177-3.10.78-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2665 - (hide annotations) (download)
Tue Jul 21 16:20:24 2015 UTC (8 years, 9 months ago) by niro
File size: 35540 byte(s)
-linux-3.10.78
1 niro 2665 diff --git a/Makefile b/Makefile
2     index 923ad8a64e3b..cf99a9b53c6f 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 10
8     -SUBLEVEL = 77
9     +SUBLEVEL = 78
10     EXTRAVERSION =
11     NAME = TOSSUG Baby Fish
12    
13     diff --git a/arch/arc/kernel/signal.c b/arch/arc/kernel/signal.c
14     index 7e95e1a86510..6763654239a2 100644
15     --- a/arch/arc/kernel/signal.c
16     +++ b/arch/arc/kernel/signal.c
17     @@ -131,6 +131,15 @@ SYSCALL_DEFINE0(rt_sigreturn)
18     /* Don't restart from sigreturn */
19     syscall_wont_restart(regs);
20    
21     + /*
22     + * Ensure that sigreturn always returns to user mode (in case the
23     + * regs saved on user stack got fudged between save and sigreturn)
24     + * Otherwise it is easy to panic the kernel with a custom
25     + * signal handler and/or restorer which clobberes the status32/ret
26     + * to return to a bogus location in kernel mode.
27     + */
28     + regs->status32 |= STATUS_U_MASK;
29     +
30     return regs->r0;
31    
32     badframe:
33     @@ -234,8 +243,11 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info,
34    
35     /*
36     * handler returns using sigreturn stub provided already by userpsace
37     + * If not, nuke the process right away
38     */
39     - BUG_ON(!(ka->sa.sa_flags & SA_RESTORER));
40     + if(!(ka->sa.sa_flags & SA_RESTORER))
41     + return 1;
42     +
43     regs->blink = (unsigned long)ka->sa.sa_restorer;
44    
45     /* User Stack for signal handler will be above the frame just carved */
46     @@ -302,12 +314,12 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
47     struct pt_regs *regs)
48     {
49     sigset_t *oldset = sigmask_to_save();
50     - int ret;
51     + int failed;
52    
53     /* Set up the stack frame */
54     - ret = setup_rt_frame(sig, ka, info, oldset, regs);
55     + failed = setup_rt_frame(sig, ka, info, oldset, regs);
56    
57     - if (ret)
58     + if (failed)
59     force_sigsegv(sig, current);
60     else
61     signal_delivered(sig, info, ka, regs, 0);
62     diff --git a/arch/arm/boot/dts/dove.dtsi b/arch/arm/boot/dts/dove.dtsi
63     index 6cab46849cdb..d1e47092d21a 100644
64     --- a/arch/arm/boot/dts/dove.dtsi
65     +++ b/arch/arm/boot/dts/dove.dtsi
66     @@ -75,7 +75,7 @@
67    
68     uart2: serial@12200 {
69     compatible = "ns16550a";
70     - reg = <0x12000 0x100>;
71     + reg = <0x12200 0x100>;
72     reg-shift = <2>;
73     interrupts = <9>;
74     clocks = <&core_clk 0>;
75     @@ -84,7 +84,7 @@
76    
77     uart3: serial@12300 {
78     compatible = "ns16550a";
79     - reg = <0x12100 0x100>;
80     + reg = <0x12300 0x100>;
81     reg-shift = <2>;
82     interrupts = <10>;
83     clocks = <&core_clk 0>;
84     diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
85     index 7e3f45105f11..dd297099c99d 100644
86     --- a/drivers/block/rbd.c
87     +++ b/drivers/block/rbd.c
88     @@ -2115,6 +2115,11 @@ static bool rbd_img_obj_end_request(struct rbd_obj_request *obj_request)
89     result, xferred);
90     if (!img_request->result)
91     img_request->result = result;
92     + /*
93     + * Need to end I/O on the entire obj_request worth of
94     + * bytes in case of error.
95     + */
96     + xferred = obj_request->length;
97     }
98    
99     /* Image object requests don't own their page array */
100     diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
101     index 21ef68934a20..edf8995cb3b3 100644
102     --- a/drivers/hv/channel_mgmt.c
103     +++ b/drivers/hv/channel_mgmt.c
104     @@ -648,7 +648,7 @@ int vmbus_request_offers(void)
105     {
106     struct vmbus_channel_message_header *msg;
107     struct vmbus_channel_msginfo *msginfo;
108     - int ret, t;
109     + int ret;
110    
111     msginfo = kmalloc(sizeof(*msginfo) +
112     sizeof(struct vmbus_channel_message_header),
113     @@ -656,8 +656,6 @@ int vmbus_request_offers(void)
114     if (!msginfo)
115     return -ENOMEM;
116    
117     - init_completion(&msginfo->waitevent);
118     -
119     msg = (struct vmbus_channel_message_header *)msginfo->msg;
120    
121     msg->msgtype = CHANNELMSG_REQUESTOFFERS;
122     @@ -671,14 +669,6 @@ int vmbus_request_offers(void)
123     goto cleanup;
124     }
125    
126     - t = wait_for_completion_timeout(&msginfo->waitevent, 5*HZ);
127     - if (t == 0) {
128     - ret = -ETIMEDOUT;
129     - goto cleanup;
130     - }
131     -
132     -
133     -
134     cleanup:
135     kfree(msginfo);
136    
137     diff --git a/drivers/mtd/ubi/misc.c b/drivers/mtd/ubi/misc.c
138     index f913d701a5b3..c4b1af07a121 100644
139     --- a/drivers/mtd/ubi/misc.c
140     +++ b/drivers/mtd/ubi/misc.c
141     @@ -74,6 +74,8 @@ int ubi_check_volume(struct ubi_device *ubi, int vol_id)
142     for (i = 0; i < vol->used_ebs; i++) {
143     int size;
144    
145     + cond_resched();
146     +
147     if (i == vol->used_ebs - 1)
148     size = vol->last_eb_bytes;
149     else
150     diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
151     index 0a7325361d29..5f57e3d35e26 100644
152     --- a/drivers/scsi/3w-9xxx.c
153     +++ b/drivers/scsi/3w-9xxx.c
154     @@ -149,7 +149,6 @@ static int twa_reset_sequence(TW_Device_Extension *tw_dev, int soft_reset);
155     static int twa_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id, char *cdb, int use_sg, TW_SG_Entry *sglistarg);
156     static void twa_scsiop_execute_scsi_complete(TW_Device_Extension *tw_dev, int request_id);
157     static char *twa_string_lookup(twa_message_type *table, unsigned int aen_code);
158     -static void twa_unmap_scsi_data(TW_Device_Extension *tw_dev, int request_id);
159    
160     /* Functions */
161    
162     @@ -1352,11 +1351,11 @@ static irqreturn_t twa_interrupt(int irq, void *dev_instance)
163     }
164    
165     /* Now complete the io */
166     + scsi_dma_unmap(cmd);
167     + cmd->scsi_done(cmd);
168     tw_dev->state[request_id] = TW_S_COMPLETED;
169     twa_free_request_id(tw_dev, request_id);
170     tw_dev->posted_request_count--;
171     - tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]);
172     - twa_unmap_scsi_data(tw_dev, request_id);
173     }
174    
175     /* Check for valid status after each drain */
176     @@ -1414,26 +1413,6 @@ static void twa_load_sgl(TW_Device_Extension *tw_dev, TW_Command_Full *full_comm
177     }
178     } /* End twa_load_sgl() */
179    
180     -/* This function will perform a pci-dma mapping for a scatter gather list */
181     -static int twa_map_scsi_sg_data(TW_Device_Extension *tw_dev, int request_id)
182     -{
183     - int use_sg;
184     - struct scsi_cmnd *cmd = tw_dev->srb[request_id];
185     -
186     - use_sg = scsi_dma_map(cmd);
187     - if (!use_sg)
188     - return 0;
189     - else if (use_sg < 0) {
190     - TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1c, "Failed to map scatter gather list");
191     - return 0;
192     - }
193     -
194     - cmd->SCp.phase = TW_PHASE_SGLIST;
195     - cmd->SCp.have_data_in = use_sg;
196     -
197     - return use_sg;
198     -} /* End twa_map_scsi_sg_data() */
199     -
200     /* This function will poll for a response interrupt of a request */
201     static int twa_poll_response(TW_Device_Extension *tw_dev, int request_id, int seconds)
202     {
203     @@ -1612,9 +1591,11 @@ static int twa_reset_device_extension(TW_Device_Extension *tw_dev)
204     (tw_dev->state[i] != TW_S_INITIAL) &&
205     (tw_dev->state[i] != TW_S_COMPLETED)) {
206     if (tw_dev->srb[i]) {
207     - tw_dev->srb[i]->result = (DID_RESET << 16);
208     - tw_dev->srb[i]->scsi_done(tw_dev->srb[i]);
209     - twa_unmap_scsi_data(tw_dev, i);
210     + struct scsi_cmnd *cmd = tw_dev->srb[i];
211     +
212     + cmd->result = (DID_RESET << 16);
213     + scsi_dma_unmap(cmd);
214     + cmd->scsi_done(cmd);
215     }
216     }
217     }
218     @@ -1793,21 +1774,18 @@ static int twa_scsi_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_
219     /* Save the scsi command for use by the ISR */
220     tw_dev->srb[request_id] = SCpnt;
221    
222     - /* Initialize phase to zero */
223     - SCpnt->SCp.phase = TW_PHASE_INITIAL;
224     -
225     retval = twa_scsiop_execute_scsi(tw_dev, request_id, NULL, 0, NULL);
226     switch (retval) {
227     case SCSI_MLQUEUE_HOST_BUSY:
228     + scsi_dma_unmap(SCpnt);
229     twa_free_request_id(tw_dev, request_id);
230     - twa_unmap_scsi_data(tw_dev, request_id);
231     break;
232     case 1:
233     - tw_dev->state[request_id] = TW_S_COMPLETED;
234     - twa_free_request_id(tw_dev, request_id);
235     - twa_unmap_scsi_data(tw_dev, request_id);
236     SCpnt->result = (DID_ERROR << 16);
237     + scsi_dma_unmap(SCpnt);
238     done(SCpnt);
239     + tw_dev->state[request_id] = TW_S_COMPLETED;
240     + twa_free_request_id(tw_dev, request_id);
241     retval = 0;
242     }
243     out:
244     @@ -1875,8 +1853,8 @@ static int twa_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id,
245     command_packet->sg_list[0].address = TW_CPU_TO_SGL(tw_dev->generic_buffer_phys[request_id]);
246     command_packet->sg_list[0].length = cpu_to_le32(TW_MIN_SGL_LENGTH);
247     } else {
248     - sg_count = twa_map_scsi_sg_data(tw_dev, request_id);
249     - if (sg_count == 0)
250     + sg_count = scsi_dma_map(srb);
251     + if (sg_count < 0)
252     goto out;
253    
254     scsi_for_each_sg(srb, sg, sg_count, i) {
255     @@ -1991,15 +1969,6 @@ static char *twa_string_lookup(twa_message_type *table, unsigned int code)
256     return(table[index].text);
257     } /* End twa_string_lookup() */
258    
259     -/* This function will perform a pci-dma unmap */
260     -static void twa_unmap_scsi_data(TW_Device_Extension *tw_dev, int request_id)
261     -{
262     - struct scsi_cmnd *cmd = tw_dev->srb[request_id];
263     -
264     - if (cmd->SCp.phase == TW_PHASE_SGLIST)
265     - scsi_dma_unmap(cmd);
266     -} /* End twa_unmap_scsi_data() */
267     -
268     /* This function gets called when a disk is coming on-line */
269     static int twa_slave_configure(struct scsi_device *sdev)
270     {
271     diff --git a/drivers/scsi/3w-9xxx.h b/drivers/scsi/3w-9xxx.h
272     index 040f7214e5b7..0fdc83cfa0e1 100644
273     --- a/drivers/scsi/3w-9xxx.h
274     +++ b/drivers/scsi/3w-9xxx.h
275     @@ -324,11 +324,6 @@ static twa_message_type twa_error_table[] = {
276     #define TW_CURRENT_DRIVER_BUILD 0
277     #define TW_CURRENT_DRIVER_BRANCH 0
278    
279     -/* Phase defines */
280     -#define TW_PHASE_INITIAL 0
281     -#define TW_PHASE_SINGLE 1
282     -#define TW_PHASE_SGLIST 2
283     -
284     /* Misc defines */
285     #define TW_9550SX_DRAIN_COMPLETED 0xFFFF
286     #define TW_SECTOR_SIZE 512
287     diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c
288     index 4de346017e9f..61702ac00d42 100644
289     --- a/drivers/scsi/3w-sas.c
290     +++ b/drivers/scsi/3w-sas.c
291     @@ -303,26 +303,6 @@ static int twl_post_command_packet(TW_Device_Extension *tw_dev, int request_id)
292     return 0;
293     } /* End twl_post_command_packet() */
294    
295     -/* This function will perform a pci-dma mapping for a scatter gather list */
296     -static int twl_map_scsi_sg_data(TW_Device_Extension *tw_dev, int request_id)
297     -{
298     - int use_sg;
299     - struct scsi_cmnd *cmd = tw_dev->srb[request_id];
300     -
301     - use_sg = scsi_dma_map(cmd);
302     - if (!use_sg)
303     - return 0;
304     - else if (use_sg < 0) {
305     - TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1, "Failed to map scatter gather list");
306     - return 0;
307     - }
308     -
309     - cmd->SCp.phase = TW_PHASE_SGLIST;
310     - cmd->SCp.have_data_in = use_sg;
311     -
312     - return use_sg;
313     -} /* End twl_map_scsi_sg_data() */
314     -
315     /* This function hands scsi cdb's to the firmware */
316     static int twl_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id, char *cdb, int use_sg, TW_SG_Entry_ISO *sglistarg)
317     {
318     @@ -370,8 +350,8 @@ static int twl_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id,
319     if (!sglistarg) {
320     /* Map sglist from scsi layer to cmd packet */
321     if (scsi_sg_count(srb)) {
322     - sg_count = twl_map_scsi_sg_data(tw_dev, request_id);
323     - if (sg_count == 0)
324     + sg_count = scsi_dma_map(srb);
325     + if (sg_count <= 0)
326     goto out;
327    
328     scsi_for_each_sg(srb, sg, sg_count, i) {
329     @@ -1116,15 +1096,6 @@ out:
330     return retval;
331     } /* End twl_initialize_device_extension() */
332    
333     -/* This function will perform a pci-dma unmap */
334     -static void twl_unmap_scsi_data(TW_Device_Extension *tw_dev, int request_id)
335     -{
336     - struct scsi_cmnd *cmd = tw_dev->srb[request_id];
337     -
338     - if (cmd->SCp.phase == TW_PHASE_SGLIST)
339     - scsi_dma_unmap(cmd);
340     -} /* End twl_unmap_scsi_data() */
341     -
342     /* This function will handle attention interrupts */
343     static int twl_handle_attention_interrupt(TW_Device_Extension *tw_dev)
344     {
345     @@ -1265,11 +1236,11 @@ static irqreturn_t twl_interrupt(int irq, void *dev_instance)
346     }
347    
348     /* Now complete the io */
349     + scsi_dma_unmap(cmd);
350     + cmd->scsi_done(cmd);
351     tw_dev->state[request_id] = TW_S_COMPLETED;
352     twl_free_request_id(tw_dev, request_id);
353     tw_dev->posted_request_count--;
354     - tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]);
355     - twl_unmap_scsi_data(tw_dev, request_id);
356     }
357    
358     /* Check for another response interrupt */
359     @@ -1414,10 +1385,12 @@ static int twl_reset_device_extension(TW_Device_Extension *tw_dev, int ioctl_res
360     if ((tw_dev->state[i] != TW_S_FINISHED) &&
361     (tw_dev->state[i] != TW_S_INITIAL) &&
362     (tw_dev->state[i] != TW_S_COMPLETED)) {
363     - if (tw_dev->srb[i]) {
364     - tw_dev->srb[i]->result = (DID_RESET << 16);
365     - tw_dev->srb[i]->scsi_done(tw_dev->srb[i]);
366     - twl_unmap_scsi_data(tw_dev, i);
367     + struct scsi_cmnd *cmd = tw_dev->srb[i];
368     +
369     + if (cmd) {
370     + cmd->result = (DID_RESET << 16);
371     + scsi_dma_unmap(cmd);
372     + cmd->scsi_done(cmd);
373     }
374     }
375     }
376     @@ -1521,9 +1494,6 @@ static int twl_scsi_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_
377     /* Save the scsi command for use by the ISR */
378     tw_dev->srb[request_id] = SCpnt;
379    
380     - /* Initialize phase to zero */
381     - SCpnt->SCp.phase = TW_PHASE_INITIAL;
382     -
383     retval = twl_scsiop_execute_scsi(tw_dev, request_id, NULL, 0, NULL);
384     if (retval) {
385     tw_dev->state[request_id] = TW_S_COMPLETED;
386     diff --git a/drivers/scsi/3w-sas.h b/drivers/scsi/3w-sas.h
387     index d474892701d4..fec6449c7595 100644
388     --- a/drivers/scsi/3w-sas.h
389     +++ b/drivers/scsi/3w-sas.h
390     @@ -103,10 +103,6 @@ static char *twl_aen_severity_table[] =
391     #define TW_CURRENT_DRIVER_BUILD 0
392     #define TW_CURRENT_DRIVER_BRANCH 0
393    
394     -/* Phase defines */
395     -#define TW_PHASE_INITIAL 0
396     -#define TW_PHASE_SGLIST 2
397     -
398     /* Misc defines */
399     #define TW_SECTOR_SIZE 512
400     #define TW_MAX_UNITS 32
401     diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
402     index 430ee3774c3b..8843ad783b41 100644
403     --- a/drivers/scsi/3w-xxxx.c
404     +++ b/drivers/scsi/3w-xxxx.c
405     @@ -1283,32 +1283,6 @@ static int tw_initialize_device_extension(TW_Device_Extension *tw_dev)
406     return 0;
407     } /* End tw_initialize_device_extension() */
408    
409     -static int tw_map_scsi_sg_data(struct pci_dev *pdev, struct scsi_cmnd *cmd)
410     -{
411     - int use_sg;
412     -
413     - dprintk(KERN_WARNING "3w-xxxx: tw_map_scsi_sg_data()\n");
414     -
415     - use_sg = scsi_dma_map(cmd);
416     - if (use_sg < 0) {
417     - printk(KERN_WARNING "3w-xxxx: tw_map_scsi_sg_data(): pci_map_sg() failed.\n");
418     - return 0;
419     - }
420     -
421     - cmd->SCp.phase = TW_PHASE_SGLIST;
422     - cmd->SCp.have_data_in = use_sg;
423     -
424     - return use_sg;
425     -} /* End tw_map_scsi_sg_data() */
426     -
427     -static void tw_unmap_scsi_data(struct pci_dev *pdev, struct scsi_cmnd *cmd)
428     -{
429     - dprintk(KERN_WARNING "3w-xxxx: tw_unmap_scsi_data()\n");
430     -
431     - if (cmd->SCp.phase == TW_PHASE_SGLIST)
432     - scsi_dma_unmap(cmd);
433     -} /* End tw_unmap_scsi_data() */
434     -
435     /* This function will reset a device extension */
436     static int tw_reset_device_extension(TW_Device_Extension *tw_dev)
437     {
438     @@ -1331,8 +1305,8 @@ static int tw_reset_device_extension(TW_Device_Extension *tw_dev)
439     srb = tw_dev->srb[i];
440     if (srb != NULL) {
441     srb->result = (DID_RESET << 16);
442     - tw_dev->srb[i]->scsi_done(tw_dev->srb[i]);
443     - tw_unmap_scsi_data(tw_dev->tw_pci_dev, tw_dev->srb[i]);
444     + scsi_dma_unmap(srb);
445     + srb->scsi_done(srb);
446     }
447     }
448     }
449     @@ -1779,8 +1753,8 @@ static int tw_scsiop_read_write(TW_Device_Extension *tw_dev, int request_id)
450     command_packet->byte8.io.lba = lba;
451     command_packet->byte6.block_count = num_sectors;
452    
453     - use_sg = tw_map_scsi_sg_data(tw_dev->tw_pci_dev, tw_dev->srb[request_id]);
454     - if (!use_sg)
455     + use_sg = scsi_dma_map(srb);
456     + if (use_sg <= 0)
457     return 1;
458    
459     scsi_for_each_sg(tw_dev->srb[request_id], sg, use_sg, i) {
460     @@ -1967,9 +1941,6 @@ static int tw_scsi_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_c
461     /* Save the scsi command for use by the ISR */
462     tw_dev->srb[request_id] = SCpnt;
463    
464     - /* Initialize phase to zero */
465     - SCpnt->SCp.phase = TW_PHASE_INITIAL;
466     -
467     switch (*command) {
468     case READ_10:
469     case READ_6:
470     @@ -2196,12 +2167,11 @@ static irqreturn_t tw_interrupt(int irq, void *dev_instance)
471    
472     /* Now complete the io */
473     if ((error != TW_ISR_DONT_COMPLETE)) {
474     + scsi_dma_unmap(tw_dev->srb[request_id]);
475     + tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]);
476     tw_dev->state[request_id] = TW_S_COMPLETED;
477     tw_state_request_finish(tw_dev, request_id);
478     tw_dev->posted_request_count--;
479     - tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]);
480     -
481     - tw_unmap_scsi_data(tw_dev->tw_pci_dev, tw_dev->srb[request_id]);
482     }
483     }
484    
485     diff --git a/drivers/scsi/3w-xxxx.h b/drivers/scsi/3w-xxxx.h
486     index 49dcf03c631a..1d31858766ce 100644
487     --- a/drivers/scsi/3w-xxxx.h
488     +++ b/drivers/scsi/3w-xxxx.h
489     @@ -195,11 +195,6 @@ static unsigned char tw_sense_table[][4] =
490     #define TW_AEN_SMART_FAIL 0x000F
491     #define TW_AEN_SBUF_FAIL 0x0024
492    
493     -/* Phase defines */
494     -#define TW_PHASE_INITIAL 0
495     -#define TW_PHASE_SINGLE 1
496     -#define TW_PHASE_SGLIST 2
497     -
498     /* Misc defines */
499     #define TW_ALIGNMENT_6000 64 /* 64 bytes */
500     #define TW_ALIGNMENT_7000 4 /* 4 bytes */
501     diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c
502     index c54df3948e20..4d0a87b93b96 100644
503     --- a/drivers/staging/panel/panel.c
504     +++ b/drivers/staging/panel/panel.c
505     @@ -275,11 +275,11 @@ static unsigned char lcd_bits[LCD_PORTS][LCD_BITS][BIT_STATES];
506     * LCD types
507     */
508     #define LCD_TYPE_NONE 0
509     -#define LCD_TYPE_OLD 1
510     -#define LCD_TYPE_KS0074 2
511     -#define LCD_TYPE_HANTRONIX 3
512     -#define LCD_TYPE_NEXCOM 4
513     -#define LCD_TYPE_CUSTOM 5
514     +#define LCD_TYPE_CUSTOM 1
515     +#define LCD_TYPE_OLD 2
516     +#define LCD_TYPE_KS0074 3
517     +#define LCD_TYPE_HANTRONIX 4
518     +#define LCD_TYPE_NEXCOM 5
519    
520     /*
521     * keypad types
522     @@ -457,8 +457,7 @@ MODULE_PARM_DESC(keypad_enabled, "Deprecated option, use keypad_type instead");
523     static int lcd_type = -1;
524     module_param(lcd_type, int, 0000);
525     MODULE_PARM_DESC(lcd_type,
526     - "LCD type: 0=none, 1=old //, 2=serial ks0074, "
527     - "3=hantronix //, 4=nexcom //, 5=compiled-in");
528     + "LCD type: 0=none, 1=compiled-in, 2=old, 3=serial ks0074, 4=hantronix, 5=nexcom");
529    
530     static int lcd_proto = -1;
531     module_param(lcd_proto, int, 0000);
532     diff --git a/drivers/tty/serial/of_serial.c b/drivers/tty/serial/of_serial.c
533     index 39c7ea4cb14f..2225f83f4c04 100644
534     --- a/drivers/tty/serial/of_serial.c
535     +++ b/drivers/tty/serial/of_serial.c
536     @@ -262,7 +262,6 @@ static struct of_device_id of_platform_serial_table[] = {
537     { .compatible = "ibm,qpace-nwp-serial",
538     .data = (void *)PORT_NWPSERIAL, },
539     #endif
540     - { .type = "serial", .data = (void *)PORT_UNKNOWN, },
541     { /* end of list */ },
542     };
543    
544     diff --git a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c
545     index bf7a56b6d48a..a0dfdbddbf08 100644
546     --- a/drivers/usb/gadget/printer.c
547     +++ b/drivers/usb/gadget/printer.c
548     @@ -975,6 +975,15 @@ unknown:
549     break;
550     }
551     /* host either stalls (value < 0) or reports success */
552     + if (value >= 0) {
553     + req->length = value;
554     + req->zero = value < wLength;
555     + value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
556     + if (value < 0) {
557     + ERROR(dev, "%s:%d Error!\n", __func__, __LINE__);
558     + req->status = 0;
559     + }
560     + }
561     return value;
562     }
563    
564     diff --git a/drivers/usb/host/oxu210hp-hcd.c b/drivers/usb/host/oxu210hp-hcd.c
565     index 0f401dbfaf07..b5c4f4d81a38 100644
566     --- a/drivers/usb/host/oxu210hp-hcd.c
567     +++ b/drivers/usb/host/oxu210hp-hcd.c
568     @@ -2497,11 +2497,12 @@ static irqreturn_t oxu210_hcd_irq(struct usb_hcd *hcd)
569     || oxu->reset_done[i] != 0)
570     continue;
571    
572     - /* start 20 msec resume signaling from this port,
573     - * and make khubd collect PORT_STAT_C_SUSPEND to
574     + /* start USB_RESUME_TIMEOUT resume signaling from this
575     + * port, and make hub_wq collect PORT_STAT_C_SUSPEND to
576     * stop that signaling.
577     */
578     - oxu->reset_done[i] = jiffies + msecs_to_jiffies(20);
579     + oxu->reset_done[i] = jiffies +
580     + msecs_to_jiffies(USB_RESUME_TIMEOUT);
581     oxu_dbg(oxu, "port %d remote wakeup\n", i + 1);
582     mod_timer(&hcd->rh_timer, oxu->reset_done[i]);
583     }
584     diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c
585     index e6941e622d31..1fefeb7d14db 100644
586     --- a/fs/ext4/extents_status.c
587     +++ b/fs/ext4/extents_status.c
588     @@ -655,6 +655,14 @@ int ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
589    
590     BUG_ON(end < lblk);
591    
592     + if ((status & EXTENT_STATUS_DELAYED) &&
593     + (status & EXTENT_STATUS_WRITTEN)) {
594     + ext4_warning(inode->i_sb, "Inserting extent [%u/%u] as "
595     + " delayed and written which can potentially "
596     + " cause data loss.\n", lblk, len);
597     + WARN_ON(1);
598     + }
599     +
600     newes.es_lblk = lblk;
601     newes.es_len = len;
602     ext4_es_store_pblock(&newes, pblk);
603     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
604     index e48bd5a1814b..9e3d8dd6c40a 100644
605     --- a/fs/ext4/inode.c
606     +++ b/fs/ext4/inode.c
607     @@ -626,6 +626,7 @@ int ext4_map_blocks(handle_t *handle, struct inode *inode,
608     status = map->m_flags & EXT4_MAP_UNWRITTEN ?
609     EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
610     if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) &&
611     + !(status & EXTENT_STATUS_WRITTEN) &&
612     ext4_find_delalloc_range(inode, map->m_lblk,
613     map->m_lblk + map->m_len - 1))
614     status |= EXTENT_STATUS_DELAYED;
615     @@ -736,6 +737,7 @@ found:
616     status = map->m_flags & EXT4_MAP_UNWRITTEN ?
617     EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
618     if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) &&
619     + !(status & EXTENT_STATUS_WRITTEN) &&
620     ext4_find_delalloc_range(inode, map->m_lblk,
621     map->m_lblk + map->m_len - 1))
622     status |= EXTENT_STATUS_DELAYED;
623     diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h
624     index dfb42ca6d043..8898cdeb42a4 100644
625     --- a/include/sound/emu10k1.h
626     +++ b/include/sound/emu10k1.h
627     @@ -41,7 +41,8 @@
628    
629     #define EMUPAGESIZE 4096
630     #define MAXREQVOICES 8
631     -#define MAXPAGES 8192
632     +#define MAXPAGES0 4096 /* 32 bit mode */
633     +#define MAXPAGES1 8192 /* 31 bit mode */
634     #define RESERVED 0
635     #define NUM_MIDI 16
636     #define NUM_G 64 /* use all channels */
637     @@ -50,8 +51,7 @@
638    
639     /* FIXME? - according to the OSS driver the EMU10K1 needs a 29 bit DMA mask */
640     #define EMU10K1_DMA_MASK 0x7fffffffUL /* 31bit */
641     -#define AUDIGY_DMA_MASK 0x7fffffffUL /* 31bit FIXME - 32 should work? */
642     - /* See ALSA bug #1276 - rlrevell */
643     +#define AUDIGY_DMA_MASK 0xffffffffUL /* 32bit mode */
644    
645     #define TMEMSIZE 256*1024
646     #define TMEMSIZEREG 4
647     @@ -468,8 +468,11 @@
648    
649     #define MAPB 0x0d /* Cache map B */
650    
651     -#define MAP_PTE_MASK 0xffffe000 /* The 19 MSBs of the PTE indexed by the PTI */
652     -#define MAP_PTI_MASK 0x00001fff /* The 13 bit index to one of the 8192 PTE dwords */
653     +#define MAP_PTE_MASK0 0xfffff000 /* The 20 MSBs of the PTE indexed by the PTI */
654     +#define MAP_PTI_MASK0 0x00000fff /* The 12 bit index to one of the 4096 PTE dwords */
655     +
656     +#define MAP_PTE_MASK1 0xffffe000 /* The 19 MSBs of the PTE indexed by the PTI */
657     +#define MAP_PTI_MASK1 0x00001fff /* The 13 bit index to one of the 8192 PTE dwords */
658    
659     /* 0x0e, 0x0f: Not used */
660    
661     @@ -1706,6 +1709,7 @@ struct snd_emu10k1 {
662     unsigned short model; /* subsystem id */
663     unsigned int card_type; /* EMU10K1_CARD_* */
664     unsigned int ecard_ctrl; /* ecard control bits */
665     + unsigned int address_mode; /* address mode */
666     unsigned long dma_mask; /* PCI DMA mask */
667     unsigned int delay_pcm_irq; /* in samples */
668     int max_cache_pages; /* max memory size / PAGE_SIZE */
669     diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
670     index 698f3a2ac5ae..459b957104a8 100644
671     --- a/net/ipv4/ping.c
672     +++ b/net/ipv4/ping.c
673     @@ -139,6 +139,7 @@ static void ping_v4_unhash(struct sock *sk)
674     if (sk_hashed(sk)) {
675     write_lock_bh(&ping_table.lock);
676     hlist_nulls_del(&sk->sk_nulls_node);
677     + sk_nulls_node_init(&sk->sk_nulls_node);
678     sock_put(sk);
679     isk->inet_num = 0;
680     isk->inet_sport = 0;
681     diff --git a/sound/pci/emu10k1/emu10k1.c b/sound/pci/emu10k1/emu10k1.c
682     index 8c5010f7889c..70e6fe186d34 100644
683     --- a/sound/pci/emu10k1/emu10k1.c
684     +++ b/sound/pci/emu10k1/emu10k1.c
685     @@ -181,8 +181,10 @@ static int snd_card_emu10k1_probe(struct pci_dev *pci,
686     }
687     #endif
688    
689     - strcpy(card->driver, emu->card_capabilities->driver);
690     - strcpy(card->shortname, emu->card_capabilities->name);
691     + strlcpy(card->driver, emu->card_capabilities->driver,
692     + sizeof(card->driver));
693     + strlcpy(card->shortname, emu->card_capabilities->name,
694     + sizeof(card->shortname));
695     snprintf(card->longname, sizeof(card->longname),
696     "%s (rev.%d, serial:0x%x) at 0x%lx, irq %i",
697     card->shortname, emu->revision, emu->serial, emu->port, emu->irq);
698     diff --git a/sound/pci/emu10k1/emu10k1_callback.c b/sound/pci/emu10k1/emu10k1_callback.c
699     index 0a34b5f1c475..f8a6549f00e5 100644
700     --- a/sound/pci/emu10k1/emu10k1_callback.c
701     +++ b/sound/pci/emu10k1/emu10k1_callback.c
702     @@ -415,7 +415,7 @@ start_voice(struct snd_emux_voice *vp)
703     snd_emu10k1_ptr_write(hw, Z2, ch, 0);
704    
705     /* invalidate maps */
706     - temp = (hw->silent_page.addr << 1) | MAP_PTI_MASK;
707     + temp = (hw->silent_page.addr << hw->address_mode) | (hw->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
708     snd_emu10k1_ptr_write(hw, MAPA, ch, temp);
709     snd_emu10k1_ptr_write(hw, MAPB, ch, temp);
710     #if 0
711     @@ -436,7 +436,7 @@ start_voice(struct snd_emux_voice *vp)
712     snd_emu10k1_ptr_write(hw, CDF, ch, sample);
713    
714     /* invalidate maps */
715     - temp = ((unsigned int)hw->silent_page.addr << 1) | MAP_PTI_MASK;
716     + temp = ((unsigned int)hw->silent_page.addr << hw_address_mode) | (hw->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
717     snd_emu10k1_ptr_write(hw, MAPA, ch, temp);
718     snd_emu10k1_ptr_write(hw, MAPB, ch, temp);
719    
720     diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c
721     index bdd888ec9a84..a131092572e6 100644
722     --- a/sound/pci/emu10k1/emu10k1_main.c
723     +++ b/sound/pci/emu10k1/emu10k1_main.c
724     @@ -282,7 +282,7 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume)
725     snd_emu10k1_ptr_write(emu, TCB, 0, 0); /* taken from original driver */
726     snd_emu10k1_ptr_write(emu, TCBS, 0, 4); /* taken from original driver */
727    
728     - silent_page = (emu->silent_page.addr << 1) | MAP_PTI_MASK;
729     + silent_page = (emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
730     for (ch = 0; ch < NUM_G; ch++) {
731     snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page);
732     snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page);
733     @@ -348,6 +348,11 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume)
734     outl(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG);
735     }
736    
737     + if (emu->address_mode == 0) {
738     + /* use 16M in 4G */
739     + outl(inl(emu->port + HCFG) | HCFG_EXPANDED_MEM, emu->port + HCFG);
740     + }
741     +
742     return 0;
743     }
744    
745     @@ -1411,7 +1416,7 @@ static struct snd_emu_chip_details emu_chip_details[] = {
746     *
747     */
748     {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x20011102,
749     - .driver = "Audigy2", .name = "SB Audigy 2 ZS Notebook [SB0530]",
750     + .driver = "Audigy2", .name = "Audigy 2 ZS Notebook [SB0530]",
751     .id = "Audigy2",
752     .emu10k2_chip = 1,
753     .ca0108_chip = 1,
754     @@ -1561,7 +1566,7 @@ static struct snd_emu_chip_details emu_chip_details[] = {
755     .adc_1361t = 1, /* 24 bit capture instead of 16bit */
756     .ac97_chip = 1} ,
757     {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10051102,
758     - .driver = "Audigy2", .name = "SB Audigy 2 Platinum EX [SB0280]",
759     + .driver = "Audigy2", .name = "Audigy 2 Platinum EX [SB0280]",
760     .id = "Audigy2",
761     .emu10k2_chip = 1,
762     .ca0102_chip = 1,
763     @@ -1865,8 +1870,10 @@ int snd_emu10k1_create(struct snd_card *card,
764    
765     is_audigy = emu->audigy = c->emu10k2_chip;
766    
767     + /* set addressing mode */
768     + emu->address_mode = is_audigy ? 0 : 1;
769     /* set the DMA transfer mask */
770     - emu->dma_mask = is_audigy ? AUDIGY_DMA_MASK : EMU10K1_DMA_MASK;
771     + emu->dma_mask = emu->address_mode ? EMU10K1_DMA_MASK : AUDIGY_DMA_MASK;
772     if (pci_set_dma_mask(pci, emu->dma_mask) < 0 ||
773     pci_set_consistent_dma_mask(pci, emu->dma_mask) < 0) {
774     snd_printk(KERN_ERR "architecture does not support PCI busmaster DMA with mask 0x%lx\n", emu->dma_mask);
775     @@ -1889,7 +1896,7 @@ int snd_emu10k1_create(struct snd_card *card,
776    
777     emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
778     if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
779     - 32 * 1024, &emu->ptb_pages) < 0) {
780     + (emu->address_mode ? 32 : 16) * 1024, &emu->ptb_pages) < 0) {
781     err = -ENOMEM;
782     goto error;
783     }
784     @@ -1988,8 +1995,8 @@ int snd_emu10k1_create(struct snd_card *card,
785    
786     /* Clear silent pages and set up pointers */
787     memset(emu->silent_page.area, 0, PAGE_SIZE);
788     - silent_page = emu->silent_page.addr << 1;
789     - for (idx = 0; idx < MAXPAGES; idx++)
790     + silent_page = emu->silent_page.addr << emu->address_mode;
791     + for (idx = 0; idx < (emu->address_mode ? MAXPAGES1 : MAXPAGES0); idx++)
792     ((u32 *)emu->ptb_pages.area)[idx] = cpu_to_le32(silent_page | idx);
793    
794     /* set up voice indices */
795     diff --git a/sound/pci/emu10k1/emupcm.c b/sound/pci/emu10k1/emupcm.c
796     index 5ae1d045bdcb..7581019d7c84 100644
797     --- a/sound/pci/emu10k1/emupcm.c
798     +++ b/sound/pci/emu10k1/emupcm.c
799     @@ -379,7 +379,7 @@ static void snd_emu10k1_pcm_init_voice(struct snd_emu10k1 *emu,
800     snd_emu10k1_ptr_write(emu, Z1, voice, 0);
801     snd_emu10k1_ptr_write(emu, Z2, voice, 0);
802     /* invalidate maps */
803     - silent_page = ((unsigned int)emu->silent_page.addr << 1) | MAP_PTI_MASK;
804     + silent_page = ((unsigned int)emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
805     snd_emu10k1_ptr_write(emu, MAPA, voice, silent_page);
806     snd_emu10k1_ptr_write(emu, MAPB, voice, silent_page);
807     /* modulation envelope */
808     diff --git a/sound/pci/emu10k1/memory.c b/sound/pci/emu10k1/memory.c
809     index ae709c1ab3a8..d514458efe3d 100644
810     --- a/sound/pci/emu10k1/memory.c
811     +++ b/sound/pci/emu10k1/memory.c
812     @@ -34,10 +34,11 @@
813     * aligned pages in others
814     */
815     #define __set_ptb_entry(emu,page,addr) \
816     - (((u32 *)(emu)->ptb_pages.area)[page] = cpu_to_le32(((addr) << 1) | (page)))
817     + (((u32 *)(emu)->ptb_pages.area)[page] = cpu_to_le32(((addr) << (emu->address_mode)) | (page)))
818    
819     #define UNIT_PAGES (PAGE_SIZE / EMUPAGESIZE)
820     -#define MAX_ALIGN_PAGES (MAXPAGES / UNIT_PAGES)
821     +#define MAX_ALIGN_PAGES0 (MAXPAGES0 / UNIT_PAGES)
822     +#define MAX_ALIGN_PAGES1 (MAXPAGES1 / UNIT_PAGES)
823     /* get aligned page from offset address */
824     #define get_aligned_page(offset) ((offset) >> PAGE_SHIFT)
825     /* get offset address from aligned page */
826     @@ -124,7 +125,7 @@ static int search_empty_map_area(struct snd_emu10k1 *emu, int npages, struct lis
827     }
828     page = blk->mapped_page + blk->pages;
829     }
830     - size = MAX_ALIGN_PAGES - page;
831     + size = (emu->address_mode ? MAX_ALIGN_PAGES1 : MAX_ALIGN_PAGES0) - page;
832     if (size >= max_size) {
833     *nextp = pos;
834     return page;
835     @@ -181,7 +182,7 @@ static int unmap_memblk(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk)
836     q = get_emu10k1_memblk(p, mapped_link);
837     end_page = q->mapped_page;
838     } else
839     - end_page = MAX_ALIGN_PAGES;
840     + end_page = (emu->address_mode ? MAX_ALIGN_PAGES1 : MAX_ALIGN_PAGES0);
841    
842     /* remove links */
843     list_del(&blk->mapped_link);
844     @@ -305,7 +306,7 @@ snd_emu10k1_alloc_pages(struct snd_emu10k1 *emu, struct snd_pcm_substream *subst
845     if (snd_BUG_ON(!emu))
846     return NULL;
847     if (snd_BUG_ON(runtime->dma_bytes <= 0 ||
848     - runtime->dma_bytes >= MAXPAGES * EMUPAGESIZE))
849     + runtime->dma_bytes >= (emu->address_mode ? MAXPAGES1 : MAXPAGES0) * EMUPAGESIZE))
850     return NULL;
851     hdr = emu->memhdr;
852     if (snd_BUG_ON(!hdr))
853     diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
854     index 83a0f9b4452b..68261a778ee5 100644
855     --- a/sound/pci/hda/hda_codec.c
856     +++ b/sound/pci/hda/hda_codec.c
857     @@ -2078,6 +2078,16 @@ int snd_hda_codec_amp_init_stereo(struct hda_codec *codec, hda_nid_t nid,
858     }
859     EXPORT_SYMBOL_HDA(snd_hda_codec_amp_init_stereo);
860    
861     +/* meta hook to call each driver's vmaster hook */
862     +static void vmaster_hook(void *private_data, int enabled)
863     +{
864     + struct hda_vmaster_mute_hook *hook = private_data;
865     +
866     + if (hook->mute_mode != HDA_VMUTE_FOLLOW_MASTER)
867     + enabled = hook->mute_mode;
868     + hook->hook(hook->codec, enabled);
869     +}
870     +
871     /**
872     * snd_hda_codec_resume_amp - Resume all AMP commands from the cache
873     * @codec: HD-audio codec
874     @@ -2772,9 +2782,9 @@ int snd_hda_add_vmaster_hook(struct hda_codec *codec,
875    
876     if (!hook->hook || !hook->sw_kctl)
877     return 0;
878     - snd_ctl_add_vmaster_hook(hook->sw_kctl, hook->hook, codec);
879     hook->codec = codec;
880     hook->mute_mode = HDA_VMUTE_FOLLOW_MASTER;
881     + snd_ctl_add_vmaster_hook(hook->sw_kctl, vmaster_hook, hook);
882     if (!expose_enum_ctl)
883     return 0;
884     kctl = snd_ctl_new1(&vmaster_mute_mode, hook);
885     @@ -2797,14 +2807,7 @@ void snd_hda_sync_vmaster_hook(struct hda_vmaster_mute_hook *hook)
886     */
887     if (hook->codec->bus->shutdown)
888     return;
889     - switch (hook->mute_mode) {
890     - case HDA_VMUTE_FOLLOW_MASTER:
891     - snd_ctl_sync_vmaster_hook(hook->sw_kctl);
892     - break;
893     - default:
894     - hook->hook(hook->codec, hook->mute_mode);
895     - break;
896     - }
897     + snd_ctl_sync_vmaster_hook(hook->sw_kctl);
898     }
899     EXPORT_SYMBOL_HDA(snd_hda_sync_vmaster_hook);
900    
901     diff --git a/sound/synth/emux/emux_oss.c b/sound/synth/emux/emux_oss.c
902     index 319754cf6208..daf61abc3670 100644
903     --- a/sound/synth/emux/emux_oss.c
904     +++ b/sound/synth/emux/emux_oss.c
905     @@ -118,12 +118,8 @@ snd_emux_open_seq_oss(struct snd_seq_oss_arg *arg, void *closure)
906     if (snd_BUG_ON(!arg || !emu))
907     return -ENXIO;
908    
909     - mutex_lock(&emu->register_mutex);
910     -
911     - if (!snd_emux_inc_count(emu)) {
912     - mutex_unlock(&emu->register_mutex);
913     + if (!snd_emux_inc_count(emu))
914     return -EFAULT;
915     - }
916    
917     memset(&callback, 0, sizeof(callback));
918     callback.owner = THIS_MODULE;
919     @@ -135,7 +131,6 @@ snd_emux_open_seq_oss(struct snd_seq_oss_arg *arg, void *closure)
920     if (p == NULL) {
921     snd_printk(KERN_ERR "can't create port\n");
922     snd_emux_dec_count(emu);
923     - mutex_unlock(&emu->register_mutex);
924     return -ENOMEM;
925     }
926    
927     @@ -148,8 +143,6 @@ snd_emux_open_seq_oss(struct snd_seq_oss_arg *arg, void *closure)
928     reset_port_mode(p, arg->seq_mode);
929    
930     snd_emux_reset_port(p);
931     -
932     - mutex_unlock(&emu->register_mutex);
933     return 0;
934     }
935    
936     @@ -195,13 +188,11 @@ snd_emux_close_seq_oss(struct snd_seq_oss_arg *arg)
937     if (snd_BUG_ON(!emu))
938     return -ENXIO;
939    
940     - mutex_lock(&emu->register_mutex);
941     snd_emux_sounds_off_all(p);
942     snd_soundfont_close_check(emu->sflist, SF_CLIENT_NO(p->chset.port));
943     snd_seq_event_port_detach(p->chset.client, p->chset.port);
944     snd_emux_dec_count(emu);
945    
946     - mutex_unlock(&emu->register_mutex);
947     return 0;
948     }
949    
950     diff --git a/sound/synth/emux/emux_seq.c b/sound/synth/emux/emux_seq.c
951     index 7778b8e19782..a0209204ae48 100644
952     --- a/sound/synth/emux/emux_seq.c
953     +++ b/sound/synth/emux/emux_seq.c
954     @@ -124,12 +124,10 @@ snd_emux_detach_seq(struct snd_emux *emu)
955     if (emu->voices)
956     snd_emux_terminate_all(emu);
957    
958     - mutex_lock(&emu->register_mutex);
959     if (emu->client >= 0) {
960     snd_seq_delete_kernel_client(emu->client);
961     emu->client = -1;
962     }
963     - mutex_unlock(&emu->register_mutex);
964     }
965    
966    
967     @@ -269,8 +267,8 @@ snd_emux_event_input(struct snd_seq_event *ev, int direct, void *private_data,
968     /*
969     * increment usage count
970     */
971     -int
972     -snd_emux_inc_count(struct snd_emux *emu)
973     +static int
974     +__snd_emux_inc_count(struct snd_emux *emu)
975     {
976     emu->used++;
977     if (!try_module_get(emu->ops.owner))
978     @@ -284,12 +282,21 @@ snd_emux_inc_count(struct snd_emux *emu)
979     return 1;
980     }
981    
982     +int snd_emux_inc_count(struct snd_emux *emu)
983     +{
984     + int ret;
985     +
986     + mutex_lock(&emu->register_mutex);
987     + ret = __snd_emux_inc_count(emu);
988     + mutex_unlock(&emu->register_mutex);
989     + return ret;
990     +}
991    
992     /*
993     * decrease usage count
994     */
995     -void
996     -snd_emux_dec_count(struct snd_emux *emu)
997     +static void
998     +__snd_emux_dec_count(struct snd_emux *emu)
999     {
1000     module_put(emu->card->module);
1001     emu->used--;
1002     @@ -298,6 +305,12 @@ snd_emux_dec_count(struct snd_emux *emu)
1003     module_put(emu->ops.owner);
1004     }
1005    
1006     +void snd_emux_dec_count(struct snd_emux *emu)
1007     +{
1008     + mutex_lock(&emu->register_mutex);
1009     + __snd_emux_dec_count(emu);
1010     + mutex_unlock(&emu->register_mutex);
1011     +}
1012    
1013     /*
1014     * Routine that is called upon a first use of a particular port
1015     @@ -317,7 +330,7 @@ snd_emux_use(void *private_data, struct snd_seq_port_subscribe *info)
1016    
1017     mutex_lock(&emu->register_mutex);
1018     snd_emux_init_port(p);
1019     - snd_emux_inc_count(emu);
1020     + __snd_emux_inc_count(emu);
1021     mutex_unlock(&emu->register_mutex);
1022     return 0;
1023     }
1024     @@ -340,7 +353,7 @@ snd_emux_unuse(void *private_data, struct snd_seq_port_subscribe *info)
1025    
1026     mutex_lock(&emu->register_mutex);
1027     snd_emux_sounds_off_all(p);
1028     - snd_emux_dec_count(emu);
1029     + __snd_emux_dec_count(emu);
1030     mutex_unlock(&emu->register_mutex);
1031     return 0;
1032     }