On Tue, 2011-10-18 at 10:07 +0200, Johannes Berg wrote: > From: Johannes Berg <johannes.berg@xxxxxxxxx> > > We need to patch the new kfree_rcu() reference in > iwlwifi out and add rcu_barrier() to make it safe. Ping. Need to apply this now, see http://mid.gmane.org/20111116104133.E58B.2E210E2F@xxxxxxxxx johannes > Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx> > --- > Obviously the patch needing this isn't upstream yet, but I wanted to > give you this patch for when it comes upstream. If you prefer we hold > the compat patch and send it together with the kernel patch let me know > we can try to do that. > > diff --git a/patches/41-no-kfree-rcu.patch b/patches/41-no-kfree-rcu.patch > index c18b50d..37c5c1b 100644 > --- a/patches/41-no-kfree-rcu.patch > +++ b/patches/41-no-kfree-rcu.patch > @@ -81,3 +81,42 @@ > > static int ieee80211_compatible_rates(const u8 *supp_rates, int supp_rates_len, > struct ieee80211_supported_band *sband, > +--- a/drivers/net/wireless/iwlwifi/iwl-agn-rx.c 2011-10-17 18:29:19.000000000 +0200 > ++++ b/drivers/net/wireless/iwlwifi/iwl-agn-rx.c 2011-10-18 10:00:27.000000000 +0200 > +@@ -1032,6 +1032,14 @@ static int iwlagn_rx_reply_rx(struct iwl > + return 0; > + } > + > ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,40)) > ++static void kfree_noa_data(struct rcu_head *head) > ++{ > ++ void *data = container_of(head, struct iwl_wipan_noa_data, rcu_head); > ++ kfree(data); > ++} > ++#endif > ++ > + static int iwlagn_rx_noa_notification(struct iwl_priv *priv, > + struct iwl_rx_mem_buffer *rxb, > + struct iwl_device_cmd *cmd) > +@@ -1071,7 +1079,11 @@ static int iwlagn_rx_noa_notification(st > + rcu_assign_pointer(priv->noa_data, new_data); > + > + if (old_data) > ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,40)) > ++ call_rcu(&old_data->rcu_head, kfree_noa_data); > ++#else > + kfree_rcu(old_data, rcu_head); > ++#endif > + > + return 0; > + } > +--- a/drivers/net/wireless/iwlwifi/iwl-agn.c 2011-10-17 18:29:19.000000000 +0200 > ++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c 2011-10-18 10:00:44.000000000 +0200 > +@@ -3460,6 +3460,7 @@ static void __exit iwl_exit(void) > + { > + iwl_pci_unregister_driver(); > + iwlagn_rate_control_unregister(); > ++ rcu_barrier(); > + } > + > + module_exit(iwl_exit); > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-wireless" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html