diff options
70 files changed, 778 insertions, 791 deletions
diff --git a/crypto/Kconfig b/crypto/Kconfig index dbf89bbfe773..ec94570b88b2 100644 --- a/crypto/Kconfig +++ b/crypto/Kconfig @@ -7,7 +7,7 @@ menu "Cryptographic options" config CRYPTO bool "Cryptographic API" default y if INET_AH=y || INET_AH=m || INET_ESP=y || INET_ESP=m || INET6_AH=y || INET6_AH=m || \ - INET6_ESP=y || INET6_ESP=m + INET6_ESP=y || INET6_ESP=m || INET6_IPCOMP=y || INET6_IPCOMP=m || IPV6_PRIVACY=y help This option provides the core Cryptographic API. @@ -36,7 +36,7 @@ config CRYPTO_MD5 tristate "MD5 digest algorithm" depends on CRYPTO default y if INET_AH=y || INET_AH=m || INET_ESP=y || INET_ESP=m || INET6_AH=y || INET6_AH=m || \ - INET6_ESP=y || INET6_ESP=m + INET6_ESP=y || INET6_ESP=m || IPV6_PRIVACY=y help MD5 message digest algorithm (RFC1321). diff --git a/drivers/atm/Makefile b/drivers/atm/Makefile index c66d937fe2d5..7223e56760c2 100644 --- a/drivers/atm/Makefile +++ b/drivers/atm/Makefile @@ -8,7 +8,9 @@ fore_200e-objs := fore200e.o host-progs := fore200e_mkfirm # Files generated that shall be removed upon make clean -clean-files := {atmsar11,pca200e,pca200e_ecd,sba200e_ecd}.{bin,bin1,bin2} +clean-files := atmsar11.bin atmsar11.bin1 atmsar11.bin2 pca200e.bin \ + pca200e.bin1 pca200e.bin2 pca200e_ecd.bin pca200e_ecd.bin1 \ + pca200e_ecd.bin2 sba200e_ecd.bin sba200e_ecd.bin1 sba200e_ecd.bin2 # Firmware generated that shall be removed upon make clean clean-files += fore200e_pca_fw.c fore200e_sba_fw.c diff --git a/drivers/atm/he.c b/drivers/atm/he.c index 4e3d85b37cc8..3014fb0680d2 100644 --- a/drivers/atm/he.c +++ b/drivers/atm/he.c @@ -132,9 +132,9 @@ typedef void irqreturn_t; #undef DEBUG #ifdef DEBUG -#define HPRINTK(fmt,args...) hprintk(fmt,args) +#define HPRINTK(fmt,args...) printk(KERN_DEBUG DEV_LABEL "%d: " fmt, he_dev->number , ##args) #else -#define HPRINTK(fmt,args...) do { } while(0) +#define HPRINTK(fmt,args...) do { } while (0) #endif /* DEBUG */ @@ -179,9 +179,7 @@ static struct atmdev_ops he_ops = phy_put: he_phy_put, phy_get: he_phy_get, proc_read: he_proc_read, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,1) owner: THIS_MODULE -#endif }; /* see the comments in he.h about global_lock */ @@ -189,7 +187,7 @@ static struct atmdev_ops he_ops = #define HE_SPIN_LOCK(dev, flags) spin_lock_irqsave(&(dev)->global_lock, flags) #define HE_SPIN_UNLOCK(dev, flags) spin_unlock_irqrestore(&(dev)->global_lock, flags) -#define he_writel(dev, val, reg) do { writel(val, (dev)->membase + (reg)); wmb(); } while(0) +#define he_writel(dev, val, reg) do { writel(val, (dev)->membase + (reg)); wmb(); } while (0) #define he_readl(dev, reg) readl((dev)->membase + (reg)) /* section 2.12 connection memory access */ @@ -203,7 +201,7 @@ he_writel_internal(struct he_dev *he_dev, unsigned val, unsigned addr, (void) he_readl(he_dev, CON_DAT); #endif he_writel(he_dev, flags | CON_CTL_WRITE | CON_CTL_ADDR(addr), CON_CTL); - while(he_readl(he_dev, CON_CTL) & CON_CTL_BUSY); + while (he_readl(he_dev, CON_CTL) & CON_CTL_BUSY); } #define he_writel_rcm(dev, val, reg) \ @@ -219,7 +217,7 @@ static unsigned he_readl_internal(struct he_dev *he_dev, unsigned addr, unsigned flags) { he_writel(he_dev, flags | CON_CTL_READ | CON_CTL_ADDR(addr), CON_CTL); - while(he_readl(he_dev, CON_CTL) & CON_CTL_BUSY); + while (he_readl(he_dev, CON_CTL) & CON_CTL_BUSY); return he_readl(he_dev, CON_DAT); } @@ -374,7 +372,8 @@ he_init_one(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent) printk(KERN_INFO "he: %s\n", version); - if (pci_enable_device(pci_dev)) return -EIO; + if (pci_enable_device(pci_dev)) + return -EIO; if (pci_set_dma_mask(pci_dev, HE_DMA_MASK) != 0) { printk(KERN_WARNING "he: no suitable dma available\n"); err = -EIO; @@ -407,7 +406,8 @@ he_init_one(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent) goto init_one_failure; } he_dev->next = NULL; - if (he_devs) he_dev->next = he_devs; + if (he_devs) + he_dev->next = he_devs; he_devs = he_dev; return 0; @@ -447,11 +447,11 @@ rate_to_atmf(unsigned rate) /* cps to atm forum format */ unsigned exp = 0; - if (rate == 0) return(0); + if (rate == 0) + return(0); rate <<= 9; - while (rate > 0x3ff) - { + while (rate > 0x3ff) { ++exp; rate >>= 1; } @@ -472,16 +472,14 @@ he_init_rx_lbfp0(struct he_dev *he_dev) he_writel(he_dev, lbufd_index, RLBF0_H); - for (i = 0, lbuf_count = 0; i < he_dev->r0_numbuffs; ++i) - { + for (i = 0, lbuf_count = 0; i < he_dev->r0_numbuffs; ++i) { lbufd_index += 2; lbuf_addr = (row_offset + (lbuf_count * lbuf_bufsize)) / 32; he_writel_rcm(he_dev, lbuf_addr, lbm_offset); he_writel_rcm(he_dev, lbufd_index, lbm_offset + 1); - if (++lbuf_count == lbufs_per_row) - { + if (++lbuf_count == lbufs_per_row) { lbuf_count = 0; row_offset += he_dev->bytes_per_row; } @@ -505,16 +503,14 @@ he_init_rx_lbfp1(struct he_dev *he_dev) he_writel(he_dev, lbufd_index, RLBF1_H); - for (i = 0, lbuf_count = 0; i < he_dev->r1_numbuffs; ++i) - { + for (i = 0, lbuf_count = 0; i < he_dev->r1_numbuffs; ++i) { lbufd_index += 2; lbuf_addr = (row_offset + (lbuf_count * lbuf_bufsize)) / 32; he_writel_rcm(he_dev, lbuf_addr, lbm_offset); he_writel_rcm(he_dev, lbufd_index, lbm_offset + 1); - if (++lbuf_count == lbufs_per_row) - { + if (++lbuf_count == lbufs_per_row) { lbuf_count = 0; row_offset += he_dev->bytes_per_row; } @@ -538,16 +534,14 @@ he_init_tx_lbfp(struct he_dev *he_dev) he_writel(he_dev, lbufd_index, TLBF_H); - for (i = 0, lbuf_count = 0; i < he_dev->tx_numbuffs; ++i) - { + for (i = 0, lbuf_count = 0; i < he_dev->tx_numbuffs; ++i) { lbufd_index += 1; lbuf_addr = (row_offset + (lbuf_count * lbuf_bufsize)) / 32; he_writel_rcm(he_dev, lbuf_addr, lbm_offset); he_writel_rcm(he_dev, lbufd_index, lbm_offset + 1); - if (++lbuf_count == lbufs_per_row) - { + if (++lbuf_count == lbufs_per_row) { lbuf_count = 0; row_offset += he_dev->bytes_per_row; } @@ -562,8 +556,7 @@ he_init_tpdrq(struct he_dev *he_dev) { he_dev->tpdrq_base = pci_alloc_consistent(he_dev->pci_dev, CONFIG_TPDRQ_SIZE * sizeof(struct he_tpdrq), &he_dev->tpdrq_phys); - if (he_dev->tpdrq_base == NULL) - { + if (he_dev->tpdrq_base == NULL) { hprintk("failed to alloc tpdrq\n"); return -ENOMEM; } @@ -588,7 +581,7 @@ he_init_cs_block(struct he_dev *he_dev) /* 5.1.7 cs block initialization */ - for(reg = 0; reg < 0x20; ++reg) + for (reg = 0; reg < 0x20; ++reg) he_writel_mbox(he_dev, 0x0, CS_STTIM0 + reg); /* rate grid timer reload values */ @@ -597,8 +590,7 @@ he_init_cs_block(struct he_dev *he_dev) rate = he_dev->atm_dev->link_rate; delta = rate / 16 / 2; - for(reg = 0; reg < 0x10; ++reg) - { + for (reg = 0; reg < 0x10; ++reg) { /* 2.4 internal transmit function * * we initialize the first row in the rate grid. @@ -610,8 +602,7 @@ he_init_cs_block(struct he_dev *he_dev) rate -= delta; } - if (he_is622(he_dev)) - { + if (he_is622(he_dev)) { /* table 5.2 (4 cells per lbuf) */ he_writel_mbox(he_dev, 0x000800fa, CS_ERTHR0); he_writel_mbox(he_dev, 0x000c33cb, CS_ERTHR1); @@ -640,9 +631,7 @@ he_init_cs_block(struct he_dev *he_dev) /* table 5.9 */ he_writel_mbox(he_dev, 0x5, CS_OTPPER); he_writel_mbox(he_dev, 0x14, CS_OTWPER); - } - else - { + } else { /* table 5.1 (4 cells per lbuf) */ he_writel_mbox(he_dev, 0x000400ea, CS_ERTHR0); he_writel_mbox(he_dev, 0x00063388, CS_ERTHR1); @@ -671,20 +660,19 @@ he_init_cs_block(struct he_dev *he_dev) /* table 5.9 */ he_writel_mbox(he_dev, 0x6, CS_OTPPER); he_writel_mbox(he_dev, 0x1e, CS_OTWPER); - } he_writel_mbox(he_dev, 0x8, CS_OTTLIM); - for(reg = 0; reg < 0x8; ++reg) + for (reg = 0; reg < 0x8; ++reg) he_writel_mbox(he_dev, 0x0, CS_HGRRT0 + reg); } -static void __init +static int __init he_init_cs_block_rcm(struct he_dev *he_dev) { - unsigned rategrid[16][16]; + unsigned (*rategrid)[16][16]; unsigned rate, delta; int i, j, reg; @@ -692,6 +680,10 @@ he_init_cs_block_rcm(struct he_dev *he_dev) unsigned long long rate_cps; int mult, buf, buf_limit = 4; + rategrid = kmalloc( sizeof(unsigned) * 16 * 16, GFP_KERNEL); + if (!rategrid) + return -ENOMEM; + /* initialize rate grid group table */ for (reg = 0x0; reg < 0xff; ++reg) @@ -720,18 +712,17 @@ he_init_cs_block_rcm(struct he_dev *he_dev) * in order to construct the rate to group table below */ - for (j = 0; j < 16; j++) - { - rategrid[0][j] = rate; + for (j = 0; j < 16; j++) { + (*rategrid)[0][j] = rate; rate -= delta; } for (i = 1; i < 16; i++) for (j = 0; j < 16; j++) if (i > 14) - rategrid[i][j] = rategrid[i - 1][j] / 4; + (*rategrid)[i][j] = (*rategrid)[i - 1][j] / 4; else - rategrid[i][j] = rategrid[i - 1][j] / 2; + (*rategrid)[i][j] = (*rategrid)[i - 1][j] / 2; /* * 2.4 transmit internal function @@ -742,8 +733,7 @@ he_init_cs_block_rcm(struct he_dev *he_dev) */ rate_atmf = 0; - while (rate_atmf < 0x400) - { + while (rate_atmf < 0x400) { man = (rate_atmf & 0x1f) << 4; exp = rate_atmf >> 5; @@ -753,12 +743,12 @@ he_init_cs_block_rcm(struct he_dev *he_dev) */ rate_cps = (unsigned long long) (1 << exp) * (man + 512) >> 9; - if (rate_cps < 10) rate_cps = 10; - /* 2.2.1 minimum payload rate is 10 cps */ + if (rate_cps < 10) + rate_cps = 10; /* 2.2.1 minimum payload rate is 10 cps */ for (i = 255; i > 0; i--) - if (rategrid[i/16][i%16] >= rate_cps) break; - /* pick nearest rate instead? */ + if ((*rategrid)[i/16][i%16] >= rate_cps) + break; /* pick nearest rate instead? */ /* * each table entry is 16 bits: (rate grid index (8 bits) @@ -773,12 +763,17 @@ he_init_cs_block_rcm(struct he_dev *he_dev) /* this is pretty, but avoids _divdu3 and is mostly correct */ buf = 0; mult = he_dev->atm_dev->link_rate / ATM_OC3_PCR; - if (rate_cps > (68 * mult)) buf = 1; - if (rate_cps > (136 * mult)) buf = 2; - if (rate_cps > (204 * mult)) buf = 3; - if (rate_cps > (272 * mult)) buf = 4; + if (rate_cps > (68 * mult)) + buf = 1; + if (rate_cps > (136 * mult)) + buf = 2; + if (rate_cps > (204 * mult)) + buf = 3; + if (rate_cps > (272 * mult)) + buf = 4; #endif - if (buf > buf_limit) buf = buf_limit; + if (buf > buf_limit) + buf = buf_limit; reg = (reg<<16) | ((i<<8) | buf); #define RTGTBL_OFFSET 0x400 @@ -789,6 +784,9 @@ he_init_cs_block_rcm(struct he_dev *he_dev) ++rate_atmf; } + + kfree(rategrid); + return 0; } static int __init @@ -801,8 +799,7 @@ he_init_group(struct he_dev *he_dev, int group) #ifdef USE_RBPS_POOL he_dev->rbps_pool = pci_pool_create("rbps", he_dev->pci_dev, CONFIG_RBPS_BUFSIZE, 8, 0); - if (he_dev->rbps_pool == NULL) - { + if (he_dev->rbps_pool == NULL) { hprintk("unable to create rbps pages\n"); return -ENOMEM; } @@ -817,16 +814,14 @@ he_init_group(struct he_dev *he_dev, int group) he_dev->rbps_base = pci_alloc_consistent(he_dev->pci_dev, CONFIG_RBPS_SIZE * sizeof(struct he_rbp), &he_dev->rbps_phys); - if (he_dev->rbps_base == NULL) - { + if (he_dev->rbps_base == NULL) { hprintk("failed to alloc rbps\n"); return -ENOMEM; } memset(he_dev->rbps_base, 0, CONFIG_RBPS_SIZE * sizeof(struct he_rbp)); he_dev->rbps_virt = kmalloc(CONFIG_RBPS_SIZE * sizeof(struct he_virt), GFP_KERNEL); - for (i = 0; i < CONFIG_RBPS_SIZE; ++i) - { + for (i = 0; i < CONFIG_RBPS_SIZE; ++i) { dma_addr_t dma_handle; void *cpuaddr; @@ -868,16 +863,14 @@ he_init_group(struct he_dev *he_dev, int group) #ifdef USE_RBPL_POOL he_dev->rbpl_pool = pci_pool_create("rbpl", he_dev->pci_dev, CONFIG_RBPL_BUFSIZE, 8, 0); - if (he_dev->rbpl_pool == NULL) - { + if (he_dev->rbpl_pool == NULL) { hprintk("unable to create rbpl pool\n"); return -ENOMEM; } #else /* !USE_RBPL_POOL */ he_dev->rbpl_pages = (void *) pci_alloc_consistent(he_dev->pci_dev, CONFIG_RBPL_SIZE * CONFIG_RBPL_BUFSIZE, &he_dev->rbpl_pages_phys); - if (he_dev->rbpl_pages == NULL) - { + if (he_dev->rbpl_pages == NULL) { hprintk("unable to create rbpl pages\n"); return -ENOMEM; } @@ -885,16 +878,14 @@ he_init_group(struct he_dev *he_dev, int group) he_dev->rbpl_base = pci_alloc_consistent(he_dev->pci_dev, CONFIG_RBPL_SIZE * sizeof(struct he_rbp), &he_dev->rbpl_phys); - if (he_dev->rbpl_base == NULL) - { + if (he_dev->rbpl_base == NULL) { hprintk("failed to alloc rbpl\n"); return -ENOMEM; } memset(he_dev->rbpl_base, 0, CONFIG_RBPL_SIZE * sizeof(struct he_rbp)); he_dev->rbpl_virt = kmalloc(CONFIG_RBPL_SIZE * sizeof(struct he_virt), GFP_KERNEL); - for (i = 0; i < CONFIG_RBPL_SIZE; ++i) - { + for (i = 0; i < CONFIG_RBPL_SIZE; ++i) { dma_addr_t dma_handle; void *cpuaddr; @@ -910,7 +901,6 @@ he_init_group(struct he_dev *he_dev, int group) he_dev->rbpl_virt[i].virt = cpuaddr; he_dev->rbpl_base[i].status = RBP_LOANED | (i << RBP_INDEX_OFF); he_dev->rbpl_base[i].phys = dma_handle; - } he_dev->rbpl_tail = &he_dev->rbpl_base[CONFIG_RBPL_SIZE-1]; @@ -929,8 +919,7 @@ he_init_group(struct he_dev *he_dev, int group) he_dev->rbrq_base = pci_alloc_consistent(he_dev->pci_dev, CONFIG_RBRQ_SIZE * sizeof(struct he_rbrq), &he_dev->rbrq_phys); - if (he_dev->rbrq_base == NULL) - { + if (he_dev->rbrq_base == NULL) { hprintk("failed to allocate rbrq\n"); return -ENOMEM; } @@ -942,13 +931,11 @@ he_init_group(struct he_dev *he_dev, int group) he_writel(he_dev, RBRQ_THRESH(CONFIG_RBRQ_THRESH) | RBRQ_SIZE(CONFIG_RBRQ_SIZE-1), G0_RBRQ_Q + (group * 16)); - if (irq_coalesce) - { + if (irq_coalesce) { hprintk("coalescing interrupts\n"); he_writel(he_dev, RBRQ_TIME(768) | RBRQ_COUNT(7), G0_RBRQ_I + (group * 16)); - } - else + } else he_writel(he_dev, RBRQ_TIME(0) | RBRQ_COUNT(1), G0_RBRQ_I + (group * 16)); @@ -956,8 +943,7 @@ he_init_group(struct he_dev *he_dev, int group) he_dev->tbrq_base = pci_alloc_consistent(he_dev->pci_dev, CONFIG_TBRQ_SIZE * sizeof(struct he_tbrq), &he_dev->tbrq_phys); - if (he_dev->tbrq_base == NULL) - { + if (he_dev->tbrq_base == NULL) { hprintk("failed to allocate tbrq\n"); return -ENOMEM; } @@ -983,8 +969,7 @@ he_init_irq(struct he_dev *he_dev) he_dev->irq_base = pci_alloc_consistent(he_dev->pci_dev, (CONFIG_IRQ_SIZE+1) * sizeof(struct he_irq), &he_dev->irq_phys); - if (he_dev->irq_base == NULL) - { + if (he_dev->irq_base == NULL) { hprintk("failed to allocate irq\n"); return -ENOMEM; } @@ -994,7 +979,7 @@ he_init_irq(struct he_dev *he_dev) he_dev->irq_head = he_dev->irq_base; he_dev->irq_tail = he_dev->irq_base; - for(i=0; i < CONFIG_IRQ_SIZE; ++i) + for (i=0; i < CONFIG_IRQ_SIZE; ++i) he_dev->irq_base[i].isw = ITYPE_INVALID; he_writel(he_dev, he_dev->irq_phys, IRQ0_BASE); @@ -1026,8 +1011,7 @@ he_init_irq(struct he_dev *he_dev) he_writel(he_dev, 0x0, GRP_54_MAP); he_writel(he_dev, 0x0, GRP_76_MAP); - if (request_irq(he_dev->pci_dev->irq, he_irq_handler, SA_INTERRUPT|SA_SHIRQ, DEV_LABEL, he_dev)) - { + if (request_irq(he_dev->pci_dev->irq, he_irq_handler, SA_INTERRUPT|SA_SHIRQ, DEV_LABEL, he_dev)) { hprintk("irq %d already in use\n", he_dev->pci_dev->irq); return -EINVAL; } @@ -1067,46 +1051,39 @@ he_start(struct atm_dev *dev) */ /* 4.3 pci bus controller-specific initialization */ - if (pci_read_config_dword(pci_dev, GEN_CNTL_0, &gen_cntl_0) != 0) - { + if (pci_read_config_dword(pci_dev, GEN_CNTL_0, &gen_cntl_0) != 0) { hprintk("can't read GEN_CNTL_0\n"); return -EINVAL; } gen_cntl_0 |= (MRL_ENB | MRM_ENB | IGNORE_TIMEOUT); - if (pci_write_config_dword(pci_dev, GEN_CNTL_0, gen_cntl_0) != 0) - { + if (pci_write_config_dword(pci_dev, GEN_CNTL_0, gen_cntl_0) != 0) { hprintk("can't write GEN_CNTL_0.\n"); return -EINVAL; } - if (pci_read_config_word(pci_dev, PCI_COMMAND, &command) != 0) - { + if (pci_read_config_word(pci_dev, PCI_COMMAND, &command) != 0) { hprintk("can't read PCI_COMMAND.\n"); return -EINVAL; } command |= (PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE); - if (pci_write_config_word(pci_dev, PCI_COMMAND, command) != 0) - { + if (pci_write_config_word(pci_dev, PCI_COMMAND, command) != 0) { hprintk("can't enable memory.\n"); return -EINVAL; } - if (pci_read_config_byte(pci_dev, PCI_CACHE_LINE_SIZE, &cache_size)) - { + if (pci_read_config_byte(pci_dev, PCI_CACHE_LINE_SIZE, &cache_size)) { hprintk("can't read cache line size?\n"); return -EINVAL; } - if (cache_size < 16) - { + if (cache_size < 16) { cache_size = 16; if (pci_write_config_byte(pci_dev, PCI_CACHE_LINE_SIZE, cache_size)) hprintk("can't set cache line size to %d\n", cache_size); } - if (pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER, &timer)) - { + if (pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER, &timer)) { hprintk("can't read latency timer?\n"); return -EINVAL; } @@ -1120,8 +1097,7 @@ he_start(struct atm_dev *dev) * */ #define LAT_TIMER 209 - if (timer < LAT_TIMER) - { + if (timer < LAT_TIMER) { HPRINTK("latency timer was %d, setting to %d\n", timer, LAT_TIMER); timer = LAT_TIMER; if (pci_write_config_byte(pci_dev, PCI_LATENCY_TIMER, timer)) @@ -1139,8 +1115,7 @@ he_start(struct atm_dev *dev) udelay(16*1000); /* 16 ms */ status = he_readl(he_dev, RESET_CNTL); - if ((status & BOARD_RST_STATUS) == 0) - { + if ((status & BOARD_RST_STATUS) == 0) { hprintk("reset failed\n"); return -EINVAL; } @@ -1152,23 +1127,23 @@ he_start(struct atm_dev *dev) else gen_cntl_0 &= ~ENBL_64; - if (disable64 == 1) - { + if (disable64 == 1) { hprintk("disabling 64-bit pci bus transfers\n"); gen_cntl_0 &= ~ENBL_64; } - if (gen_cntl_0 & ENBL_64) hprintk("64-bit transfers enabled\n"); + if (gen_cntl_0 & ENBL_64) + hprintk("64-bit transfers enabled\n"); pci_write_config_dword(pci_dev, GEN_CNTL_0, gen_cntl_0); /* 4.7 read prom contents */ - for(i=0; i<PROD_ID_LEN; ++i) + for (i=0; i<PROD_ID_LEN; ++i) he_dev->prod_id[i] = read_prom_byte(he_dev, PROD_ID + i); he_dev->media = read_prom_byte(he_dev, MEDIA); - for(i=0; i<6; ++i) + for (i=0; i<6; ++i) dev->esi[i] = read_prom_byte(he_dev, MAC_ADDR + i); hprintk("%s%s, %x:%x:%x:%x:%x:%x\n", @@ -1205,7 +1180,8 @@ he_start(struct atm_dev *dev) he_writel(he_dev, lb_swap, LB_SWAP); /* 4.10 initialize the interrupt queues */ - if ((err = he_init_irq(he_dev)) != 0) return err; + if ((err = he_init_irq(he_dev)) != 0) + return err; #ifdef USE_TASKLET tasklet_init(&he_dev->tasklet, he_tasklet, (unsigned long) he_dev); @@ -1258,27 +1234,23 @@ he_start(struct atm_dev *dev) he_dev->vcibits = CONFIG_DEFAULT_VCIBITS; he_dev->vpibits = CONFIG_DEFAULT_VPIBITS; - if (nvpibits != -1 && nvcibits != -1 && nvpibits+nvcibits != HE_MAXCIDBITS) - { + if (nvpibits != -1 && nvcibits != -1 && nvpibits+nvcibits != HE_MAXCIDBITS) { hprintk("nvpibits + nvcibits != %d\n", HE_MAXCIDBITS); return -ENODEV; } - if (nvpibits != -1) - { + if (nvpibits != -1) { he_dev->vpibits = nvpibits; he_dev->vcibits = HE_MAXCIDBITS - nvpibits; } - if (nvcibits != -1) - { + if (nvcibits != -1) { he_dev->vcibits = nvcibits; he_dev->vpibits = HE_MAXCIDBITS - nvcibits; } - if (he_is622(he_dev)) - { + if (he_is622(he_dev)) { he_dev->cells_per_row = 40; he_dev->bytes_per_row = 2048; he_dev->r0_numrows = 256; @@ -1287,9 +1259,7 @@ he_start(struct atm_dev *dev) he_dev->r0_startrow = 0; he_dev->tx_startrow = 256; he_dev->r1_startrow = 768; - } - else - { + } else { he_dev->cells_per_row = 20; he_dev->bytes_per_row = 1024; he_dev->r0_numrows = 512; @@ -1304,15 +1274,18 @@ he_start(struct atm_dev *dev) he_dev->buffer_limit = 4; he_dev->r0_numbuffs = he_dev->r0_numrows * he_dev->cells_per_row / he_dev->cells_per_lbuf; - if (he_dev->r0_numbuffs > 2560) he_dev->r0_numbuffs = 2560; + if (he_dev->r0_numbuffs > 2560) + he_dev->r0_numbuffs = 2560; he_dev->r1_numbuffs = he_dev->r1_numrows * he_dev->cells_per_row / he_dev->cells_per_lbuf; - if (he_dev->r1_numbuffs > 2560) he_dev->r1_numbuffs = 2560; + if (he_dev->r1_numbuffs > 2560) + he_dev->r1_numbuffs = 2560; he_dev->tx_numbuffs = he_dev->tx_numrows * he_dev->cells_per_row / he_dev->cells_per_lbuf; - if (he_dev->tx_numbuffs > 5120) he_dev->tx_numbuffs = 5120; + if (he_dev->tx_numbuffs > 5120) + he_dev->tx_numbuffs = 5120; /* 5.1.2 configure hardware dependent registers */ @@ -1355,10 +1328,10 @@ he_start(struct atm_dev *dev) /* 5.1.3 initialize connection memory */ - for(i=0; i < TCM_MEM_SIZE; ++i) + for (i=0; i < TCM_MEM_SIZE; ++i) he_writel_tcm(he_dev, 0, i); - for(i=0; i < RCM_MEM_SIZE; ++i) + for (i=0; i < RCM_MEM_SIZE; ++i) he_writel_rcm(he_dev, 0, i); /* @@ -1448,8 +1421,7 @@ he_start(struct atm_dev *dev) /* 5.1.5 initialize intermediate receive queues */ - if (he_is622(he_dev)) - { + if (he_is622(he_dev)) { he_writel(he_dev, 0x000f, G0_INMQ_S); he_writel(he_dev, 0x200f, G0_INMQ_L); @@ -1473,9 +1445,7 @@ he_start(struct atm_dev *dev) he_writel(he_dev, 0x007f, G7_INMQ_S); he_writel(he_dev, 0x207f, G7_INMQ_L); - } - else - { + } else { he_writel(he_dev, 0x0000, G0_INMQ_S); he_writel(he_dev, 0x0008, G0_INMQ_L); @@ -1514,7 +1484,8 @@ he_start(struct atm_dev *dev) /* 5.1.8 cs block connection memory initialization */ - he_init_cs_block_rcm(he_dev); + if (he_init_cs_block_rcm(he_dev) < 0) + return -ENOMEM; /* 5.1.10 initialize host structures */ @@ -1523,8 +1494,7 @@ he_start(struct atm_dev *dev) #ifdef USE_TPD_POOL he_dev->tpd_pool = pci_pool_create("tpd", he_dev->pci_dev, sizeof(struct he_tpd), TPD_ALIGNMENT, 0); - if (he_dev->tpd_pool == NULL) - { + if (he_dev->tpd_pool == NULL) { hprintk("unable to create tpd pci_pool\n"); return -ENOMEM; } @@ -1536,8 +1506,7 @@ he_start(struct atm_dev *dev) if (!he_dev->tpd_base) return -ENOMEM; - for(i = 0; i < CONFIG_NUMTPDS; ++i) - { + for (i = 0; i < CONFIG_NUMTPDS; ++i) { he_dev->tpd_base[i].status = (i << TPD_ADDR_SHIFT); he_dev->tpd_base[i].inuse = 0; } @@ -1549,8 +1518,7 @@ he_start(struct atm_dev *dev) if (he_init_group(he_dev, 0) != 0) return -ENOMEM; - for (group = 1; group < HE_NUM_GROUPS; ++group) - { + for (group = 1; group < HE_NUM_GROUPS; ++group) { he_writel(he_dev, 0x0, G0_RBPS_S + (group * 32)); he_writel(he_dev, 0x0, G0_RBPS_T + (group * 32)); he_writel(he_dev, 0x0, G0_RBPS_QI + (group * 32)); @@ -1580,8 +1548,7 @@ he_start(struct atm_dev *dev) he_dev->hsp = pci_alloc_consistent(he_dev->pci_dev, sizeof(struct he_hsp), &he_dev->hsp_phys); - if (he_dev->hsp == NULL) - { + if (he_dev->hsp == NULL) { hprintk("failed to allocate host status page\n"); return -ENOMEM; } @@ -1596,8 +1563,7 @@ he_start(struct atm_dev *dev) he_dev->atm_dev->phy->start(he_dev->atm_dev); #endif /* CONFIG_ATM_HE_USE_SUNI */ - if (sdh) - { + if (sdh) { /* this really should be in suni.c but for now... */ int val; @@ -1620,8 +1586,7 @@ he_start(struct atm_dev *dev) #ifndef USE_HE_FIND_VCC he_dev->he_vcc_table = kmalloc(sizeof(struct he_vcc_table) * (1 << (he_dev->vcibits + he_dev->vpibits)), GFP_KERNEL); - if (he_dev->he_vcc_table == NULL) - { + if (he_dev->he_vcc_table == NULL) { hprintk("failed to alloc he_vcc_table\n"); return -ENOMEM; } @@ -1629,8 +1594,7 @@ he_start(struct atm_dev *dev) (1 << (he_dev->vcibits + he_dev->vpibits))); #endif - for (i = 0; i < HE_NUM_CS_STPER; ++i) - { + for (i = 0; i < HE_NUM_CS_STPER; ++i) { he_dev->cs_stper[i].inuse = 0; he_dev->cs_stper[i].pcr = -1; } @@ -1663,8 +1627,7 @@ he_stop(struct he_dev *he_dev) /* disable interrupts */ - if (he_dev->membase) - { + if (he_dev->membase) { pci_read_config_dword(pci_dev, GEN_CNTL_0, &gen_cntl_0); gen_cntl_0 &= ~(INT_PROC_ENBL | INIT_ENB); pci_write_config_dword(pci_dev, GEN_CNTL_0, gen_cntl_0); @@ -1689,8 +1652,7 @@ he_stop(struct he_dev *he_dev) he_dev->atm_dev->phy->stop(he_dev->atm_dev); #endif /* CONFIG_ATM_HE_USE_SUNI */ - if (he_dev->irq) - { + if (he_dev->irq) { #ifdef BUS_INT_WAR sn_delete_polled_interrupt(he_dev->irq); #endif @@ -1705,11 +1667,9 @@ he_stop(struct he_dev *he_dev) pci_free_consistent(he_dev->pci_dev, sizeof(struct he_hsp), he_dev->hsp, he_dev->hsp_phys); - if (he_dev->rbpl_base) - { + if (he_dev->rbpl_base) { #ifdef USE_RBPL_POOL - for (i=0; i<CONFIG_RBPL_SIZE; ++i) - { + for (i=0; i<CONFIG_RBPL_SIZE; ++i) { void *cpuaddr = he_dev->rbpl_virt[i].virt; dma_addr_t dma_handle = he_dev->rbpl_base[i].phys; @@ -1729,11 +1689,9 @@ he_stop(struct he_dev *he_dev) #endif #ifdef USE_RBPS - if (he_dev->rbps_base) - { + if (he_dev->rbps_base) { #ifdef USE_RBPS_POOL - for (i=0; i<CONFIG_RBPS_SIZE; ++i) - { + for (i=0; i<CONFIG_RBPS_SIZE; ++i) { void *cpuaddr = he_dev->rbps_virt[i].virt; dma_addr_t dma_handle = he_dev->rbps_base[i].phys; @@ -1780,14 +1738,14 @@ he_stop(struct he_dev *he_dev) kfree(he_dev->he_vcc_table); #endif - if (he_dev->pci_dev) - { + if (he_dev->pci_dev) { pci_read_config_word(he_dev->pci_dev, PCI_COMMAND, &command); command &= ~(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER); pci_write_config_word(he_dev->pci_dev, PCI_COMMAND, command); } - if (he_dev->membase) iounmap((void *) he_dev->membase); + if (he_dev->membase) + iounmap((void *) he_dev->membase); } static struct he_tpd * @@ -1811,8 +1769,7 @@ __alloc_tpd(struct he_dev *he_dev) #else int i; - for(i = 0; i < CONFIG_NUMTPDS; ++i) - { + for (i = 0; i < CONFIG_NUMTPDS; ++i) { ++he_dev->tpd_head; if (he_dev->tpd_head > he_dev->tpd_end) { he_dev->tpd_head = he_dev->tpd_base; @@ -1862,8 +1819,7 @@ he_service_rbrq(struct he_dev *he_dev, int group) int pdus_assembled = 0; int updated = 0; - while (he_dev->rbrq_head != rbrq_tail) - { + while (he_dev->rbrq_head != rbrq_tail) { ++updated; HPRINTK("%p rbrq%d 0x%x len=%d cid=0x%x %s%s%s%s%s%s\n", @@ -1895,8 +1851,7 @@ he_service_rbrq(struct he_dev *he_dev, int group) #else vcc = HE_LOOKUP_VCC(he_dev, cid); #endif - if (vcc == NULL) - { + if (vcc == NULL) { hprintk("vcc == NULL (cid 0x%x)\n", cid); if (!RBRQ_HBUF_ERR(he_dev->rbrq_head)) rbp->status &= ~RBP_LOANED; @@ -1905,16 +1860,14 @@ he_service_rbrq(struct he_dev *he_dev, int group) } he_vcc = HE_VCC(vcc); - if (he_vcc == NULL) - { + if (he_vcc == NULL) { hprintk("he_vcc == NULL (cid 0x%x)\n", cid); if (!RBRQ_HBUF_ERR(he_dev->rbrq_head)) rbp->status &= ~RBP_LOANED; goto next_rbrq_entry; } - if (RBRQ_HBUF_ERR(he_dev->rbrq_head)) - { + if (RBRQ_HBUF_ERR(he_dev->rbrq_head)) { hprintk("HBUF_ERR! (cid 0x%x)\n", cid); atomic_inc(&vcc->stats->rx_drop); goto return_host_buffers; @@ -1925,8 +1878,7 @@ he_service_rbrq(struct he_dev *he_dev, int group) he_vcc->pdu_len += buf_len; ++he_vcc->iov_tail; - if (RBRQ_CON_CLOSED(he_dev->rbrq_head)) - { + if (RBRQ_CON_CLOSED(he_dev->rbrq_head)) { lastcid = -1; HPRINTK("wake_up rx_waitq (cid 0x%x)\n", cid); wake_up(&he_vcc->rx_waitq); @@ -1934,17 +1886,16 @@ he_service_rbrq(struct he_dev *he_dev, int group) } #ifdef notdef - if ((he_vcc->iov_tail - he_vcc->iov_head) > HE_MAXIOV) - { + if ((he_vcc->iov_tail - he_vcc->iov_head) > HE_MAXIOV) { hprintk("iovec full! cid 0x%x\n", cid); goto return_host_buffers; } #endif - if (!RBRQ_END_PDU(he_dev->rbrq_head)) goto next_rbrq_entry; + if (!RBRQ_END_PDU(he_dev->rbrq_head)) + goto next_rbrq_entry; if (RBRQ_LEN_ERR(he_dev->rbrq_head) - || RBRQ_CRC_ERR(he_dev->rbrq_head)) - { + || RBRQ_CRC_ERR(he_dev->rbrq_head)) { HPRINTK("%s%s (%d.%d)\n", RBRQ_CRC_ERR(he_dev->rbrq_head) ? "CRC_ERR " : "", @@ -1957,19 +1908,18 @@ he_service_rbrq(struct he_dev *he_dev, int group) skb = atm_alloc_charge(vcc, he_vcc->pdu_len + rx_skb_reserve, GFP_ATOMIC); - if (!skb) - { + if (!skb) { HPRINTK("charge failed (%d.%d)\n", vcc->vpi, vcc->vci); goto return_host_buffers; } - if (rx_skb_reserve > 0) skb_reserve(skb, rx_skb_reserve); + if (rx_skb_reserve > 0) + skb_reserve(skb, rx_skb_reserve); do_gettimeofday(&skb->stamp); - for(iov = he_vcc->iov_head; - iov < he_vcc->iov_tail; ++iov) - { + for (iov = he_vcc->iov_head; + iov < he_vcc->iov_tail; ++iov) { #ifdef USE_RBPS if (iov->iov_base & RBP_SMALLBUF) memcpy(skb_put(skb, iov->iov_len), @@ -1980,8 +1930,7 @@ he_service_rbrq(struct he_dev *he_dev, int group) he_dev->rbpl_virt[RBP_INDEX(iov->iov_base)].virt, iov->iov_len); } - switch(vcc->qos.aal) - { + switch (vcc->qos.aal) { case ATM_AAL0: /* 2.10.1.5 raw cell receive */ skb->len = ATM_AAL0_SDU; @@ -1993,8 +1942,7 @@ he_service_rbrq(struct he_dev *he_dev, int group) skb->len = AAL5_LEN(skb->data, he_vcc->pdu_len); skb->tail = skb->data + skb->len; #ifdef USE_CHECKSUM_HW - if (vcc->vpi == 0 && vcc->vci >= ATM_NOT_RSV_VCI) - { + if (vcc->vpi == 0 && vcc->vci >= ATM_NOT_RSV_VCI) { skb->ip_summed = CHECKSUM_HW; skb->csum = TCP_CKSUM(skb->data, he_vcc->pdu_len); @@ -2018,9 +1966,8 @@ he_service_rbrq(struct he_dev *he_dev, int group) return_host_buffers: ++pdus_assembled; - for(iov = he_vcc->iov_head; - iov < he_vcc->iov_tail; ++iov) - { + for (iov = he_vcc->iov_head; + iov < he_vcc->iov_tail; ++iov) { #ifdef USE_RBPS if (iov->iov_base & RBP_SMALLBUF) rbp = &he_dev->rbps_base[RBP_INDEX(iov->iov_base)]; @@ -2041,9 +1988,9 @@ next_rbrq_entry: } - if (updated) - { - if (updated > he_dev->rbrq_peak) he_dev->rbrq_peak = updated; + if (updated) { + if (updated > he_dev->rbrq_peak) + he_dev->rbrq_peak = updated; he_writel(he_dev, RBRQ_MASK(he_dev->rbrq_head), G0_RBRQ_H + (group * 16)); @@ -2069,8 +2016,7 @@ he_service_tbrq(struct he_dev *he_dev, int group) /* 2.1.6 transmit buffer return queue */ - while (he_dev->tbrq_head != tbrq_tail) - { + while (he_dev->tbrq_head != tbrq_tail) { ++updated; HPRINTK("tbrq%d 0x%x%s%s\n", @@ -2081,19 +2027,16 @@ he_service_tbrq(struct he_dev *he_dev, int group) #ifdef USE_TPD_POOL tpd = NULL; p = &he_dev->outstanding_tpds; - while ((p = p->next) != &he_dev->outstanding_tpds) - { + while ((p = p->next) != &he_dev->outstanding_tpds) { struct he_tpd *__tpd = list_entry(p, struct he_tpd, entry); - if (TPD_ADDR(__tpd->status) == TBRQ_TPD(he_dev->tbrq_head)) - { + if (TPD_ADDR(__tpd->status) == TBRQ_TPD(he_dev->tbrq_head)) { tpd = __tpd; list_del(&__tpd->entry); break; } } - if (tpd == NULL) - { + if (tpd == NULL) { hprintk("unable to locate tpd for dma buffer %x\n", TBRQ_TPD(he_dev->tbrq_head)); goto next_tbrq_entry; @@ -2102,8 +2045,7 @@ he_service_tbrq(struct he_dev *he_dev, int group) tpd = &he_dev->tpd_base[ TPD_INDEX(TBRQ_TPD(he_dev->tbrq_head)) ]; #endif - if (TBRQ_EOS(he_dev->tbrq_head)) - { + if (TBRQ_EOS(he_dev->tbrq_head)) { HPRINTK("wake_up(tx_waitq) cid 0x%x\n", he_mkcid(he_dev, tpd->vcc->vpi, tpd->vcc->vci)); if (tpd->vcc) @@ -2112,19 +2054,18 @@ he_service_tbrq(struct he_dev *he_dev, int group) goto next_tbrq_entry; } - for(slot = 0; slot < TPD_MAXIOV; ++slot) - { + for (slot = 0; slot < TPD_MAXIOV; ++slot) { if (tpd->iovec[slot].addr) pci_unmap_single(he_dev->pci_dev, tpd->iovec[slot].addr, tpd->iovec[slot].len & TPD_LEN_MASK, PCI_DMA_TODEVICE); - if (tpd->iovec[slot].len & TPD_LST) break; + if (tpd->iovec[slot].len & TPD_LST) + break; } - if (tpd->skb) /* && !TBRQ_MULTIPLE(he_dev->tbrq_head) */ - { + if (tpd->skb) { /* && !TBRQ_MULTIPLE(he_dev->tbrq_head) */ if (tpd->vcc && tpd->vcc->pop) tpd->vcc->pop(tpd->vcc, tpd->skb); else @@ -2133,7 +2074,8 @@ he_service_tbrq(struct he_dev *he_dev, int group) next_tbrq_entry: #ifdef USE_TPD_POOL - if (tpd) pci_pool_free(he_dev->tpd_pool, tpd, TPD_ADDR(tpd->status)); + if (tpd) + pci_pool_free(he_dev->tpd_pool, tpd, TPD_ADDR(tpd->status)); #else tpd->inuse = 0; #endif @@ -2142,9 +2084,9 @@ next_tbrq_entry: TBRQ_MASK(++he_dev->tbrq_head)); } - if (updated) - { - if (updated > he_dev->tbrq_peak) he_dev->tbrq_peak = updated; + if (updated) { + if (updated > he_dev->tbrq_peak) + he_dev->tbrq_peak = updated; he_writel(he_dev, TBRQ_MASK(he_dev->tbrq_head), G0_TBRQ_H + (group * 16)); @@ -2165,8 +2107,7 @@ he_service_rbpl(struct he_dev *he_dev, int group) rbpl_head = (struct he_rbp *) ((unsigned long)he_dev->rbpl_base | RBPL_MASK(he_readl(he_dev, G0_RBPL_S))); - for(;;) - { + for (;;) { newtail = (struct he_rbp *) ((unsigned long)he_dev->rbpl_base | RBPL_MASK(he_dev->rbpl_tail+1)); @@ -2177,7 +2118,6 @@ he_service_rbpl(struct he_dev *he_dev, int group) newtail->status |= RBP_LOANED; he_dev->rbpl_tail = newtail; ++moved; - } if (moved) { @@ -2199,8 +2139,7 @@ he_service_rbps(struct he_dev *he_dev, int group) rbps_head = (struct he_rbp *) ((unsigned long)he_dev->rbps_base | RBPS_MASK(he_readl(he_dev, G0_RBPS_S))); - for(;;) - { + for (;;) { newtail = (struct he_rbp *) ((unsigned long)he_dev->rbps_base | RBPS_MASK(he_dev->rbps_tail+1)); @@ -2211,7 +2150,6 @@ he_service_rbps(struct he_dev *he_dev, int group) newtail->status |= RBP_LOANED; he_dev->rbps_tail = newtail; ++moved; - } if (moved) { @@ -2236,20 +2174,18 @@ he_tasklet(unsigned long data) HE_SPIN_LOCK(he_dev, flags); #endif - while(he_dev->irq_head != he_dev->irq_tail) - { + while (he_dev->irq_head != he_dev->irq_tail) { ++updated; type = ITYPE_TYPE(he_dev->irq_head->isw); group = ITYPE_GROUP(he_dev->irq_head->isw); - switch (type) - { + switch (type) { case ITYPE_RBRQ_THRESH: - hprintk("rbrq%d threshold\n", group); + HPRINTK("rbrq%d threshold\n", group); + /* fall through */ case ITYPE_RBRQ_TIMER: - if (he_service_rbrq(he_dev, group)) - { + if (he_service_rbrq(he_dev, group)) { he_service_rbpl(he_dev, group); #ifdef USE_RBPS he_service_rbps(he_dev, group); @@ -2257,7 +2193,8 @@ he_tasklet(unsigned long data) } break; case ITYPE_TBRQ_THRESH: - hprintk("tbrq%d threshold\n", group); + HPRINTK("tbrq%d threshold\n", group); + /* fall through */ case ITYPE_TPD_COMPLETE: he_service_tbrq(he_dev, group); break; @@ -2270,17 +2207,16 @@ he_tasklet(unsigned long data) #endif /* USE_RBPS */ break; case ITYPE_PHY: + HPRINTK("phy interrupt\n"); #ifdef CONFIG_ATM_HE_USE_SUNI HE_SPIN_UNLOCK(he_dev, flags); if (he_dev->atm_dev->phy && he_dev->atm_dev->phy->interrupt) he_dev->atm_dev->phy->interrupt(he_dev->atm_dev); HE_SPIN_LOCK(he_dev, flags); #endif - HPRINTK("phy interrupt\n"); break; case ITYPE_OTHER: - switch (type|group) - { + switch (type|group) { case ITYPE_PARITY: hprintk("parity error\n"); break; @@ -2289,24 +2225,20 @@ he_tasklet(unsigned long data) break; } break; - default: - if (he_dev->irq_head->isw == ITYPE_INVALID) - { - /* see 8.1.1 -- check all queues */ + case ITYPE_TYPE(ITYPE_INVALID): + /* see 8.1.1 -- check all queues */ - HPRINTK("isw not updated 0x%x\n", - he_dev->irq_head->isw); + HPRINTK("isw not updated 0x%x\n", he_dev->irq_head->isw); - he_service_rbrq(he_dev, 0); - he_service_rbpl(he_dev, 0); + he_service_rbrq(he_dev, 0); + he_service_rbpl(he_dev, 0); #ifdef USE_RBPS - he_service_rbps(he_dev, 0); + he_service_rbps(he_dev, 0); #endif /* USE_RBPS */ - he_service_tbrq(he_dev, 0); - } - else - hprintk("bad isw = 0x%x?\n", - he_dev->irq_head->isw); + he_service_tbrq(he_dev, 0); + break; + default: + hprintk("bad isw 0x%x?\n", he_dev->irq_head->isw); } he_dev->irq_head->isw = ITYPE_INVALID; @@ -2314,9 +2246,9 @@ he_tasklet(unsigned long data) he_dev->irq_head = (struct he_irq *) NEXT_ENTRY(he_dev->irq_base, he_dev->irq_head, IRQ_MASK); } - if (updated) - { - if (updated > he_dev->irq_peak) he_dev->irq_peak = updated; + if (updated) { + if (updated > he_dev->irq_peak) + he_dev->irq_peak = updated; he_writel(he_dev, IRQ_SIZE(CONFIG_IRQ_SIZE) | @@ -2344,8 +2276,7 @@ he_irq_handler(int irq, void *dev_id, struct pt_regs *regs) he_dev->irq_tail = (struct he_irq *) (((unsigned long)he_dev->irq_base) | (*he_dev->irq_tailoffset << 2)); - if (he_dev->irq_tail == he_dev->irq_head) - { + if (he_dev->irq_tail == he_dev->irq_head) { HPRINTK("tailoffset not updated?\n"); he_dev->irq_tail = (struct he_irq *) ((unsigned long)he_dev->irq_base | ((he_readl(he_dev, IRQ0_BASE) & IRQ_MASK) << 2)); @@ -2357,8 +2288,7 @@ he_irq_handler(int irq, void *dev_id, struct pt_regs *regs) hprintk("spurious (or shared) interrupt?\n"); #endif - if (he_dev->irq_head != he_dev->irq_tail) - { + if (he_dev->irq_head != he_dev->irq_tail) { handled = 1; #ifdef USE_TASKLET tasklet_schedule(&he_dev->tasklet); @@ -2395,14 +2325,12 @@ __enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid) * head for every enqueue would be unnecessarily slow) */ - if (new_tail == he_dev->tpdrq_head) - { + if (new_tail == he_dev->tpdrq_head) { he_dev->tpdrq_head = (struct he_tpdrq *) (((unsigned long)he_dev->tpdrq_base) | TPDRQ_MASK(he_readl(he_dev, TPDRQ_B_H))); - if (new_tail == he_dev->tpdrq_head) - { + if (new_tail == he_dev->tpdrq_head) { hprintk("tpdrq full (cid 0x%x)\n", cid); /* * FIXME @@ -2410,8 +2338,7 @@ __enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid) * after service_tbrq, service the backlog * for now, we just drop the pdu */ - if (tpd->skb) - { + if (tpd->skb) { if (tpd->vcc->pop) tpd->vcc->pop(tpd->vcc, tpd->skb); else @@ -2456,12 +2383,12 @@ he_open(struct atm_vcc *vcc, short vpi, int vci) unsigned cid, rsr0, rsr1, rsr4, tsr0, tsr0_aal, tsr4, period, reg, clock; - if ((err = atm_find_ci(vcc, &vpi, &vci))) - { + if ((err = atm_find_ci(vcc, &vpi, &vci))) { HPRINTK("atm_find_ci err = %d\n", err); return err; } - if (vci == ATM_VCI_UNSPEC || vpi == ATM_VPI_UNSPEC) return 0; + if (vci == ATM_VCI_UNSPEC || vpi == ATM_VPI_UNSPEC) + return 0; vcc->vpi = vpi; vcc->vci = vci; @@ -2472,8 +2399,7 @@ he_open(struct atm_vcc *vcc, short vpi, int vci) cid = he_mkcid(he_dev, vpi, vci); he_vcc = (struct he_vcc *) kmalloc(sizeof(struct he_vcc), GFP_ATOMIC); - if (he_vcc == NULL) - { + if (he_vcc == NULL) { hprintk("unable to allocate he_vcc during open\n"); return -ENOMEM; } @@ -2487,8 +2413,7 @@ he_open(struct atm_vcc *vcc, short vpi, int vci) HE_VCC(vcc) = he_vcc; - if (vcc->qos.txtp.traffic_class != ATM_NONE) - { + if (vcc->qos.txtp.traffic_class != ATM_NONE) { int pcr_goal; pcr_goal = atm_pcr_goal(&vcc->qos.txtp); @@ -2499,8 +2424,7 @@ he_open(struct atm_vcc *vcc, short vpi, int vci) HPRINTK("open tx cid 0x%x pcr_goal %d\n", cid, pcr_goal); - switch (vcc->qos.aal) - { + switch (vcc->qos.aal) { case ATM_AAL5: tsr0_aal = TSR0_AAL5; tsr4 = TSR4_AAL5; @@ -2518,15 +2442,13 @@ he_open(struct atm_vcc *vcc, short vpi, int vci) tsr0 = he_readl_tsr0(he_dev, cid); HE_SPIN_UNLOCK(he_dev, flags); - if (TSR0_CONN_STATE(tsr0) != 0) - { + if (TSR0_CONN_STATE(tsr0) != 0) { hprintk("cid 0x%x not idle (tsr0 = 0x%x)\n", cid, tsr0); err = -EBUSY; goto open_failed; } - switch(vcc->qos.txtp.traffic_class) - { + switch (vcc->qos.txtp.traffic_class) { case ATM_UBR: /* 2.3.3.1 open connection ubr */ @@ -2548,13 +2470,12 @@ he_open(struct atm_vcc *vcc, short vpi, int vci) HE_SPIN_LOCK(he_dev, flags); /* also protects he_dev->cs_stper[] */ /* find an unused cs_stper register */ - for(reg = 0; reg < HE_NUM_CS_STPER; ++reg) + for (reg = 0; reg < HE_NUM_CS_STPER; ++reg) if (he_dev->cs_stper[reg].inuse == 0 || - he_dev->cs_stper[reg].pcr == pcr_goal) - break; + he_dev->cs_stper[reg].pcr == pcr_goal) + break; - if (reg == HE_NUM_CS_STPER) - { + if (reg == HE_NUM_CS_STPER) { err = -EBUSY; HE_SPIN_UNLOCK(he_dev, flags); goto open_failed; @@ -2610,15 +2531,13 @@ he_open(struct atm_vcc *vcc, short vpi, int vci) HE_SPIN_UNLOCK(he_dev, flags); } - if (vcc->qos.rxtp.traffic_class != ATM_NONE) - { + if (vcc->qos.rxtp.traffic_class != ATM_NONE) { unsigned aal; HPRINTK("open rx cid 0x%x (rx_waitq %p)\n", cid, &HE_VCC(vcc)->rx_waitq); - switch (vcc->qos.aal) - { + switch (vcc->qos.aal) { case ATM_AAL5: aal = RSR0_AAL5; break; @@ -2633,8 +2552,7 @@ he_open(struct atm_vcc *vcc, short vpi, int vci) HE_SPIN_LOCK(he_dev, flags); rsr0 = he_readl_rsr0(he_dev, cid); - if (rsr0 & RSR0_OPEN_CONN) - { + if (rsr0 & RSR0_OPEN_CONN) { HE_SPIN_UNLOCK(he_dev, flags); hprintk("cid 0x%x not idle (rsr0 = 0x%x)\n", cid, rsr0); @@ -2653,7 +2571,8 @@ he_open(struct atm_vcc *vcc, short vpi, int vci) (RSR0_EPD_ENABLE|RSR0_PPD_ENABLE) : 0; #ifdef USE_CHECKSUM_HW - if (vpi == 0 && vci >= ATM_NOT_RSV_VCI) rsr0 |= RSR0_TCP_CKSUM; + if (vpi == 0 && vci >= ATM_NOT_RSV_VCI) + rsr0 |= RSR0_TCP_CKSUM; #endif he_writel_rsr4(he_dev, rsr4, cid); @@ -2675,9 +2594,9 @@ he_open(struct atm_vcc *vcc, short vpi, int vci) open_failed: - if (err) - { - if (he_vcc) kfree(he_vcc); + if (err) { + if (he_vcc) + kfree(he_vcc); clear_bit(ATM_VF_ADDR, &vcc->flags); } else @@ -2703,8 +2622,7 @@ he_close(struct atm_vcc *vcc) clear_bit(ATM_VF_READY, &vcc->flags); cid = he_mkcid(he_dev, vcc->vpi, vcc->vci); - if (vcc->qos.rxtp.traffic_class != ATM_NONE) - { + if (vcc->qos.rxtp.traffic_class != ATM_NONE) { int timeout; HPRINTK("close rx cid 0x%x\n", cid); @@ -2714,8 +2632,7 @@ he_close(struct atm_vcc *vcc) /* wait for previous close (if any) to finish */ HE_SPIN_LOCK(he_dev, flags); - while(he_readl(he_dev, RCC_STAT) & RCC_BUSY) - { + while (he_readl(he_dev, RCC_STAT) & RCC_BUSY) { HPRINTK("close cid 0x%x RCC_BUSY\n", cid); udelay(250); } @@ -2745,8 +2662,7 @@ he_close(struct atm_vcc *vcc) } - if (vcc->qos.txtp.traffic_class != ATM_NONE) - { + if (vcc->qos.txtp.traffic_class != ATM_NONE) { volatile unsigned tsr4, tsr0; int timeout; @@ -2761,19 +2677,19 @@ he_close(struct atm_vcc *vcc) * TBRQ, the host issues the close command to the adapter. */ - while (((tx_inuse = atomic_read(&vcc->sk->wmem_alloc)) > 0) - && (retry < MAX_RETRY)) - { + while (((tx_inuse = atomic_read(&vcc->sk->wmem_alloc)) > 0) && + (retry < MAX_RETRY)) { set_current_state(TASK_UNINTERRUPTIBLE); (void) schedule_timeout(sleep); set_current_state(TASK_RUNNING); - if (sleep < HZ) sleep = sleep * 2; + if (sleep < HZ) + sleep = sleep * 2; ++retry; } - if (tx_inuse) hprintk("close tx cid 0x%x tx_inuse = %d\n", - cid, tx_inuse); + if (tx_inuse) + hprintk("close tx cid 0x%x tx_inuse = %d\n", cid, tx_inuse); /* 2.3.1.1 generic close operations with flush */ @@ -2784,8 +2700,7 @@ he_close(struct atm_vcc *vcc) (void) he_readl_tsr4(he_dev, cid); #endif - switch(vcc->qos.txtp.traffic_class) - { + switch (vcc->qos.txtp.traffic_class) { case ATM_UBR: he_writel_tsr1(he_dev, TSR1_MCR(rate_to_atmf(200000)) @@ -2796,10 +2711,8 @@ he_close(struct atm_vcc *vcc) break; } - tpd = __alloc_tpd(he_dev); - if (tpd == NULL) - { + if (tpd == NULL) { hprintk("close tx he_alloc_tpd failed cid 0x%x\n", cid); goto close_tx_incomplete; } @@ -2818,30 +2731,25 @@ he_close(struct atm_vcc *vcc) remove_wait_queue(&he_vcc->tx_waitq, &wait); set_current_state(TASK_RUNNING); - if (timeout == 0) - { + if (timeout == 0) { hprintk("close tx timeout cid 0x%x\n", cid); goto close_tx_incomplete; } HE_SPIN_LOCK(he_dev, flags); - while (!((tsr4 = he_readl_tsr4(he_dev, cid)) - & TSR4_SESSION_ENDED)) - { + while (!((tsr4 = he_readl_tsr4(he_dev, cid)) & TSR4_SESSION_ENDED)) { HPRINTK("close tx cid 0x%x !TSR4_SESSION_ENDED (tsr4 = 0x%x)\n", cid, tsr4); udelay(250); } - while (TSR0_CONN_STATE(tsr0 = he_readl_tsr0(he_dev, cid)) != 0) - { + while (TSR0_CONN_STATE(tsr0 = he_readl_tsr0(he_dev, cid)) != 0) { HPRINTK("close tx cid 0x%x TSR0_CONN_STATE != 0 (tsr0 = 0x%x)\n", cid, tsr0); udelay(250); } close_tx_incomplete: - if (vcc->qos.txtp.traffic_class == ATM_CBR) - { + if (vcc->qos.txtp.traffic_class == ATM_CBR) { int reg = he_vcc->rc_index; HPRINTK("cs_stper reg = %d\n", reg); @@ -2889,8 +2797,7 @@ he_send(struct atm_vcc *vcc, struct sk_buff *skb) HPRINTK("send %d.%d\n", vcc->vpi, vcc->vci); if ((skb->len > HE_TPD_BUFSIZE) || - ((vcc->qos.aal == ATM_AAL0) && (skb->len != ATM_AAL0_SDU))) - { + ((vcc->qos.aal == ATM_AAL0) && (skb->len != ATM_AAL0_SDU))) { hprintk("buffer too large (or small) -- %d bytes\n", skb->len ); if (vcc->pop) vcc->pop(vcc, skb); @@ -2901,8 +2808,7 @@ he_send(struct atm_vcc *vcc, struct sk_buff *skb) } #ifndef USE_SCATTERGATHER - if (skb_shinfo(skb)->nr_frags) - { + if (skb_shinfo(skb)->nr_frags) { hprintk("no scatter/gather support\n"); if (vcc->pop) vcc->pop(vcc, skb); @@ -2915,8 +2821,7 @@ he_send(struct atm_vcc *vcc, struct sk_buff *skb) HE_SPIN_LOCK(he_dev, flags); tpd = __alloc_tpd(he_dev); - if (tpd == NULL) - { + if (tpd == NULL) { if (vcc->pop) vcc->pop(vcc, skb); else @@ -2928,15 +2833,15 @@ he_send(struct atm_vcc *vcc, struct sk_buff *skb) if (vcc->qos.aal == ATM_AAL5) tpd->status |= TPD_CELLTYPE(TPD_USERCELL); - else - { + else { char *pti_clp = (void *) (skb->data + 3); int clp, pti; pti = (*pti_clp & ATM_HDR_PTI_MASK) >> ATM_HDR_PTI_SHIFT; clp = (*pti_clp & ATM_HDR_CLP); tpd->status |= TPD_CELLTYPE(pti); - if (clp) tpd->status |= TPD_CLP; + if (clp) + tpd->status |= TPD_CLP; skb_pull(skb, ATM_AAL0_SDU - ATM_CELL_PAYLOAD); } @@ -2947,12 +2852,10 @@ he_send(struct atm_vcc *vcc, struct sk_buff *skb) tpd->iovec[slot].len = skb->len - skb->data_len; ++slot; - for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) - { + for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; - if (slot == TPD_MAXIOV) /* send tpd; start new tpd */ - { + if (slot == TPD_MAXIOV) { /* queue tpd; start new tpd */ tpd->vcc = vcc; tpd->skb = NULL; /* not the last fragment so dont ->push() yet */ @@ -2960,8 +2863,7 @@ he_send(struct atm_vcc *vcc, struct sk_buff *skb) __enqueue_tpd(he_dev, tpd, cid); tpd = __alloc_tpd(he_dev); - if (tpd == NULL) - { + if (tpd == NULL) { if (vcc->pop) vcc->pop(vcc, skb); else @@ -3010,16 +2912,15 @@ he_ioctl(struct atm_dev *atm_dev, unsigned int cmd, void *arg) struct he_ioctl_reg reg; int err = 0; - switch (cmd) - { + switch (cmd) { case HE_GET_REG: - if (!capable(CAP_NET_ADMIN)) return -EPERM; + if (!capable(CAP_NET_ADMIN)) + return -EPERM; copy_from_user(®, (struct he_ioctl_reg *) arg, sizeof(struct he_ioctl_reg)); HE_SPIN_LOCK(he_dev, flags); - switch (reg.type) - { + switch (reg.type) { case HE_REGTYPE_PCI: reg.val = he_readl(he_dev, reg.addr); break; @@ -3040,7 +2941,8 @@ he_ioctl(struct atm_dev *atm_dev, unsigned int cmd, void *arg) break; } HE_SPIN_UNLOCK(he_dev, flags); - if (err == 0) copy_to_user((struct he_ioctl_reg *) arg, ®, + if (err == 0) + copy_to_user((struct he_ioctl_reg *) arg, ®, sizeof(struct he_ioctl_reg)); break; default: @@ -3048,7 +2950,7 @@ he_ioctl(struct atm_dev *atm_dev, unsigned int cmd, void *arg) if (atm_dev->phy && atm_dev->phy->ioctl) err = atm_dev->phy->ioctl(atm_dev, cmd, arg); #else /* CONFIG_ATM_HE_USE_SUNI */ - return -EINVAL; + err = -EINVAL; #endif /* CONFIG_ATM_HE_USE_SUNI */ break; } @@ -3146,7 +3048,8 @@ he_proc_read(struct atm_dev *dev, loff_t *pos, char *page) rbpl_tail = RBPL_MASK(he_readl(he_dev, G0_RBPL_T)); inuse = rbpl_head - rbpl_tail; - if (inuse < 0) inuse += CONFIG_RBPL_SIZE * sizeof(struct he_rbp); + if (inuse < 0) + inuse += CONFIG_RBPL_SIZE * sizeof(struct he_rbp); inuse /= sizeof(struct he_rbp); if (!left--) diff --git a/drivers/net/pppoe.c b/drivers/net/pppoe.c index 9f1feff3538b..7c580c7a4a8f 100644 --- a/drivers/net/pppoe.c +++ b/drivers/net/pppoe.c @@ -530,7 +530,7 @@ int pppoe_release(struct socket *sock) if (!sk) return 0; - if (test_bit(SOCK_DEAD, &sk->flags)) + if (sock_flag(sk, SOCK_DEAD)) return -EBADF; pppox_unbind_sock(sk); @@ -780,7 +780,7 @@ int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m, struct net_device *dev; char *start; - if (test_bit(SOCK_DEAD, &sk->flags) || !(sk->state & PPPOX_CONNECTED)) { + if (sock_flag(sk, SOCK_DEAD) || !(sk->state & PPPOX_CONNECTED)) { error = -ENOTCONN; goto end; } @@ -856,7 +856,7 @@ int __pppoe_xmit(struct sock *sk, struct sk_buff *skb) int data_len = skb->len; struct sk_buff *skb2; - if (test_bit(SOCK_DEAD, &sk->flags) || !(sk->state & PPPOX_CONNECTED)) + if (sock_flag(sk, SOCK_DEAD) || !(sk->state & PPPOX_CONNECTED)) goto abort; hdr.ver = 1; diff --git a/drivers/net/setup.c b/drivers/net/setup.c index e7b30faf99b6..6359545f5708 100644 --- a/drivers/net/setup.c +++ b/drivers/net/setup.c @@ -13,8 +13,6 @@ extern int dmascc_init(void); extern int scc_enet_init(void); extern int fec_enet_init(void); -extern int sdla_setup(void); -extern int sdla_c_setup(void); /* * Devices in this list must do new style probing. That is they must @@ -35,9 +33,6 @@ static struct net_probe pci_probes[] __initdata = { #if defined(CONFIG_DMASCC) {dmascc_init, 0}, #endif -#if defined(CONFIG_SDLA) - {sdla_c_setup, 0}, -#endif #if defined(CONFIG_SCC_ENET) {scc_enet_init, 0}, #endif diff --git a/drivers/net/wan/sdla.c b/drivers/net/wan/sdla.c index d1abbc375f35..ae8a8d583b93 100644 --- a/drivers/net/wan/sdla.c +++ b/drivers/net/wan/sdla.c @@ -1667,20 +1667,20 @@ static struct net_device sdla0 = { .name = "sdla0", .init = sdla_init }; +#endif /* MODULE */ -MODULE_LICENSE("GPL"); - -int init_module(void) +static int __init init_sdla(void) { - int result; + int result = 0; sdla_c_setup(); - if ((result = register_netdev(&sdla0)) != 0) - return result; - return 0; +#ifdef MODULE + result = register_netdev(&sdla0); +#endif + return result; } -void cleanup_module(void) +static void __exit exit_sdla(void) { unregister_netdev(&sdla0); if (sdla0.priv) @@ -1688,4 +1688,8 @@ void cleanup_module(void) if (sdla0.irq) free_irq(sdla0.irq, &sdla0); } -#endif /* MODULE */ + +MODULE_LICENSE("GPL"); + +module_init(init_sdla); +module_exit(exit_sdla); diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index e445c167c919..ff568eaf4f3a 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -147,8 +147,6 @@ enum { #ifdef __KERNEL__ -extern const char *if_port_text[]; - #include <linux/cache.h> #include <linux/skbuff.h> diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index d35eacac5acf..bbd0b376d757 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h @@ -366,7 +366,11 @@ enum { NET_IPV6_NEIGH=17, NET_IPV6_ROUTE=18, NET_IPV6_ICMP=19, - NET_IPV6_BINDV6ONLY=20 + NET_IPV6_BINDV6ONLY=20, + NET_IPV6_IP6FRAG_HIGH_THRESH=21, + NET_IPV6_IP6FRAG_LOW_THRESH=22, + NET_IPV6_IP6FRAG_TIME=23, + NET_IPV6_IP6FRAG_SECRET_INTERVAL=24 }; enum { diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 76fdecebd5f6..40830917c5e2 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -406,6 +406,14 @@ extern int inet6_getname(struct socket *sock, struct sockaddr *uaddr, extern int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); +/* + * reassembly.c + */ +extern int sysctl_ip6frag_high_thresh; +extern int sysctl_ip6frag_low_thresh; +extern int sysctl_ip6frag_time; +extern int sysctl_ip6frag_secret_interval; + #endif /* __KERNEL__ */ #endif /* _NET_IPV6_H */ diff --git a/include/net/sock.h b/include/net/sock.h index 3d4ba5ff3943..e3b887906cbf 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -59,17 +59,6 @@ * the other protocols. */ -/* Sock flags */ -enum { - SOCK_DEAD, - SOCK_DONE, - SOCK_URGINLINE, - SOCK_KEEPOPEN, - SOCK_LINGER, - SOCK_DESTROY, - SOCK_BROADCAST, -}; - /* Define this to get the sk->debug debugging facility. */ #define SOCK_DEBUGGING #ifdef SOCK_DEBUGGING @@ -248,6 +237,32 @@ struct sock { void (*destruct)(struct sock *sk); }; +/* Sock flags */ +enum sock_flags { + SOCK_DEAD, + SOCK_DONE, + SOCK_URGINLINE, + SOCK_KEEPOPEN, + SOCK_LINGER, + SOCK_DESTROY, + SOCK_BROADCAST, +}; + +static inline void sock_set_flag(struct sock *sk, enum sock_flags flag) +{ + __set_bit(flag, &sk->flags); +} + +static inline void sock_reset_flag(struct sock *sk, enum sock_flags flag) +{ + __clear_bit(flag, &sk->flags); +} + +static inline int sock_flag(struct sock *sk, enum sock_flags flag) +{ + return test_bit(flag, &sk->flags); +} + /* The per-socket spinlock must be held here. */ #define sk_add_backlog(__sk, __skb) \ do { if((__sk)->backlog.tail == NULL) { \ @@ -639,7 +654,7 @@ static inline void sock_put(struct sock *sk) static inline void sock_orphan(struct sock *sk) { write_lock_bh(&sk->callback_lock); - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); sk->socket = NULL; sk->sleep = NULL; write_unlock_bh(&sk->callback_lock); @@ -803,7 +818,7 @@ static inline int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) skb->dev = NULL; skb_set_owner_r(skb, sk); skb_queue_tail(&sk->receive_queue, skb); - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->data_ready(sk,skb->len); out: return err; @@ -818,7 +833,7 @@ static inline int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) return -ENOMEM; skb_set_owner_r(skb, sk); skb_queue_tail(&sk->error_queue,skb); - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->data_ready(sk,skb->len); return 0; } @@ -936,9 +951,9 @@ sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb) static inline void sock_valbool_flag(struct sock *sk, int bit, int valbool) { if (valbool) - __set_bit(bit, &sk->flags); + sock_set_flag(sk, bit); else - __clear_bit(bit, &sk->flags); + sock_reset_flag(sk, bit); } extern __u32 sysctl_wmem_max; diff --git a/include/net/tcp.h b/include/net/tcp.h index afc40c419be0..c7c3839d4251 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -1437,7 +1437,7 @@ static __inline__ void tcp_done(struct sock *sk) sk->shutdown = SHUTDOWN_MASK; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->state_change(sk); else tcp_destroy_sock(sk); diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c index b86a34e5be6f..69d5988de779 100644 --- a/net/appletalk/ddp.c +++ b/net/appletalk/ddp.c @@ -192,7 +192,7 @@ static void atalk_destroy_timer(unsigned long data) struct sock *sk = (struct sock *)data; if (!atomic_read(&sk->wmem_alloc) && - !atomic_read(&sk->rmem_alloc) && test_bit(SOCK_DEAD, &sk->flags)) + !atomic_read(&sk->rmem_alloc) && sock_flag(sk, SOCK_DEAD)) sock_put(sk); else { sk->timer.expires = jiffies + SOCK_DESTROY_TIME; @@ -206,7 +206,7 @@ static inline void atalk_destroy_socket(struct sock *sk) skb_queue_purge(&sk->receive_queue); if (!atomic_read(&sk->wmem_alloc) && - !atomic_read(&sk->rmem_alloc) && test_bit(SOCK_DEAD, &sk->flags)) + !atomic_read(&sk->rmem_alloc) && sock_flag(sk, SOCK_DEAD)) sock_put(sk); else { init_timer(&sk->timer); @@ -1006,9 +1006,10 @@ static int atalk_release(struct socket *sock) struct sock *sk = sock->sk; if (sk) { - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) { sk->state_change(sk); - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); + } sock->sk = NULL; atalk_destroy_socket(sk); } @@ -1149,7 +1150,7 @@ static int atalk_connect(struct socket *sock, struct sockaddr *uaddr, return -EAFNOSUPPORT; if (addr->sat_addr.s_node == ATADDR_BCAST && - !test_bit(SOCK_BROADCAST, &sk->flags)) { + !sock_flag(sk, SOCK_BROADCAST)) { #if 1 printk(KERN_WARNING "%s is broken and did not set " "SO_BROADCAST. It will break when 2.2 is " @@ -1515,7 +1516,7 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr /* netatalk doesn't implement this check */ if (usat->sat_addr.s_node == ATADDR_BCAST && - !test_bit(SOCK_BROADCAST, &sk->flags)) { + !sock_flag(sk, SOCK_BROADCAST)) { printk(KERN_INFO "SO_BROADCAST: Fix your netatalk as " "it will break before 2.2\n"); #if 0 diff --git a/net/atm/common.c b/net/atm/common.c index 81bd6c63fd7a..22b01324c0ac 100644 --- a/net/atm/common.c +++ b/net/atm/common.c @@ -32,21 +32,61 @@ #include <linux/atmlec.h> #include "lec.h" #include "lec_arpc.h" -struct atm_lane_ops atm_lane_ops; -#endif -#ifdef CONFIG_ATM_LANE_MODULE +struct atm_lane_ops *atm_lane_ops; +static DECLARE_MUTEX(atm_lane_ops_mutex); + +void atm_lane_ops_set(struct atm_lane_ops *hook) +{ + down(&atm_lane_ops_mutex); + atm_lane_ops = hook; + up(&atm_lane_ops_mutex); +} + +int try_atm_lane_ops(void) +{ + down(&atm_lane_ops_mutex); + if (atm_lane_ops && try_module_get(atm_lane_ops->owner)) { + up(&atm_lane_ops_mutex); + return 1; + } + up(&atm_lane_ops_mutex); + return 0; +} + +#if defined(CONFIG_ATM_LANE_MODULE) || defined(CONFIG_ATM_MPOA_MODULE) EXPORT_SYMBOL(atm_lane_ops); +EXPORT_SYMBOL(try_atm_lane_ops); +EXPORT_SYMBOL(atm_lane_ops_set); +#endif #endif #if defined(CONFIG_ATM_MPOA) || defined(CONFIG_ATM_MPOA_MODULE) #include <linux/atmmpc.h> #include "mpc.h" -struct atm_mpoa_ops atm_mpoa_ops; -#endif +struct atm_mpoa_ops *atm_mpoa_ops; +static DECLARE_MUTEX(atm_mpoa_ops_mutex); + +void atm_mpoa_ops_set(struct atm_mpoa_ops *hook) +{ + down(&atm_mpoa_ops_mutex); + atm_mpoa_ops = hook; + up(&atm_mpoa_ops_mutex); +} + +int try_atm_mpoa_ops(void) +{ + down(&atm_mpoa_ops_mutex); + if (atm_mpoa_ops && try_module_get(atm_mpoa_ops->owner)) { + up(&atm_mpoa_ops_mutex); + return 1; + } + up(&atm_mpoa_ops_mutex); + return 0; +} #ifdef CONFIG_ATM_MPOA_MODULE EXPORT_SYMBOL(atm_mpoa_ops); -#ifndef CONFIG_ATM_LANE_MODULE -EXPORT_SYMBOL(atm_lane_ops); +EXPORT_SYMBOL(try_atm_mpoa_ops); +EXPORT_SYMBOL(atm_mpoa_ops_set); #endif #endif @@ -728,27 +768,40 @@ int atm_ioctl(struct socket *sock,unsigned int cmd,unsigned long arg) ret_val = -EPERM; goto done; } - if (atm_lane_ops.lecd_attach == NULL) - atm_lane_init(); - if (atm_lane_ops.lecd_attach == NULL) { /* try again */ +#if defined(CONFIG_ATM_LANE_MODULE) + if (!atm_lane_ops) + request_module("lec"); +#endif + if (try_atm_lane_ops()) { + error = atm_lane_ops->lecd_attach(vcc, (int) arg); + module_put(atm_lane_ops->owner); + if (error >= 0) + sock->state = SS_CONNECTED; + ret_val = error; + } else ret_val = -ENOSYS; - goto done; - } - error = atm_lane_ops.lecd_attach(vcc, (int)arg); - if (error >= 0) sock->state = SS_CONNECTED; - ret_val = error; goto done; case ATMLEC_MCAST: - if (!capable(CAP_NET_ADMIN)) + if (!capable(CAP_NET_ADMIN)) { ret_val = -EPERM; - else - ret_val = atm_lane_ops.mcast_attach(vcc, (int)arg); + goto done; + } + if (try_atm_lane_ops()) { + ret_val = atm_lane_ops->mcast_attach(vcc, (int) arg); + module_put(atm_lane_ops->owner); + } else + ret_val = -ENOSYS; goto done; case ATMLEC_DATA: - if (!capable(CAP_NET_ADMIN)) + if (!capable(CAP_NET_ADMIN)) { ret_val = -EPERM; - else - ret_val = atm_lane_ops.vcc_attach(vcc, (void*)arg); + goto done; + } + if (try_atm_lane_ops()) { + ret_val = atm_lane_ops->vcc_attach(vcc, (void *) arg); + module_put(atm_lane_ops->owner); + } else + ret_val = -ENOSYS; goto done; #endif #if defined(CONFIG_ATM_MPOA) || defined(CONFIG_ATM_MPOA_MODULE) @@ -757,21 +810,29 @@ int atm_ioctl(struct socket *sock,unsigned int cmd,unsigned long arg) ret_val = -EPERM; goto done; } - if (atm_mpoa_ops.mpoad_attach == NULL) - atm_mpoa_init(); - if (atm_mpoa_ops.mpoad_attach == NULL) { /* try again */ +#if defined(CONFIG_ATM_MPOA_MODULE) + if (!atm_mpoa_ops) + request_module("mpoa"); +#endif + if (try_atm_mpoa_ops()) { + error = atm_mpoa_ops->mpoad_attach(vcc, (int) arg); + module_put(atm_mpoa_ops->owner); + if (error >= 0) + sock->state = SS_CONNECTED; + ret_val = error; + } else ret_val = -ENOSYS; - goto done; - } - error = atm_mpoa_ops.mpoad_attach(vcc, (int)arg); - if (error >= 0) sock->state = SS_CONNECTED; - ret_val = error; goto done; case ATMMPC_DATA: - if (!capable(CAP_NET_ADMIN)) + if (!capable(CAP_NET_ADMIN)) { ret_val = -EPERM; - else - ret_val = atm_mpoa_ops.vcc_attach(vcc, arg); + goto done; + } + if (try_atm_mpoa_ops()) { + ret_val = atm_mpoa_ops->vcc_attach(vcc, arg); + module_put(atm_mpoa_ops->owner); + } else + ret_val = -ENOSYS; goto done; #endif #if defined(CONFIG_ATM_TCP) || defined(CONFIG_ATM_TCP_MODULE) @@ -1155,40 +1216,6 @@ int atm_getsockopt(struct socket *sock,int level,int optname, } -/* - * lane_mpoa_init.c: A couple of helper functions - * to make modular LANE and MPOA client easier to implement - */ - -/* - * This is how it goes: - * - * if xxxx is not compiled as module, call atm_xxxx_init_ops() - * from here - * else call atm_mpoa_init_ops() from init_module() within - * the kernel when xxxx module is loaded - * - * In either case function pointers in struct atm_xxxx_ops - * are initialized to their correct values. Either they - * point to functions in the module or in the kernel - */ - -extern struct atm_mpoa_ops atm_mpoa_ops; /* in common.c */ -extern struct atm_lane_ops atm_lane_ops; /* in common.c */ - -#if defined(CONFIG_ATM_MPOA) || defined(CONFIG_ATM_MPOA_MODULE) -void atm_mpoa_init(void) -{ -#ifndef CONFIG_ATM_MPOA_MODULE /* not module */ - atm_mpoa_init_ops(&atm_mpoa_ops); -#else - request_module("mpoa"); -#endif - - return; -} -#endif - #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) struct net_bridge_fdb_entry *(*br_fdb_get_hook)(struct net_bridge *br, @@ -1199,18 +1226,8 @@ EXPORT_SYMBOL(br_fdb_get_hook); EXPORT_SYMBOL(br_fdb_put_hook); #endif /* defined(CONFIG_ATM_LANE_MODULE) || defined(CONFIG_BRIDGE_MODULE) */ #endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */ +#endif /* defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) */ -void atm_lane_init(void) -{ -#ifndef CONFIG_ATM_LANE_MODULE /* not module */ - atm_lane_init_ops(&atm_lane_ops); -#else - request_module("lec"); -#endif - - return; -} -#endif static int __init atm_init(void) { diff --git a/net/atm/lec.c b/net/atm/lec.c index a80054878078..f9d51fc45147 100644 --- a/net/atm/lec.c +++ b/net/atm/lec.c @@ -56,8 +56,6 @@ extern void (*br_fdb_put_hook)(struct net_bridge_fdb_entry *ent); #define DPRINTK(format,args...) #endif -static spinlock_t lec_arp_spinlock = SPIN_LOCK_UNLOCKED; - #define DUMP_PACKETS 0 /* 0 = None, * 1 = 30 first bytes * 2 = Whole packet @@ -71,9 +69,9 @@ static int lec_send_packet(struct sk_buff *skb, struct net_device *dev); static int lec_close(struct net_device *dev); static struct net_device_stats *lec_get_stats(struct net_device *dev); static void lec_init(struct net_device *dev); -static __inline__ struct lec_arp_table* lec_arp_find(struct lec_priv *priv, +static inline struct lec_arp_table* lec_arp_find(struct lec_priv *priv, unsigned char *mac_addr); -static __inline__ int lec_arp_remove(struct lec_arp_table **lec_arp_tables, +static inline int lec_arp_remove(struct lec_priv *priv, struct lec_arp_table *to_remove); /* LANE2 functions */ static void lane2_associate_ind (struct net_device *dev, u8 *mac_address, @@ -95,8 +93,18 @@ static unsigned char bus_mac[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff}; static struct net_device *dev_lec[MAX_LEC_ITF]; /* This will be called from proc.c via function pointer */ -struct net_device **get_dev_lec (void) { - return &dev_lec[0]; +struct net_device *get_dev_lec(int itf) +{ + struct net_device *dev; + + if (itf >= MAX_LEC_ITF) + return NULL; + rtnl_lock(); + dev = dev_lec[itf]; + if (dev) + dev_hold(dev); + rtnl_unlock(); + return dev; } #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) @@ -426,7 +434,7 @@ lec_atm_send(struct atm_vcc *vcc, struct sk_buff *skb) break; case l_narp_req: /* LANE2: see 7.1.35 in the lane2 spec */ entry = lec_arp_find(priv, mesg->content.normal.mac_addr); - lec_arp_remove(priv->lec_arp_tables, entry); + lec_arp_remove(priv, entry); if (mesg->content.normal.no_source_le_narp) break; @@ -542,7 +550,7 @@ lec_atm_close(struct atm_vcc *vcc) } printk("%s: Shut down!\n", dev->name); - MOD_DEC_USE_COUNT; + module_put(THIS_MODULE); } static struct atmdev_ops lecdev_ops = { @@ -823,41 +831,32 @@ lecd_attach(struct atm_vcc *vcc, int arg) if (dev_lec[i]->flags & IFF_UP) { netif_start_queue(dev_lec[i]); } - MOD_INC_USE_COUNT; + __module_get(THIS_MODULE); return i; } -void atm_lane_init_ops(struct atm_lane_ops *ops) +static struct atm_lane_ops __atm_lane_ops = { - ops->lecd_attach = lecd_attach; - ops->mcast_attach = lec_mcast_attach; - ops->vcc_attach = lec_vcc_attach; - ops->get_lecs = get_dev_lec; - - printk("lec.c: " __DATE__ " " __TIME__ " initialized\n"); - - return; -} + .lecd_attach = lecd_attach, + .mcast_attach = lec_mcast_attach, + .vcc_attach = lec_vcc_attach, + .get_lec = get_dev_lec, + .owner = THIS_MODULE +}; static int __init lane_module_init(void) { - extern struct atm_lane_ops atm_lane_ops; - - atm_lane_init_ops(&atm_lane_ops); - + atm_lane_ops_set(&__atm_lane_ops); + printk("lec.c: " __DATE__ " " __TIME__ " initialized\n"); return 0; } static void __exit lane_module_cleanup(void) { int i; - extern struct atm_lane_ops atm_lane_ops; struct lec_priv *priv; - atm_lane_ops.lecd_attach = NULL; - atm_lane_ops.mcast_attach = NULL; - atm_lane_ops.vcc_attach = NULL; - atm_lane_ops.get_lecs = NULL; + atm_lane_ops_set(NULL); for (i = 0; i < MAX_LEC_ITF; i++) { if (dev_lec[i] != NULL) { @@ -867,7 +866,7 @@ static void __exit lane_module_cleanup(void) unregister_trdev(dev_lec[i]); else #endif - unregister_netdev(dev_lec[i]); + unregister_netdev(dev_lec[i]); kfree(dev_lec[i]); dev_lec[i] = NULL; } @@ -1067,6 +1066,7 @@ lec_arp_init(struct lec_priv *priv) for (i=0;i<LEC_ARP_TABLE_SIZE;i++) { priv->lec_arp_tables[i] = NULL; } + spin_lock_init(&priv->lec_arp_lock); init_timer(&priv->lec_arp_timer); priv->lec_arp_timer.expires = jiffies+LEC_ARP_REFRESH_INTERVAL; priv->lec_arp_timer.data = (unsigned long)priv; @@ -1103,21 +1103,20 @@ lec_arp_clear_vccs(struct lec_arp_table *entry) * Insert entry to lec_arp_table * LANE2: Add to the end of the list to satisfy 8.1.13 */ -static __inline__ void -lec_arp_add(struct lec_arp_table **lec_arp_tables, - struct lec_arp_table *to_add) +static inline void +lec_arp_add(struct lec_priv *priv, struct lec_arp_table *to_add) { unsigned long flags; unsigned short place; struct lec_arp_table *tmp; - spin_lock_irqsave(&lec_arp_spinlock, flags); + spin_lock_irqsave(&priv->lec_arp_lock, flags); place = HASH(to_add->mac_addr[ETH_ALEN-1]); - tmp = lec_arp_tables[place]; + tmp = priv->lec_arp_tables[place]; to_add->next = NULL; if (tmp == NULL) - lec_arp_tables[place] = to_add; + priv->lec_arp_tables[place] = to_add; else { /* add to the end */ while (tmp->next) @@ -1125,7 +1124,7 @@ lec_arp_add(struct lec_arp_table **lec_arp_tables, tmp->next = to_add; } - spin_unlock_irqrestore(&lec_arp_spinlock, flags); + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); DPRINTK("LEC_ARP: Added entry:%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x\n", 0xff&to_add->mac_addr[0], 0xff&to_add->mac_addr[1], @@ -1136,8 +1135,8 @@ lec_arp_add(struct lec_arp_table **lec_arp_tables, /* * Remove entry from lec_arp_table */ -static __inline__ int -lec_arp_remove(struct lec_arp_table **lec_arp_tables, +static inline int +lec_arp_remove(struct lec_priv *priv, struct lec_arp_table *to_remove) { unsigned long flags; @@ -1145,22 +1144,22 @@ lec_arp_remove(struct lec_arp_table **lec_arp_tables, struct lec_arp_table *tmp; int remove_vcc=1; - spin_lock_irqsave(&lec_arp_spinlock, flags); + spin_lock_irqsave(&priv->lec_arp_lock, flags); if (!to_remove) { - spin_unlock_irqrestore(&lec_arp_spinlock, flags); + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); return -1; } place = HASH(to_remove->mac_addr[ETH_ALEN-1]); - tmp = lec_arp_tables[place]; + tmp = priv->lec_arp_tables[place]; if (tmp == to_remove) { - lec_arp_tables[place] = tmp->next; + priv->lec_arp_tables[place] = tmp->next; } else { while(tmp && tmp->next != to_remove) { tmp = tmp->next; } if (!tmp) {/* Entry was not found */ - spin_unlock_irqrestore(&lec_arp_spinlock, flags); + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); return -1; } } @@ -1174,7 +1173,7 @@ lec_arp_remove(struct lec_arp_table **lec_arp_tables, * ESI_FLUSH_PENDING, ESI_FORWARD_DIRECT */ for(place=0;place<LEC_ARP_TABLE_SIZE;place++) { - for(tmp=lec_arp_tables[place];tmp!=NULL;tmp=tmp->next){ + for(tmp = priv->lec_arp_tables[place]; tmp != NULL; tmp = tmp->next) { if (memcmp(tmp->atm_addr, to_remove->atm_addr, ATM_ESA_LEN)==0) { remove_vcc=0; @@ -1187,7 +1186,7 @@ lec_arp_remove(struct lec_arp_table **lec_arp_tables, } skb_queue_purge(&to_remove->tx_wait); /* FIXME: good place for this? */ - spin_unlock_irqrestore(&lec_arp_spinlock, flags); + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); DPRINTK("LEC_ARP: Removed entry:%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x\n", 0xff&to_remove->mac_addr[0], 0xff&to_remove->mac_addr[1], @@ -1383,7 +1382,7 @@ lec_arp_destroy(struct lec_priv *priv) for (i=0;i<LEC_ARP_TABLE_SIZE;i++) { for(entry =priv->lec_arp_tables[i];entry != NULL; entry=next) { next = entry->next; - lec_arp_remove(priv->lec_arp_tables, entry); + lec_arp_remove(priv, entry); kfree(entry); } } @@ -1423,7 +1422,7 @@ lec_arp_destroy(struct lec_priv *priv) /* * Find entry by mac_address */ -static __inline__ struct lec_arp_table* +static inline struct lec_arp_table* lec_arp_find(struct lec_priv *priv, unsigned char *mac_addr) { @@ -1561,8 +1560,6 @@ static void lec_arp_check_expire(unsigned long data) { struct lec_priv *priv = (struct lec_priv *)data; - struct lec_arp_table **lec_arp_tables = - (struct lec_arp_table **)priv->lec_arp_tables; struct lec_arp_table *entry, *next; unsigned long now; unsigned long time_to_check; @@ -1578,7 +1575,7 @@ lec_arp_check_expire(unsigned long data) lec_arp_get(priv); now = jiffies; for(i=0;i<LEC_ARP_TABLE_SIZE;i++) { - for(entry = lec_arp_tables[i];entry != NULL;) { + for(entry = priv->lec_arp_tables[i]; entry != NULL; ) { if ((entry->flags) & LEC_REMOTE_FLAG && priv->topology_change) time_to_check=priv->forward_delay_time; @@ -1594,7 +1591,7 @@ lec_arp_check_expire(unsigned long data) /* Remove entry */ DPRINTK("LEC:Entry timed out\n"); next = entry->next; - lec_arp_remove(lec_arp_tables, entry); + lec_arp_remove(priv, entry); kfree(entry); entry = next; } else { @@ -1687,7 +1684,7 @@ lec_arp_resolve(struct lec_priv *priv, unsigned char *mac_to_find, int is_rdesc, if (!entry) { return priv->mcast_vcc; } - lec_arp_add(priv->lec_arp_tables, entry); + lec_arp_add(priv, entry); /* We want arp-request(s) to be sent */ entry->packets_flooded =1; entry->status = ESI_ARP_PENDING; @@ -1720,7 +1717,7 @@ lec_addr_delete(struct lec_priv *priv, unsigned char *atm_addr, if (!memcmp(atm_addr, entry->atm_addr, ATM_ESA_LEN) && (permanent || !(entry->flags & LEC_PERMANENT_FLAG))) { - lec_arp_remove(priv->lec_arp_tables, entry); + lec_arp_remove(priv, entry); kfree(entry); } lec_arp_put(priv); @@ -1786,7 +1783,7 @@ lec_arp_update(struct lec_priv *priv, unsigned char *mac_addr, entry->status = ESI_FORWARD_DIRECT; memcpy(entry->mac_addr, mac_addr, ETH_ALEN); entry->last_used = jiffies; - lec_arp_add(priv->lec_arp_tables, entry); + lec_arp_add(priv, entry); } if (remoteflag) entry->flags|=LEC_REMOTE_FLAG; @@ -1806,7 +1803,7 @@ lec_arp_update(struct lec_priv *priv, unsigned char *mac_addr, return; } entry->status = ESI_UNKNOWN; - lec_arp_add(priv->lec_arp_tables, entry); + lec_arp_add(priv, entry); /* Temporary, changes before end of function */ } memcpy(entry->atm_addr, atm_addr, ATM_ESA_LEN); @@ -2057,7 +2054,7 @@ lec_mcast_make(struct lec_priv *priv, struct atm_vcc *vcc) to_add->old_push = vcc->push; vcc->push = lec_push; priv->mcast_vcc = vcc; - lec_arp_add(priv->lec_arp_tables, to_add); + lec_arp_add(priv, to_add); lec_arp_put(priv); return 0; } @@ -2075,7 +2072,7 @@ lec_vcc_close(struct lec_priv *priv, struct atm_vcc *vcc) for(entry = priv->lec_arp_tables[i];entry; entry=next) { next = entry->next; if (vcc == entry->vcc) { - lec_arp_remove(priv->lec_arp_tables,entry); + lec_arp_remove(priv, entry); kfree(entry); if (priv->mcast_vcc == vcc) { priv->mcast_vcc = NULL; @@ -2155,23 +2152,23 @@ lec_arp_check_empties(struct lec_priv *priv, lec_arp_get(priv); entry = priv->lec_arp_empty_ones; if (vcc == entry->vcc) { - spin_lock_irqsave(&lec_arp_spinlock, flags); + spin_lock_irqsave(&priv->lec_arp_lock, flags); del_timer(&entry->timer); memcpy(entry->mac_addr, src, ETH_ALEN); entry->status = ESI_FORWARD_DIRECT; entry->last_used = jiffies; priv->lec_arp_empty_ones = entry->next; - spin_unlock_irqrestore(&lec_arp_spinlock, flags); + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); /* We might have got an entry */ if ((prev=lec_arp_find(priv,src))) { - lec_arp_remove(priv->lec_arp_tables, prev); + lec_arp_remove(priv, prev); kfree(prev); } - lec_arp_add(priv->lec_arp_tables, entry); + lec_arp_add(priv, entry); lec_arp_put(priv); return; } - spin_lock_irqsave(&lec_arp_spinlock, flags); + spin_lock_irqsave(&priv->lec_arp_lock, flags); prev = entry; entry = entry->next; while (entry && entry->vcc != vcc) { @@ -2181,7 +2178,7 @@ lec_arp_check_empties(struct lec_priv *priv, if (!entry) { DPRINTK("LEC_ARP: Arp_check_empties: entry not found!\n"); lec_arp_put(priv); - spin_unlock_irqrestore(&lec_arp_spinlock, flags); + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); return; } del_timer(&entry->timer); @@ -2189,12 +2186,12 @@ lec_arp_check_empties(struct lec_priv *priv, entry->status = ESI_FORWARD_DIRECT; entry->last_used = jiffies; prev->next = entry->next; - spin_unlock_irqrestore(&lec_arp_spinlock, flags); + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); if ((prev = lec_arp_find(priv, src))) { - lec_arp_remove(priv->lec_arp_tables,prev); + lec_arp_remove(priv, prev); kfree(prev); } - lec_arp_add(priv->lec_arp_tables,entry); + lec_arp_add(priv, entry); lec_arp_put(priv); } MODULE_LICENSE("GPL"); diff --git a/net/atm/lec.h b/net/atm/lec.h index f0c0eccd0cae..d0e6b19ffc40 100644 --- a/net/atm/lec.h +++ b/net/atm/lec.h @@ -64,7 +64,8 @@ struct atm_lane_ops { int (*lecd_attach)(struct atm_vcc *vcc, int arg); int (*mcast_attach)(struct atm_vcc *vcc, int arg); int (*vcc_attach)(struct atm_vcc *vcc, void *arg); - struct net_device **(*get_lecs)(void); + struct net_device * (*get_lec)(int itf); + struct module *owner; }; /* @@ -102,6 +103,7 @@ struct lec_priv { collects all those VCCs. LANEv1 client has only one item in this list. These entries are not aged out. */ atomic_t lec_arp_users; + spinlock_t lec_arp_lock; struct atm_vcc *mcast_vcc; /* Default Multicast Send VCC */ struct atm_vcc *lecd; struct timer_list lec_arp_timer; @@ -148,14 +150,16 @@ struct lec_priv { int lecd_attach(struct atm_vcc *vcc, int arg); int lec_vcc_attach(struct atm_vcc *vcc, void *arg); int lec_mcast_attach(struct atm_vcc *vcc, int arg); -struct net_device **get_dev_lec(void); +struct net_device *get_dev_lec(int itf); int make_lec(struct atm_vcc *vcc); int send_to_lecd(struct lec_priv *priv, atmlec_msg_type type, unsigned char *mac_addr, unsigned char *atm_addr, struct sk_buff *data); void lec_push(struct atm_vcc *vcc, struct sk_buff *skb); -void atm_lane_init(void); -void atm_lane_init_ops(struct atm_lane_ops *ops); +extern struct atm_lane_ops *atm_lane_ops; +void atm_lane_ops_set(struct atm_lane_ops *hook); +int try_atm_lane_ops(void); + #endif /* _LEC_H_ */ diff --git a/net/atm/mpc.c b/net/atm/mpc.c index fd596036bafa..683c5dc1b745 100644 --- a/net/atm/mpc.c +++ b/net/atm/mpc.c @@ -251,12 +251,13 @@ void atm_mpoa_disp_qos(char *page, int *len) static struct net_device *find_lec_by_itfnum(int itf) { - extern struct atm_lane_ops atm_lane_ops; /* in common.c */ - - if (atm_lane_ops.get_lecs == NULL) + struct net_device *dev; + if (!try_atm_lane_ops()) return NULL; - return atm_lane_ops.get_lecs()[itf]; /* FIXME: something better */ + dev = atm_lane_ops->get_lec(itf); + module_put(atm_lane_ops->owner); + return dev; } static struct mpoa_client *alloc_mpc(void) @@ -779,9 +780,10 @@ int atm_mpoa_mpoad_attach (struct atm_vcc *vcc, int arg) if (mpc->dev) { /* check if the lec is LANE2 capable */ priv = (struct lec_priv *)mpc->dev->priv; - if (priv->lane_version < 2) + if (priv->lane_version < 2) { + dev_put(mpc->dev); mpc->dev = NULL; - else + } else priv->lane2_ops->associate_indicator = lane2_assoc_ind; } @@ -802,7 +804,7 @@ int atm_mpoa_mpoad_attach (struct atm_vcc *vcc, int arg) send_set_mps_ctrl_addr(mpc->mps_ctrl_addr, mpc); } - MOD_INC_USE_COUNT; + __module_get(THIS_MODULE); return arg; } @@ -839,6 +841,7 @@ static void mpoad_close(struct atm_vcc *vcc) struct lec_priv *priv = (struct lec_priv *)mpc->dev->priv; priv->lane2_ops->associate_indicator = NULL; stop_mpc(mpc); + dev_put(mpc->dev); } mpc->in_ops->destroy_cache(mpc); @@ -851,7 +854,7 @@ static void mpoad_close(struct atm_vcc *vcc) printk("mpoa: (%s) going down\n", (mpc->dev) ? mpc->dev->name : "<unknown>"); - MOD_DEC_USE_COUNT; + module_put(THIS_MODULE); return; } @@ -975,6 +978,7 @@ static int mpoa_event_listener(struct notifier_block *mpoa_notifier, unsigned lo } mpc->dev_num = priv->itfnum; mpc->dev = dev; + dev_hold(dev); dprintk("mpoa: (%s) was initialized\n", dev->name); break; case NETDEV_UNREGISTER: @@ -984,6 +988,7 @@ static int mpoa_event_listener(struct notifier_block *mpoa_notifier, unsigned lo break; dprintk("mpoa: device (%s) was deallocated\n", dev->name); stop_mpc(mpc); + dev_put(mpc->dev); mpc->dev = NULL; break; case NETDEV_UP: @@ -1393,13 +1398,18 @@ static void mpc_cache_check( unsigned long checking_time ) return; } -void atm_mpoa_init_ops(struct atm_mpoa_ops *ops) +static struct atm_mpoa_ops __atm_mpoa_ops = { + .mpoad_attach = atm_mpoa_mpoad_attach, + .vcc_attach = atm_mpoa_vcc_attach, + .owner = THIS_MODULE +}; + +static __init int atm_mpoa_init(void) { - ops->mpoad_attach = atm_mpoa_mpoad_attach; - ops->vcc_attach = atm_mpoa_vcc_attach; + atm_mpoa_ops_set(&__atm_mpoa_ops); #ifdef CONFIG_PROC_FS - if(mpc_proc_init() != 0) + if (mpc_proc_init() != 0) printk(KERN_INFO "mpoa: failed to initialize /proc/mpoa\n"); else printk(KERN_INFO "mpoa: /proc/mpoa initialized\n"); @@ -1407,22 +1417,11 @@ void atm_mpoa_init_ops(struct atm_mpoa_ops *ops) printk("mpc.c: " __DATE__ " " __TIME__ " initialized\n"); - return; -} - -#ifdef MODULE -int init_module(void) -{ - extern struct atm_mpoa_ops atm_mpoa_ops; - - atm_mpoa_init_ops(&atm_mpoa_ops); - return 0; } -void cleanup_module(void) +void __exit atm_mpoa_cleanup(void) { - extern struct atm_mpoa_ops atm_mpoa_ops; struct mpoa_client *mpc, *tmp; struct atm_mpoa_qos *qos, *nextqos; struct lec_priv *priv; @@ -1433,8 +1432,7 @@ void cleanup_module(void) del_timer(&mpc_timer); unregister_netdevice_notifier(&mpoa_notifier); - atm_mpoa_ops.mpoad_attach = NULL; - atm_mpoa_ops.vcc_attach = NULL; + atm_mpoa_ops_set(NULL); mpc = mpcs; mpcs = NULL; @@ -1469,5 +1467,8 @@ void cleanup_module(void) return; } -#endif /* MODULE */ + +module_init(atm_mpoa_init); +module_exit(atm_mpoa_cleanup); + MODULE_LICENSE("GPL"); diff --git a/net/atm/mpc.h b/net/atm/mpc.h index 2237ba43fc2e..f0b33dbf469e 100644 --- a/net/atm/mpc.h +++ b/net/atm/mpc.h @@ -48,11 +48,13 @@ struct atm_mpoa_qos { struct atm_mpoa_ops { int (*mpoad_attach)(struct atm_vcc *vcc, int arg); /* attach mpoa daemon */ int (*vcc_attach)(struct atm_vcc *vcc, long arg); /* attach shortcut vcc */ + struct module *owner; }; /* Boot/module initialization function */ -void atm_mpoa_init(void); -void atm_mpoa_init_ops(struct atm_mpoa_ops *ops); +extern struct atm_mpoa_ops *atm_mpoa_ops; +int try_atm_mpoa_ops(void); +void atm_mpoa_ops_set(struct atm_mpoa_ops *hook); /* MPOA QoS operations */ struct atm_mpoa_qos *atm_mpoa_add_qos(uint32_t dst_ip, struct atm_qos *qos); diff --git a/net/atm/proc.c b/net/atm/proc.c index eca265a87792..fa85563831c6 100644 --- a/net/atm/proc.c +++ b/net/atm/proc.c @@ -47,7 +47,6 @@ #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) #include "lec.h" #include "lec_arpc.h" -extern struct atm_lane_ops atm_lane_ops; /* in common.c */ #endif static ssize_t proc_dev_atm_read(struct file *file,char *buf,size_t count, @@ -481,57 +480,72 @@ static int atm_arp_info(loff_t pos,char *buf) #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) static int atm_lec_info(loff_t pos,char *buf) { + unsigned long flags; struct lec_priv *priv; struct lec_arp_table *entry; int i, count, d, e; - struct net_device **dev_lec; + struct net_device *dev; if (!pos) { return sprintf(buf,"Itf MAC ATM destination" " Status Flags " "VPI/VCI Recv VPI/VCI\n"); } - if (atm_lane_ops.get_lecs == NULL) + if (!try_atm_lane_ops()) return 0; /* the lane module is not there yet */ - else - dev_lec = atm_lane_ops.get_lecs(); count = pos; - for(d=0;d<MAX_LEC_ITF;d++) { - if (!dev_lec[d] || !(priv = - (struct lec_priv *) dev_lec[d]->priv)) continue; - for(i=0;i<LEC_ARP_TABLE_SIZE;i++) { - entry = priv->lec_arp_tables[i]; - for(;entry;entry=entry->next) { - if (--count) continue; - e=sprintf(buf,"%s ", - dev_lec[d]->name); - lec_info(entry,buf+e); + for(d = 0; d < MAX_LEC_ITF; d++) { + dev = atm_lane_ops->get_lec(d); + if (!dev || !(priv = (struct lec_priv *) dev->priv)) + continue; + spin_lock_irqsave(&priv->lec_arp_lock, flags); + for(i = 0; i < LEC_ARP_TABLE_SIZE; i++) { + for(entry = priv->lec_arp_tables[i]; entry; entry = entry->next) { + if (--count) + continue; + e = sprintf(buf,"%s ", dev->name); + lec_info(entry, buf+e); + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); + dev_put(dev); + module_put(atm_lane_ops->owner); return strlen(buf); } } - for(entry=priv->lec_arp_empty_ones; entry; - entry=entry->next) { - if (--count) continue; - e=sprintf(buf,"%s ",dev_lec[d]->name); + for(entry = priv->lec_arp_empty_ones; entry; entry = entry->next) { + if (--count) + continue; + e = sprintf(buf,"%s ", dev->name); lec_info(entry, buf+e); + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); + dev_put(dev); + module_put(atm_lane_ops->owner); return strlen(buf); } - for(entry=priv->lec_no_forward; entry; - entry=entry->next) { - if (--count) continue; - e=sprintf(buf,"%s ",dev_lec[d]->name); + for(entry = priv->lec_no_forward; entry; entry=entry->next) { + if (--count) + continue; + e = sprintf(buf,"%s ", dev->name); lec_info(entry, buf+e); + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); + dev_put(dev); + module_put(atm_lane_ops->owner); return strlen(buf); } - for(entry=priv->mcast_fwds; entry; - entry=entry->next) { - if (--count) continue; - e=sprintf(buf,"%s ",dev_lec[d]->name); + for(entry = priv->mcast_fwds; entry; entry = entry->next) { + if (--count) + continue; + e = sprintf(buf,"%s ", dev->name); lec_info(entry, buf+e); + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); + dev_put(dev); + module_put(atm_lane_ops->owner); return strlen(buf); } + spin_unlock_irqrestore(&priv->lec_arp_lock, flags); + dev_put(dev); } + module_put(atm_lane_ops->owner); return 0; } #endif diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c index 7db037622dd8..de5b1bd9f9dd 100644 --- a/net/ax25/af_ax25.c +++ b/net/ax25/af_ax25.c @@ -328,7 +328,7 @@ void ax25_destroy_socket(ax25_cb *ax25) ax25_cb *sax25 = ax25_sk(skb->sk); /* Queue the unaccepted socket for death */ - __set_bit(SOCK_DEAD, &skb->sk->flags); + sock_set_flag(skb->sk, SOCK_DEAD); ax25_start_heartbeat(sax25); sax25->state = AX25_STATE_0; @@ -981,8 +981,8 @@ static int ax25_release(struct socket *sock) sk->state = TCP_CLOSE; sk->shutdown |= SEND_SHUTDOWN; sk->state_change(sk); - __set_bit(SOCK_DEAD, &sk->flags); - __set_bit(SOCK_DESTROY, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); + sock_set_flag(sk, SOCK_DESTROY); break; default: @@ -992,7 +992,7 @@ static int ax25_release(struct socket *sock) sk->state = TCP_CLOSE; sk->shutdown |= SEND_SHUTDOWN; sk->state_change(sk); - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); ax25_destroy_socket(ax25); } diff --git a/net/ax25/ax25_ds_in.c b/net/ax25/ax25_ds_in.c index 10a906d8b42e..cee3451aee2a 100644 --- a/net/ax25/ax25_ds_in.c +++ b/net/ax25/ax25_ds_in.c @@ -66,8 +66,11 @@ static int ax25_ds_state1_machine(ax25_cb *ax25, struct sk_buff *skb, int framet ax25->n2count = 0; if (ax25->sk != NULL) { ax25->sk->state = TCP_ESTABLISHED; - /* For WAIT_SABM connections we will produce an accept ready socket here */ - if (!test_bit(SOCK_DEAD, &ax25->sk->flags)) + /* + * For WAIT_SABM connections we will produce an accept + * ready socket here + */ + if (!sock_flag(ax25->sk, SOCK_DEAD)) ax25->sk->state_change(ax25->sk); } ax25_dama_on(ax25); diff --git a/net/ax25/ax25_ds_timer.c b/net/ax25/ax25_ds_timer.c index 4f0b7a8f914c..8e06ca149b4d 100644 --- a/net/ax25/ax25_ds_timer.c +++ b/net/ax25/ax25_ds_timer.c @@ -103,7 +103,9 @@ void ax25_ds_heartbeat_expiry(ax25_cb *ax25) case AX25_STATE_0: /* Magic here: If we listen() and a new link dies before it is accepted() it isn't 'dead' so doesn't get removed. */ - if (ax25->sk == NULL || test_bit(SOCK_DESTROY, &ax25->sk->flags) || (ax25->sk->state == TCP_LISTEN && test_bit(SOCK_DEAD, &ax25->sk->flags))) { + if (!ax25->sk || sock_flag(ax25->sk, SOCK_DESTROY) || + (ax25->sk->state == TCP_LISTEN && + sock_flag(ax25->sk, SOCK_DEAD))) { ax25_destroy_socket(ax25); return; } @@ -157,9 +159,10 @@ void ax25_ds_idletimer_expiry(ax25_cb *ax25) ax25->sk->state = TCP_CLOSE; ax25->sk->err = 0; ax25->sk->shutdown |= SEND_SHUTDOWN; - if (!test_bit(SOCK_DEAD, &ax25->sk->flags)) + if (!sock_flag(ax25->sk, SOCK_DEAD)) { ax25->sk->state_change(ax25->sk); - __set_bit(SOCK_DEAD, &ax25->sk->flags); + sock_set_flag(ax25->sk, SOCK_DEAD); + } } } diff --git a/net/ax25/ax25_in.c b/net/ax25/ax25_in.c index ce06ce58e66b..d36280ac5c78 100644 --- a/net/ax25/ax25_in.c +++ b/net/ax25/ax25_in.c @@ -433,12 +433,11 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev, ax25_start_t3timer(ax25); ax25_start_idletimer(ax25); - if (sk != NULL) { - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (sk) { + if (!sock_flag(sk, SOCK_DEAD)) sk->data_ready(sk, skb->len); - } else { + } else kfree_skb(skb); - } return 0; } diff --git a/net/ax25/ax25_std_in.c b/net/ax25/ax25_std_in.c index 45528e2b29b0..7abbee89d093 100644 --- a/net/ax25/ax25_std_in.c +++ b/net/ax25/ax25_std_in.c @@ -75,7 +75,7 @@ static int ax25_std_state1_machine(ax25_cb *ax25, struct sk_buff *skb, int frame if (ax25->sk != NULL) { ax25->sk->state = TCP_ESTABLISHED; /* For WAIT_SABM connections we will produce an accept ready socket here */ - if (!test_bit(SOCK_DEAD, &ax25->sk->flags)) + if (!sock_flag(ax25->sk, SOCK_DEAD)) ax25->sk->state_change(ax25->sk); } } diff --git a/net/ax25/ax25_std_timer.c b/net/ax25/ax25_std_timer.c index 604b4fe3ee4a..8f82c2169fb7 100644 --- a/net/ax25/ax25_std_timer.c +++ b/net/ax25/ax25_std_timer.c @@ -37,7 +37,9 @@ void ax25_std_heartbeat_expiry(ax25_cb *ax25) case AX25_STATE_0: /* Magic here: If we listen() and a new link dies before it is accepted() it isn't 'dead' so doesn't get removed. */ - if (ax25->sk == NULL || test_bit(SOCK_DESTROY, &ax25->sk->flags) || (ax25->sk->state == TCP_LISTEN && test_bit(SOCK_DEAD, &ax25->sk->flags))) { + if (!ax25->sk || sock_flag(ax25->sk, SOCK_DESTROY) || + (ax25->sk->state == TCP_LISTEN && + sock_flag(ax25->sk, SOCK_DEAD))) { ax25_destroy_socket(ax25); return; } @@ -94,9 +96,10 @@ void ax25_std_idletimer_expiry(ax25_cb *ax25) ax25->sk->state = TCP_CLOSE; ax25->sk->err = 0; ax25->sk->shutdown |= SEND_SHUTDOWN; - if (!test_bit(SOCK_DEAD, &ax25->sk->flags)) + if (!sock_flag(ax25->sk, SOCK_DEAD)) { ax25->sk->state_change(ax25->sk); - __set_bit(SOCK_DEAD, &ax25->sk->flags); + sock_set_flag(ax25->sk, SOCK_DEAD); + } } } diff --git a/net/ax25/ax25_subr.c b/net/ax25/ax25_subr.c index 3c6a3105acb9..3a5c3f9f4e86 100644 --- a/net/ax25/ax25_subr.c +++ b/net/ax25/ax25_subr.c @@ -285,8 +285,9 @@ void ax25_disconnect(ax25_cb *ax25, int reason) ax25->sk->state = TCP_CLOSE; ax25->sk->err = reason; ax25->sk->shutdown |= SEND_SHUTDOWN; - if (!test_bit(SOCK_DEAD, &ax25->sk->flags)) + if (!sock_flag(ax25->sk, SOCK_DEAD)) { ax25->sk->state_change(ax25->sk); - __set_bit(SOCK_DEAD, &ax25->sk->flags); + sock_set_flag(ax25->sk, SOCK_DEAD); + } } } diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c index 9498d7e67a7b..84e58069d90f 100644 --- a/net/bluetooth/l2cap.c +++ b/net/bluetooth/l2cap.c @@ -266,7 +266,7 @@ static void l2cap_sock_kill(struct sock *sk) /* Kill poor orphan */ bt_sock_unlink(&l2cap_sk_list, sk); - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); sock_put(sk); } diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c index 1dca296a3cb5..1bc13b7a57e3 100644 --- a/net/bluetooth/rfcomm/sock.c +++ b/net/bluetooth/rfcomm/sock.c @@ -210,7 +210,7 @@ static void rfcomm_sock_kill(struct sock *sk) /* Kill poor orphan */ bt_sock_unlink(&rfcomm_sk_list, sk); - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); sock_put(sk); } diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c index 98629665f1a9..daf42f95c42c 100644 --- a/net/bluetooth/sco.c +++ b/net/bluetooth/sco.c @@ -371,7 +371,7 @@ static void sco_sock_kill(struct sock *sk) /* Kill poor orphan */ bt_sock_unlink(&sco_sk_list, sk); - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); sock_put(sk); } diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 99b1944c9f3a..2062884bd2c2 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -170,11 +170,12 @@ int br_del_bridge(const char *name) struct net_device *dev; int ret = 0; - dev = dev_get_by_name(name); + rtnl_lock(); + dev = __dev_get_by_name(name); if (dev == NULL) - return -ENXIO; /* Could not find device */ + ret = -ENXIO; /* Could not find device */ - if (!(dev->priv_flags & IFF_EBRIDGE)) { + else if (!(dev->priv_flags & IFF_EBRIDGE)) { /* Attempt to delete non bridge device! */ ret = -EPERM; } @@ -186,11 +187,10 @@ int br_del_bridge(const char *name) else { del_ifs((struct net_bridge *) dev->priv); - - unregister_netdev(dev); + unregister_netdevice(dev); } - dev_put(dev); + rtnl_unlock(); return ret; } diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index e0da193e98fb..209df2e5452c 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -16,16 +16,6 @@ #include <net/sock.h> #include <linux/rtnetlink.h> -const char *if_port_text[] = { - [IF_PORT_UNKNOWN] = "unknown", - [IF_PORT_10BASE2] = "BNC", - [IF_PORT_10BASET] = "10baseT", - [IF_PORT_AUI] = "AUI", - [IF_PORT_100BASET] = "100baseT", - [IF_PORT_100BASETX] = "100baseTX", - [IF_PORT_100BASEFX] = "100baseFX" -}; - #define to_net_dev(class) container_of((class), struct net_device, class_dev) /* generate a show function for simple field */ @@ -66,20 +56,6 @@ NETDEVICE_ATTR(ifindex, "%d\n"); NETDEVICE_ATTR(features, "%#x\n"); NETDEVICE_ATTR(type, "%d\n"); -/* TODO: only a few devices set this now should fix others. */ -static ssize_t show_port(struct class_device *dev, char *buf) -{ - unsigned char port = to_net_dev(dev)->if_port; - char *cp = buf; - - cp += sprintf(cp, "%d", port); - if (port < ARRAY_SIZE(if_port_text)) - cp += sprintf(cp, " (%s)", if_port_text[port]); - *cp++ ='\n'; - return cp - buf; -} -static CLASS_DEVICE_ATTR(if_port, S_IRUGO, show_port, NULL); - static ssize_t format_addr(char *buf, const unsigned char *addr, int len) { int i; @@ -175,7 +151,6 @@ static struct class_device_attribute *net_class_attributes[] = { &class_device_attr_features, &class_device_attr_mtu, &class_device_attr_flags, - &class_device_attr_if_port, &class_device_attr_type, &class_device_attr_address, &class_device_attr_broadcast, @@ -294,7 +269,7 @@ int netdev_register_sysfs(struct net_device *net) class_dev->class = &net_class; class_dev->class_data = net; - snprintf(class_dev->class_id, BUS_ID_SIZE, net->name); + strlcpy(class_dev->class_id, net->name, BUS_ID_SIZE); if ((ret = class_device_register(class_dev))) goto out; @@ -303,17 +278,18 @@ int netdev_register_sysfs(struct net_device *net) goto out_unreg; } + + net->stats_kobj.parent = NULL; if (net->get_stats) { struct kobject *k = &net->stats_kobj; - memset(k, 0, sizeof(*k)); k->parent = kobject_get(&class_dev->kobj); if (!k->parent) { ret = -EBUSY; goto out_unreg; } - snprintf(k->name, KOBJ_NAME_LEN, "%s", "statistics"); + strlcpy(k->name, "statistics", KOBJ_NAME_LEN); k->ktype = &netstat_ktype; if((ret = kobject_register(k))) @@ -331,8 +307,9 @@ out_unreg: void netdev_unregister_sysfs(struct net_device *net) { - if (net->get_stats) - kobject_del(&net->stats_kobj); + if (net->stats_kobj.parent) + kobject_unregister(&net->stats_kobj); + class_device_unregister(&net->class_dev); } diff --git a/net/core/sock.c b/net/core/sock.c index 2ff89aff6a3c..98bcc95a15e4 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -177,10 +177,9 @@ int sock_setsockopt(struct socket *sock, int level, int optname, */ #ifdef SO_DONTLINGER /* Compatibility item... */ - switch(optname) - { + switch (optname) { case SO_DONTLINGER: - __clear_bit(SOCK_LINGER, &sk->flags); + sock_reset_flag(sk, SOCK_LINGER); return 0; } #endif @@ -291,16 +290,16 @@ int sock_setsockopt(struct socket *sock, int level, int optname, ret = -EFAULT; break; } - if(ling.l_onoff==0) { - __clear_bit(SOCK_LINGER, &sk->flags); - } else { + if (!ling.l_onoff) + sock_reset_flag(sk, SOCK_LINGER); + else { #if (BITS_PER_LONG == 32) if (ling.l_linger >= MAX_SCHEDULE_TIMEOUT/HZ) sk->lingertime=MAX_SCHEDULE_TIMEOUT; else #endif sk->lingertime=ling.l_linger*HZ; - __set_bit(SOCK_LINGER, &sk->flags); + sock_set_flag(sk, SOCK_LINGER); } break; @@ -444,7 +443,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname, break; case SO_BROADCAST: - v.val= test_bit(SOCK_BROADCAST, &sk->flags); + v.val = !!sock_flag(sk, SOCK_BROADCAST); break; case SO_SNDBUF: @@ -460,7 +459,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname, break; case SO_KEEPALIVE: - v.val = test_bit(SOCK_KEEPOPEN, &sk->flags); + v.val = !!sock_flag(sk, SOCK_KEEPOPEN); break; case SO_TYPE: @@ -474,7 +473,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname, break; case SO_OOBINLINE: - v.val = test_bit(SOCK_URGINLINE, &sk->flags); + v.val = !!sock_flag(sk, SOCK_URGINLINE); break; case SO_NO_CHECK: @@ -486,9 +485,9 @@ int sock_getsockopt(struct socket *sock, int level, int optname, break; case SO_LINGER: - lv=sizeof(v.ling); - v.ling.l_onoff = test_bit(SOCK_LINGER, &sk->flags); - v.ling.l_linger=sk->lingertime/HZ; + lv = sizeof(v.ling); + v.ling.l_onoff = !!sock_flag(sk, SOCK_LINGER); + v.ling.l_linger = sk->lingertime / HZ; break; case SO_BSDCOMPAT: diff --git a/net/decnet/dn_nsp_in.c b/net/decnet/dn_nsp_in.c index a42d5eb02387..55775e928405 100644 --- a/net/decnet/dn_nsp_in.c +++ b/net/decnet/dn_nsp_in.c @@ -119,7 +119,7 @@ static void dn_ack(struct sock *sk, struct sk_buff *skb, unsigned short ack) break; } - if (wakeup && !test_bit(SOCK_DEAD, &sk->flags)) + if (wakeup && !sock_flag(sk, SOCK_DEAD)) sk->state_change(sk); } @@ -368,7 +368,7 @@ static void dn_nsp_conn_conf(struct sock *sk, struct sk_buff *skb) } } dn_nsp_send_link(sk, DN_NOCHANGE, 0); - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->state_change(sk); } @@ -429,7 +429,7 @@ static void dn_nsp_disc_init(struct sock *sk, struct sk_buff *skb) break; } - if (!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) { if (sk->socket->state != SS_UNCONNECTED) sk->socket->state = SS_DISCONNECTING; sk->state_change(sk); @@ -486,7 +486,7 @@ static void dn_nsp_disc_conf(struct sock *sk, struct sk_buff *skb) scp->state = DN_CN; } - if (!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) { if (sk->socket->state != SS_UNCONNECTED) sk->socket->state = SS_DISCONNECTING; sk->state_change(sk); @@ -558,7 +558,7 @@ static void dn_nsp_linkservice(struct sock *sk, struct sk_buff *skb) } break; } - if (wake_up && !test_bit(SOCK_DEAD, &sk->flags)) + if (wake_up && !sock_flag(sk, SOCK_DEAD)) sk->state_change(sk); } @@ -596,7 +596,7 @@ static __inline__ int dn_queue_skb(struct sock *sk, struct sk_buff *skb, int sig * Therefore the plain read_lock is ok here. -DaveM */ read_lock(&sk->callback_lock); - if (!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) { struct socket *sock = sk->socket; wake_up_interruptible(sk->sleep); if (sock && sock->fasync_list && @@ -680,7 +680,7 @@ static void dn_returned_conn_init(struct sock *sk, struct sk_buff *skb) if (scp->state == DN_CI) { scp->state = DN_NC; sk->state = TCP_CLOSE; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->state_change(sk); } @@ -882,7 +882,7 @@ int dn_nsp_backlog_rcv(struct sock *sk, struct sk_buff *skb) int other = 1; /* both data and ack frames can kick a CC socket into RUN */ - if ((scp->state == DN_CC) && !test_bit(SOCK_DEAD, &sk->flags)) { + if ((scp->state == DN_CC) && !sock_flag(sk, SOCK_DEAD)) { scp->state = DN_RUN; sk->state = TCP_ESTABLISHED; sk->state_change(sk); diff --git a/net/decnet/dn_nsp_out.c b/net/decnet/dn_nsp_out.c index ae1632fb161d..40aa05ac122b 100644 --- a/net/decnet/dn_nsp_out.c +++ b/net/decnet/dn_nsp_out.c @@ -104,7 +104,7 @@ try_again: } sk->err = EHOSTUNREACH; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->state_change(sk); } diff --git a/net/econet/af_econet.c b/net/econet/af_econet.c index e0724e0e64c6..1e2e6faa9262 100644 --- a/net/econet/af_econet.c +++ b/net/econet/af_econet.c @@ -531,7 +531,7 @@ static int econet_release(struct socket *sock) sock->sk = NULL; sk->socket = NULL; - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); /* Purge queues */ diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 7cd34f189f1e..343239eb91b2 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -146,7 +146,7 @@ void inet_sock_destruct(struct sock *sk) sk); return; } - if (!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) { printk("Attempt to release alive inet socket %p\n", sk); return; } @@ -456,8 +456,8 @@ int inet_release(struct socket *sock) * linger.. */ timeout = 0; - if (test_bit(SOCK_LINGER, &sk->flags) && - !(current->flags & PF_EXITING)) + if (sock_flag(sk, SOCK_LINGER) && + !(current->flags & PF_EXITING)) timeout = sk->lingertime; sock->sk = NULL; sk->prot->close(sk, timeout); diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index 6a76726b9919..6c1ebbaf52cc 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c @@ -450,8 +450,7 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, goto done; err = -EACCES; - if (rt->rt_flags & RTCF_BROADCAST && - !test_bit(SOCK_BROADCAST, &sk->flags)) + if (rt->rt_flags & RTCF_BROADCAST && !sock_flag(sk, SOCK_BROADCAST)) goto done; if (msg->msg_flags & MSG_CONFIRM) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 73d52ec6d30e..c09776935947 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -442,7 +442,7 @@ unsigned int tcp_poll(struct file *file, struct socket *sock, poll_table *wait) if ((tp->rcv_nxt != tp->copied_seq) && (tp->urg_seq != tp->copied_seq || tp->rcv_nxt != tp->copied_seq + 1 || - test_bit(SOCK_URGINLINE, &sk->flags) || !tp->urg_data)) + sock_flag(sk, SOCK_URGINLINE) || !tp->urg_data)) mask |= POLLIN | POLLRDNORM; if (!(sk->shutdown & SEND_SHUTDOWN)) { @@ -498,7 +498,7 @@ int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg) lock_sock(sk); if ((1 << sk->state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) answ = 0; - else if (test_bit(SOCK_URGINLINE, &sk->flags) || + else if (sock_flag(sk, SOCK_URGINLINE) || !tp->urg_data || before(tp->urg_seq, tp->copied_seq) || !before(tp->urg_seq, tp->rcv_nxt)) { @@ -1254,11 +1254,11 @@ static int tcp_recv_urg(struct sock *sk, long timeo, struct tcp_opt *tp = tcp_sk(sk); /* No URG data to read. */ - if (test_bit(SOCK_URGINLINE, &sk->flags) || !tp->urg_data || - tp->urg_data == TCP_URG_READ) + if (sock_flag(sk, SOCK_URGINLINE) || !tp->urg_data || + tp->urg_data == TCP_URG_READ) return -EINVAL; /* Yes this is right ! */ - if (sk->state == TCP_CLOSE && !test_bit(SOCK_DONE, &sk->flags)) + if (sk->state == TCP_CLOSE && !sock_flag(sk, SOCK_DONE)) return -ENOTCONN; if (tp->urg_data & TCP_URG_VALID) { @@ -1586,7 +1586,7 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, (flags & MSG_PEEK)) break; } else { - if (test_bit(SOCK_DONE, &sk->flags)) + if (sock_flag(sk, SOCK_DONE)) break; if (sk->err) { @@ -1598,7 +1598,7 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, break; if (sk->state == TCP_CLOSE) { - if (!test_bit(SOCK_DONE, &sk->flags)) { + if (!sock_flag(sk, SOCK_DONE)) { /* This occurs when user tries to read * from never connected socket. */ @@ -1711,8 +1711,7 @@ do_prequeue: u32 urg_offset = tp->urg_seq - *seq; if (urg_offset < used) { if (!urg_offset) { - if (!test_bit(SOCK_URGINLINE, - &sk->flags)) { + if (!sock_flag(sk, SOCK_URGINLINE)) { ++*seq; offset++; used--; @@ -1836,7 +1835,7 @@ static int tcp_close_state(struct sock *sk) /* * Shutdown the sending side of a connection. Much like close except - * that we don't receive shut down or set SOCK_DEAD in sk->flags. + * that we don't receive shut down or set_sock_flag(sk, SOCK_DEAD). */ void tcp_shutdown(struct sock *sk, int how) @@ -1901,7 +1900,7 @@ static __inline__ void tcp_kill_sk_queues(struct sock *sk) void tcp_destroy_sock(struct sock *sk) { BUG_TRAP(sk->state == TCP_CLOSE); - BUG_TRAP(test_bit(SOCK_DEAD, &sk->flags)); + BUG_TRAP(sock_flag(sk, SOCK_DEAD)); /* It cannot be in hash table! */ BUG_TRAP(!sk->pprev); @@ -1978,7 +1977,7 @@ void tcp_close(struct sock *sk, long timeout) NET_INC_STATS_USER(TCPAbortOnClose); tcp_set_state(sk, TCP_CLOSE); tcp_send_active_reset(sk, GFP_KERNEL); - } else if (test_bit(SOCK_LINGER, &sk->flags) && !sk->lingertime) { + } else if (sock_flag(sk, SOCK_LINGER) && !sk->lingertime) { /* Check zero linger _after_ checking for unread data. */ sk->prot->disconnect(sk, 0); NET_INC_STATS_USER(TCPAbortOnData); @@ -2144,7 +2143,7 @@ int tcp_disconnect(struct sock *sk, int flags) inet_reset_saddr(sk); sk->shutdown = 0; - __clear_bit(SOCK_DONE, &sk->flags); + sock_reset_flag(sk, SOCK_DONE); tp->srtt = 0; if ((tp->write_seq += tp->max_window + 2) == 0) tp->write_seq = 1; @@ -2343,7 +2342,7 @@ int tcp_setsockopt(struct sock *sk, int level, int optname, char *optval, err = -EINVAL; else { tp->keepalive_time = val * HZ; - if (test_bit(SOCK_KEEPOPEN, &sk->flags) && + if (sock_flag(sk, SOCK_KEEPOPEN) && !((1 << sk->state) & (TCPF_CLOSE | TCPF_LISTEN))) { __u32 elapsed = tcp_time_stamp - tp->rcv_tstamp; if (tp->keepalive_time > elapsed) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index cb11efc96874..7f519c297e94 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -2352,7 +2352,7 @@ static void tcp_reset(struct sock *sk) sk->err = ECONNRESET; } - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->error_report(sk); tcp_done(sk); @@ -2379,7 +2379,7 @@ static void tcp_fin(struct sk_buff *skb, struct sock *sk, struct tcphdr *th) tcp_schedule_ack(tp); sk->shutdown |= RCV_SHUTDOWN; - __clear_bit(SOCK_DONE, &sk->flags); + sock_reset_flag(sk, SOCK_DONE); switch(sk->state) { case TCP_SYN_RECV: @@ -2428,7 +2428,7 @@ static void tcp_fin(struct sk_buff *skb, struct sock *sk, struct tcphdr *th) tcp_sack_reset(tp); tcp_mem_reclaim(sk); - if (!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) { sk->state_change(sk); /* Do not send POLL_HUP for half duplex close. */ @@ -2743,9 +2743,9 @@ queue_and_out: tcp_fast_path_check(sk, tp); - if (eaten > 0) { + if (eaten > 0) __kfree_skb(skb); - } else if (!test_bit(SOCK_DEAD, &sk->flags)) + else if (!sock_flag(sk, SOCK_DEAD)) sk->data_ready(sk, 0); return; } @@ -3247,7 +3247,7 @@ static void tcp_check_urg(struct sock * sk, struct tcphdr * th) * buggy users. */ if (tp->urg_seq == tp->copied_seq && tp->urg_data && - !test_bit(SOCK_URGINLINE, &sk->flags) && + !sock_flag(sk, SOCK_URGINLINE) && tp->copied_seq != tp->rcv_nxt) { struct sk_buff *skb = skb_peek(&sk->receive_queue); tp->copied_seq++; @@ -3284,7 +3284,7 @@ static void tcp_urg(struct sock *sk, struct sk_buff *skb, struct tcphdr *th) if (skb_copy_bits(skb, ptr, &tmp, 1)) BUG(); tp->urg_data = TCP_URG_VALID | tmp; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->data_ready(sk,0); } } @@ -3699,7 +3699,7 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb, tcp_init_metrics(sk); tcp_init_buffer_space(sk); - if (test_bit(SOCK_KEEPOPEN, &sk->flags)) + if (sock_flag(sk, SOCK_KEEPOPEN)) tcp_reset_keepalive_timer(sk, keepalive_time_when(tp)); if (!tp->snd_wscale) @@ -3714,7 +3714,7 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb, mb(); tcp_set_state(sk, TCP_ESTABLISHED); - if(!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) { sk->state_change(sk); sk_wake_async(sk, 0, POLL_OUT); } @@ -3977,10 +3977,10 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, sk->shutdown |= SEND_SHUTDOWN; dst_confirm(sk->dst_cache); - if (!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) /* Wake up lingering close() */ sk->state_change(sk); - } else { + else { int tmo; if (tp->linger2 < 0 || diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c index c55c96c04f00..ae762b5c5d7a 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c @@ -667,7 +667,7 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct open_request *req, newsk->wmem_queued = 0; newsk->forward_alloc = 0; - __clear_bit(SOCK_DONE, &newsk->flags); + sock_reset_flag(newsk, SOCK_DONE); newsk->userlocks = sk->userlocks & ~SOCK_BINDPORT_LOCK; newsk->backlog.head = newsk->backlog.tail = NULL; newsk->callback_lock = RW_LOCK_UNLOCKED; @@ -752,8 +752,9 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct open_request *req, #endif atomic_inc(&tcp_sockets_allocated); - if (test_bit(SOCK_KEEPOPEN, &newsk->flags)) - tcp_reset_keepalive_timer(newsk, keepalive_time_when(newtp)); + if (sock_flag(newsk, SOCK_KEEPOPEN)) + tcp_reset_keepalive_timer(newsk, + keepalive_time_when(newtp)); newsk->socket = NULL; newsk->sleep = NULL; newsk->owner = NULL; diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 4c00909e9d3f..e1482b56deb9 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1276,7 +1276,7 @@ static inline void tcp_connect_init(struct sock *sk) tp->rcv_ssthresh = tp->rcv_wnd; sk->err = 0; - __clear_bit(SOCK_DONE, &sk->flags); + sock_reset_flag(sk, SOCK_DONE); tp->snd_wnd = 0; tcp_init_wl(tp, tp->write_seq, 0); tp->snd_una = tp->write_seq; diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c index 4763edf791f7..18f5c2e2bb4a 100644 --- a/net/ipv4/tcp_timer.c +++ b/net/ipv4/tcp_timer.c @@ -189,7 +189,7 @@ static int tcp_write_timeout(struct sock *sk) } retry_until = sysctl_tcp_retries2; - if (test_bit(SOCK_DEAD, &sk->flags)) { + if (sock_flag(sk, SOCK_DEAD)) { int alive = (tp->rto < TCP_RTO_MAX); retry_until = tcp_orphan_retries(sk, alive); @@ -297,7 +297,7 @@ static void tcp_probe_timer(struct sock *sk) */ max_probes = sysctl_tcp_retries2; - if (test_bit(SOCK_DEAD, &sk->flags)) { + if (sock_flag(sk, SOCK_DEAD)) { int alive = ((tp->rto<<tp->backoff) < TCP_RTO_MAX); max_probes = tcp_orphan_retries(sk, alive); @@ -327,7 +327,7 @@ static void tcp_retransmit_timer(struct sock *sk) BUG_TRAP(!skb_queue_empty(&sk->write_queue)); - if (tp->snd_wnd == 0 && !test_bit(SOCK_DEAD, &sk->flags) && + if (!tp->snd_wnd && !sock_flag(sk, SOCK_DEAD) && !((1<<sk->state)&(TCPF_SYN_SENT|TCPF_SYN_RECV))) { /* Receiver dastardly shrinks window. Our retransmits * become zero probes, but we should not timeout this @@ -571,7 +571,7 @@ void tcp_set_keepalive(struct sock *sk, int val) if ((1<<sk->state)&(TCPF_CLOSE|TCPF_LISTEN)) return; - if (val && !test_bit(SOCK_KEEPOPEN, &sk->flags)) + if (val && !sock_flag(sk, SOCK_KEEPOPEN)) tcp_reset_keepalive_timer(sk, keepalive_time_when(tcp_sk(sk))); else if (!val) tcp_delete_keepalive_timer(sk); @@ -597,7 +597,7 @@ static void tcp_keepalive_timer (unsigned long data) goto out; } - if (sk->state == TCP_FIN_WAIT2 && test_bit(SOCK_DEAD, &sk->flags)) { + if (sk->state == TCP_FIN_WAIT2 && sock_flag(sk, SOCK_DEAD)) { if (tp->linger2 >= 0) { int tmo = tcp_fin_time(tp) - TCP_TIMEWAIT_LEN; @@ -610,7 +610,7 @@ static void tcp_keepalive_timer (unsigned long data) goto death; } - if (!test_bit(SOCK_KEEPOPEN, &sk->flags) || sk->state == TCP_CLOSE) + if (!sock_flag(sk, SOCK_KEEPOPEN) || sk->state == TCP_CLOSE) goto out; elapsed = keepalive_time_when(tp); diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 6a5b119c42db..762de6d007fd 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -609,8 +609,8 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, goto out; err = -EACCES; - if (rt->rt_flags&RTCF_BROADCAST && - !test_bit(SOCK_BROADCAST, &sk->flags)) + if ((rt->rt_flags & RTCF_BROADCAST) && + !sock_flag(sk, SOCK_BROADCAST)) goto out; if (connected) sk_dst_set(sk, dst_clone(&rt->u.dst)); @@ -891,8 +891,7 @@ int udp_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) inet->sport, usin->sin_port, sk); if (err) return err; - if ((rt->rt_flags&RTCF_BROADCAST) && - !test_bit(SOCK_BROADCAST, &sk->flags)) { + if ((rt->rt_flags & RTCF_BROADCAST) && !sock_flag(sk, SOCK_BROADCAST)) { ip_rt_put(rt); return -EACCES; } diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c index 3ab900bfaa61..74e6aaafd3db 100644 --- a/net/ipv6/reassembly.c +++ b/net/ipv6/reassembly.c @@ -54,10 +54,10 @@ #include <net/ndisc.h> #include <net/addrconf.h> -static int sysctl_ip6frag_high_thresh = 256*1024; -static int sysctl_ip6frag_low_thresh = 192*1024; +int sysctl_ip6frag_high_thresh = 256*1024; +int sysctl_ip6frag_low_thresh = 192*1024; -static int sysctl_ip6frag_time = IPV6_FRAG_TIMEOUT; +int sysctl_ip6frag_time = IPV6_FRAG_TIMEOUT; struct ip6frag_skb_cb { @@ -152,7 +152,7 @@ static unsigned int ip6qhashfn(u32 id, struct in6_addr *saddr, } static struct timer_list ip6_frag_secret_timer; -static int ip6_frag_secret_interval = 10 * 60 * HZ; +int sysctl_ip6frag_secret_interval = 10 * 60 * HZ; static void ip6_frag_secret_rebuild(unsigned long dummy) { @@ -189,7 +189,7 @@ static void ip6_frag_secret_rebuild(unsigned long dummy) } write_unlock(&ip6_frag_lock); - mod_timer(&ip6_frag_secret_timer, now + ip6_frag_secret_interval); + mod_timer(&ip6_frag_secret_timer, now + sysctl_ip6frag_secret_interval); } atomic_t ip6_frag_mem = ATOMIC_INIT(0); @@ -755,6 +755,6 @@ void __init ipv6_frag_init(void) init_timer(&ip6_frag_secret_timer); ip6_frag_secret_timer.function = ip6_frag_secret_rebuild; - ip6_frag_secret_timer.expires = jiffies + ip6_frag_secret_interval; + ip6_frag_secret_timer.expires = jiffies + sysctl_ip6frag_secret_interval; add_timer(&ip6_frag_secret_timer); } diff --git a/net/ipv6/route.c b/net/ipv6/route.c index a8664bf6cf56..3d7e29b7cdac 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -253,13 +253,15 @@ static struct rt6_info *rt6_best_dflt(struct rt6_info *rt, int oif) } } for (sprt = rt; - !match && sprt && sprt != rt6_dflt_pointer; + !match && sprt; sprt = sprt->u.next) { if (sprt->u.dst.obsolete <= 0 && sprt->u.dst.error == 0) { match = sprt; break; } + if (sprt == rt6_dflt_pointer) + break; } } } diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c index b0fef42029d1..9f4666cecd5d 100644 --- a/net/ipv6/sysctl_net_ipv6.c +++ b/net/ipv6/sysctl_net_ipv6.c @@ -42,6 +42,40 @@ ctl_table ipv6_table[] = { .mode = 0644, .proc_handler = &proc_dointvec }, + { + .ctl_name = NET_IPV6_IP6FRAG_HIGH_THRESH, + .procname = "ip6frag_high_thresh", + .data = &sysctl_ip6frag_high_thresh, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec + }, + { + .ctl_name = NET_IPV6_IP6FRAG_LOW_THRESH, + .procname = "ip6frag_low_thresh", + .data = &sysctl_ip6frag_low_thresh, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec + }, + { + .ctl_name = NET_IPV6_IP6FRAG_TIME, + .procname = "ip6frag_time", + .data = &sysctl_ip6frag_time, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec_jiffies, + .strategy = &sysctl_jiffies, + }, + { + .ctl_name = NET_IPV6_IP6FRAG_SECRET_INTERVAL, + .procname = "ip6frag_secret_interval", + .data = &sysctl_ip6frag_secret_interval, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec_jiffies, + .strategy = &sysctl_jiffies + }, { .ctl_name = 0 } }; diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c index f53fcffccba9..4590540030a0 100644 --- a/net/ipx/af_ipx.c +++ b/net/ipx/af_ipx.c @@ -1401,10 +1401,10 @@ static int ipx_release(struct socket *sock) if (!sk) goto out; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->state_change(sk); - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); sock->sk = NULL; ipx_destroy_socket(sk); out: diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c index 6d0245b8c7b4..5ea1be2f5ca1 100644 --- a/net/irda/af_irda.c +++ b/net/irda/af_irda.c @@ -133,13 +133,14 @@ static void irda_disconnect_indication(void *instance, void *sap, } /* Prevent race conditions with irda_release() and irda_shutdown() */ - if ((!test_bit(SOCK_DEAD, &sk->flags)) && (sk->state != TCP_CLOSE)) { + if (!sock_flag(sk, SOCK_DEAD) && sk->state != TCP_CLOSE) { sk->state = TCP_CLOSE; sk->err = ECONNRESET; sk->shutdown |= SEND_SHUTDOWN; sk->state_change(sk); - __set_bit(SOCK_DEAD, &sk->flags); /* Uh-oh... Should use sock_orphan ? */ + /* Uh-oh... Should use sock_orphan ? */ + sock_set_flag(sk, SOCK_DEAD); /* Close our TSAP. * If we leave it open, IrLMP put it back into the list of diff --git a/net/key/af_key.c b/net/key/af_key.c index cc0a5f27bb93..988fd18da5b9 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c @@ -52,7 +52,7 @@ static void pfkey_sock_destruct(struct sock *sk) { skb_queue_purge(&sk->receive_queue); - if (!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) { printk("Attempt to release alive pfkey socket: %p\n", sk); return; } diff --git a/net/llc/llc_conn.c b/net/llc/llc_conn.c index e2fa705c8f58..3fbc40dae6ce 100644 --- a/net/llc/llc_conn.c +++ b/net/llc/llc_conn.c @@ -120,9 +120,9 @@ int llc_conn_state_process(struct sock *sk, struct sk_buff *skb) sk->shutdown = SHUTDOWN_MASK; sk->socket->state = SS_UNCONNECTED; sk->state = TCP_CLOSE; - if (!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) { sk->state_change(sk); - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); } } kfree_skb(skb); diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 0474f80ea9be..b16b56412e54 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -90,7 +90,7 @@ static void netlink_sock_destruct(struct sock *sk) { skb_queue_purge(&sk->receive_queue); - if (!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) { printk("Freeing alive netlink socket %p\n", sk); return; } @@ -457,8 +457,8 @@ retry: add_wait_queue(&nlk->wait, &wait); if ((atomic_read(&sk->rmem_alloc) > sk->rcvbuf || - test_bit(0, &nlk->state)) && - !test_bit(SOCK_DEAD, &sk->flags)) + test_bit(0, &nlk->state)) && + !sock_flag(sk, SOCK_DEAD)) timeo = schedule_timeout(timeo); __set_current_state(TASK_RUNNING); diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index a3d9a6d24dab..cb0731628cf0 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -275,8 +275,9 @@ void nr_destroy_socket(struct sock *sk) nr_clear_queues(sk); /* Flush the queues */ while ((skb = skb_dequeue(&sk->receive_queue)) != NULL) { - if (skb->sk != sk) { /* A pending connection */ - __set_bit(SOCK_DEAD, &skb->sk->flags); /* Queue the unaccepted socket for death */ + if (skb->sk != sk) { /* A pending connection */ + /* Queue the unaccepted socket for death */ + sock_set_flag(skb->sk, SOCK_DEAD); nr_start_heartbeat(skb->sk); nr_sk(skb->sk)->state = NR_STATE_0; } @@ -535,8 +536,8 @@ static int nr_release(struct socket *sock) sk->state = TCP_CLOSE; sk->shutdown |= SEND_SHUTDOWN; sk->state_change(sk); - __set_bit(SOCK_DEAD, &sk->flags); - __set_bit(SOCK_DESTROY, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); + sock_set_flag(sk, SOCK_DESTROY); sk->socket = NULL; break; @@ -950,7 +951,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev) nr_start_heartbeat(make); nr_start_idletimer(make); - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->data_ready(sk, skb->len); return 1; diff --git a/net/netrom/nr_in.c b/net/netrom/nr_in.c index cf0d4de35480..aeff87c93ca2 100644 --- a/net/netrom/nr_in.c +++ b/net/netrom/nr_in.c @@ -90,7 +90,7 @@ static int nr_state1_machine(struct sock *sk, struct sk_buff *skb, nr->n2count = 0; nr->window = skb->data[20]; sk->state = TCP_ESTABLISHED; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->state_change(sk); break; } diff --git a/net/netrom/nr_subr.c b/net/netrom/nr_subr.c index c8fec7ee43a4..02198ba26616 100644 --- a/net/netrom/nr_subr.c +++ b/net/netrom/nr_subr.c @@ -276,8 +276,8 @@ void nr_disconnect(struct sock *sk, int reason) sk->err = reason; sk->shutdown |= SEND_SHUTDOWN; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) { sk->state_change(sk); - - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); + } } diff --git a/net/netrom/nr_timer.c b/net/netrom/nr_timer.c index 4e2c78d39a41..6c29f5bdc258 100644 --- a/net/netrom/nr_timer.c +++ b/net/netrom/nr_timer.c @@ -141,9 +141,8 @@ static void nr_heartbeat_expiry(unsigned long param) case NR_STATE_0: /* Magic here: If we listen() and a new link dies before it is accepted() it isn't 'dead' so doesn't get removed. */ - if (test_bit(SOCK_DESTROY, &sk->flags) || - (sk->state == TCP_LISTEN && - test_bit(SOCK_DEAD, &sk->flags))) { + if (sock_flag(sk, SOCK_DESTROY) || + (sk->state == TCP_LISTEN && sock_flag(sk, SOCK_DEAD))) { nr_destroy_socket(sk); return; } @@ -211,10 +210,10 @@ static void nr_idletimer_expiry(unsigned long param) sk->err = 0; sk->shutdown |= SEND_SHUTDOWN; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) { sk->state_change(sk); - - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); + } bh_unlock_sock(sk); } diff --git a/net/netsyms.c b/net/netsyms.c index c153585701e3..cea4942ae956 100644 --- a/net/netsyms.c +++ b/net/netsyms.c @@ -609,8 +609,6 @@ EXPORT_SYMBOL(dev_mc_delete); EXPORT_SYMBOL(dev_mc_upload); EXPORT_SYMBOL(__kill_fasync); -EXPORT_SYMBOL(if_port_text); - #ifdef CONFIG_HIPPI EXPORT_SYMBOL(hippi_type_trans); #endif diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 80b256e14de9..e8a5beb5cc7f 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -198,7 +198,7 @@ void packet_sock_destruct(struct sock *sk) BUG_TRAP(atomic_read(&sk->rmem_alloc)==0); BUG_TRAP(atomic_read(&sk->wmem_alloc)==0); - if (!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) { printk("Attempt to release alive packet socket: %p\n", sk); return; } @@ -844,7 +844,7 @@ static int packet_do_bind(struct sock *sk, struct net_device *dev, int protocol) po->running = 1; } else { sk->err = ENETDOWN; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->error_report(sk); } } else { @@ -1381,7 +1381,7 @@ static int packet_notifier(struct notifier_block *this, unsigned long msg, void __sock_put(sk); po->running = 0; sk->err = ENETDOWN; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->error_report(sk); } if (msg == NETDEV_UNREGISTER) { diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c index e1abedac823f..9e8026d5e876 100644 --- a/net/rose/af_rose.c +++ b/net/rose/af_rose.c @@ -356,8 +356,9 @@ void rose_destroy_socket(struct sock *sk) rose_clear_queues(sk); /* Flush the queues */ while ((skb = skb_dequeue(&sk->receive_queue)) != NULL) { - if (skb->sk != sk) { /* A pending connection */ - __set_bit(SOCK_DEAD, &skb->sk->flags); /* Queue the unaccepted socket for death */ + if (skb->sk != sk) { /* A pending connection */ + /* Queue the unaccepted socket for death */ + sock_set_flag(skb->sk, SOCK_DEAD); rose_start_heartbeat(skb->sk); rose_sk(skb->sk)->state = ROSE_STATE_0; } @@ -637,8 +638,8 @@ static int rose_release(struct socket *sock) sk->state = TCP_CLOSE; sk->shutdown |= SEND_SHUTDOWN; sk->state_change(sk); - __set_bit(SOCK_DEAD, &sk->flags); - __set_bit(SOCK_DESTROY, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); + sock_set_flag(sk, SOCK_DESTROY); break; default: @@ -1010,7 +1011,7 @@ int rose_rx_call_request(struct sk_buff *skb, struct net_device *dev, struct ros rose_start_heartbeat(make); - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->data_ready(sk, skb->len); return 1; @@ -1535,7 +1536,6 @@ static void __exit rose_exit(void) dev_rose[i].priv = NULL; unregister_netdev(&dev_rose[i]); } - kfree(dev_rose[i].name); } kfree(dev_rose); diff --git a/net/rose/rose_in.c b/net/rose/rose_in.c index 70cfbbe74cac..e60220284cd2 100644 --- a/net/rose/rose_in.c +++ b/net/rose/rose_in.c @@ -54,7 +54,7 @@ static int rose_state1_machine(struct sock *sk, struct sk_buff *skb, int framety rose->vl = 0; rose->state = ROSE_STATE_3; sk->state = TCP_ESTABLISHED; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->state_change(sk); break; diff --git a/net/rose/rose_route.c b/net/rose/rose_route.c index a64ba0be448c..22af35f5cd28 100644 --- a/net/rose/rose_route.c +++ b/net/rose/rose_route.c @@ -910,9 +910,10 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25) sk->state = TCP_CLOSE; sk->err = 0; sk->shutdown |= SEND_SHUTDOWN; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) { sk->state_change(sk); - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); + } } else { skb->h.raw = skb->data; diff --git a/net/rose/rose_subr.c b/net/rose/rose_subr.c index 3b1e8ad990c7..924b56c55ae3 100644 --- a/net/rose/rose_subr.c +++ b/net/rose/rose_subr.c @@ -510,8 +510,8 @@ void rose_disconnect(struct sock *sk, int reason, int cause, int diagnostic) sk->err = reason; sk->shutdown |= SEND_SHUTDOWN; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) { sk->state_change(sk); - - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); + } } diff --git a/net/rose/rose_timer.c b/net/rose/rose_timer.c index 3ccf38ffaf61..42bfc0f1b4f0 100644 --- a/net/rose/rose_timer.c +++ b/net/rose/rose_timer.c @@ -136,9 +136,8 @@ static void rose_heartbeat_expiry(unsigned long param) case ROSE_STATE_0: /* Magic here: If we listen() and a new link dies before it is accepted() it isn't 'dead' so doesn't get removed. */ - if (test_bit(SOCK_DESTROY, &sk->flags) || - (sk->state == TCP_LISTEN && - test_bit(SOCK_DEAD, &sk->flags))) { + if (sock_flag(sk, SOCK_DESTROY) || + (sk->state == TCP_LISTEN && sock_flag(sk, SOCK_DEAD))) { rose_destroy_socket(sk); return; } @@ -209,9 +208,9 @@ static void rose_idletimer_expiry(unsigned long param) sk->err = 0; sk->shutdown |= SEND_SHUTDOWN; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) { sk->state_change(sk); - - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); + } bh_unlock_sock(sk); } diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 9cfe2f73d0c2..2e12db10227d 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -731,7 +731,7 @@ SCTP_STATIC void sctp_close(struct sock *sk, long timeout) sctp_unhash_established(asoc); sctp_association_free(asoc); - } else if (test_bit(SOCK_LINGER, &sk->flags) && + } else if (sock_flag(sk, SOCK_LINGER) && !sk->lingertime) sctp_primitive_ABORT(asoc, NULL); else diff --git a/net/sctp/ulpqueue.c b/net/sctp/ulpqueue.c index 55025d15dc38..4c85dc95a12a 100644 --- a/net/sctp/ulpqueue.c +++ b/net/sctp/ulpqueue.c @@ -189,7 +189,7 @@ int sctp_ulpq_tail_event(struct sctp_ulpq *ulpq, struct sctp_ulpevent *event) /* If the socket is just going to throw this away, do not * even try to deliver it. */ - if (test_bit(SOCK_DEAD, &sk->flags) || (sk->shutdown & RCV_SHUTDOWN)) + if (sock_flag(sk, SOCK_DEAD) || (sk->shutdown & RCV_SHUTDOWN)) goto out_free; /* Check if the user wishes to receive this event. */ diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index 3621e8654719..6bddd4b38250 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c @@ -963,7 +963,7 @@ tcp_state_change(struct sock *sk) dprintk("RPC: tcp_state_change client %p...\n", xprt); dprintk("RPC: state %x conn %d dead %d zapped %d\n", sk->state, xprt_connected(xprt), - test_bit(SOCK_DEAD, &sk->flags), sk->zapped); + sock_flag(sk, SOCK_DEAD), sk->zapped); switch (sk->state) { case TCP_ESTABLISHED: diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 386ba0b09335..725bdae8ff57 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -334,8 +334,7 @@ static void unix_dgram_disconnected(struct sock *sk, struct sock *other) * we signal error. Messages are lost. Do not make this, * when peer was not connected to us. */ - if (!test_bit(SOCK_DEAD, &other->flags) && - unix_peer(other) == sk) { + if (!sock_flag(other, SOCK_DEAD) && unix_peer(other) == sk) { other->err = ECONNRESET; other->error_report(other); } @@ -351,7 +350,7 @@ static void unix_sock_destructor(struct sock *sk) BUG_TRAP(atomic_read(&sk->wmem_alloc) == 0); BUG_TRAP(!u->list); BUG_TRAP(sk->socket==NULL); - if (!test_bit(SOCK_DEAD, &sk->flags)) { + if (!sock_flag(sk, SOCK_DEAD)) { printk("Attempt to release alive unix socket: %p\n", sk); return; } @@ -863,9 +862,9 @@ static long unix_wait_for_peer(unix_socket *other, long timeo) prepare_to_wait_exclusive(&u->peer_wait, &wait, TASK_INTERRUPTIBLE); - sched = (!test_bit(SOCK_DEAD, &other->flags) && - !(other->shutdown&RCV_SHUTDOWN) && - skb_queue_len(&other->receive_queue) > other->max_ack_backlog); + sched = !sock_flag(other, SOCK_DEAD) && + !(other->shutdown & RCV_SHUTDOWN) && + skb_queue_len(&other->receive_queue) > other->max_ack_backlog; unix_state_runlock(other); @@ -927,7 +926,7 @@ restart: unix_state_rlock(other); /* Apparently VFS overslept socket death. Retry. */ - if (test_bit(SOCK_DEAD, &other->flags)) { + if (sock_flag(other, SOCK_DEAD)) { unix_state_runlock(other); sock_put(other); goto restart; @@ -1267,7 +1266,7 @@ restart: if (!unix_may_send(sk, other)) goto out_unlock; - if (test_bit(SOCK_DEAD, &other->flags)) { + if (sock_flag(other, SOCK_DEAD)) { /* * Check with 1003.1g - what should * datagram error @@ -1418,8 +1417,8 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, unix_state_rlock(other); - if (test_bit(SOCK_DEAD, &other->flags) || - (other->shutdown & RCV_SHUTDOWN)) + if (sock_flag(other, SOCK_DEAD) || + (other->shutdown & RCV_SHUTDOWN)) goto pipe_err_free; skb_queue_tail(&other->receive_queue, skb); diff --git a/net/wanrouter/af_wanpipe.c b/net/wanrouter/af_wanpipe.c index 9dd12c56a964..191ea011b9ec 100644 --- a/net/wanrouter/af_wanpipe.c +++ b/net/wanrouter/af_wanpipe.c @@ -1003,7 +1003,7 @@ static int wanpipe_release(struct socket *sock) sock->sk = NULL; sk->socket = NULL; - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); /* Purge queues */ skb_queue_purge(&sk->receive_queue); @@ -1075,7 +1075,7 @@ static void release_driver(struct sock *sk) while ((skb=skb_dequeue(&sk->receive_queue))!=NULL){ if ((deadsk = get_newsk_from_skb(skb))){ DBG_PRINTK (KERN_INFO "wansock: RELEASE: FOUND DEAD SOCK\n"); - __set_bit(SOCK_DEAD, &deadsk->flags); + sock_set_flag(deadsk, SOCK_DEAD); start_cleanup_timer(deadsk); } kfree_skb(skb); diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c index f4807d92e58e..4aeec135da9c 100644 --- a/net/x25/af_x25.c +++ b/net/x25/af_x25.c @@ -344,7 +344,7 @@ void x25_destroy_socket(struct sock *sk) /* * Queue the unaccepted socket for death */ - __set_bit(SOCK_DEAD, &skb->sk->flags); + sock_set_flag(skb->sk, SOCK_DEAD); x25_start_heartbeat(skb->sk); x25_sk(skb->sk)->state = X25_STATE_0; } @@ -574,8 +574,8 @@ static int x25_release(struct socket *sock) sk->state = TCP_CLOSE; sk->shutdown |= SEND_SHUTDOWN; sk->state_change(sk); - __set_bit(SOCK_DEAD, &sk->flags); - __set_bit(SOCK_DESTROY, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); + sock_set_flag(sk, SOCK_DESTROY); break; } @@ -896,7 +896,7 @@ int x25_rx_call_request(struct sk_buff *skb, struct x25_neigh *nb, x25_start_heartbeat(make); - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->data_ready(sk, skb->len); rc = 1; sock_put(sk); @@ -1106,8 +1106,8 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock, if (flags & MSG_OOB) { rc = -EINVAL; - if (test_bit(SOCK_URGINLINE, &sk->flags) || - !skb_peek(&x25->interrupt_in_queue)) + if (sock_flag(sk, SOCK_URGINLINE) || + !skb_peek(&x25->interrupt_in_queue)) goto out; skb = skb_dequeue(&x25->interrupt_in_queue); diff --git a/net/x25/x25_in.c b/net/x25/x25_in.c index a105ac7022ce..ac921f93699f 100644 --- a/net/x25/x25_in.c +++ b/net/x25/x25_in.c @@ -86,7 +86,7 @@ static int x25_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more) skb_set_owner_r(skbn, sk); skb_queue_tail(&sk->receive_queue, skbn); - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->data_ready(sk, skbn->len); return 0; @@ -129,7 +129,7 @@ static int x25_state1_machine(struct sock *sk, struct sk_buff *skb, int frametyp skb->len); x25->calluserdata.cudlength = skb->len; } - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) sk->state_change(sk); break; } @@ -277,9 +277,9 @@ static int x25_state3_machine(struct sock *sk, struct sk_buff *skb, int frametyp break; case X25_INTERRUPT: - if (test_bit(SOCK_URGINLINE, &sk->flags)) { - queued = (sock_queue_rcv_skb(sk, skb) == 0); - } else { + if (sock_flag(sk, SOCK_URGINLINE)) + queued = !sock_queue_rcv_skb(sk, skb); + else { skb_set_owner_r(skb, sk); skb_queue_tail(&x25->interrupt_in_queue, skb); queued = 1; diff --git a/net/x25/x25_subr.c b/net/x25/x25_subr.c index a43547dbdfc8..99728136e2ba 100644 --- a/net/x25/x25_subr.c +++ b/net/x25/x25_subr.c @@ -344,10 +344,10 @@ void x25_disconnect(struct sock *sk, int reason, unsigned char cause, sk->err = reason; sk->shutdown |= SEND_SHUTDOWN; - if (!test_bit(SOCK_DEAD, &sk->flags)) + if (!sock_flag(sk, SOCK_DEAD)) { sk->state_change(sk); - - __set_bit(SOCK_DEAD, &sk->flags); + sock_set_flag(sk, SOCK_DEAD); + } } /* diff --git a/net/x25/x25_timer.c b/net/x25/x25_timer.c index ef91824807f9..815c29cba599 100644 --- a/net/x25/x25_timer.c +++ b/net/x25/x25_timer.c @@ -137,9 +137,14 @@ static void x25_heartbeat_expiry(unsigned long param) switch (x25_sk(sk)->state) { case X25_STATE_0: - /* Magic here: If we listen() and a new link dies before it - is accepted() it isn't 'dead' so doesn't get removed. */ - if (test_bit(SOCK_DESTROY, &sk->flags) || (sk->state == TCP_LISTEN && test_bit(SOCK_DEAD, &sk->flags))) { + /* + * Magic here: If we listen() and a new link dies + * before it is accepted() it isn't 'dead' so doesn't + * get removed. + */ + if (sock_flag(sk, SOCK_DESTROY) || + (sk->state == TCP_LISTEN && + sock_flag(sk, SOCK_DEAD))) { x25_destroy_socket(sk); goto unlock; } |
