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