diff --git a/drivers/net/wireless/iwlwifi/dvm/rs.c b/drivers/net/wireless/iwlwifi/dvm/rs.c index 0977d93..3ccfd0e 100644 --- a/drivers/net/wireless/iwlwifi/dvm/rs.c +++ b/drivers/net/wireless/iwlwifi/dvm/rs.c @@ -2309,7 +2309,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, rate_scale_index_msk = rate_mask; if (!((1 << index) & rate_scale_index_msk)) { - IWL_ERR(priv, "Current Rate is not valid\n"); + // IWL_ERR(priv, "Current Rate is not valid\n"); if (lq_sta->search_better_tbl) { /* revert to active table if search table is not valid*/ tbl->lq_type = LQ_NONE; diff --git a/drivers/net/wireless/iwlwifi/iwl-debug.c b/drivers/net/wireless/iwlwifi/iwl-debug.c index 09feff4..f218fe6 100644 --- a/drivers/net/wireless/iwlwifi/iwl-debug.c +++ b/drivers/net/wireless/iwlwifi/iwl-debug.c @@ -78,7 +78,9 @@ void __iwl_ ##fn(struct device *dev, const char *fmt, ...) \ \ va_start(args, fmt); \ vaf.va = &args; \ - dev_ ##fn(dev, "%pV", &vaf); \ + char buf[256]; \ + vsnprintf(buf, sizeof(buf), vaf.fmt, *vaf.va); \ + dev_ ##fn(dev, "%s", buf); \ trace_iwlwifi_ ##fn(&vaf); \ va_end(args); \ } @@ -101,10 +103,12 @@ void __iwl_err(struct device *dev, bool rfkill_prefix, bool trace_only, va_start(args, fmt); vaf.va = &args; if (!trace_only) { + char buf[256]; + vsnprintf(buf, sizeof(buf), vaf.fmt, *vaf.va); if (rfkill_prefix) - dev_err(dev, "(RFKILL) %pV", &vaf); + dev_err(dev, "(RFKILL) %s", buf); else - dev_err(dev, "%pV", &vaf); + dev_err(dev, "%s", buf); } trace_iwlwifi_err(&vaf); va_end(args); @@ -125,9 +129,12 @@ void __iwl_dbg(struct device *dev, vaf.va = &args; #ifdef CONFIG_IWLWIFI_DEBUG if (iwl_have_debug_level(level) && - (!limit || net_ratelimit())) - dev_printk(KERN_DEBUG, dev, "%c %s %pV", - in_interrupt() ? 'I' : 'U', function, &vaf); + (!limit || net_ratelimit())) { + char buf[256]; + vsnprintf(buf, sizeof(buf), vaf.fmt, *vaf.va); + dev_printk(KERN_DEBUG, dev, "%c %s %s", + in_interrupt() ? 'I' : 'U', function, buf); + } #endif trace_iwlwifi_dbg(level, in_interrupt(), function, &vaf); va_end(args); --- a/drivers/net/wireless/iwlwifi/iwl-trans.c +++ b/drivers/net/wireless/iwlwifi/iwl-trans.c @@ -96,7 +96,7 @@ sizeof(struct iwl_device_cmd) + trans->dev_cmd_headroom, sizeof(void *), - SLAB_HWCACHE_ALIGN, + SLAB_HWCACHE_ALIGN | SLAB_LX_DMA, NULL); if (!trans->dev_cmd_pool) goto free; diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c index 9a856e5..e70f9b7 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c @@ -566,7 +566,9 @@ else hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; +/* don't enable broken scheduled scanning hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; +*/ hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX; hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES; /* we create the 802.11 header and zero length SSID IE. */ @@ -4200,7 +4202,7 @@ .add_interface = iwl_mvm_mac_add_interface, .remove_interface = iwl_mvm_mac_remove_interface, .config = iwl_mvm_mac_config, - .prepare_multicast = iwl_mvm_prepare_multicast, + .prepare_multicast = 0, .configure_filter = iwl_mvm_configure_filter, .config_iface_filter = iwl_mvm_config_iface_filter, .bss_info_changed = iwl_mvm_bss_info_changed, diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h index 2b0ba1f..8de16d0 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h @@ -64,7 +64,7 @@ #ifndef __IWL_MVM_H__ #define __IWL_MVM_H__ -#include +/* #include */ #include #include #include diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index e526a8c..f3134fe 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h @@ -2231,7 +2231,7 @@ static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr) static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr, size_t len) { - struct ieee80211_mgmt *mgmt = (void *)hdr; + struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)hdr; if (len < IEEE80211_MIN_ACTION_SIZE) return false; diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index b1f84b0..890da1b 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -191,6 +191,7 @@ struct ieee80211_channel { * @IEEE80211_RATE_SUPPORTS_10MHZ: Rate can be used in 10 MHz mode */ enum ieee80211_rate_flags { + IEEE80211_RATE_NULL = 0, IEEE80211_RATE_SHORT_PREAMBLE = 1<<0, IEEE80211_RATE_MANDATORY_A = 1<<1, IEEE80211_RATE_MANDATORY_B = 1<<2, @@ -465,7 +466,7 @@ ieee80211_chandef_rate_flags(struct cfg80211_chan_def *chandef) default: break; } - return 0; + return IEEE80211_RATE_NULL; } /** @@ -2990,7 +2991,7 @@ struct wiphy { const struct nl80211_vendor_cmd_info *vendor_events; int n_vendor_commands, n_vendor_events; - char priv[0] __aligned(NETDEV_ALIGN); + char priv[0] __attribute__ ((__aligned__(32)));//__aligned(NETDEV_ALIGN); }; static inline struct net *wiphy_net(struct wiphy *wiphy) diff --git a/include/net/netlink.h b/include/net/netlink.h index 2b47eaa..6bd2cb1 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h @@ -308,7 +308,7 @@ static inline int nlmsg_len(const struct nlmsghdr *nlh) static inline struct nlattr *nlmsg_attrdata(const struct nlmsghdr *nlh, int hdrlen) { - unsigned char *data = nlmsg_data(nlh); + unsigned char *data = (unsigned char *)nlmsg_data(nlh); return (struct nlattr *) (data + NLMSG_ALIGN(hdrlen)); } @@ -717,7 +717,7 @@ static inline struct nlattr *nla_next(const struct nlattr *nla, int *remaining) static inline struct nlattr * nla_find_nested(const struct nlattr *nla, int attrtype) { - return nla_find(nla_data(nla), nla_len(nla), attrtype); + return nla_find((const struct nlattr *)nla_data(nla), nla_len(nla), attrtype); } /** @@ -733,7 +733,7 @@ static inline int nla_parse_nested(struct nlattr *tb[], int maxtype, const struct nlattr *nla, const struct nla_policy *policy) { - return nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy); + return nla_parse(tb, maxtype, (const struct nlattr *)nla_data(nla), nla_len(nla), policy); } /** @@ -1161,7 +1161,7 @@ static inline void nla_nest_cancel(struct sk_buff *skb, struct nlattr *start) static inline int nla_validate_nested(const struct nlattr *start, int maxtype, const struct nla_policy *policy) { - return nla_validate(nla_data(start), nla_len(start), maxtype, policy); + return nla_validate((const struct nlattr *)nla_data(start), nla_len(start), maxtype, policy); } /** diff --git a/include/net/sock.h b/include/net/sock.h index b9586a1..d95959f 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1854,7 +1854,7 @@ static inline int skb_add_data_nocache(struct sock *sk, struct sk_buff *skb, { int err, offset = skb->len; - err = skb_do_copy_data_nocache(sk, skb, from, skb_put(skb, copy), + err = skb_do_copy_data_nocache(sk, skb, from, (char *)skb_put(skb, copy), copy, offset); if (err) __skb_trim(skb, offset); @@ -1869,7 +1869,7 @@ static inline int skb_copy_to_page_nocache(struct sock *sk, char __user *from, { int err; - err = skb_do_copy_data_nocache(sk, skb, from, page_address(page) + off, + err = skb_do_copy_data_nocache(sk, skb, from, (char *)(page_address(page) + off), copy, skb->len); if (err) return err; diff --git a/net/core/sock.c b/net/core/sock.c index c0fc6bd..29f7035 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -142,6 +142,8 @@ #include +#include + static DEFINE_MUTEX(proto_list_mutex); static LIST_HEAD(proto_list); diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 48a6a93..598f469 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -93,6 +93,8 @@ #include #endif +#include + #include "internal.h" /* @@ -3508,6 +3510,7 @@ static int packet_notifier(struct notifier_block *this, struct net_device *dev = netdev_notifier_info_to_dev(ptr); struct net *net = dev_net(dev); +#if 0 rcu_read_lock(); sk_for_each_rcu(sk, &net->packet.sklist) { struct packet_sock *po = pkt_sk(sk); @@ -3548,6 +3551,7 @@ static int packet_notifier(struct notifier_block *this, } } rcu_read_unlock(); +#endif return NOTIFY_DONE; } @@ -4062,8 +4066,10 @@ static int __net_init packet_net_init(struct net *net) mutex_init(&net->packet.sklist_lock); INIT_HLIST_HEAD(&net->packet.sklist); +#ifdef CONFIG_PROC_FS if (!proc_create("packet", 0, net->proc_net, &packet_seq_fops)) return -ENOMEM; +#endif return 0; } diff --git a/net/wireless/core.h b/net/wireless/core.h index f1d193b..24220b3 100644 --- a/net/wireless/core.h +++ b/net/wireless/core.h @@ -82,7 +82,7 @@ struct cfg80211_registered_device { /* must be last because of the way we do wiphy_priv(), * and it should at least be aligned to NETDEV_ALIGN */ - struct wiphy wiphy __aligned(NETDEV_ALIGN); + struct wiphy wiphy __attribute__((__aligned__(32))); }; static inline diff --git a/net/wireless/sysfs.c b/net/wireless/sysfs.c index 9ee6bc1..02d740d 100644 --- a/net/wireless/sysfs.c +++ b/net/wireless/sysfs.c @@ -156,7 +156,7 @@ struct class ieee80211_class = { .resume = wiphy_resume, #endif .ns_type = &net_ns_type_operations, - .namespace = wiphy_namespace, + ._namespace = wiphy_namespace, }; int wiphy_sysfs_init(void) --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -3281,7 +3281,7 @@ if (unlikely(skb->ip_summed != CHECKSUM_COMPLETE)) { __skb_checksum_complete(skb); - skb_postpull_rcsum(skb, skb->data, ptr - (void *)skb->data); + skb_postpull_rcsum(skb, skb->data, (unsigned char*)ptr - skb->data); } delta = remcsum_adjust(ptr, skb->csum, start, offset); --- a/drivers/net/wireless/iwlwifi/mvm/rx.c +++ b/drivers/net/wireless/iwlwifi/mvm/rx.c @@ -115,7 +115,11 @@ * to do so) we should revisit this and ieee80211_data_to_8023(). */ hdrlen = (len <= skb_tailroom(skb)) ? len : - sizeof(*hdr) + crypt_len + 8; + sizeof(*hdr);// + crypt_len + 8; + /* + * XXX decreasing the hdrlen by removing the appendage makes the + * driver work... why? + */ memcpy(skb_put(skb, hdrlen), hdr, hdrlen); fraglen = len - hdrlen; --- a/crypto/scatterwalk.c +++ b/crypto/scatterwalk.c @@ -115,9 +115,13 @@ sg = scatterwalk_ffwd(tmp, sg, start); - if (sg_page(sg) == virt_to_page(buf) && - sg->offset == offset_in_page(buf)) - return; + // + // We have no working virt_to_page and offset_in_page + // for this use case. + // + // if (sg_page(sg) == virt_to_page(buf) && + // sg->offset == offset_in_page(buf)) + // return; scatterwalk_start(&walk, sg); scatterwalk_copychunks(buf, &walk, nbytes, out); --- a/drivers/net/wireless/iwlwifi/iwl-drv.c +++ b/drivers/net/wireless/iwlwifi/iwl-drv.c @@ -1635,6 +1635,7 @@ module_param_named(swcrypto, iwlwifi_mod_params.sw_crypto, int, S_IRUGO); MODULE_PARM_DESC(swcrypto, "using crypto in software (default 0 [hardware])"); module_param_named(11n_disable, iwlwifi_mod_params.disable_11n, uint, S_IRUGO); +unsigned int *module_param_11n_disable = &iwlwifi_mod_params.disable_11n; MODULE_PARM_DESC(11n_disable, "disable 11n functionality, bitmap: 1: full, 2: disable agg TX, 4: disable agg RX, 8 enable agg TX"); module_param_named(amsdu_size_8K, iwlwifi_mod_params.amsdu_size_8K,