Magellan Linux

Contents 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 - (show annotations) (download)
Thu Oct 14 15:11:06 2010 UTC (13 years, 7 months ago) by niro
File size: 16728 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 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;