Annotation of /trunk/kernel26-alx/patches-2.6.27-r3/0148-2.6.27.49-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: 18086 byte(s)
Thu Oct 14 15:11:06 2010 UTC (13 years, 11 months ago) by niro
File size: 18086 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 | niro | 1176 | diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c |
2 | index 34bc987..d8a4dc6 100644 | ||
3 | --- a/arch/x86/kernel/pci-calgary_64.c | ||
4 | +++ b/arch/x86/kernel/pci-calgary_64.c | ||
5 | @@ -102,11 +102,16 @@ int use_calgary __read_mostly = 0; | ||
6 | #define PMR_SOFTSTOPFAULT 0x40000000 | ||
7 | #define PMR_HARDSTOP 0x20000000 | ||
8 | |||
9 | -#define MAX_NUM_OF_PHBS 8 /* how many PHBs in total? */ | ||
10 | -#define MAX_NUM_CHASSIS 8 /* max number of chassis */ | ||
11 | -/* MAX_PHB_BUS_NUM is the maximal possible dev->bus->number */ | ||
12 | -#define MAX_PHB_BUS_NUM (MAX_NUM_OF_PHBS * MAX_NUM_CHASSIS * 2) | ||
13 | -#define PHBS_PER_CALGARY 4 | ||
14 | +/* | ||
15 | + * The maximum PHB bus number. | ||
16 | + * x3950M2 (rare): 8 chassis, 48 PHBs per chassis = 384 | ||
17 | + * x3950M2: 4 chassis, 48 PHBs per chassis = 192 | ||
18 | + * x3950 (PCIE): 8 chassis, 32 PHBs per chassis = 256 | ||
19 | + * x3950 (PCIX): 8 chassis, 16 PHBs per chassis = 128 | ||
20 | + */ | ||
21 | +#define MAX_PHB_BUS_NUM 256 | ||
22 | + | ||
23 | +#define PHBS_PER_CALGARY 4 | ||
24 | |||
25 | /* register offsets in Calgary's internal register space */ | ||
26 | static const unsigned long tar_offsets[] = { | ||
27 | @@ -1092,8 +1097,6 @@ static int __init calgary_init_one(struct pci_dev *dev) | ||
28 | struct iommu_table *tbl; | ||
29 | int ret; | ||
30 | |||
31 | - BUG_ON(dev->bus->number >= MAX_PHB_BUS_NUM); | ||
32 | - | ||
33 | bbar = busno_to_bbar(dev->bus->number); | ||
34 | ret = calgary_setup_tar(dev, bbar); | ||
35 | if (ret) | ||
36 | diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c | ||
37 | index 7495c52..e144ad8 100644 | ||
38 | --- a/drivers/char/agp/amd64-agp.c | ||
39 | +++ b/drivers/char/agp/amd64-agp.c | ||
40 | @@ -491,6 +491,10 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev, | ||
41 | u8 cap_ptr; | ||
42 | int err; | ||
43 | |||
44 | + /* The Highlander principle */ | ||
45 | + if (agp_bridges_found) | ||
46 | + return -ENODEV; | ||
47 | + | ||
48 | cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); | ||
49 | if (!cap_ptr) | ||
50 | return -ENODEV; | ||
51 | @@ -554,6 +558,8 @@ static void __devexit agp_amd64_remove(struct pci_dev *pdev) | ||
52 | amd64_aperture_sizes[bridge->aperture_size_idx].size); | ||
53 | agp_remove_bridge(bridge); | ||
54 | agp_put_bridge(bridge); | ||
55 | + | ||
56 | + agp_bridges_found--; | ||
57 | } | ||
58 | |||
59 | #ifdef CONFIG_PM | ||
60 | @@ -701,6 +707,11 @@ static struct pci_device_id agp_amd64_pci_table[] = { | ||
61 | |||
62 | MODULE_DEVICE_TABLE(pci, agp_amd64_pci_table); | ||
63 | |||
64 | +static DEFINE_PCI_DEVICE_TABLE(agp_amd64_pci_promisc_table) = { | ||
65 | + { PCI_DEVICE_CLASS(0, 0) }, | ||
66 | + { } | ||
67 | +}; | ||
68 | + | ||
69 | static struct pci_driver agp_amd64_pci_driver = { | ||
70 | .name = "agpgart-amd64", | ||
71 | .id_table = agp_amd64_pci_table, | ||
72 | @@ -725,7 +736,6 @@ int __init agp_amd64_init(void) | ||
73 | return err; | ||
74 | |||
75 | if (agp_bridges_found == 0) { | ||
76 | - struct pci_dev *dev; | ||
77 | if (!agp_try_unsupported && !agp_try_unsupported_boot) { | ||
78 | printk(KERN_INFO PFX "No supported AGP bridge found.\n"); | ||
79 | #ifdef MODULE | ||
80 | @@ -741,17 +751,10 @@ int __init agp_amd64_init(void) | ||
81 | return -ENODEV; | ||
82 | |||
83 | /* Look for any AGP bridge */ | ||
84 | - dev = NULL; | ||
85 | - err = -ENODEV; | ||
86 | - for_each_pci_dev(dev) { | ||
87 | - if (!pci_find_capability(dev, PCI_CAP_ID_AGP)) | ||
88 | - continue; | ||
89 | - /* Only one bridge supported right now */ | ||
90 | - if (agp_amd64_probe(dev, NULL) == 0) { | ||
91 | - err = 0; | ||
92 | - break; | ||
93 | - } | ||
94 | - } | ||
95 | + agp_amd64_pci_driver.id_table = agp_amd64_pci_promisc_table; | ||
96 | + err = driver_attach(&agp_amd64_pci_driver.driver); | ||
97 | + if (err == 0 && agp_bridges_found == 0) | ||
98 | + err = -ENODEV; | ||
99 | } | ||
100 | return err; | ||
101 | } | ||
102 | diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c | ||
103 | index 2b8f439..a7f98c9 100644 | ||
104 | --- a/drivers/hwmon/coretemp.c | ||
105 | +++ b/drivers/hwmon/coretemp.c | ||
106 | @@ -52,6 +52,7 @@ struct coretemp_data { | ||
107 | struct mutex update_lock; | ||
108 | const char *name; | ||
109 | u32 id; | ||
110 | + u16 core_id; | ||
111 | char valid; /* zero until following fields are valid */ | ||
112 | unsigned long last_updated; /* in jiffies */ | ||
113 | int temp; | ||
114 | @@ -74,7 +75,7 @@ static ssize_t show_name(struct device *dev, struct device_attribute | ||
115 | if (attr->index == SHOW_NAME) | ||
116 | ret = sprintf(buf, "%s\n", data->name); | ||
117 | else /* show label */ | ||
118 | - ret = sprintf(buf, "Core %d\n", data->id); | ||
119 | + ret = sprintf(buf, "Core %d\n", data->core_id); | ||
120 | return ret; | ||
121 | } | ||
122 | |||
123 | @@ -216,6 +217,9 @@ static int __devinit coretemp_probe(struct platform_device *pdev) | ||
124 | } | ||
125 | |||
126 | data->id = pdev->id; | ||
127 | +#ifdef CONFIG_SMP | ||
128 | + data->core_id = c->cpu_core_id; | ||
129 | +#endif | ||
130 | data->name = "coretemp"; | ||
131 | mutex_init(&data->update_lock); | ||
132 | |||
133 | @@ -313,6 +317,10 @@ struct pdev_entry { | ||
134 | struct list_head list; | ||
135 | struct platform_device *pdev; | ||
136 | unsigned int cpu; | ||
137 | +#ifdef CONFIG_SMP | ||
138 | + u16 phys_proc_id; | ||
139 | + u16 cpu_core_id; | ||
140 | +#endif | ||
141 | }; | ||
142 | |||
143 | static LIST_HEAD(pdev_list); | ||
144 | @@ -323,6 +331,22 @@ static int __cpuinit coretemp_device_add(unsigned int cpu) | ||
145 | int err; | ||
146 | struct platform_device *pdev; | ||
147 | struct pdev_entry *pdev_entry; | ||
148 | +#ifdef CONFIG_SMP | ||
149 | + struct cpuinfo_x86 *c = &cpu_data(cpu); | ||
150 | +#endif | ||
151 | + | ||
152 | + mutex_lock(&pdev_list_mutex); | ||
153 | + | ||
154 | +#ifdef CONFIG_SMP | ||
155 | + /* Skip second HT entry of each core */ | ||
156 | + list_for_each_entry(pdev_entry, &pdev_list, list) { | ||
157 | + if (c->phys_proc_id == pdev_entry->phys_proc_id && | ||
158 | + c->cpu_core_id == pdev_entry->cpu_core_id) { | ||
159 | + err = 0; /* Not an error */ | ||
160 | + goto exit; | ||
161 | + } | ||
162 | + } | ||
163 | +#endif | ||
164 | |||
165 | pdev = platform_device_alloc(DRVNAME, cpu); | ||
166 | if (!pdev) { | ||
167 | @@ -346,7 +370,10 @@ static int __cpuinit coretemp_device_add(unsigned int cpu) | ||
168 | |||
169 | pdev_entry->pdev = pdev; | ||
170 | pdev_entry->cpu = cpu; | ||
171 | - mutex_lock(&pdev_list_mutex); | ||
172 | +#ifdef CONFIG_SMP | ||
173 | + pdev_entry->phys_proc_id = c->phys_proc_id; | ||
174 | + pdev_entry->cpu_core_id = c->cpu_core_id; | ||
175 | +#endif | ||
176 | list_add_tail(&pdev_entry->list, &pdev_list); | ||
177 | mutex_unlock(&pdev_list_mutex); | ||
178 | |||
179 | @@ -357,6 +384,7 @@ exit_device_free: | ||
180 | exit_device_put: | ||
181 | platform_device_put(pdev); | ||
182 | exit: | ||
183 | + mutex_unlock(&pdev_list_mutex); | ||
184 | return err; | ||
185 | } | ||
186 | |||
187 | diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c | ||
188 | index e9ca3cb..fb97c42 100644 | ||
189 | --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c | ||
190 | +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c | ||
191 | @@ -1158,7 +1158,7 @@ static ssize_t create_child(struct device *dev, | ||
192 | |||
193 | return ret ? ret : count; | ||
194 | } | ||
195 | -static DEVICE_ATTR(create_child, S_IWUGO, NULL, create_child); | ||
196 | +static DEVICE_ATTR(create_child, S_IWUSR, NULL, create_child); | ||
197 | |||
198 | static ssize_t delete_child(struct device *dev, | ||
199 | struct device_attribute *attr, | ||
200 | @@ -1178,7 +1178,7 @@ static ssize_t delete_child(struct device *dev, | ||
201 | return ret ? ret : count; | ||
202 | |||
203 | } | ||
204 | -static DEVICE_ATTR(delete_child, S_IWUGO, NULL, delete_child); | ||
205 | +static DEVICE_ATTR(delete_child, S_IWUSR, NULL, delete_child); | ||
206 | |||
207 | int ipoib_add_pkey_attr(struct net_device *dev) | ||
208 | { | ||
209 | diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c | ||
210 | index 598d2e9..b91eb58 100644 | ||
211 | --- a/drivers/net/bonding/bond_main.c | ||
212 | +++ b/drivers/net/bonding/bond_main.c | ||
213 | @@ -1705,6 +1705,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) | ||
214 | case BOND_MODE_ALB: | ||
215 | new_slave->state = BOND_STATE_ACTIVE; | ||
216 | bond_set_slave_inactive_flags(new_slave); | ||
217 | + bond_select_active_slave(bond); | ||
218 | break; | ||
219 | default: | ||
220 | dprintk("This slave is always active in trunk mode\n"); | ||
221 | diff --git a/drivers/net/cpmac.c b/drivers/net/cpmac.c | ||
222 | index ec6b0af..5cbdd37 100644 | ||
223 | --- a/drivers/net/cpmac.c | ||
224 | +++ b/drivers/net/cpmac.c | ||
225 | @@ -1174,7 +1174,8 @@ static int __devinit cpmac_probe(struct platform_device *pdev) | ||
226 | if (netif_msg_drv(priv)) | ||
227 | printk(KERN_ERR "%s: Could not attach to PHY\n", | ||
228 | dev->name); | ||
229 | - return PTR_ERR(priv->phy); | ||
230 | + rc = PTR_ERR(priv->phy); | ||
231 | + goto fail; | ||
232 | } | ||
233 | |||
234 | if ((rc = register_netdev(dev))) { | ||
235 | diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c | ||
236 | index aa9ff46..50e32df 100644 | ||
237 | --- a/drivers/net/sky2.c | ||
238 | +++ b/drivers/net/sky2.c | ||
239 | @@ -688,11 +688,24 @@ static void sky2_phy_power_down(struct sky2_hw *hw, unsigned port) | ||
240 | sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF); | ||
241 | } | ||
242 | |||
243 | +/* Enable Rx/Tx */ | ||
244 | +static void sky2_enable_rx_tx(struct sky2_port *sky2) | ||
245 | +{ | ||
246 | + struct sky2_hw *hw = sky2->hw; | ||
247 | + unsigned port = sky2->port; | ||
248 | + u16 reg; | ||
249 | + | ||
250 | + reg = gma_read16(hw, port, GM_GP_CTRL); | ||
251 | + reg |= GM_GPCR_RX_ENA | GM_GPCR_TX_ENA; | ||
252 | + gma_write16(hw, port, GM_GP_CTRL, reg); | ||
253 | +} | ||
254 | + | ||
255 | /* Force a renegotiation */ | ||
256 | static void sky2_phy_reinit(struct sky2_port *sky2) | ||
257 | { | ||
258 | spin_lock_bh(&sky2->phy_lock); | ||
259 | sky2_phy_init(sky2->hw, sky2->port); | ||
260 | + sky2_enable_rx_tx(sky2); | ||
261 | spin_unlock_bh(&sky2->phy_lock); | ||
262 | } | ||
263 | |||
264 | @@ -1862,7 +1875,6 @@ static void sky2_link_up(struct sky2_port *sky2) | ||
265 | { | ||
266 | struct sky2_hw *hw = sky2->hw; | ||
267 | unsigned port = sky2->port; | ||
268 | - u16 reg; | ||
269 | static const char *fc_name[] = { | ||
270 | [FC_NONE] = "none", | ||
271 | [FC_TX] = "tx", | ||
272 | @@ -1870,10 +1882,7 @@ static void sky2_link_up(struct sky2_port *sky2) | ||
273 | [FC_BOTH] = "both", | ||
274 | }; | ||
275 | |||
276 | - /* enable Rx/Tx */ | ||
277 | - reg = gma_read16(hw, port, GM_GP_CTRL); | ||
278 | - reg |= GM_GPCR_RX_ENA | GM_GPCR_TX_ENA; | ||
279 | - gma_write16(hw, port, GM_GP_CTRL, reg); | ||
280 | + sky2_enable_rx_tx(sky2); | ||
281 | |||
282 | gm_phy_write(hw, port, PHY_MARV_INT_MASK, PHY_M_DEF_MSK); | ||
283 | |||
284 | diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c | ||
285 | index 3b4e55c..055e991 100644 | ||
286 | --- a/drivers/net/wireless/hostap/hostap_cs.c | ||
287 | +++ b/drivers/net/wireless/hostap/hostap_cs.c | ||
288 | @@ -557,6 +557,7 @@ static int prism2_config(struct pcmcia_device *link) | ||
289 | config_info_t conf; | ||
290 | cistpl_cftable_entry_t dflt = { 0 }; | ||
291 | struct hostap_cs_priv *hw_priv; | ||
292 | + unsigned long flags; | ||
293 | |||
294 | PDEBUG(DEBUG_FLOW, "prism2_config()\n"); | ||
295 | |||
296 | @@ -688,6 +689,12 @@ static int prism2_config(struct pcmcia_device *link) | ||
297 | link->dev_node = &hw_priv->node; | ||
298 | |||
299 | /* | ||
300 | + * Make sure the IRQ handler cannot proceed until at least | ||
301 | + * dev->base_addr is initialized. | ||
302 | + */ | ||
303 | + spin_lock_irqsave(&local->irq_init_lock, flags); | ||
304 | + | ||
305 | + /* | ||
306 | * Allocate an interrupt line. Note that this does not assign a | ||
307 | * handler to the interrupt, unless the 'Handler' member of the | ||
308 | * irq structure is initialized. | ||
309 | @@ -712,6 +719,8 @@ static int prism2_config(struct pcmcia_device *link) | ||
310 | dev->irq = link->irq.AssignedIRQ; | ||
311 | dev->base_addr = link->io.BasePort1; | ||
312 | |||
313 | + spin_unlock_irqrestore(&local->irq_init_lock, flags); | ||
314 | + | ||
315 | /* Finally, report what we've done */ | ||
316 | printk(KERN_INFO "%s: index 0x%02x: ", | ||
317 | dev_info, link->conf.ConfigIndex); | ||
318 | @@ -742,6 +751,7 @@ static int prism2_config(struct pcmcia_device *link) | ||
319 | return ret; | ||
320 | |||
321 | cs_failed: | ||
322 | + spin_unlock_irqrestore(&local->irq_init_lock, flags); | ||
323 | cs_error(link, last_fn, last_ret); | ||
324 | |||
325 | failed: | ||
326 | diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c | ||
327 | index 3153fe9..04b890f 100644 | ||
328 | --- a/drivers/net/wireless/hostap/hostap_hw.c | ||
329 | +++ b/drivers/net/wireless/hostap/hostap_hw.c | ||
330 | @@ -2631,6 +2631,18 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id) | ||
331 | iface = netdev_priv(dev); | ||
332 | local = iface->local; | ||
333 | |||
334 | + /* Detect early interrupt before driver is fully configued */ | ||
335 | + spin_lock(&local->irq_init_lock); | ||
336 | + if (!dev->base_addr) { | ||
337 | + if (net_ratelimit()) { | ||
338 | + printk(KERN_DEBUG "%s: Interrupt, but dev not configured\n", | ||
339 | + dev->name); | ||
340 | + } | ||
341 | + spin_unlock(&local->irq_init_lock); | ||
342 | + return IRQ_HANDLED; | ||
343 | + } | ||
344 | + spin_unlock(&local->irq_init_lock); | ||
345 | + | ||
346 | prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0); | ||
347 | |||
348 | if (local->func->card_present && !local->func->card_present(local)) { | ||
349 | @@ -3187,6 +3199,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx, | ||
350 | spin_lock_init(&local->cmdlock); | ||
351 | spin_lock_init(&local->baplock); | ||
352 | spin_lock_init(&local->lock); | ||
353 | + spin_lock_init(&local->irq_init_lock); | ||
354 | mutex_init(&local->rid_bap_mtx); | ||
355 | |||
356 | if (card_idx < 0 || card_idx >= MAX_PARM_DEVICES) | ||
357 | diff --git a/drivers/net/wireless/hostap/hostap_wlan.h b/drivers/net/wireless/hostap/hostap_wlan.h | ||
358 | index a68f97c..1c986f2 100644 | ||
359 | --- a/drivers/net/wireless/hostap/hostap_wlan.h | ||
360 | +++ b/drivers/net/wireless/hostap/hostap_wlan.h | ||
361 | @@ -653,7 +653,7 @@ struct local_info { | ||
362 | rwlock_t iface_lock; /* hostap_interfaces read lock; use write lock | ||
363 | * when removing entries from the list. | ||
364 | * TX and RX paths can use read lock. */ | ||
365 | - spinlock_t cmdlock, baplock, lock; | ||
366 | + spinlock_t cmdlock, baplock, lock, irq_init_lock; | ||
367 | struct mutex rid_bap_mtx; | ||
368 | u16 infofid; /* MAC buffer id for info frame */ | ||
369 | /* txfid, intransmitfid, next_txtid, and next_alloc are protected by | ||
370 | diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c | ||
371 | index a735526..a7b7da1 100644 | ||
372 | --- a/drivers/scsi/aacraid/commctrl.c | ||
373 | +++ b/drivers/scsi/aacraid/commctrl.c | ||
374 | @@ -645,9 +645,9 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | ||
375 | /* Does this really need to be GFP_DMA? */ | ||
376 | p = kmalloc(usg->sg[i].count,GFP_KERNEL|__GFP_DMA); | ||
377 | if(!p) { | ||
378 | - kfree (usg); | ||
379 | - dprintk((KERN_DEBUG"aacraid: Could not allocate SG buffer - size = %d buffer number %d of %d\n", | ||
380 | + dprintk((KERN_DEBUG "aacraid: Could not allocate SG buffer - size = %d buffer number %d of %d\n", | ||
381 | usg->sg[i].count,i,usg->count)); | ||
382 | + kfree(usg); | ||
383 | rcode = -ENOMEM; | ||
384 | goto cleanup; | ||
385 | } | ||
386 | diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c | ||
387 | index cff0c53..31a1668 100644 | ||
388 | --- a/fs/cifs/cifssmb.c | ||
389 | +++ b/fs/cifs/cifssmb.c | ||
390 | @@ -1594,6 +1594,14 @@ CIFSSMBWrite(const int xid, struct cifsTconInfo *tcon, | ||
391 | *nbytes = le16_to_cpu(pSMBr->CountHigh); | ||
392 | *nbytes = (*nbytes) << 16; | ||
393 | *nbytes += le16_to_cpu(pSMBr->Count); | ||
394 | + | ||
395 | + /* | ||
396 | + * Mask off high 16 bits when bytes written as returned by the | ||
397 | + * server is greater than bytes requested by the client. Some | ||
398 | + * OS/2 servers are known to set incorrect CountHigh values. | ||
399 | + */ | ||
400 | + if (*nbytes > count) | ||
401 | + *nbytes &= 0xFFFF; | ||
402 | } | ||
403 | |||
404 | cifs_buf_release(pSMB); | ||
405 | @@ -1679,6 +1687,14 @@ CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon, | ||
406 | *nbytes = le16_to_cpu(pSMBr->CountHigh); | ||
407 | *nbytes = (*nbytes) << 16; | ||
408 | *nbytes += le16_to_cpu(pSMBr->Count); | ||
409 | + | ||
410 | + /* | ||
411 | + * Mask off high 16 bits when bytes written as returned by the | ||
412 | + * server is greater than bytes requested by the client. OS/2 | ||
413 | + * servers are known to set incorrect CountHigh values. | ||
414 | + */ | ||
415 | + if (*nbytes > count) | ||
416 | + *nbytes &= 0xFFFF; | ||
417 | } | ||
418 | |||
419 | /* cifs_small_buf_release(pSMB); */ /* Freed earlier now in SendReceive2 */ | ||
420 | diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c | ||
421 | index 3890cc2..52c72ea 100644 | ||
422 | --- a/fs/cifs/sess.c | ||
423 | +++ b/fs/cifs/sess.c | ||
424 | @@ -482,15 +482,7 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, int first_time, | ||
425 | |||
426 | /* calculate session key */ | ||
427 | setup_ntlmv2_rsp(ses, v2_sess_key, nls_cp); | ||
428 | - if (first_time) /* should this be moved into common code | ||
429 | - with similar ntlmv2 path? */ | ||
430 | - /* cifs_calculate_ntlmv2_mac_key(ses->server->mac_signing_key, | ||
431 | - response BB FIXME, v2_sess_key); */ | ||
432 | - | ||
433 | - /* copy session key */ | ||
434 | - | ||
435 | - /* memcpy(bcc_ptr, (char *)ntlm_session_key,LM2_SESS_KEY_SIZE); | ||
436 | - bcc_ptr += LM2_SESS_KEY_SIZE; */ | ||
437 | + /* FIXME: calculate MAC key */ | ||
438 | memcpy(bcc_ptr, (char *)v2_sess_key, | ||
439 | sizeof(struct ntlmv2_resp)); | ||
440 | bcc_ptr += sizeof(struct ntlmv2_resp); | ||
441 | diff --git a/fs/ecryptfs/messaging.c b/fs/ecryptfs/messaging.c | ||
442 | index 1b5c200..517bd46 100644 | ||
443 | --- a/fs/ecryptfs/messaging.c | ||
444 | +++ b/fs/ecryptfs/messaging.c | ||
445 | @@ -30,9 +30,9 @@ static struct mutex ecryptfs_msg_ctx_lists_mux; | ||
446 | |||
447 | static struct hlist_head *ecryptfs_daemon_hash; | ||
448 | struct mutex ecryptfs_daemon_hash_mux; | ||
449 | -static int ecryptfs_hash_buckets; | ||
450 | +static int ecryptfs_hash_bits; | ||
451 | #define ecryptfs_uid_hash(uid) \ | ||
452 | - hash_long((unsigned long)uid, ecryptfs_hash_buckets) | ||
453 | + hash_long((unsigned long)uid, ecryptfs_hash_bits) | ||
454 | |||
455 | static u32 ecryptfs_msg_counter; | ||
456 | static struct ecryptfs_msg_ctx *ecryptfs_msg_ctx_arr; | ||
457 | @@ -599,18 +599,19 @@ int ecryptfs_init_messaging(unsigned int transport) | ||
458 | } | ||
459 | mutex_init(&ecryptfs_daemon_hash_mux); | ||
460 | mutex_lock(&ecryptfs_daemon_hash_mux); | ||
461 | - ecryptfs_hash_buckets = 1; | ||
462 | - while (ecryptfs_number_of_users >> ecryptfs_hash_buckets) | ||
463 | - ecryptfs_hash_buckets++; | ||
464 | + ecryptfs_hash_bits = 1; | ||
465 | + while (ecryptfs_number_of_users >> ecryptfs_hash_bits) | ||
466 | + ecryptfs_hash_bits++; | ||
467 | ecryptfs_daemon_hash = kmalloc((sizeof(struct hlist_head) | ||
468 | - * ecryptfs_hash_buckets), GFP_KERNEL); | ||
469 | + * (1 << ecryptfs_hash_bits)), | ||
470 | + GFP_KERNEL); | ||
471 | if (!ecryptfs_daemon_hash) { | ||
472 | rc = -ENOMEM; | ||
473 | printk(KERN_ERR "%s: Failed to allocate memory\n", __func__); | ||
474 | mutex_unlock(&ecryptfs_daemon_hash_mux); | ||
475 | goto out; | ||
476 | } | ||
477 | - for (i = 0; i < ecryptfs_hash_buckets; i++) | ||
478 | + for (i = 0; i < (1 << ecryptfs_hash_bits); i++) | ||
479 | INIT_HLIST_HEAD(&ecryptfs_daemon_hash[i]); | ||
480 | mutex_unlock(&ecryptfs_daemon_hash_mux); | ||
481 | ecryptfs_msg_ctx_arr = kmalloc((sizeof(struct ecryptfs_msg_ctx) | ||
482 | @@ -680,7 +681,7 @@ void ecryptfs_release_messaging(unsigned int transport) | ||
483 | int i; | ||
484 | |||
485 | mutex_lock(&ecryptfs_daemon_hash_mux); | ||
486 | - for (i = 0; i < ecryptfs_hash_buckets; i++) { | ||
487 | + for (i = 0; i < (1 << ecryptfs_hash_bits); i++) { | ||
488 | int rc; | ||
489 | |||
490 | hlist_for_each_entry(daemon, elem, | ||
491 | diff --git a/include/math-emu/op-common.h b/include/math-emu/op-common.h | ||
492 | index 408f743..a4cb9d1 100644 | ||
493 | --- a/include/math-emu/op-common.h | ||
494 | +++ b/include/math-emu/op-common.h | ||
495 | @@ -793,7 +793,7 @@ do { \ | ||
496 | X##_e -= (_FP_W_TYPE_SIZE - rsize); \ | ||
497 | X##_e = rsize - X##_e - 1; \ | ||
498 | \ | ||
499 | - if (_FP_FRACBITS_##fs < rsize && _FP_WFRACBITS_##fs < X##_e) \ | ||
500 | + if (_FP_FRACBITS_##fs < rsize && _FP_WFRACBITS_##fs <= X##_e) \ | ||
501 | __FP_FRAC_SRS_1(ur_, (X##_e - _FP_WFRACBITS_##fs + 1), rsize);\ | ||
502 | _FP_FRAC_DISASSEMBLE_##wc(X, ur_, rsize); \ | ||
503 | if ((_FP_WFRACBITS_##fs - X##_e - 1) > 0) \ | ||
504 | diff --git a/net/ipv6/netfilter/ip6t_REJECT.c b/net/ipv6/netfilter/ip6t_REJECT.c | ||
505 | index 44c8d65..1be1a6c 100644 | ||
506 | --- a/net/ipv6/netfilter/ip6t_REJECT.c | ||
507 | +++ b/net/ipv6/netfilter/ip6t_REJECT.c | ||
508 | @@ -95,9 +95,11 @@ static void send_reset(struct sk_buff *oldskb) | ||
509 | fl.fl_ip_dport = otcph.source; | ||
510 | security_skb_classify_flow(oldskb, &fl); | ||
511 | dst = ip6_route_output(&init_net, NULL, &fl); | ||
512 | - if (dst == NULL) | ||
513 | + if (dst == NULL || dst->error) { | ||
514 | + dst_release(dst); | ||
515 | return; | ||
516 | - if (dst->error || xfrm_lookup(&dst, &fl, NULL, 0)) | ||
517 | + } | ||
518 | + if (xfrm_lookup(&dst, &fl, NULL, 0)) | ||
519 | return; | ||
520 | |||
521 | hh_len = (dst->dev->hard_header_len + 15)&~15; | ||
522 | diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c | ||
523 | index f05e36a..78480c2 100644 | ||
524 | --- a/scripts/mod/modpost.c | ||
525 | +++ b/scripts/mod/modpost.c | ||
526 | @@ -1292,7 +1292,7 @@ static unsigned int *reloc_location(struct elf_info *elf, | ||
527 | int section = sechdr->sh_info; | ||
528 | |||
529 | return (void *)elf->hdr + sechdrs[section].sh_offset + | ||
530 | - (r->r_offset - sechdrs[section].sh_addr); | ||
531 | + r->r_offset - sechdrs[section].sh_addr; | ||
532 | } | ||
533 | |||
534 | static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r) |