Contents of /trunk/kernel26-alx/patches-2.6.27-r3/0110-2.6.27.11-all-fixes.patch
Parent Directory | Revision Log
Revision 1176 -
(show annotations)
(download)
Thu Oct 14 15:11:06 2010 UTC (14 years ago) by niro
File size: 16728 byte(s)
Thu Oct 14 15:11:06 2010 UTC (14 years 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; |