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