Commit caf8394524fdc039b090cd3af99157e9e76f4f06

Authored by Linus Torvalds

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

... ... @@ -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)
... ... @@ -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
... ... @@ -9064,7 +9064,7 @@
9064 9064 default:
9065 9065 pr_err("Unknown board_type (%ld), aborting\n",
9066 9066 ent->driver_data);
9067   - return ENODEV;
  9067 + return -ENODEV;
9068 9068 }
9069 9069  
9070 9070 cid_count += CNIC_CONTEXT_USE;
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
... ... @@ -635,8 +635,8 @@
635 635  
636 636 ndev = alloc_netdev(sizeof(struct cfspi),
637 637 "cfspi%d", cfspi_setup);
638   - if (!dev)
639   - return -ENODEV;
  638 + if (!ndev)
  639 + return -ENOMEM;
640 640  
641 641 cfspi = netdev_priv(ndev);
642 642 netif_stop_queue(ndev);
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;
... ... @@ -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  
... ... @@ -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
... ... @@ -37,7 +37,7 @@
37 37 int addr, eep_start_loc;
38 38 eep_data = (u16 *)eep;
39 39  
40   - if (ah->hw_version.devid == 0x7015)
  40 + if (AR9287_HTC_DEVID(ah))
41 41 eep_start_loc = AR9287_HTC_EEP_START_LOC;
42 42 else
43 43 eep_start_loc = AR9287_EEP_START_LOC;
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
... ... @@ -249,6 +249,8 @@
249 249 case 0x7010:
250 250 case 0x7015:
251 251 case 0x9018:
  252 + case 0xA704:
  253 + case 0x1200:
252 254 priv->htc->credits = 45;
253 255 break;
254 256 default:
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
... ... @@ -121,7 +121,7 @@
121 121 tx_hdr.data_type = ATH9K_HTC_NORMAL;
122 122 }
123 123  
124   - if (ieee80211_is_data(fc)) {
  124 + if (ieee80211_is_data_qos(fc)) {
125 125 qc = ieee80211_get_qos_ctl(hdr);
126 126 tx_hdr.tidno = qc[0] & IEEE80211_QOS_CTL_TID_MASK;
127 127 }
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
... ... @@ -1355,7 +1355,7 @@
1355 1355 WIPHY_FLAG_4ADDR_AP = BIT(5),
1356 1356 WIPHY_FLAG_4ADDR_STATION = BIT(6),
1357 1357 WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7),
1358   - WIPHY_FLAG_IBSS_RSN = BIT(7),
  1358 + WIPHY_FLAG_IBSS_RSN = BIT(8),
1359 1359 };
1360 1360  
1361 1361 struct mac_address {
include/net/neighbour.h
... ... @@ -303,7 +303,7 @@
303 303  
304 304 static inline int neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
305 305 {
306   - unsigned long now = ACCESS_ONCE(jiffies);
  306 + unsigned long now = jiffies;
307 307  
308 308 if (neigh->used != now)
309 309 neigh->used = now;
... ... @@ -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 = {
... ... @@ -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:
... ... @@ -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));
... ... @@ -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
... ... @@ -567,7 +567,7 @@
567 567 goto out;
568 568 }
569 569  
570   - if (args->nr_local > (u64)UINT_MAX) {
  570 + if (args->nr_local > UIO_MAXIOV) {
571 571 ret = -EMSGSIZE;
572 572 goto out;
573 573 }
... ... @@ -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,