Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

+320 -300
+7
drivers/atm/Kconfig
··· 5 5 menu "ATM drivers" 6 6 depends on NETDEVICES && ATM 7 7 8 + config ATM_DUMMY 9 + tristate "Dummy ATM driver" 10 + depends on ATM 11 + help 12 + Dummy ATM driver. Useful for proxy signalling, testing, 13 + and development. If unsure, say N. 14 + 8 15 config ATM_TCP 9 16 tristate "ATM over TCP" 10 17 depends on INET && ATM
+1
drivers/atm/Makefile
··· 31 31 obj-$(CONFIG_ATM_IDT77252) += suni.o 32 32 endif 33 33 34 + obj-$(CONFIG_ATM_DUMMY) += adummy.o 34 35 obj-$(CONFIG_ATM_TCP) += atmtcp.o 35 36 obj-$(CONFIG_ATM_FIRESTREAM) += firestream.o 36 37 obj-$(CONFIG_ATM_LANAI) += lanai.o
+168
drivers/atm/adummy.c
··· 1 + /* 2 + * adummy.c: a dummy ATM driver 3 + */ 4 + 5 + #include <linux/config.h> 6 + #include <linux/module.h> 7 + #include <linux/version.h> 8 + #include <linux/kernel.h> 9 + #include <linux/skbuff.h> 10 + #include <linux/pci.h> 11 + #include <linux/errno.h> 12 + #include <linux/types.h> 13 + #include <linux/string.h> 14 + #include <linux/delay.h> 15 + #include <linux/init.h> 16 + #include <linux/mm.h> 17 + #include <linux/sched.h> 18 + #include <linux/timer.h> 19 + #include <linux/interrupt.h> 20 + #include <asm/io.h> 21 + #include <asm/byteorder.h> 22 + #include <asm/uaccess.h> 23 + 24 + #include <linux/atmdev.h> 25 + #include <linux/atm.h> 26 + #include <linux/sonet.h> 27 + 28 + /* version definition */ 29 + 30 + #define DRV_VERSION "1.0" 31 + 32 + #define DEV_LABEL "adummy" 33 + 34 + #define ADUMMY_DEV(dev) ((struct adummy_dev *) (dev)->dev_data) 35 + 36 + struct adummy_dev { 37 + struct atm_dev *atm_dev; 38 + 39 + struct list_head entry; 40 + }; 41 + 42 + /* globals */ 43 + 44 + static LIST_HEAD(adummy_devs); 45 + 46 + static int __init 47 + adummy_start(struct atm_dev *dev) 48 + { 49 + dev->ci_range.vpi_bits = 4; 50 + dev->ci_range.vci_bits = 12; 51 + 52 + return 0; 53 + } 54 + 55 + static int 56 + adummy_open(struct atm_vcc *vcc) 57 + { 58 + short vpi = vcc->vpi; 59 + int vci = vcc->vci; 60 + 61 + if (vci == ATM_VCI_UNSPEC || vpi == ATM_VPI_UNSPEC) 62 + return 0; 63 + 64 + set_bit(ATM_VF_ADDR, &vcc->flags); 65 + set_bit(ATM_VF_READY, &vcc->flags); 66 + 67 + return 0; 68 + } 69 + 70 + static void 71 + adummy_close(struct atm_vcc *vcc) 72 + { 73 + clear_bit(ATM_VF_READY, &vcc->flags); 74 + clear_bit(ATM_VF_ADDR, &vcc->flags); 75 + } 76 + 77 + static int 78 + adummy_send(struct atm_vcc *vcc, struct sk_buff *skb) 79 + { 80 + if (vcc->pop) 81 + vcc->pop(vcc, skb); 82 + else 83 + dev_kfree_skb_any(skb); 84 + atomic_inc(&vcc->stats->tx); 85 + 86 + return 0; 87 + } 88 + 89 + static int 90 + adummy_proc_read(struct atm_dev *dev, loff_t *pos, char *page) 91 + { 92 + int left = *pos; 93 + 94 + if (!left--) 95 + return sprintf(page, "version %s\n", DRV_VERSION); 96 + 97 + return 0; 98 + } 99 + 100 + static struct atmdev_ops adummy_ops = 101 + { 102 + .open = adummy_open, 103 + .close = adummy_close, 104 + .send = adummy_send, 105 + .proc_read = adummy_proc_read, 106 + .owner = THIS_MODULE 107 + }; 108 + 109 + static int __init adummy_init(void) 110 + { 111 + struct atm_dev *atm_dev; 112 + struct adummy_dev *adummy_dev; 113 + int err = 0; 114 + 115 + printk(KERN_ERR "adummy: version %s\n", DRV_VERSION); 116 + 117 + adummy_dev = (struct adummy_dev *) kmalloc(sizeof(struct adummy_dev), 118 + GFP_KERNEL); 119 + if (!adummy_dev) { 120 + printk(KERN_ERR DEV_LABEL ": kmalloc() failed\n"); 121 + err = -ENOMEM; 122 + goto out; 123 + } 124 + memset(adummy_dev, 0, sizeof(struct adummy_dev)); 125 + 126 + atm_dev = atm_dev_register(DEV_LABEL, &adummy_ops, -1, 0); 127 + if (!atm_dev) { 128 + printk(KERN_ERR DEV_LABEL ": atm_dev_register() failed\n"); 129 + err = -ENODEV; 130 + goto out_kfree; 131 + } 132 + 133 + adummy_dev->atm_dev = atm_dev; 134 + atm_dev->dev_data = adummy_dev; 135 + 136 + if (adummy_start(atm_dev)) { 137 + printk(KERN_ERR DEV_LABEL ": adummy_start() failed\n"); 138 + err = -ENODEV; 139 + goto out_unregister; 140 + } 141 + 142 + list_add(&adummy_dev->entry, &adummy_devs); 143 + out: 144 + return err; 145 + 146 + out_unregister: 147 + atm_dev_deregister(atm_dev); 148 + out_kfree: 149 + kfree(adummy_dev); 150 + goto out; 151 + } 152 + 153 + static void __exit adummy_cleanup(void) 154 + { 155 + struct adummy_dev *adummy_dev, *next; 156 + 157 + list_for_each_entry_safe(adummy_dev, next, &adummy_devs, entry) { 158 + atm_dev_deregister(adummy_dev->atm_dev); 159 + kfree(adummy_dev); 160 + } 161 + } 162 + 163 + module_init(adummy_init); 164 + module_exit(adummy_cleanup); 165 + 166 + MODULE_AUTHOR("chas williams <chas@cmf.nrl.navy.mil>"); 167 + MODULE_DESCRIPTION("dummy ATM driver"); 168 + MODULE_LICENSE("GPL");
-54
drivers/atm/atmdev_init.c
··· 1 - /* drivers/atm/atmdev_init.c - ATM device driver initialization */ 2 - 3 - /* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ 4 - 5 - 6 - #include <linux/config.h> 7 - #include <linux/init.h> 8 - 9 - 10 - #ifdef CONFIG_ATM_ZATM 11 - extern int zatm_detect(void); 12 - #endif 13 - #ifdef CONFIG_ATM_AMBASSADOR 14 - extern int amb_detect(void); 15 - #endif 16 - #ifdef CONFIG_ATM_HORIZON 17 - extern int hrz_detect(void); 18 - #endif 19 - #ifdef CONFIG_ATM_FORE200E 20 - extern int fore200e_detect(void); 21 - #endif 22 - #ifdef CONFIG_ATM_LANAI 23 - extern int lanai_detect(void); 24 - #endif 25 - 26 - 27 - /* 28 - * For historical reasons, atmdev_init returns the number of devices found. 29 - * Note that some detections may not go via atmdev_init (e.g. eni.c), so this 30 - * number is meaningless. 31 - */ 32 - 33 - int __init atmdev_init(void) 34 - { 35 - int devs; 36 - 37 - devs = 0; 38 - #ifdef CONFIG_ATM_ZATM 39 - devs += zatm_detect(); 40 - #endif 41 - #ifdef CONFIG_ATM_AMBASSADOR 42 - devs += amb_detect(); 43 - #endif 44 - #ifdef CONFIG_ATM_HORIZON 45 - devs += hrz_detect(); 46 - #endif 47 - #ifdef CONFIG_ATM_FORE200E 48 - devs += fore200e_detect(); 49 - #endif 50 - #ifdef CONFIG_ATM_LANAI 51 - devs += lanai_detect(); 52 - #endif 53 - return devs; 54 - }
+2 -18
drivers/atm/atmtcp.c
··· 246 246 { 247 247 struct atm_dev *atmtcp_dev; 248 248 struct atmtcp_dev_data *dev_data; 249 - struct sock *s; 250 - struct hlist_node *node; 251 - struct atm_vcc *walk; 252 - int i; 253 249 254 250 atmtcp_dev = (struct atm_dev *) vcc->dev_data; 255 251 dev_data = PRIV(atmtcp_dev); ··· 253 257 if (dev_data->persist) return; 254 258 atmtcp_dev->dev_data = NULL; 255 259 kfree(dev_data); 256 - shutdown_atm_dev(atmtcp_dev); 260 + atm_dev_deregister(atmtcp_dev); 257 261 vcc->dev_data = NULL; 258 - read_lock(&vcc_sklist_lock); 259 - for(i = 0; i < VCC_HTABLE_SIZE; ++i) { 260 - struct hlist_head *head = &vcc_hash[i]; 261 - 262 - sk_for_each(s, node, head) { 263 - walk = atm_sk(s); 264 - if (walk->dev != atmtcp_dev) 265 - continue; 266 - wake_up(s->sk_sleep); 267 - } 268 - } 269 - read_unlock(&vcc_sklist_lock); 270 262 module_put(THIS_MODULE); 271 263 } 272 264 ··· 434 450 if (PRIV(dev)->vcc) return 0; 435 451 kfree(dev_data); 436 452 atm_dev_put(dev); 437 - shutdown_atm_dev(dev); 453 + atm_dev_deregister(dev); 438 454 return 0; 439 455 } 440 456
+8 -94
drivers/atm/lanai.c
··· 39 39 * o lanai_change_qos() isn't written yet 40 40 * 41 41 * o There aren't any ioctl's yet -- I'd like to eventually support 42 - * setting loopback and LED modes that way. (see lanai_ioctl) 42 + * setting loopback and LED modes that way. 43 43 * 44 44 * o If the segmentation engine or DMA gets shut down we should restart 45 45 * card as per section 17.0i. (see lanai_reset) ··· 305 305 * vci with their bit set 306 306 */ 307 307 static void vci_bitfield_iterate(struct lanai_dev *lanai, 308 - /*const*/ unsigned long *lp, 308 + const unsigned long *lp, 309 309 void (*func)(struct lanai_dev *,vci_t vci)) 310 310 { 311 311 vci_t vci = find_first_bit(lp, NUM_VCI); ··· 951 951 /* read a big-endian 4-byte value out of eeprom */ 952 952 static inline u32 eeprom_be4(const struct lanai_dev *lanai, int address) 953 953 { 954 - return be32_to_cpup((u32 *) (&lanai->eeprom[address])); 954 + return be32_to_cpup((const u32 *) &lanai->eeprom[address]); 955 955 } 956 956 957 957 /* Checksum/validate EEPROM contents */ ··· 1160 1160 } 1161 1161 1162 1162 /* test if VCC is currently backlogged */ 1163 - static inline int vcc_is_backlogged(/*const*/ struct lanai_vcc *lvcc) 1163 + static inline int vcc_is_backlogged(const struct lanai_vcc *lvcc) 1164 1164 { 1165 1165 return !skb_queue_empty(&lvcc->tx.backlog); 1166 1166 } ··· 1395 1395 { 1396 1396 int size; 1397 1397 struct sk_buff *skb; 1398 - /*const*/ u32 *x, *end = &lvcc->rx.buf.start[endptr * 4]; 1398 + const u32 *x; 1399 + u32 *end = &lvcc->rx.buf.start[endptr * 4]; 1399 1400 int n = ((unsigned long) end) - ((unsigned long) lvcc->rx.buf.ptr); 1400 1401 if (n < 0) 1401 1402 n += lanai_buf_size(&lvcc->rx.buf); ··· 2112 2111 * shifted by that much as we compute 2113 2112 * 2114 2113 */ 2115 - static int pcr_to_cbricg(/*const*/ struct atm_qos *qos) 2114 + static int pcr_to_cbricg(const struct atm_qos *qos) 2116 2115 { 2117 2116 int rounddown = 0; /* 1 = Round PCR down, i.e. round ICG _up_ */ 2118 2117 int x, icg, pcr = atm_pcr_goal(&qos->txtp); ··· 2435 2434 return result; 2436 2435 } 2437 2436 2438 - #if 0 2439 - /* ioctl operations for card */ 2440 - /* NOTE: these are all DEBUGGING ONLY currently */ 2441 - static int lanai_ioctl(struct atm_dev *atmdev, unsigned int cmd, void __user *arg) 2442 - { 2443 - int result = 0; 2444 - struct lanai_dev *lanai = (struct lanai_dev *) atmdev->dev_data; 2445 - switch(cmd) { 2446 - case 2106275: 2447 - shutdown_atm_dev(atmdev); 2448 - return 0; 2449 - case 2200000: { 2450 - unsigned long flags; 2451 - spin_lock_irqsave(&lanai->servicelock, flags); 2452 - run_service(lanai); 2453 - spin_unlock_irqrestore(&lanai->servicelock, flags); 2454 - return 0; } 2455 - case 2200002: 2456 - get_statistics(lanai); 2457 - return 0; 2458 - case 2200003: { 2459 - unsigned int i; 2460 - for (i = 0; i <= 0x5C ; i += 4) { 2461 - if (i==0x48) /* Write-only butt reg */ 2462 - continue; 2463 - printk(KERN_CRIT DEV_LABEL " 0x%02X: " 2464 - "0x%08X\n", i, 2465 - (unsigned int) readl(lanai->base + i)); 2466 - barrier(); mb(); 2467 - pcistatus_check(lanai, 0); 2468 - barrier(); mb(); 2469 - } 2470 - return 0; } 2471 - case 2200004: { 2472 - u8 b; 2473 - u16 w; 2474 - u32 dw; 2475 - struct pci_dev *pci = lanai->pci; 2476 - (void) pci_read_config_word(pci, PCI_VENDOR_ID, &w); 2477 - DPRINTK("vendor = 0x%X\n", (unsigned int) w); 2478 - (void) pci_read_config_word(pci, PCI_DEVICE_ID, &w); 2479 - DPRINTK("device = 0x%X\n", (unsigned int) w); 2480 - (void) pci_read_config_word(pci, PCI_COMMAND, &w); 2481 - DPRINTK("command = 0x%X\n", (unsigned int) w); 2482 - (void) pci_read_config_word(pci, PCI_STATUS, &w); 2483 - DPRINTK("status = 0x%X\n", (unsigned int) w); 2484 - (void) pci_read_config_dword(pci, 2485 - PCI_CLASS_REVISION, &dw); 2486 - DPRINTK("class/revision = 0x%X\n", (unsigned int) dw); 2487 - (void) pci_read_config_byte(pci, 2488 - PCI_CACHE_LINE_SIZE, &b); 2489 - DPRINTK("cache line size = 0x%X\n", (unsigned int) b); 2490 - (void) pci_read_config_byte(pci, PCI_LATENCY_TIMER, &b); 2491 - DPRINTK("latency = %d (0x%X)\n", 2492 - (int) b, (unsigned int) b); 2493 - (void) pci_read_config_byte(pci, PCI_HEADER_TYPE, &b); 2494 - DPRINTK("header type = 0x%X\n", (unsigned int) b); 2495 - (void) pci_read_config_byte(pci, PCI_BIST, &b); 2496 - DPRINTK("bist = 0x%X\n", (unsigned int) b); 2497 - /* skipping a few here */ 2498 - (void) pci_read_config_byte(pci, 2499 - PCI_INTERRUPT_LINE, &b); 2500 - DPRINTK("pci_int_line = 0x%X\n", (unsigned int) b); 2501 - (void) pci_read_config_byte(pci, 2502 - PCI_INTERRUPT_PIN, &b); 2503 - DPRINTK("pci_int_pin = 0x%X\n", (unsigned int) b); 2504 - (void) pci_read_config_byte(pci, PCI_MIN_GNT, &b); 2505 - DPRINTK("min_gnt = 0x%X\n", (unsigned int) b); 2506 - (void) pci_read_config_byte(pci, PCI_MAX_LAT, &b); 2507 - DPRINTK("max_lat = 0x%X\n", (unsigned int) b); } 2508 - return 0; 2509 - #ifdef USE_POWERDOWN 2510 - case 2200005: 2511 - DPRINTK("Coming out of powerdown\n"); 2512 - lanai->conf1 &= ~CONFIG1_POWERDOWN; 2513 - conf1_write(lanai); 2514 - return 0; 2515 - #endif 2516 - default: 2517 - result = -ENOIOCTLCMD; 2518 - } 2519 - return result; 2520 - } 2521 - #else /* !0 */ 2522 - #define lanai_ioctl NULL 2523 - #endif /* 0 */ 2524 - 2525 2437 static int lanai_send(struct atm_vcc *atmvcc, struct sk_buff *skb) 2526 2438 { 2527 2439 struct lanai_vcc *lvcc = (struct lanai_vcc *) atmvcc->dev_data; ··· 2592 2678 .dev_close = lanai_dev_close, 2593 2679 .open = lanai_open, 2594 2680 .close = lanai_close, 2595 - .ioctl = lanai_ioctl, 2596 2681 .getsockopt = NULL, 2597 2682 .setsockopt = NULL, 2598 2683 .send = lanai_send, ··· 2673 2760 * gone, so there isn't much to do 2674 2761 */ 2675 2762 DPRINTK("cleanup_module()\n"); 2763 + pci_unregister_driver(&lanai_driver); 2676 2764 } 2677 2765 2678 2766 module_init(lanai_module_init);
+2 -2
drivers/usb/atm/usbatm.c
··· 879 879 880 880 fail: 881 881 instance->atm_dev = NULL; 882 - shutdown_atm_dev(atm_dev); /* usbatm_atm_dev_close will eventually be called */ 882 + atm_dev_deregister(atm_dev); /* usbatm_atm_dev_close will eventually be called */ 883 883 return ret; 884 884 } 885 885 ··· 1164 1164 1165 1165 /* ATM finalize */ 1166 1166 if (instance->atm_dev) 1167 - shutdown_atm_dev(instance->atm_dev); 1167 + atm_dev_deregister(instance->atm_dev); 1168 1168 1169 1169 usbatm_put_instance(instance); /* taken in usbatm_usb_probe */ 1170 1170 }
+9 -9
include/linux/atmdev.h
··· 7 7 #define LINUX_ATMDEV_H 8 8 9 9 10 - #include <linux/config.h> 11 10 #include <linux/atmapi.h> 12 11 #include <linux/atm.h> 13 12 #include <linux/atmioc.h> ··· 209 210 210 211 #ifdef __KERNEL__ 211 212 213 + #include <linux/config.h> 212 214 #include <linux/wait.h> /* wait_queue_head_t */ 213 215 #include <linux/time.h> /* struct timeval */ 214 216 #include <linux/net.h> ··· 274 274 275 275 276 276 enum { 277 - ATM_DF_CLOSE, /* close device when last VCC is closed */ 277 + ATM_DF_REMOVED, /* device was removed from atm_devs list */ 278 278 }; 279 279 280 280 ··· 415 415 int number,unsigned long *flags); /* number == -1: pick first available */ 416 416 struct atm_dev *atm_dev_lookup(int number); 417 417 void atm_dev_deregister(struct atm_dev *dev); 418 - void shutdown_atm_dev(struct atm_dev *dev); 419 418 void vcc_insert_socket(struct sock *sk); 420 419 421 420 ··· 456 457 457 458 static inline void atm_dev_put(struct atm_dev *dev) 458 459 { 459 - atomic_dec(&dev->refcnt); 460 - 461 - if ((atomic_read(&dev->refcnt) == 1) && 462 - test_bit(ATM_DF_CLOSE,&dev->flags)) 463 - shutdown_atm_dev(dev); 460 + if (atomic_dec_and_test(&dev->refcnt)) { 461 + BUG_ON(!test_bit(ATM_DF_REMOVED, &dev->flags)); 462 + if (dev->ops->dev_close) 463 + dev->ops->dev_close(dev); 464 + kfree(dev); 465 + } 464 466 } 465 467 466 468 467 469 int atm_charge(struct atm_vcc *vcc,int truesize); 468 470 struct sk_buff *atm_alloc_charge(struct atm_vcc *vcc,int pdu_size, 469 471 gfp_t gfp_flags); 470 - int atm_pcr_goal(struct atm_trafprm *tp); 472 + int atm_pcr_goal(const struct atm_trafprm *tp); 471 473 472 474 void vcc_release_async(struct atm_vcc *vcc, int reply); 473 475
+7 -4
net/atm/atm_misc.c
··· 74 74 */ 75 75 76 76 77 - int atm_pcr_goal(struct atm_trafprm *tp) 77 + int atm_pcr_goal(const struct atm_trafprm *tp) 78 78 { 79 - if (tp->pcr && tp->pcr != ATM_MAX_PCR) return -tp->pcr; 80 - if (tp->min_pcr && !tp->pcr) return tp->min_pcr; 81 - if (tp->max_pcr != ATM_MAX_PCR) return -tp->max_pcr; 79 + if (tp->pcr && tp->pcr != ATM_MAX_PCR) 80 + return -tp->pcr; 81 + if (tp->min_pcr && !tp->pcr) 82 + return tp->min_pcr; 83 + if (tp->max_pcr != ATM_MAX_PCR) 84 + return -tp->max_pcr; 82 85 return 0; 83 86 } 84 87
+40 -26
net/atm/common.c
··· 221 221 EXPORT_SYMBOL(vcc_release_async); 222 222 223 223 224 + void atm_dev_release_vccs(struct atm_dev *dev) 225 + { 226 + int i; 227 + 228 + write_lock_irq(&vcc_sklist_lock); 229 + for (i = 0; i < VCC_HTABLE_SIZE; i++) { 230 + struct hlist_head *head = &vcc_hash[i]; 231 + struct hlist_node *node, *tmp; 232 + struct sock *s; 233 + struct atm_vcc *vcc; 234 + 235 + sk_for_each_safe(s, node, tmp, head) { 236 + vcc = atm_sk(s); 237 + if (vcc->dev == dev) { 238 + vcc_release_async(vcc, -EPIPE); 239 + sk_del_node_init(s); 240 + } 241 + } 242 + } 243 + write_unlock_irq(&vcc_sklist_lock); 244 + } 245 + 246 + 224 247 static int adjust_tp(struct atm_trafprm *tp,unsigned char aal) 225 248 { 226 249 int max_sdu; ··· 355 332 return -EINVAL; 356 333 if (vci > 0 && vci < ATM_NOT_RSV_VCI && !capable(CAP_NET_BIND_SERVICE)) 357 334 return -EPERM; 358 - error = 0; 335 + error = -ENODEV; 359 336 if (!try_module_get(dev->ops->owner)) 360 - return -ENODEV; 337 + return error; 361 338 vcc->dev = dev; 362 339 write_lock_irq(&vcc_sklist_lock); 363 - if ((error = find_ci(vcc, &vpi, &vci))) { 340 + if (test_bit(ATM_DF_REMOVED, &dev->flags) || 341 + (error = find_ci(vcc, &vpi, &vci))) { 364 342 write_unlock_irq(&vcc_sklist_lock); 365 343 goto fail_module_put; 366 344 } ··· 447 423 if (vcc->qos.txtp.traffic_class == ATM_ANYCLASS || 448 424 vcc->qos.rxtp.traffic_class == ATM_ANYCLASS) 449 425 return -EINVAL; 450 - if (itf != ATM_ITF_ANY) { 451 - dev = atm_dev_lookup(itf); 452 - if (!dev) 453 - return -ENODEV; 454 - error = __vcc_connect(vcc, dev, vpi, vci); 455 - if (error) { 456 - atm_dev_put(dev); 457 - return error; 458 - } 426 + if (likely(itf != ATM_ITF_ANY)) { 427 + dev = try_then_request_module(atm_dev_lookup(itf), "atm-device-%d", itf); 459 428 } else { 460 - struct list_head *p, *next; 461 - 462 429 dev = NULL; 463 - spin_lock(&atm_dev_lock); 464 - list_for_each_safe(p, next, &atm_devs) { 465 - dev = list_entry(p, struct atm_dev, dev_list); 430 + down(&atm_dev_mutex); 431 + if (!list_empty(&atm_devs)) { 432 + dev = list_entry(atm_devs.next, struct atm_dev, dev_list); 466 433 atm_dev_hold(dev); 467 - spin_unlock(&atm_dev_lock); 468 - if (!__vcc_connect(vcc, dev, vpi, vci)) 469 - break; 470 - atm_dev_put(dev); 471 - dev = NULL; 472 - spin_lock(&atm_dev_lock); 473 434 } 474 - spin_unlock(&atm_dev_lock); 475 - if (!dev) 476 - return -ENODEV; 435 + up(&atm_dev_mutex); 436 + } 437 + if (!dev) 438 + return -ENODEV; 439 + error = __vcc_connect(vcc, dev, vpi, vci); 440 + if (error) { 441 + atm_dev_put(dev); 442 + return error; 477 443 } 478 444 if (vpi == ATM_VPI_UNSPEC || vci == ATM_VCI_UNSPEC) 479 445 set_bit(ATM_VF_PARTIAL,&vcc->flags);
+2
net/atm/common.h
··· 47 47 /* SVC */ 48 48 int svc_change_qos(struct atm_vcc *vcc,struct atm_qos *qos); 49 49 50 + void atm_dev_release_vccs(struct atm_dev *dev); 51 + 50 52 #endif
+31 -47
net/atm/resources.c
··· 25 25 26 26 27 27 LIST_HEAD(atm_devs); 28 - DEFINE_SPINLOCK(atm_dev_lock); 28 + DECLARE_MUTEX(atm_dev_mutex); 29 29 30 30 static struct atm_dev *__alloc_atm_dev(const char *type) 31 31 { ··· 52 52 53 53 list_for_each(p, &atm_devs) { 54 54 dev = list_entry(p, struct atm_dev, dev_list); 55 - if ((dev->ops) && (dev->number == number)) { 55 + if (dev->number == number) { 56 56 atm_dev_hold(dev); 57 57 return dev; 58 58 } ··· 64 64 { 65 65 struct atm_dev *dev; 66 66 67 - spin_lock(&atm_dev_lock); 67 + down(&atm_dev_mutex); 68 68 dev = __atm_dev_lookup(number); 69 - spin_unlock(&atm_dev_lock); 69 + up(&atm_dev_mutex); 70 70 return dev; 71 71 } 72 + 72 73 73 74 struct atm_dev *atm_dev_register(const char *type, const struct atmdev_ops *ops, 74 75 int number, unsigned long *flags) ··· 82 81 type); 83 82 return NULL; 84 83 } 85 - spin_lock(&atm_dev_lock); 84 + down(&atm_dev_mutex); 86 85 if (number != -1) { 87 86 if ((inuse = __atm_dev_lookup(number))) { 88 87 atm_dev_put(inuse); 89 - spin_unlock(&atm_dev_lock); 88 + up(&atm_dev_mutex); 90 89 kfree(dev); 91 90 return NULL; 92 91 } ··· 106 105 memset(&dev->flags, 0, sizeof(dev->flags)); 107 106 memset(&dev->stats, 0, sizeof(dev->stats)); 108 107 atomic_set(&dev->refcnt, 1); 109 - list_add_tail(&dev->dev_list, &atm_devs); 110 - spin_unlock(&atm_dev_lock); 111 108 112 109 if (atm_proc_dev_register(dev) < 0) { 113 110 printk(KERN_ERR "atm_dev_register: " 114 111 "atm_proc_dev_register failed for dev %s\n", 115 112 type); 116 - spin_lock(&atm_dev_lock); 117 - list_del(&dev->dev_list); 118 - spin_unlock(&atm_dev_lock); 113 + up(&atm_dev_mutex); 119 114 kfree(dev); 120 115 return NULL; 121 116 } 117 + list_add_tail(&dev->dev_list, &atm_devs); 118 + up(&atm_dev_mutex); 122 119 123 120 return dev; 124 121 } ··· 124 125 125 126 void atm_dev_deregister(struct atm_dev *dev) 126 127 { 127 - unsigned long warning_time; 128 + BUG_ON(test_bit(ATM_DF_REMOVED, &dev->flags)); 129 + set_bit(ATM_DF_REMOVED, &dev->flags); 128 130 131 + /* 132 + * if we remove current device from atm_devs list, new device 133 + * with same number can appear, such we need deregister proc, 134 + * release async all vccs and remove them from vccs list too 135 + */ 136 + down(&atm_dev_mutex); 137 + list_del(&dev->dev_list); 138 + up(&atm_dev_mutex); 139 + 140 + atm_dev_release_vccs(dev); 129 141 atm_proc_dev_deregister(dev); 130 142 131 - spin_lock(&atm_dev_lock); 132 - list_del(&dev->dev_list); 133 - spin_unlock(&atm_dev_lock); 134 - 135 - warning_time = jiffies; 136 - while (atomic_read(&dev->refcnt) != 1) { 137 - msleep(250); 138 - if ((jiffies - warning_time) > 10 * HZ) { 139 - printk(KERN_EMERG "atm_dev_deregister: waiting for " 140 - "dev %d to become free. Usage count = %d\n", 141 - dev->number, atomic_read(&dev->refcnt)); 142 - warning_time = jiffies; 143 - } 144 - } 145 - 146 - kfree(dev); 147 - } 148 - 149 - void shutdown_atm_dev(struct atm_dev *dev) 150 - { 151 - if (atomic_read(&dev->refcnt) > 1) { 152 - set_bit(ATM_DF_CLOSE, &dev->flags); 153 - return; 154 - } 155 - if (dev->ops->dev_close) 156 - dev->ops->dev_close(dev); 157 - atm_dev_deregister(dev); 143 + atm_dev_put(dev); 158 144 } 159 145 160 146 ··· 195 211 return -EFAULT; 196 212 if (get_user(len, &iobuf->length)) 197 213 return -EFAULT; 198 - spin_lock(&atm_dev_lock); 214 + down(&atm_dev_mutex); 199 215 list_for_each(p, &atm_devs) 200 216 size += sizeof(int); 201 217 if (size > len) { 202 - spin_unlock(&atm_dev_lock); 218 + up(&atm_dev_mutex); 203 219 return -E2BIG; 204 220 } 205 221 tmp_buf = kmalloc(size, GFP_ATOMIC); 206 222 if (!tmp_buf) { 207 - spin_unlock(&atm_dev_lock); 223 + up(&atm_dev_mutex); 208 224 return -ENOMEM; 209 225 } 210 226 tmp_p = tmp_buf; ··· 212 228 dev = list_entry(p, struct atm_dev, dev_list); 213 229 *tmp_p++ = dev->number; 214 230 } 215 - spin_unlock(&atm_dev_lock); 231 + up(&atm_dev_mutex); 216 232 error = ((copy_to_user(buf, tmp_buf, size)) || 217 233 put_user(size, &iobuf->length)) 218 234 ? -EFAULT : 0; ··· 229 245 if (get_user(number, &sioc->number)) 230 246 return -EFAULT; 231 247 232 - if (!(dev = atm_dev_lookup(number))) 248 + if (!(dev = try_then_request_module(atm_dev_lookup(number), 249 + "atm-device-%d", number))) 233 250 return -ENODEV; 234 251 235 252 switch (cmd) { ··· 399 414 400 415 void *atm_dev_seq_start(struct seq_file *seq, loff_t *pos) 401 416 { 402 - spin_lock(&atm_dev_lock); 417 + down(&atm_dev_mutex); 403 418 return *pos ? dev_get_idx(*pos) : (void *) 1; 404 419 } 405 420 406 421 void atm_dev_seq_stop(struct seq_file *seq, void *v) 407 422 { 408 - spin_unlock(&atm_dev_lock); 423 + up(&atm_dev_mutex); 409 424 } 410 425 411 426 void *atm_dev_seq_next(struct seq_file *seq, void *v, loff_t *pos) ··· 419 434 EXPORT_SYMBOL(atm_dev_register); 420 435 EXPORT_SYMBOL(atm_dev_deregister); 421 436 EXPORT_SYMBOL(atm_dev_lookup); 422 - EXPORT_SYMBOL(shutdown_atm_dev);
+1 -2
net/atm/resources.h
··· 11 11 12 12 13 13 extern struct list_head atm_devs; 14 - extern spinlock_t atm_dev_lock; 15 - 14 + extern struct semaphore atm_dev_mutex; 16 15 17 16 int atm_dev_ioctl(unsigned int cmd, void __user *arg); 18 17
+1 -1
net/ipv4/fib_hash.c
··· 975 975 976 976 static unsigned fib_flag_trans(int type, u32 mask, struct fib_info *fi) 977 977 { 978 - static unsigned type2flags[RTN_MAX + 1] = { 978 + static const unsigned type2flags[RTN_MAX + 1] = { 979 979 [7] = RTF_REJECT, [8] = RTF_REJECT, 980 980 }; 981 981 unsigned flags = type2flags[type];
+1 -1
net/ipv4/fib_semantics.c
··· 83 83 #define endfor_nexthops(fi) } 84 84 85 85 86 - static struct 86 + static const struct 87 87 { 88 88 int error; 89 89 u8 scope;
+2 -2
net/ipv4/icmp.c
··· 220 220 short error; /* This ICMP is classed as an error message */ 221 221 }; 222 222 223 - static struct icmp_control icmp_pointers[NR_ICMP_TYPES+1]; 223 + static const struct icmp_control icmp_pointers[NR_ICMP_TYPES+1]; 224 224 225 225 /* 226 226 * The ICMP socket(s). This is the most convenient way to flow control ··· 994 994 /* 995 995 * This table is the definition of how we handle ICMP. 996 996 */ 997 - static struct icmp_control icmp_pointers[NR_ICMP_TYPES + 1] = { 997 + static const struct icmp_control icmp_pointers[NR_ICMP_TYPES + 1] = { 998 998 [ICMP_ECHOREPLY] = { 999 999 .output_entry = ICMP_MIB_OUTECHOREPS, 1000 1000 .input_entry = ICMP_MIB_INECHOREPS,
+1 -1
net/ipv4/ip_gre.c
··· 1217 1217 return 0; 1218 1218 } 1219 1219 1220 - int __init ipgre_fb_tunnel_init(struct net_device *dev) 1220 + static int __init ipgre_fb_tunnel_init(struct net_device *dev) 1221 1221 { 1222 1222 struct ip_tunnel *tunnel = (struct ip_tunnel*)dev->priv; 1223 1223 struct iphdr *iph = &tunnel->parms.iph;
+1 -1
net/ipv4/ip_output.c
··· 690 690 return csum; 691 691 } 692 692 693 - inline int ip_ufo_append_data(struct sock *sk, 693 + static inline int ip_ufo_append_data(struct sock *sk, 694 694 int getfrag(void *from, char *to, int offset, int len, 695 695 int odd, struct sk_buff *skb), 696 696 void *from, int length, int hh_len, int fragheaderlen,
+1 -1
net/ipv4/ipvs/ip_vs_conn.c
··· 771 771 * The drop rate array needs tuning for real environments. 772 772 * Called from timer bh only => no locking 773 773 */ 774 - static char todrop_rate[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; 774 + static const char todrop_rate[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; 775 775 static char todrop_counter[9] = {0}; 776 776 int i; 777 777
+2 -2
net/ipv4/ipvs/ip_vs_ctl.c
··· 1909 1909 #define DAEMON_ARG_LEN (sizeof(struct ip_vs_daemon_user)) 1910 1910 #define MAX_ARG_LEN SVCDEST_ARG_LEN 1911 1911 1912 - static unsigned char set_arglen[SET_CMDID(IP_VS_SO_SET_MAX)+1] = { 1912 + static const unsigned char set_arglen[SET_CMDID(IP_VS_SO_SET_MAX)+1] = { 1913 1913 [SET_CMDID(IP_VS_SO_SET_ADD)] = SERVICE_ARG_LEN, 1914 1914 [SET_CMDID(IP_VS_SO_SET_EDIT)] = SERVICE_ARG_LEN, 1915 1915 [SET_CMDID(IP_VS_SO_SET_DEL)] = SERVICE_ARG_LEN, ··· 2180 2180 #define GET_TIMEOUT_ARG_LEN (sizeof(struct ip_vs_timeout_user)) 2181 2181 #define GET_DAEMON_ARG_LEN (sizeof(struct ip_vs_daemon_user) * 2) 2182 2182 2183 - static unsigned char get_arglen[GET_CMDID(IP_VS_SO_GET_MAX)+1] = { 2183 + static const unsigned char get_arglen[GET_CMDID(IP_VS_SO_GET_MAX)+1] = { 2184 2184 [GET_CMDID(IP_VS_SO_GET_VERSION)] = 64, 2185 2185 [GET_CMDID(IP_VS_SO_GET_INFO)] = GET_INFO_ARG_LEN, 2186 2186 [GET_CMDID(IP_VS_SO_GET_SERVICES)] = GET_SERVICES_ARG_LEN,
+1 -1
net/ipv4/ipvs/ip_vs_proto_tcp.c
··· 251 251 #define TCP_DIR_OUTPUT 4 252 252 #define TCP_DIR_INPUT_ONLY 8 253 253 254 - static int tcp_state_off[IP_VS_DIR_LAST] = { 254 + static const int tcp_state_off[IP_VS_DIR_LAST] = { 255 255 [IP_VS_DIR_INPUT] = TCP_DIR_INPUT, 256 256 [IP_VS_DIR_OUTPUT] = TCP_DIR_OUTPUT, 257 257 [IP_VS_DIR_INPUT_ONLY] = TCP_DIR_INPUT_ONLY,
+1 -1
net/ipv4/netfilter/ip_conntrack_amanda.c
··· 37 37 module_param(master_timeout, int, 0600); 38 38 MODULE_PARM_DESC(master_timeout, "timeout for the master connection"); 39 39 40 - static char *conns[] = { "DATA ", "MESG ", "INDEX " }; 40 + static const char *conns[] = { "DATA ", "MESG ", "INDEX " }; 41 41 42 42 /* This is slow, but it's simple. --RR */ 43 43 static char *amanda_buffer;
+2 -2
net/ipv4/netfilter/ip_conntrack_core.c
··· 1354 1354 get_order(sizeof(struct list_head) * size)); 1355 1355 } 1356 1356 1357 - void ip_conntrack_flush() 1357 + void ip_conntrack_flush(void) 1358 1358 { 1359 1359 /* This makes sure all current packets have passed through 1360 1360 netfilter framework. Roll on, two-stage module ··· 1408 1408 return hash; 1409 1409 } 1410 1410 1411 - int set_hashsize(const char *val, struct kernel_param *kp) 1411 + static int set_hashsize(const char *val, struct kernel_param *kp) 1412 1412 { 1413 1413 int i, bucket, hashsize, vmalloced; 1414 1414 int old_vmalloced, old_size;
+1 -1
net/ipv4/netfilter/ip_conntrack_ftp.c
··· 55 55 static int try_eprt(const char *, size_t, u_int32_t [], char); 56 56 static int try_epsv_response(const char *, size_t, u_int32_t [], char); 57 57 58 - static struct ftp_search { 58 + static const struct ftp_search { 59 59 enum ip_conntrack_dir dir; 60 60 const char *pattern; 61 61 size_t plen;
+1 -1
net/ipv4/netfilter/ip_conntrack_irc.c
··· 59 59 module_param(dcc_timeout, int, 0400); 60 60 MODULE_PARM_DESC(dcc_timeout, "timeout on for unestablished DCC channels"); 61 61 62 - static char *dccprotos[] = { "SEND ", "CHAT ", "MOVE ", "TSEND ", "SCHAT " }; 62 + static const char *dccprotos[] = { "SEND ", "CHAT ", "MOVE ", "TSEND ", "SCHAT " }; 63 63 #define MINMATCHLEN 5 64 64 65 65 #if 0
+2 -2
net/ipv4/netfilter/ip_conntrack_proto_icmp.c
··· 51 51 const struct ip_conntrack_tuple *orig) 52 52 { 53 53 /* Add 1; spaces filled with 0. */ 54 - static u_int8_t invmap[] 54 + static const u_int8_t invmap[] 55 55 = { [ICMP_ECHO] = ICMP_ECHOREPLY + 1, 56 56 [ICMP_ECHOREPLY] = ICMP_ECHO + 1, 57 57 [ICMP_TIMESTAMP] = ICMP_TIMESTAMPREPLY + 1, ··· 110 110 return NF_ACCEPT; 111 111 } 112 112 113 - static u_int8_t valid_new[] = { 113 + static const u_int8_t valid_new[] = { 114 114 [ICMP_ECHO] = 1, 115 115 [ICMP_TIMESTAMP] = 1, 116 116 [ICMP_INFO_REQUEST] = 1,
+2 -2
net/ipv4/netfilter/ip_conntrack_proto_sctp.c
··· 65 65 static unsigned long ip_ct_sctp_timeout_shutdown_recd = 300 SECS / 1000; 66 66 static unsigned long ip_ct_sctp_timeout_shutdown_ack_sent = 3 SECS; 67 67 68 - static unsigned long * sctp_timeouts[] 68 + static const unsigned long * sctp_timeouts[] 69 69 = { NULL, /* SCTP_CONNTRACK_NONE */ 70 70 &ip_ct_sctp_timeout_closed, /* SCTP_CONNTRACK_CLOSED */ 71 71 &ip_ct_sctp_timeout_cookie_wait, /* SCTP_CONNTRACK_COOKIE_WAIT */ ··· 118 118 */ 119 119 120 120 /* SCTP conntrack state transitions */ 121 - static enum sctp_conntrack sctp_conntracks[2][9][SCTP_CONNTRACK_MAX] = { 121 + static const enum sctp_conntrack sctp_conntracks[2][9][SCTP_CONNTRACK_MAX] = { 122 122 { 123 123 /* ORIGINAL */ 124 124 /* sNO, sCL, sCW, sCE, sES, sSS, sSR, sSA */
+3 -3
net/ipv4/netfilter/ip_conntrack_proto_tcp.c
··· 99 99 to ~13-30min depending on RTO. */ 100 100 unsigned long ip_ct_tcp_timeout_max_retrans = 5 MINS; 101 101 102 - static unsigned long * tcp_timeouts[] 102 + static const unsigned long * tcp_timeouts[] 103 103 = { NULL, /* TCP_CONNTRACK_NONE */ 104 104 &ip_ct_tcp_timeout_syn_sent, /* TCP_CONNTRACK_SYN_SENT, */ 105 105 &ip_ct_tcp_timeout_syn_recv, /* TCP_CONNTRACK_SYN_RECV, */ ··· 170 170 * if they are invalid 171 171 * or we do not support the request (simultaneous open) 172 172 */ 173 - static enum tcp_conntrack tcp_conntracks[2][6][TCP_CONNTRACK_MAX] = { 173 + static const enum tcp_conntrack tcp_conntracks[2][6][TCP_CONNTRACK_MAX] = { 174 174 { 175 175 /* ORIGINAL */ 176 176 /* sNO, sSS, sSR, sES, sFW, sCW, sLA, sTW, sCL, sLI */ ··· 817 817 #define TH_CWR 0x80 818 818 819 819 /* table of valid flag combinations - ECE and CWR are always valid */ 820 - static u8 tcp_valid_flags[(TH_FIN|TH_SYN|TH_RST|TH_PUSH|TH_ACK|TH_URG) + 1] = 820 + static const u8 tcp_valid_flags[(TH_FIN|TH_SYN|TH_RST|TH_PUSH|TH_ACK|TH_URG) + 1] = 821 821 { 822 822 [TH_SYN] = 1, 823 823 [TH_SYN|TH_ACK] = 1,
+1 -1
net/ipv4/netfilter/ip_nat_core.c
··· 49 49 static struct list_head *bysource; 50 50 51 51 #define MAX_IP_NAT_PROTO 256 52 - struct ip_nat_protocol *ip_nat_protos[MAX_IP_NAT_PROTO]; 52 + static struct ip_nat_protocol *ip_nat_protos[MAX_IP_NAT_PROTO]; 53 53 54 54 static inline struct ip_nat_protocol * 55 55 __ip_nat_proto_find(u_int8_t protonum)
+1 -1
net/ipv4/netfilter/ip_tables.c
··· 1892 1892 return pos; 1893 1893 } 1894 1894 1895 - static struct { char *name; get_info_t *get_info; } ipt_proc_entry[] = 1895 + static const struct { char *name; get_info_t *get_info; } ipt_proc_entry[] = 1896 1896 { { "ip_tables_names", ipt_get_tables }, 1897 1897 { "ip_tables_targets", ipt_get_targets }, 1898 1898 { "ip_tables_matches", ipt_get_matches },
+2 -2
net/ipv4/netfilter/ipt_LOG.c
··· 197 197 } 198 198 case IPPROTO_ICMP: { 199 199 struct icmphdr _icmph, *ich; 200 - static size_t required_len[NR_ICMP_TYPES+1] 200 + static const size_t required_len[NR_ICMP_TYPES+1] 201 201 = { [ICMP_ECHOREPLY] = 4, 202 202 [ICMP_DEST_UNREACH] 203 203 = 8 + sizeof(struct iphdr), ··· 351 351 /* maxlen = 230+ 91 + 230 + 252 = 803 */ 352 352 } 353 353 354 - struct nf_loginfo default_loginfo = { 354 + static struct nf_loginfo default_loginfo = { 355 355 .type = NF_LOG_TYPE_LOG, 356 356 .u = { 357 357 .log = {
+5 -5
net/ipv4/proc.c
··· 98 98 } 99 99 100 100 /* snmp items */ 101 - static struct snmp_mib snmp4_ipstats_list[] = { 101 + static const struct snmp_mib snmp4_ipstats_list[] = { 102 102 SNMP_MIB_ITEM("InReceives", IPSTATS_MIB_INRECEIVES), 103 103 SNMP_MIB_ITEM("InHdrErrors", IPSTATS_MIB_INHDRERRORS), 104 104 SNMP_MIB_ITEM("InAddrErrors", IPSTATS_MIB_INADDRERRORS), ··· 119 119 SNMP_MIB_SENTINEL 120 120 }; 121 121 122 - static struct snmp_mib snmp4_icmp_list[] = { 122 + static const struct snmp_mib snmp4_icmp_list[] = { 123 123 SNMP_MIB_ITEM("InMsgs", ICMP_MIB_INMSGS), 124 124 SNMP_MIB_ITEM("InErrors", ICMP_MIB_INERRORS), 125 125 SNMP_MIB_ITEM("InDestUnreachs", ICMP_MIB_INDESTUNREACHS), ··· 149 149 SNMP_MIB_SENTINEL 150 150 }; 151 151 152 - static struct snmp_mib snmp4_tcp_list[] = { 152 + static const struct snmp_mib snmp4_tcp_list[] = { 153 153 SNMP_MIB_ITEM("RtoAlgorithm", TCP_MIB_RTOALGORITHM), 154 154 SNMP_MIB_ITEM("RtoMin", TCP_MIB_RTOMIN), 155 155 SNMP_MIB_ITEM("RtoMax", TCP_MIB_RTOMAX), ··· 167 167 SNMP_MIB_SENTINEL 168 168 }; 169 169 170 - static struct snmp_mib snmp4_udp_list[] = { 170 + static const struct snmp_mib snmp4_udp_list[] = { 171 171 SNMP_MIB_ITEM("InDatagrams", UDP_MIB_INDATAGRAMS), 172 172 SNMP_MIB_ITEM("NoPorts", UDP_MIB_NOPORTS), 173 173 SNMP_MIB_ITEM("InErrors", UDP_MIB_INERRORS), ··· 175 175 SNMP_MIB_SENTINEL 176 176 }; 177 177 178 - static struct snmp_mib snmp4_net_list[] = { 178 + static const struct snmp_mib snmp4_net_list[] = { 179 179 SNMP_MIB_ITEM("SyncookiesSent", LINUX_MIB_SYNCOOKIESSENT), 180 180 SNMP_MIB_ITEM("SyncookiesRecv", LINUX_MIB_SYNCOOKIESRECV), 181 181 SNMP_MIB_ITEM("SyncookiesFailed", LINUX_MIB_SYNCOOKIESFAILED),
+2 -3
net/ipv4/route.c
··· 1371 1371 * are needed for AMPRnet AX.25 paths. 1372 1372 */ 1373 1373 1374 - static unsigned short mtu_plateau[] = 1374 + static const unsigned short mtu_plateau[] = 1375 1375 {32000, 17914, 8166, 4352, 2002, 1492, 576, 296, 216, 128 }; 1376 1376 1377 1377 static __inline__ unsigned short guess_mtu(unsigned short old_mtu) ··· 3149 3149 sizeof(struct rt_hash_bucket), 3150 3150 rhash_entries, 3151 3151 (num_physpages >= 128 * 1024) ? 3152 - (27 - PAGE_SHIFT) : 3153 - (29 - PAGE_SHIFT), 3152 + 15 : 17, 3154 3153 HASH_HIGHMEM, 3155 3154 &rt_hash_log, 3156 3155 &rt_hash_mask,
+3 -5
net/ipv4/tcp.c
··· 1413 1413 * closed. 1414 1414 */ 1415 1415 1416 - static unsigned char new_state[16] = { 1416 + static const unsigned char new_state[16] = { 1417 1417 /* current state: new state: action: */ 1418 1418 /* (Invalid) */ TCP_CLOSE, 1419 1419 /* TCP_ESTABLISHED */ TCP_FIN_WAIT1 | TCP_ACTION_FIN, ··· 2065 2065 sizeof(struct inet_ehash_bucket), 2066 2066 thash_entries, 2067 2067 (num_physpages >= 128 * 1024) ? 2068 - (25 - PAGE_SHIFT) : 2069 - (27 - PAGE_SHIFT), 2068 + 13 : 15, 2070 2069 HASH_HIGHMEM, 2071 2070 &tcp_hashinfo.ehash_size, 2072 2071 NULL, ··· 2081 2082 sizeof(struct inet_bind_hashbucket), 2082 2083 tcp_hashinfo.ehash_size, 2083 2084 (num_physpages >= 128 * 1024) ? 2084 - (25 - PAGE_SHIFT) : 2085 - (27 - PAGE_SHIFT), 2085 + 13 : 15, 2086 2086 HASH_HIGHMEM, 2087 2087 &tcp_hashinfo.bhash_size, 2088 2088 NULL,
+1 -1
net/ipv6/icmp.c
··· 751 751 inet6_del_protocol(&icmpv6_protocol, IPPROTO_ICMPV6); 752 752 } 753 753 754 - static struct icmp6_err { 754 + static const struct icmp6_err { 755 755 int err; 756 756 int fatal; 757 757 } tab_unreach[] = {
+2 -1
net/ipv6/ip6_output.c
··· 774 774 *dst = NULL; 775 775 return err; 776 776 } 777 - inline int ip6_ufo_append_data(struct sock *sk, 777 + 778 + static inline int ip6_ufo_append_data(struct sock *sk, 778 779 int getfrag(void *from, char *to, int offset, int len, 779 780 int odd, struct sk_buff *skb), 780 781 void *from, int length, int hh_len, int fragheaderlen,
+2 -2
net/ipv6/ipv6_sockglue.c
··· 628 628 return -EINVAL; 629 629 } 630 630 631 - int ipv6_getsockopt_sticky(struct sock *sk, struct ipv6_opt_hdr *hdr, 632 - char __user *optval, int len) 631 + static int ipv6_getsockopt_sticky(struct sock *sk, struct ipv6_opt_hdr *hdr, 632 + char __user *optval, int len) 633 633 { 634 634 if (!hdr) 635 635 return 0;
+1 -1
net/ipv6/netfilter/ip6_tables.c
··· 1972 1972 return pos; 1973 1973 } 1974 1974 1975 - static struct { char *name; get_info_t *get_info; } ip6t_proc_entry[] = 1975 + static const struct { char *name; get_info_t *get_info; } ip6t_proc_entry[] = 1976 1976 { { "ip6_tables_names", ip6t_get_tables }, 1977 1977 { "ip6_tables_targets", ip6t_get_targets }, 1978 1978 { "ip6_tables_matches", ip6t_get_matches },