Gentoo Archives: gentoo-commits

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