]>
Commit | Line | Data |
---|---|---|
82094b55 AF |
1 | From: Greg Kroah-Hartman <gregkh@suse.de> |
2 | Subject: Linux 2.6.27.11 | |
3 | ||
4 | Upstream 2.6.27.11 release from kernel.org | |
5 | ||
6 | Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> | |
7 | ||
8 | diff --git a/Makefile b/Makefile | |
9 | index 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* | |
21 | diff --git a/arch/powerpc/lib/rheap.c b/arch/powerpc/lib/rheap.c | |
22 | index 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) | |
33 | diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c | |
34 | index 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]); | |
55 | diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c | |
56 | index 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; | |
80 | diff --git a/crypto/async_tx/async_xor.c b/crypto/async_tx/async_xor.c | |
81 | index 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; | |
104 | diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c | |
105 | index 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); | |
120 | diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c | |
121 | index 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) { | |
135 | diff --git a/drivers/dma/ioat_dma.c b/drivers/dma/ioat_dma.c | |
136 | index 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) { | |
162 | diff --git a/drivers/dma/iop-adma.c b/drivers/dma/iop-adma.c | |
163 | index 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 | } | |
198 | diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c | |
199 | index 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 | } | |
232 | diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c | |
233 | index 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 */ | |
298 | diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c | |
299 | index 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: | |
314 | diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c | |
315 | index 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]; | |
332 | diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c | |
333 | index 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) */ | |
347 | diff --git a/drivers/scsi/ibmvscsi/ibmvstgt.c b/drivers/scsi/ibmvscsi/ibmvstgt.c | |
348 | index 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: | |
382 | diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c | |
383 | index 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; | |
404 | diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h | |
405 | index 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", | |
438 | diff --git a/include/asm-parisc/tlbflush.h b/include/asm-parisc/tlbflush.h | |
439 | index 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); | |
456 | diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c | |
457 | index 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 | |
468 | diff --git a/sound/soc/omap/omap-pcm.c b/sound/soc/omap/omap-pcm.c | |
469 | index 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; |