Magellan Linux

Annotation of /trunk/kernel26-alx/patches-2.6.27-r3/0110-2.6.27.11-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1176 - (hide annotations) (download)
Thu Oct 14 15:11:06 2010 UTC (13 years, 8 months ago) by niro
File size: 16728 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 niro 1176 diff --git a/arch/powerpc/lib/rheap.c b/arch/powerpc/lib/rheap.c
2     index 29b2941..45907c1 100644
3     --- a/arch/powerpc/lib/rheap.c
4     +++ b/arch/powerpc/lib/rheap.c
5     @@ -556,6 +556,7 @@ unsigned long rh_alloc_fixed(rh_info_t * info, unsigned long start, int size, co
6     be = blk->start + blk->size;
7     if (s >= bs && e <= be)
8     break;
9     + blk = NULL;
10     }
11    
12     if (blk == NULL)
13     diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c
14     index 042fdc2..20804d0 100644
15     --- a/arch/x86/kernel/amd_iommu.c
16     +++ b/arch/x86/kernel/amd_iommu.c
17     @@ -235,7 +235,7 @@ static int iommu_map(struct protection_domain *dom,
18     u64 __pte, *pte, *page;
19    
20     bus_addr = PAGE_ALIGN(bus_addr);
21     - phys_addr = PAGE_ALIGN(bus_addr);
22     + phys_addr = PAGE_ALIGN(phys_addr);
23    
24     /* only support 512GB address spaces for now */
25     if (bus_addr > IOMMU_MAP_SIZE_L3 || !(prot & IOMMU_PROT_MASK))
26     @@ -487,7 +487,7 @@ static void dma_ops_free_pagetable(struct dma_ops_domain *dma_dom)
27     continue;
28    
29     p2 = IOMMU_PTE_PAGE(p1[i]);
30     - for (j = 0; j < 512; ++i) {
31     + for (j = 0; j < 512; ++j) {
32     if (!IOMMU_PTE_PRESENT(p2[j]))
33     continue;
34     p3 = IOMMU_PTE_PAGE(p2[j]);
35     diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c
36     index a1378c4..923e682 100644
37     --- a/arch/x86/kernel/amd_iommu_init.c
38     +++ b/arch/x86/kernel/amd_iommu_init.c
39     @@ -407,6 +407,10 @@ static u8 * __init alloc_command_buffer(struct amd_iommu *iommu)
40     memcpy_toio(iommu->mmio_base + MMIO_CMD_BUF_OFFSET,
41     &entry, sizeof(entry));
42    
43     + /* set head and tail to zero manually */
44     + writel(0x00, iommu->mmio_base + MMIO_CMD_HEAD_OFFSET);
45     + writel(0x00, iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);
46     +
47     iommu_feature_enable(iommu, CONTROL_CMDBUF_EN);
48    
49     return cmd_buf;
50     @@ -926,7 +930,8 @@ int __init amd_iommu_init(void)
51     goto free;
52    
53     /* IOMMU rlookup table - find the IOMMU for a specific device */
54     - amd_iommu_rlookup_table = (void *)__get_free_pages(GFP_KERNEL,
55     + amd_iommu_rlookup_table = (void *)__get_free_pages(
56     + GFP_KERNEL | __GFP_ZERO,
57     get_order(rlookup_table_size));
58     if (amd_iommu_rlookup_table == NULL)
59     goto free;
60     diff --git a/crypto/async_tx/async_xor.c b/crypto/async_tx/async_xor.c
61     index c029d3e..595b786 100644
62     --- a/crypto/async_tx/async_xor.c
63     +++ b/crypto/async_tx/async_xor.c
64     @@ -53,10 +53,17 @@ do_async_xor(struct dma_chan *chan, struct page *dest, struct page **src_list,
65     int xor_src_cnt;
66     dma_addr_t dma_dest;
67    
68     - dma_dest = dma_map_page(dma->dev, dest, offset, len, DMA_FROM_DEVICE);
69     - for (i = 0; i < src_cnt; i++)
70     + /* map the dest bidrectional in case it is re-used as a source */
71     + dma_dest = dma_map_page(dma->dev, dest, offset, len, DMA_BIDIRECTIONAL);
72     + for (i = 0; i < src_cnt; i++) {
73     + /* only map the dest once */
74     + if (unlikely(src_list[i] == dest)) {
75     + dma_src[i] = dma_dest;
76     + continue;
77     + }
78     dma_src[i] = dma_map_page(dma->dev, src_list[i], offset,
79     len, DMA_TO_DEVICE);
80     + }
81    
82     while (src_cnt) {
83     async_flags = flags;
84     diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
85     index 2ac91b8..ee1eb5e 100644
86     --- a/drivers/block/cciss.c
87     +++ b/drivers/block/cciss.c
88     @@ -1692,6 +1692,11 @@ static int rebuild_lun_table(ctlr_info_t *h, int first_time)
89     for (i = 0; i <= h->highest_lun; i++) {
90     int j;
91     drv_found = 0;
92     +
93     + /* skip holes in the array from already deleted drives */
94     + if (h->drv[i].raid_level == -1)
95     + continue;
96     +
97     for (j = 0; j < num_luns; j++) {
98     memcpy(&lunid, &ld_buff->LUN[j][0], 4);
99     lunid = le32_to_cpu(lunid);
100     diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
101     index dc003a3..53bb74b 100644
102     --- a/drivers/dma/dmaengine.c
103     +++ b/drivers/dma/dmaengine.c
104     @@ -388,7 +388,10 @@ int dma_async_device_register(struct dma_device *device)
105    
106     init_completion(&device->done);
107     kref_init(&device->refcount);
108     +
109     + mutex_lock(&dma_list_mutex);
110     device->dev_id = id++;
111     + mutex_unlock(&dma_list_mutex);
112    
113     /* represent channels in sysfs. Probably want devs too */
114     list_for_each_entry(chan, &device->channels, device_node) {
115     diff --git a/drivers/dma/ioat_dma.c b/drivers/dma/ioat_dma.c
116     index 3f4db54..56790f8 100644
117     --- a/drivers/dma/ioat_dma.c
118     +++ b/drivers/dma/ioat_dma.c
119     @@ -1337,10 +1337,12 @@ static void ioat_dma_start_null_desc(struct ioat_dma_chan *ioat_chan)
120     */
121     #define IOAT_TEST_SIZE 2000
122    
123     +DECLARE_COMPLETION(test_completion);
124     static void ioat_dma_test_callback(void *dma_async_param)
125     {
126     printk(KERN_ERR "ioatdma: ioat_dma_test_callback(%p)\n",
127     dma_async_param);
128     + complete(&test_completion);
129     }
130    
131     /**
132     @@ -1406,7 +1408,8 @@ static int ioat_dma_self_test(struct ioatdma_device *device)
133     goto free_resources;
134     }
135     device->common.device_issue_pending(dma_chan);
136     - msleep(1);
137     +
138     + wait_for_completion_timeout(&test_completion, msecs_to_jiffies(3000));
139    
140     if (device->common.device_is_tx_complete(dma_chan, cookie, NULL, NULL)
141     != DMA_SUCCESS) {
142     diff --git a/drivers/dma/iop-adma.c b/drivers/dma/iop-adma.c
143     index 71fba82..cbb7ab8 100644
144     --- a/drivers/dma/iop-adma.c
145     +++ b/drivers/dma/iop-adma.c
146     @@ -85,18 +85,28 @@ iop_adma_run_tx_complete_actions(struct iop_adma_desc_slot *desc,
147     enum dma_ctrl_flags flags = desc->async_tx.flags;
148     u32 src_cnt;
149     dma_addr_t addr;
150     + dma_addr_t dest;
151    
152     + src_cnt = unmap->unmap_src_cnt;
153     + dest = iop_desc_get_dest_addr(unmap, iop_chan);
154     if (!(flags & DMA_COMPL_SKIP_DEST_UNMAP)) {
155     - addr = iop_desc_get_dest_addr(unmap, iop_chan);
156     - dma_unmap_page(dev, addr, len, DMA_FROM_DEVICE);
157     + enum dma_data_direction dir;
158     +
159     + if (src_cnt > 1) /* is xor? */
160     + dir = DMA_BIDIRECTIONAL;
161     + else
162     + dir = DMA_FROM_DEVICE;
163     +
164     + dma_unmap_page(dev, dest, len, dir);
165     }
166    
167     if (!(flags & DMA_COMPL_SKIP_SRC_UNMAP)) {
168     - src_cnt = unmap->unmap_src_cnt;
169     while (src_cnt--) {
170     addr = iop_desc_get_src_addr(unmap,
171     iop_chan,
172     src_cnt);
173     + if (addr == dest)
174     + continue;
175     dma_unmap_page(dev, addr, len,
176     DMA_TO_DEVICE);
177     }
178     diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c
179     index 0328da0..bcda174 100644
180     --- a/drivers/dma/mv_xor.c
181     +++ b/drivers/dma/mv_xor.c
182     @@ -311,17 +311,26 @@ mv_xor_run_tx_complete_actions(struct mv_xor_desc_slot *desc,
183     enum dma_ctrl_flags flags = desc->async_tx.flags;
184     u32 src_cnt;
185     dma_addr_t addr;
186     + dma_addr_t dest;
187    
188     + src_cnt = unmap->unmap_src_cnt;
189     + dest = mv_desc_get_dest_addr(unmap);
190     if (!(flags & DMA_COMPL_SKIP_DEST_UNMAP)) {
191     - addr = mv_desc_get_dest_addr(unmap);
192     - dma_unmap_page(dev, addr, len, DMA_FROM_DEVICE);
193     + enum dma_data_direction dir;
194     +
195     + if (src_cnt > 1) /* is xor ? */
196     + dir = DMA_BIDIRECTIONAL;
197     + else
198     + dir = DMA_FROM_DEVICE;
199     + dma_unmap_page(dev, dest, len, dir);
200     }
201    
202     if (!(flags & DMA_COMPL_SKIP_SRC_UNMAP)) {
203     - src_cnt = unmap->unmap_src_cnt;
204     while (src_cnt--) {
205     addr = mv_desc_get_src_addr(unmap,
206     src_cnt);
207     + if (addr == dest)
208     + continue;
209     dma_unmap_page(dev, addr, len,
210     DMA_TO_DEVICE);
211     }
212     diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
213     index ac89a5d..ab7c8e4 100644
214     --- a/drivers/md/bitmap.c
215     +++ b/drivers/md/bitmap.c
216     @@ -208,16 +208,19 @@ static void bitmap_checkfree(struct bitmap *bitmap, unsigned long page)
217     */
218    
219     /* IO operations when bitmap is stored near all superblocks */
220     -static struct page *read_sb_page(mddev_t *mddev, long offset, unsigned long index)
221     +static struct page *read_sb_page(mddev_t *mddev, long offset,
222     + struct page *page,
223     + unsigned long index, int size)
224     {
225     /* choose a good rdev and read the page from there */
226    
227     mdk_rdev_t *rdev;
228     struct list_head *tmp;
229     - struct page *page = alloc_page(GFP_KERNEL);
230     sector_t target;
231    
232     if (!page)
233     + page = alloc_page(GFP_KERNEL);
234     + if (!page)
235     return ERR_PTR(-ENOMEM);
236    
237     rdev_for_each(rdev, tmp, mddev) {
238     @@ -227,7 +230,9 @@ static struct page *read_sb_page(mddev_t *mddev, long offset, unsigned long inde
239    
240     target = rdev->sb_start + offset + index * (PAGE_SIZE/512);
241    
242     - if (sync_page_io(rdev->bdev, target, PAGE_SIZE, page, READ)) {
243     + if (sync_page_io(rdev->bdev, target,
244     + roundup(size, bdev_hardsect_size(rdev->bdev)),
245     + page, READ)) {
246     page->index = index;
247     attach_page_buffers(page, NULL); /* so that free_buffer will
248     * quietly no-op */
249     @@ -544,7 +549,9 @@ static int bitmap_read_sb(struct bitmap *bitmap)
250    
251     bitmap->sb_page = read_page(bitmap->file, 0, bitmap, bytes);
252     } else {
253     - bitmap->sb_page = read_sb_page(bitmap->mddev, bitmap->offset, 0);
254     + bitmap->sb_page = read_sb_page(bitmap->mddev, bitmap->offset,
255     + NULL,
256     + 0, sizeof(bitmap_super_t));
257     }
258     if (IS_ERR(bitmap->sb_page)) {
259     err = PTR_ERR(bitmap->sb_page);
260     @@ -957,11 +964,16 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start)
261     */
262     page = bitmap->sb_page;
263     offset = sizeof(bitmap_super_t);
264     + read_sb_page(bitmap->mddev, bitmap->offset,
265     + page,
266     + index, count);
267     } else if (file) {
268     page = read_page(file, index, bitmap, count);
269     offset = 0;
270     } else {
271     - page = read_sb_page(bitmap->mddev, bitmap->offset, index);
272     + page = read_sb_page(bitmap->mddev, bitmap->offset,
273     + NULL,
274     + index, count);
275     offset = 0;
276     }
277     if (IS_ERR(page)) { /* read error */
278     diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c
279     index 1d2ef8f..5a40f2d 100644
280     --- a/drivers/net/starfire.c
281     +++ b/drivers/net/starfire.c
282     @@ -1509,6 +1509,11 @@ static int __netdev_rx(struct net_device *dev, int *quota)
283     desc->status = 0;
284     np->rx_done = (np->rx_done + 1) % DONE_Q_SIZE;
285     }
286     +
287     + if (*quota == 0) { /* out of rx quota */
288     + retcode = 1;
289     + goto out;
290     + }
291     writew(np->rx_done, np->base + CompletionQConsumerIdx);
292    
293     out:
294     diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
295     index 78b1a7a..67da11b 100644
296     --- a/drivers/net/wireless/iwlwifi/iwl-tx.c
297     +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
298     @@ -1192,10 +1192,9 @@ void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb)
299     /* If a Tx command is being handled and it isn't in the actual
300     * command queue then there a command routing bug has been introduced
301     * in the queue management code. */
302     - if (txq_id != IWL_CMD_QUEUE_NUM)
303     - IWL_ERROR("Error wrong command queue %d command id 0x%X\n",
304     - txq_id, pkt->hdr.cmd);
305     - BUG_ON(txq_id != IWL_CMD_QUEUE_NUM);
306     + if (WARN(txq_id != IWL_CMD_QUEUE_NUM,
307     + "wrong command queue %d, command id 0x%X\n", txq_id, pkt->hdr.cmd))
308     + return;
309    
310     cmd_index = get_cmd_index(&priv->txq[IWL_CMD_QUEUE_NUM].q, index, huge);
311     cmd = priv->txq[IWL_CMD_QUEUE_NUM].cmd[cmd_index];
312     diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
313     index 9aa301c..f90fbcd 100644
314     --- a/drivers/scsi/aacraid/linit.c
315     +++ b/drivers/scsi/aacraid/linit.c
316     @@ -175,8 +175,8 @@ static struct aac_driver_ident aac_drivers[] = {
317     { aac_rx_init, "percraid", "DELL ", "PERCRAID ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* PERC 3/Di (Boxster/PERC3DiB) */
318     { aac_rx_init, "aacraid", "ADAPTEC ", "catapult ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* catapult */
319     { aac_rx_init, "aacraid", "ADAPTEC ", "tomcat ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* tomcat */
320     - { aac_rx_init, "aacraid", "ADAPTEC ", "Adaptec 2120S ", 1, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Adaptec 2120S (Crusader) */
321     - { aac_rx_init, "aacraid", "ADAPTEC ", "Adaptec 2200S ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Adaptec 2200S (Vulcan) */
322     + { aac_rx_init, "aacraid", "ADAPTEC ", "Adaptec 2120S ", 1, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Adaptec 2120S (Crusader) */
323     + { aac_rx_init, "aacraid", "ADAPTEC ", "Adaptec 2200S ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Adaptec 2200S (Vulcan) */
324     { aac_rx_init, "aacraid", "ADAPTEC ", "Adaptec 2200S ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Adaptec 2200S (Vulcan-2m) */
325     { aac_rx_init, "aacraid", "Legend ", "Legend S220 ", 1, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Legend S220 (Legend Crusader) */
326     { aac_rx_init, "aacraid", "Legend ", "Legend S230 ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Legend S230 (Legend Vulcan) */
327     diff --git a/drivers/scsi/ibmvscsi/ibmvstgt.c b/drivers/scsi/ibmvscsi/ibmvstgt.c
328     index 2a5b29d..e2dd6a4 100644
329     --- a/drivers/scsi/ibmvscsi/ibmvstgt.c
330     +++ b/drivers/scsi/ibmvscsi/ibmvstgt.c
331     @@ -864,21 +864,23 @@ static int ibmvstgt_probe(struct vio_dev *dev, const struct vio_device_id *id)
332    
333     INIT_WORK(&vport->crq_work, handle_crq);
334    
335     - err = crq_queue_create(&vport->crq_queue, target);
336     + err = scsi_add_host(shost, target->dev);
337     if (err)
338     goto free_srp_target;
339    
340     - err = scsi_add_host(shost, target->dev);
341     + err = scsi_tgt_alloc_queue(shost);
342     if (err)
343     - goto destroy_queue;
344     + goto remove_host;
345    
346     - err = scsi_tgt_alloc_queue(shost);
347     + err = crq_queue_create(&vport->crq_queue, target);
348     if (err)
349     - goto destroy_queue;
350     + goto free_queue;
351    
352     return 0;
353     -destroy_queue:
354     - crq_queue_destroy(target);
355     +free_queue:
356     + scsi_tgt_free_queue(shost);
357     +remove_host:
358     + scsi_remove_host(shost);
359     free_srp_target:
360     srp_target_free(target);
361     put_host:
362     diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c
363     index 428b599..3a8bb53 100644
364     --- a/drivers/usb/gadget/f_rndis.c
365     +++ b/drivers/usb/gadget/f_rndis.c
366     @@ -651,6 +651,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
367     fs_in_desc.bEndpointAddress;
368     hs_out_desc.bEndpointAddress =
369     fs_out_desc.bEndpointAddress;
370     + hs_notify_desc.bEndpointAddress =
371     + fs_notify_desc.bEndpointAddress;
372    
373     /* copy descriptors, and track endpoint copies */
374     f->hs_descriptors = usb_copy_descriptors(eth_hs_function);
375     @@ -662,6 +664,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
376     f->hs_descriptors, &hs_in_desc);
377     rndis->hs.out = usb_find_endpoint(eth_hs_function,
378     f->hs_descriptors, &hs_out_desc);
379     + rndis->hs.notify = usb_find_endpoint(eth_hs_function,
380     + f->hs_descriptors, &hs_notify_desc);
381     }
382    
383     rndis->port.open = rndis_open;
384     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
385     index e61f2bf..e16d547 100644
386     --- a/drivers/usb/storage/unusual_devs.h
387     +++ b/drivers/usb/storage/unusual_devs.h
388     @@ -168,7 +168,7 @@ UNUSUAL_DEV( 0x0421, 0x005d, 0x0001, 0x0600,
389     US_FL_FIX_CAPACITY ),
390    
391     /* Patch for Nokia 5310 capacity */
392     -UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0591,
393     +UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0701,
394     "Nokia",
395     "5310",
396     US_SC_DEVICE, US_PR_DEVICE, NULL,
397     @@ -253,6 +253,20 @@ UNUSUAL_DEV( 0x0421, 0x04fa, 0x0550, 0x0660,
398     US_SC_DEVICE, US_PR_DEVICE, NULL,
399     US_FL_FIX_CAPACITY ),
400    
401     +/* Reported by Ozan Sener <themgzzy@gmail.com> */
402     +UNUSUAL_DEV( 0x0421, 0x0060, 0x0551, 0x0551,
403     + "Nokia",
404     + "3500c",
405     + US_SC_DEVICE, US_PR_DEVICE, NULL,
406     + US_FL_FIX_CAPACITY ),
407     +
408     +/* Reported by CSECSY Laszlo <boobaa@frugalware.org> */
409     +UNUSUAL_DEV( 0x0421, 0x0063, 0x0001, 0x0601,
410     + "Nokia",
411     + "Nokia 3109c",
412     + US_SC_DEVICE, US_PR_DEVICE, NULL,
413     + US_FL_FIX_CAPACITY ),
414     +
415     /* Patch for Nokia 5310 capacity */
416     UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0591,
417     "Nokia",
418     diff --git a/include/asm-parisc/tlbflush.h b/include/asm-parisc/tlbflush.h
419     index b72ec66..1f6fd4f 100644
420     --- a/include/asm-parisc/tlbflush.h
421     +++ b/include/asm-parisc/tlbflush.h
422     @@ -44,9 +44,12 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
423     {
424     BUG_ON(mm == &init_mm); /* Should never happen */
425    
426     -#ifdef CONFIG_SMP
427     +#if 1 || defined(CONFIG_SMP)
428     flush_tlb_all();
429     #else
430     + /* FIXME: currently broken, causing space id and protection ids
431     + * to go out of sync, resulting in faults on userspace accesses.
432     + */
433     if (mm) {
434     if (mm->context != 0)
435     free_sid(mm->context);
436     diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
437     index 1d96aed..fdef553 100644
438     --- a/sound/pci/hda/patch_sigmatel.c
439     +++ b/sound/pci/hda/patch_sigmatel.c
440     @@ -638,6 +638,7 @@ static struct hda_verb stac92hd71bxx_core_init[] = {
441     { 0x0a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
442     { 0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
443     { 0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
444     + {}
445     };
446    
447     #define HD_DISABLE_PORTF 3
448     diff --git a/sound/soc/omap/omap-pcm.c b/sound/soc/omap/omap-pcm.c
449     index 690bfea..5e023ba 100644
450     --- a/sound/soc/omap/omap-pcm.c
451     +++ b/sound/soc/omap/omap-pcm.c
452     @@ -231,7 +231,7 @@ static int omap_pcm_open(struct snd_pcm_substream *substream)
453     if (ret < 0)
454     goto out;
455    
456     - prtd = kzalloc(sizeof(prtd), GFP_KERNEL);
457     + prtd = kzalloc(sizeof(*prtd), GFP_KERNEL);
458     if (prtd == NULL) {
459     ret = -ENOMEM;
460     goto out;