Magellan Linux

Contents of /trunk/kernel26-alx/patches-2.6.27-r3/0148-2.6.27.49-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1176 - (show annotations) (download)
Thu Oct 14 15:11:06 2010 UTC (13 years, 6 months ago) by niro
File size: 18086 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 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)