Commit caf8394524fdc039b090cd3af99157e9e76f4f06
Exists in
master
and in
7 other branches
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (31 commits) net: fix kernel-doc for sk_filter_rcu_release be2net: Fix to avoid firmware update when interface is not open. netfilter: fix IP_VS dependencies net: irda: irttp: sync error paths of data- and udata-requests ipv6: Expose reachable and retrans timer values as msecs ipv6: Expose IFLA_PROTINFO timer values in msecs instead of jiffies 3c59x: fix build failure on !CONFIG_PCI ipg.c: remove id [SUNDANCE, 0x1021] net: caif: spi: fix potential NULL dereference ath9k_htc: Avoid setting QoS control for non-QoS frames net: zero kobject in rx_queue_release net: Fix duplicate volatile warning. MAINTAINERS: Add stmmac maintainer bonding: fix a race in IGMP handling cfg80211: fix can_beacon_sec_chan, reenable HT40 gianfar: fix signedness issue net: bnx2x: fix error value sign 8139cp: fix checksum broken r8169: fix checksum broken rds: Integer overflow in RDS cmsg handling ...
Showing 28 changed files Side-by-side Diff
- MAINTAINERS
- drivers/net/3c59x.c
- drivers/net/8139cp.c
- drivers/net/benet/be_main.c
- drivers/net/bnx2x/bnx2x_main.c
- drivers/net/bonding/bond_main.c
- drivers/net/caif/caif_spi.c
- drivers/net/gianfar.c
- drivers/net/ipg.c
- drivers/net/r8169.c
- drivers/net/wireless/ath/ath9k/eeprom_9287.c
- drivers/net/wireless/ath/ath9k/hif_usb.c
- drivers/net/wireless/ath/ath9k/htc_drv_init.c
- drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
- drivers/net/wireless/ath/ath9k/init.c
- drivers/net/wireless/ath/ath9k/reg.h
- drivers/net/wireless/ath/carl9170/usb.c
- include/linux/rtnetlink.h
- include/net/cfg80211.h
- include/net/neighbour.h
- net/core/filter.c
- net/core/net-sysfs.c
- net/ipv4/icmp.c
- net/ipv6/addrconf.c
- net/irda/irttp.c
- net/netfilter/ipvs/Kconfig
- net/rds/rdma.c
- net/wireless/chan.c
MAINTAINERS
... | ... | @@ -1829,6 +1829,13 @@ |
1829 | 1829 | S: Supported |
1830 | 1830 | F: drivers/net/cxgb4vf/ |
1831 | 1831 | |
1832 | +STMMAC ETHERNET DRIVER | |
1833 | +M: Giuseppe Cavallaro <peppe.cavallaro@st.com> | |
1834 | +L: netdev@vger.kernel.org | |
1835 | +W: http://www.stlinux.com | |
1836 | +S: Supported | |
1837 | +F: drivers/net/stmmac/ | |
1838 | + | |
1832 | 1839 | CYBERPRO FB DRIVER |
1833 | 1840 | M: Russell King <linux@arm.linux.org.uk> |
1834 | 1841 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
drivers/net/3c59x.c
... | ... | @@ -699,7 +699,8 @@ |
699 | 699 | #define DEVICE_PCI(dev) NULL |
700 | 700 | #endif |
701 | 701 | |
702 | -#define VORTEX_PCI(vp) (((vp)->gendev) ? DEVICE_PCI((vp)->gendev) : NULL) | |
702 | +#define VORTEX_PCI(vp) \ | |
703 | + ((struct pci_dev *) (((vp)->gendev) ? DEVICE_PCI((vp)->gendev) : NULL)) | |
703 | 704 | |
704 | 705 | #ifdef CONFIG_EISA |
705 | 706 | #define DEVICE_EISA(dev) (((dev)->bus == &eisa_bus_type) ? to_eisa_device((dev)) : NULL) |
... | ... | @@ -707,7 +708,8 @@ |
707 | 708 | #define DEVICE_EISA(dev) NULL |
708 | 709 | #endif |
709 | 710 | |
710 | -#define VORTEX_EISA(vp) (((vp)->gendev) ? DEVICE_EISA((vp)->gendev) : NULL) | |
711 | +#define VORTEX_EISA(vp) \ | |
712 | + ((struct eisa_device *) (((vp)->gendev) ? DEVICE_EISA((vp)->gendev) : NULL)) | |
711 | 713 | |
712 | 714 | /* The action to take with a media selection timer tick. |
713 | 715 | Note that we deviate from the 3Com order by checking 10base2 before AUI. |
drivers/net/8139cp.c
... | ... | @@ -490,13 +490,11 @@ |
490 | 490 | { |
491 | 491 | unsigned int protocol = (status >> 16) & 0x3; |
492 | 492 | |
493 | - if (likely((protocol == RxProtoTCP) && (!(status & TCPFail)))) | |
493 | + if (((protocol == RxProtoTCP) && !(status & TCPFail)) || | |
494 | + ((protocol == RxProtoUDP) && !(status & UDPFail))) | |
494 | 495 | return 1; |
495 | - else if ((protocol == RxProtoUDP) && (!(status & UDPFail))) | |
496 | - return 1; | |
497 | - else if ((protocol == RxProtoIP) && (!(status & IPFail))) | |
498 | - return 1; | |
499 | - return 0; | |
496 | + else | |
497 | + return 0; | |
500 | 498 | } |
501 | 499 | |
502 | 500 | static int cp_rx_poll(struct napi_struct *napi, int budget) |
drivers/net/benet/be_main.c
... | ... | @@ -2458,6 +2458,12 @@ |
2458 | 2458 | int status, i = 0, num_imgs = 0; |
2459 | 2459 | const u8 *p; |
2460 | 2460 | |
2461 | + if (!netif_running(adapter->netdev)) { | |
2462 | + dev_err(&adapter->pdev->dev, | |
2463 | + "Firmware load not allowed (interface is down)\n"); | |
2464 | + return -EPERM; | |
2465 | + } | |
2466 | + | |
2461 | 2467 | strcpy(fw_file, func); |
2462 | 2468 | |
2463 | 2469 | status = request_firmware(&fw, fw_file, &adapter->pdev->dev); |
drivers/net/bnx2x/bnx2x_main.c
drivers/net/bonding/bond_main.c
... | ... | @@ -878,8 +878,10 @@ |
878 | 878 | rcu_read_lock(); |
879 | 879 | in_dev = __in_dev_get_rcu(dev); |
880 | 880 | if (in_dev) { |
881 | + read_lock(&in_dev->mc_list_lock); | |
881 | 882 | for (im = in_dev->mc_list; im; im = im->next) |
882 | 883 | ip_mc_rejoin_group(im); |
884 | + read_unlock(&in_dev->mc_list_lock); | |
883 | 885 | } |
884 | 886 | |
885 | 887 | rcu_read_unlock(); |
drivers/net/caif/caif_spi.c
drivers/net/gianfar.c
... | ... | @@ -577,11 +577,10 @@ |
577 | 577 | irq_of_parse_and_map(np, 1); |
578 | 578 | priv->gfargrp[priv->num_grps].interruptError = |
579 | 579 | irq_of_parse_and_map(np,2); |
580 | - if (priv->gfargrp[priv->num_grps].interruptTransmit < 0 || | |
581 | - priv->gfargrp[priv->num_grps].interruptReceive < 0 || | |
582 | - priv->gfargrp[priv->num_grps].interruptError < 0) { | |
580 | + if (priv->gfargrp[priv->num_grps].interruptTransmit == NO_IRQ || | |
581 | + priv->gfargrp[priv->num_grps].interruptReceive == NO_IRQ || | |
582 | + priv->gfargrp[priv->num_grps].interruptError == NO_IRQ) | |
583 | 583 | return -EINVAL; |
584 | - } | |
585 | 584 | } |
586 | 585 | |
587 | 586 | priv->gfargrp[priv->num_grps].grp_id = priv->num_grps; |
drivers/net/ipg.c
... | ... | @@ -88,16 +88,14 @@ |
88 | 88 | "IC PLUS IP1000 1000/100/10 based NIC", |
89 | 89 | "Sundance Technology ST2021 based NIC", |
90 | 90 | "Tamarack Microelectronics TC9020/9021 based NIC", |
91 | - "Tamarack Microelectronics TC9020/9021 based NIC", | |
92 | 91 | "D-Link NIC IP1000A" |
93 | 92 | }; |
94 | 93 | |
95 | 94 | static DEFINE_PCI_DEVICE_TABLE(ipg_pci_tbl) = { |
96 | 95 | { PCI_VDEVICE(SUNDANCE, 0x1023), 0 }, |
97 | 96 | { PCI_VDEVICE(SUNDANCE, 0x2021), 1 }, |
98 | - { PCI_VDEVICE(SUNDANCE, 0x1021), 2 }, | |
99 | - { PCI_VDEVICE(DLINK, 0x9021), 3 }, | |
100 | - { PCI_VDEVICE(DLINK, 0x4020), 4 }, | |
97 | + { PCI_VDEVICE(DLINK, 0x9021), 2 }, | |
98 | + { PCI_VDEVICE(DLINK, 0x4020), 3 }, | |
101 | 99 | { 0, } |
102 | 100 | }; |
103 | 101 |
drivers/net/r8169.c
... | ... | @@ -4440,8 +4440,7 @@ |
4440 | 4440 | u32 status = opts1 & RxProtoMask; |
4441 | 4441 | |
4442 | 4442 | if (((status == RxProtoTCP) && !(opts1 & TCPFail)) || |
4443 | - ((status == RxProtoUDP) && !(opts1 & UDPFail)) || | |
4444 | - ((status == RxProtoIP) && !(opts1 & IPFail))) | |
4443 | + ((status == RxProtoUDP) && !(opts1 & UDPFail))) | |
4445 | 4444 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
4446 | 4445 | else |
4447 | 4446 | skb_checksum_none_assert(skb); |
drivers/net/wireless/ath/ath9k/eeprom_9287.c
drivers/net/wireless/ath/ath9k/hif_usb.c
... | ... | @@ -36,8 +36,13 @@ |
36 | 36 | { USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */ |
37 | 37 | { USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */ |
38 | 38 | { USB_DEVICE(0x13D3, 0x3346) }, /* IMC Networks */ |
39 | + { USB_DEVICE(0x13D3, 0x3348) }, /* Azurewave */ | |
40 | + { USB_DEVICE(0x13D3, 0x3349) }, /* Azurewave */ | |
41 | + { USB_DEVICE(0x13D3, 0x3350) }, /* Azurewave */ | |
39 | 42 | { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ |
40 | 43 | { USB_DEVICE(0x083A, 0xA704) }, /* SMC Networks */ |
44 | + { USB_DEVICE(0x040D, 0x3801) }, /* VIA */ | |
45 | + { USB_DEVICE(0x1668, 0x1200) }, /* Verizon */ | |
41 | 46 | { }, |
42 | 47 | }; |
43 | 48 | |
... | ... | @@ -806,6 +811,8 @@ |
806 | 811 | case 0x7010: |
807 | 812 | case 0x7015: |
808 | 813 | case 0x9018: |
814 | + case 0xA704: | |
815 | + case 0x1200: | |
809 | 816 | firm_offset = AR7010_FIRMWARE_TEXT; |
810 | 817 | break; |
811 | 818 | default: |
... | ... | @@ -928,6 +935,8 @@ |
928 | 935 | case 0x7010: |
929 | 936 | case 0x7015: |
930 | 937 | case 0x9018: |
938 | + case 0xA704: | |
939 | + case 0x1200: | |
931 | 940 | if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202) |
932 | 941 | hif_dev->fw_name = FIRMWARE_AR7010_1_1; |
933 | 942 | else |
drivers/net/wireless/ath/ath9k/htc_drv_init.c
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
drivers/net/wireless/ath/ath9k/init.c
... | ... | @@ -817,8 +817,6 @@ |
817 | 817 | |
818 | 818 | ath9k_ps_wakeup(sc); |
819 | 819 | |
820 | - pm_qos_remove_request(&ath9k_pm_qos_req); | |
821 | - | |
822 | 820 | wiphy_rfkill_stop_polling(sc->hw->wiphy); |
823 | 821 | ath_deinit_leds(sc); |
824 | 822 | |
... | ... | @@ -832,6 +830,7 @@ |
832 | 830 | } |
833 | 831 | |
834 | 832 | ieee80211_unregister_hw(hw); |
833 | + pm_qos_remove_request(&ath9k_pm_qos_req); | |
835 | 834 | ath_rx_cleanup(sc); |
836 | 835 | ath_tx_cleanup(sc); |
837 | 836 | ath9k_deinit_softc(sc); |
drivers/net/wireless/ath/ath9k/reg.h
... | ... | @@ -866,7 +866,13 @@ |
866 | 866 | #define AR_DEVID_7010(_ah) \ |
867 | 867 | (((_ah)->hw_version.devid == 0x7010) || \ |
868 | 868 | ((_ah)->hw_version.devid == 0x7015) || \ |
869 | - ((_ah)->hw_version.devid == 0x9018)) | |
869 | + ((_ah)->hw_version.devid == 0x9018) || \ | |
870 | + ((_ah)->hw_version.devid == 0xA704) || \ | |
871 | + ((_ah)->hw_version.devid == 0x1200)) | |
872 | + | |
873 | +#define AR9287_HTC_DEVID(_ah) \ | |
874 | + (((_ah)->hw_version.devid == 0x7015) || \ | |
875 | + ((_ah)->hw_version.devid == 0x1200)) | |
870 | 876 | |
871 | 877 | #define AR_RADIO_SREV_MAJOR 0xf0 |
872 | 878 | #define AR_RAD5133_SREV_MAJOR 0xc0 |
drivers/net/wireless/ath/carl9170/usb.c
... | ... | @@ -553,12 +553,12 @@ |
553 | 553 | usb_free_urb(urb); |
554 | 554 | } |
555 | 555 | |
556 | - ret = usb_wait_anchor_empty_timeout(&ar->tx_cmd, HZ); | |
556 | + ret = usb_wait_anchor_empty_timeout(&ar->tx_cmd, 1000); | |
557 | 557 | if (ret == 0) |
558 | 558 | err = -ETIMEDOUT; |
559 | 559 | |
560 | 560 | /* lets wait a while until the tx - queues are dried out */ |
561 | - ret = usb_wait_anchor_empty_timeout(&ar->tx_anch, HZ); | |
561 | + ret = usb_wait_anchor_empty_timeout(&ar->tx_anch, 1000); | |
562 | 562 | if (ret == 0) |
563 | 563 | err = -ETIMEDOUT; |
564 | 564 |
include/linux/rtnetlink.h
... | ... | @@ -6,7 +6,6 @@ |
6 | 6 | #include <linux/if_link.h> |
7 | 7 | #include <linux/if_addr.h> |
8 | 8 | #include <linux/neighbour.h> |
9 | -#include <linux/netdevice.h> | |
10 | 9 | |
11 | 10 | /* rtnetlink families. Values up to 127 are reserved for real address |
12 | 11 | * families, values above 128 may be used arbitrarily. |
... | ... | @@ -606,6 +605,7 @@ |
606 | 605 | #ifdef __KERNEL__ |
607 | 606 | |
608 | 607 | #include <linux/mutex.h> |
608 | +#include <linux/netdevice.h> | |
609 | 609 | |
610 | 610 | static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str) |
611 | 611 | { |
include/net/cfg80211.h
include/net/neighbour.h
net/core/filter.c
... | ... | @@ -589,7 +589,7 @@ |
589 | 589 | EXPORT_SYMBOL(sk_chk_filter); |
590 | 590 | |
591 | 591 | /** |
592 | - * sk_filter_rcu_release: Release a socket filter by rcu_head | |
592 | + * sk_filter_rcu_release - Release a socket filter by rcu_head | |
593 | 593 | * @rcu: rcu_head that contains the sk_filter to free |
594 | 594 | */ |
595 | 595 | static void sk_filter_rcu_release(struct rcu_head *rcu) |
net/core/net-sysfs.c
... | ... | @@ -712,15 +712,21 @@ |
712 | 712 | |
713 | 713 | |
714 | 714 | map = rcu_dereference_raw(queue->rps_map); |
715 | - if (map) | |
715 | + if (map) { | |
716 | + RCU_INIT_POINTER(queue->rps_map, NULL); | |
716 | 717 | call_rcu(&map->rcu, rps_map_release); |
718 | + } | |
717 | 719 | |
718 | 720 | flow_table = rcu_dereference_raw(queue->rps_flow_table); |
719 | - if (flow_table) | |
721 | + if (flow_table) { | |
722 | + RCU_INIT_POINTER(queue->rps_flow_table, NULL); | |
720 | 723 | call_rcu(&flow_table->rcu, rps_dev_flow_table_release); |
724 | + } | |
721 | 725 | |
722 | 726 | if (atomic_dec_and_test(&first->count)) |
723 | 727 | kfree(first); |
728 | + else | |
729 | + memset(kobj, 0, sizeof(*kobj)); | |
724 | 730 | } |
725 | 731 | |
726 | 732 | static struct kobj_type rx_queue_ktype = { |
net/ipv4/icmp.c
... | ... | @@ -569,6 +569,9 @@ |
569 | 569 | /* No need to clone since we're just using its address. */ |
570 | 570 | rt2 = rt; |
571 | 571 | |
572 | + if (!fl.nl_u.ip4_u.saddr) | |
573 | + fl.nl_u.ip4_u.saddr = rt->rt_src; | |
574 | + | |
572 | 575 | err = xfrm_lookup(net, (struct dst_entry **)&rt, &fl, NULL, 0); |
573 | 576 | switch (err) { |
574 | 577 | case 0: |
net/ipv6/addrconf.c
... | ... | @@ -98,8 +98,12 @@ |
98 | 98 | #endif |
99 | 99 | |
100 | 100 | #define INFINITY_LIFE_TIME 0xFFFFFFFF |
101 | -#define TIME_DELTA(a, b) ((unsigned long)((long)(a) - (long)(b))) | |
102 | 101 | |
102 | +static inline u32 cstamp_delta(unsigned long cstamp) | |
103 | +{ | |
104 | + return (cstamp - INITIAL_JIFFIES) * 100UL / HZ; | |
105 | +} | |
106 | + | |
103 | 107 | #define ADDRCONF_TIMER_FUZZ_MINUS (HZ > 50 ? HZ/50 : 1) |
104 | 108 | #define ADDRCONF_TIMER_FUZZ (HZ / 4) |
105 | 109 | #define ADDRCONF_TIMER_FUZZ_MAX (HZ) |
... | ... | @@ -3444,10 +3448,8 @@ |
3444 | 3448 | { |
3445 | 3449 | struct ifa_cacheinfo ci; |
3446 | 3450 | |
3447 | - ci.cstamp = (u32)(TIME_DELTA(cstamp, INITIAL_JIFFIES) / HZ * 100 | |
3448 | - + TIME_DELTA(cstamp, INITIAL_JIFFIES) % HZ * 100 / HZ); | |
3449 | - ci.tstamp = (u32)(TIME_DELTA(tstamp, INITIAL_JIFFIES) / HZ * 100 | |
3450 | - + TIME_DELTA(tstamp, INITIAL_JIFFIES) % HZ * 100 / HZ); | |
3451 | + ci.cstamp = cstamp_delta(cstamp); | |
3452 | + ci.tstamp = cstamp_delta(tstamp); | |
3451 | 3453 | ci.ifa_prefered = preferred; |
3452 | 3454 | ci.ifa_valid = valid; |
3453 | 3455 | |
... | ... | @@ -3798,8 +3800,10 @@ |
3798 | 3800 | array[DEVCONF_AUTOCONF] = cnf->autoconf; |
3799 | 3801 | array[DEVCONF_DAD_TRANSMITS] = cnf->dad_transmits; |
3800 | 3802 | array[DEVCONF_RTR_SOLICITS] = cnf->rtr_solicits; |
3801 | - array[DEVCONF_RTR_SOLICIT_INTERVAL] = cnf->rtr_solicit_interval; | |
3802 | - array[DEVCONF_RTR_SOLICIT_DELAY] = cnf->rtr_solicit_delay; | |
3803 | + array[DEVCONF_RTR_SOLICIT_INTERVAL] = | |
3804 | + jiffies_to_msecs(cnf->rtr_solicit_interval); | |
3805 | + array[DEVCONF_RTR_SOLICIT_DELAY] = | |
3806 | + jiffies_to_msecs(cnf->rtr_solicit_delay); | |
3803 | 3807 | array[DEVCONF_FORCE_MLD_VERSION] = cnf->force_mld_version; |
3804 | 3808 | #ifdef CONFIG_IPV6_PRIVACY |
3805 | 3809 | array[DEVCONF_USE_TEMPADDR] = cnf->use_tempaddr; |
... | ... | @@ -3813,7 +3817,8 @@ |
3813 | 3817 | array[DEVCONF_ACCEPT_RA_PINFO] = cnf->accept_ra_pinfo; |
3814 | 3818 | #ifdef CONFIG_IPV6_ROUTER_PREF |
3815 | 3819 | array[DEVCONF_ACCEPT_RA_RTR_PREF] = cnf->accept_ra_rtr_pref; |
3816 | - array[DEVCONF_RTR_PROBE_INTERVAL] = cnf->rtr_probe_interval; | |
3820 | + array[DEVCONF_RTR_PROBE_INTERVAL] = | |
3821 | + jiffies_to_msecs(cnf->rtr_probe_interval); | |
3817 | 3822 | #ifdef CONFIG_IPV6_ROUTE_INFO |
3818 | 3823 | array[DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN] = cnf->accept_ra_rt_info_max_plen; |
3819 | 3824 | #endif |
... | ... | @@ -3929,10 +3934,9 @@ |
3929 | 3934 | NLA_PUT_U32(skb, IFLA_INET6_FLAGS, idev->if_flags); |
3930 | 3935 | |
3931 | 3936 | ci.max_reasm_len = IPV6_MAXPLEN; |
3932 | - ci.tstamp = (__u32)(TIME_DELTA(idev->tstamp, INITIAL_JIFFIES) / HZ * 100 | |
3933 | - + TIME_DELTA(idev->tstamp, INITIAL_JIFFIES) % HZ * 100 / HZ); | |
3934 | - ci.reachable_time = idev->nd_parms->reachable_time; | |
3935 | - ci.retrans_time = idev->nd_parms->retrans_time; | |
3937 | + ci.tstamp = cstamp_delta(idev->tstamp); | |
3938 | + ci.reachable_time = jiffies_to_msecs(idev->nd_parms->reachable_time); | |
3939 | + ci.retrans_time = jiffies_to_msecs(idev->nd_parms->retrans_time); | |
3936 | 3940 | NLA_PUT(skb, IFLA_INET6_CACHEINFO, sizeof(ci), &ci); |
3937 | 3941 | |
3938 | 3942 | nla = nla_reserve(skb, IFLA_INET6_CONF, DEVCONF_MAX * sizeof(s32)); |
net/irda/irttp.c
... | ... | @@ -550,22 +550,30 @@ |
550 | 550 | */ |
551 | 551 | int irttp_udata_request(struct tsap_cb *self, struct sk_buff *skb) |
552 | 552 | { |
553 | + int ret; | |
554 | + | |
553 | 555 | IRDA_ASSERT(self != NULL, return -1;); |
554 | 556 | IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;); |
555 | 557 | IRDA_ASSERT(skb != NULL, return -1;); |
556 | 558 | |
557 | 559 | IRDA_DEBUG(4, "%s()\n", __func__); |
558 | 560 | |
561 | + /* Take shortcut on zero byte packets */ | |
562 | + if (skb->len == 0) { | |
563 | + ret = 0; | |
564 | + goto err; | |
565 | + } | |
566 | + | |
559 | 567 | /* Check that nothing bad happens */ |
560 | - if ((skb->len == 0) || (!self->connected)) { | |
561 | - IRDA_DEBUG(1, "%s(), No data, or not connected\n", | |
562 | - __func__); | |
568 | + if (!self->connected) { | |
569 | + IRDA_WARNING("%s(), Not connected\n", __func__); | |
570 | + ret = -ENOTCONN; | |
563 | 571 | goto err; |
564 | 572 | } |
565 | 573 | |
566 | 574 | if (skb->len > self->max_seg_size) { |
567 | - IRDA_DEBUG(1, "%s(), UData is too large for IrLAP!\n", | |
568 | - __func__); | |
575 | + IRDA_ERROR("%s(), UData is too large for IrLAP!\n", __func__); | |
576 | + ret = -EMSGSIZE; | |
569 | 577 | goto err; |
570 | 578 | } |
571 | 579 | |
... | ... | @@ -576,7 +584,7 @@ |
576 | 584 | |
577 | 585 | err: |
578 | 586 | dev_kfree_skb(skb); |
579 | - return -1; | |
587 | + return ret; | |
580 | 588 | } |
581 | 589 | EXPORT_SYMBOL(irttp_udata_request); |
582 | 590 | |
583 | 591 | |
... | ... | @@ -599,9 +607,15 @@ |
599 | 607 | IRDA_DEBUG(2, "%s() : queue len = %d\n", __func__, |
600 | 608 | skb_queue_len(&self->tx_queue)); |
601 | 609 | |
610 | + /* Take shortcut on zero byte packets */ | |
611 | + if (skb->len == 0) { | |
612 | + ret = 0; | |
613 | + goto err; | |
614 | + } | |
615 | + | |
602 | 616 | /* Check that nothing bad happens */ |
603 | - if ((skb->len == 0) || (!self->connected)) { | |
604 | - IRDA_WARNING("%s: No data, or not connected\n", __func__); | |
617 | + if (!self->connected) { | |
618 | + IRDA_WARNING("%s: Not connected\n", __func__); | |
605 | 619 | ret = -ENOTCONN; |
606 | 620 | goto err; |
607 | 621 | } |
net/netfilter/ipvs/Kconfig
... | ... | @@ -4,6 +4,7 @@ |
4 | 4 | menuconfig IP_VS |
5 | 5 | tristate "IP virtual server support" |
6 | 6 | depends on NET && INET && NETFILTER |
7 | + depends on (NF_CONNTRACK || NF_CONNTRACK=n) | |
7 | 8 | ---help--- |
8 | 9 | IP Virtual Server support will let you build a high-performance |
9 | 10 | virtual server based on cluster of two or more real servers. This |
net/rds/rdma.c
net/wireless/chan.c
... | ... | @@ -44,6 +44,38 @@ |
44 | 44 | return chan; |
45 | 45 | } |
46 | 46 | |
47 | +static bool can_beacon_sec_chan(struct wiphy *wiphy, | |
48 | + struct ieee80211_channel *chan, | |
49 | + enum nl80211_channel_type channel_type) | |
50 | +{ | |
51 | + struct ieee80211_channel *sec_chan; | |
52 | + int diff; | |
53 | + | |
54 | + switch (channel_type) { | |
55 | + case NL80211_CHAN_HT40PLUS: | |
56 | + diff = 20; | |
57 | + break; | |
58 | + case NL80211_CHAN_HT40MINUS: | |
59 | + diff = -20; | |
60 | + break; | |
61 | + default: | |
62 | + return false; | |
63 | + } | |
64 | + | |
65 | + sec_chan = ieee80211_get_channel(wiphy, chan->center_freq + diff); | |
66 | + if (!sec_chan) | |
67 | + return false; | |
68 | + | |
69 | + /* we'll need a DFS capability later */ | |
70 | + if (sec_chan->flags & (IEEE80211_CHAN_DISABLED | | |
71 | + IEEE80211_CHAN_PASSIVE_SCAN | | |
72 | + IEEE80211_CHAN_NO_IBSS | | |
73 | + IEEE80211_CHAN_RADAR)) | |
74 | + return false; | |
75 | + | |
76 | + return true; | |
77 | +} | |
78 | + | |
47 | 79 | int cfg80211_set_freq(struct cfg80211_registered_device *rdev, |
48 | 80 | struct wireless_dev *wdev, int freq, |
49 | 81 | enum nl80211_channel_type channel_type) |
... | ... | @@ -67,6 +99,28 @@ |
67 | 99 | chan = rdev_freq_to_chan(rdev, freq, channel_type); |
68 | 100 | if (!chan) |
69 | 101 | return -EINVAL; |
102 | + | |
103 | + /* Both channels should be able to initiate communication */ | |
104 | + if (wdev && (wdev->iftype == NL80211_IFTYPE_ADHOC || | |
105 | + wdev->iftype == NL80211_IFTYPE_AP || | |
106 | + wdev->iftype == NL80211_IFTYPE_AP_VLAN || | |
107 | + wdev->iftype == NL80211_IFTYPE_MESH_POINT || | |
108 | + wdev->iftype == NL80211_IFTYPE_P2P_GO)) { | |
109 | + switch (channel_type) { | |
110 | + case NL80211_CHAN_HT40PLUS: | |
111 | + case NL80211_CHAN_HT40MINUS: | |
112 | + if (!can_beacon_sec_chan(&rdev->wiphy, chan, | |
113 | + channel_type)) { | |
114 | + printk(KERN_DEBUG | |
115 | + "cfg80211: Secondary channel not " | |
116 | + "allowed to initiate communication\n"); | |
117 | + return -EINVAL; | |
118 | + } | |
119 | + break; | |
120 | + default: | |
121 | + break; | |
122 | + } | |
123 | + } | |
70 | 124 | |
71 | 125 | result = rdev->ops->set_channel(&rdev->wiphy, |
72 | 126 | wdev ? wdev->netdev : NULL, |