* Re: [2.6.25 patch] the planned eepro100 removal
From: Jeff Garzik @ 2007-10-25 22:36 UTC (permalink / raw)
To: Bill Davidsen; +Cc: Adrian Bunk, netdev, linux-kernel, saw, Kok, Auke
In-Reply-To: <4720FFAA.9080709@tmr.com>
Bill Davidsen wrote:
> Adrian Bunk wrote:
>> This patch contains the planned removal of the eepro100 driver.
>>
> Are the e100 people satisfied that e100 now handles all known cases? I
Nope. There are still e100 work outstanding that means we cannot kill
eepro100.
Jeff
^ permalink raw reply
* Re: [2.6.25 patch] the planned eepro100 removal
From: Kok, Auke @ 2007-10-25 22:43 UTC (permalink / raw)
To: Jeff Garzik, David Acker
Cc: Bill Davidsen, Adrian Bunk, netdev, linux-kernel, saw
In-Reply-To: <47211A67.2090201@pobox.com>
Jeff Garzik wrote:
> Bill Davidsen wrote:
>> Adrian Bunk wrote:
>>> This patch contains the planned removal of the eepro100 driver.
>>>
>> Are the e100 people satisfied that e100 now handles all known cases? I
>
> Nope. There are still e100 work outstanding that means we cannot kill
> eepro100.
Agreed, there is still a receive unit hang in the last version that I got from
David Acker.
Auke
^ permalink raw reply
* Re: [PATCH v4] FEC - fast ethernet controller for mpc52xx
From: Jeff Garzik @ 2007-10-25 22:46 UTC (permalink / raw)
To: Dale Farnsworth; +Cc: Domen Puncer, netdev, linuxppc-dev
In-Reply-To: <20071025202908.GA2102@xyzzy.farnsworth.org>
Dale Farnsworth wrote:
> IMO, it's still a requirement that we call dma_unmap_single() for
> each call to dma_map_single().
Yep...
^ permalink raw reply
* Re: [PATCH] NET: Mark snmp4_icmp_list[] as being unused
From: David Howells @ 2007-10-25 23:05 UTC (permalink / raw)
To: David Stevens; +Cc: dhowells, netdev, netdev-owner
In-Reply-To: <OFC35175B6.40DF81DF-ON8825737F.00799984-8825737F.0079C01A@us.ibm.com>
David Stevens <dlstevens@us.ibm.com> wrote:
> What about just removing it, or do you think it's
> useful for documentation of the order? Either way,
I don't know whether it's intended to be used for something, perhaps a
debugging macro. Perhaps it should be #if'd out instead.
David
^ permalink raw reply
* Re: [PATCH v4] FEC - fast ethernet controller for mpc52xx
From: Stephen Hemminger @ 2007-10-25 23:50 UTC (permalink / raw)
To: Dale Farnsworth; +Cc: Domen Puncer, netdev, linuxppc-dev
In-Reply-To: <20071025202908.GA2102@xyzzy.farnsworth.org>
On Thu, 25 Oct 2007 13:29:08 -0700
"Dale Farnsworth" <dale@farnsworth.org> wrote:
> On Thu, Oct 25, 2007 at 09:41:14PM +0200, Domen Puncer wrote:
> > On 25/10/07 11:57 -0700, Dale Farnsworth wrote:
> > > Domen wrote:
> > > > > use your platform's dma mapping functions, rather than virt_to_phys()
> > > > >
> > > > > it might be the exact same implementation, inside the platform
> > > > > internals, but drivers should not be using this directly.
> > > >
> > > > I've replaced this with dma_map_single(), unmatched with
> > > > dma_unmap_single(), since bestcomm doesn't have a way to do that
> > > > and it's blank on ppc32 anyway.
> > > >
> > > > Is this OK? PPC guys?
> > >
> > > Even though dma_unmap_single() may be a no-op, calls to
> > > dma_map_single() must be matched with calls to dma_unmap_single().
> > >
> > > Perhaps with the additions below:
> > >
> > > > +static void mpc52xx_fec_free_rx_buffers(struct bcom_task *s)
> > > > +{
> > > > + struct sk_buff *skb;
> > > > +
> > > > + while (!bcom_queue_empty(s)) {
> > > > + skb = bcom_retrieve_buffer(s, NULL, NULL);
> > >
> > > dma_unmap_single(&skb->dev->dev, skb-data,
> > > FEC_RX_BUFFER_SIZE, DMA_FROM_DEVICE);
> >
> > It looks to me like dma_unmap_single takes the mapped address
> > (what dma_map_single returned), and not the address we're mapping
> > (skb->data).
>
> Yeah. Sorry. That won't be so easy. We'll either need to
> squirrel away the mapped address, or change the interface to
> bcom_retrieve_buffers() so we can get the address.
>
> IMO, it's still a requirement that we call dma_unmap_single() for
> each call to dma_map_single().
>
There exist some macro's for pci stuff to handle the nop case well
see: pci_unmap_addr(), pci_unmap_len().
--
Stephen Hemminger <shemminger@linux-foundation.org>
^ permalink raw reply
* Re: Fried r8169.
From: Tom Prince @ 2007-10-26 0:29 UTC (permalink / raw)
To: Francois Romieu; +Cc: netdev, Edward Hsu
In-Reply-To: <20071025213645.GA2226@electric-eye.fr.zoreil.com>
On Thu, Oct 25, 2007 at 11:36:45PM +0200, Francois Romieu wrote:
> Tom Prince <tom.prince@ualberta.net> :
> > While testing Linux v2.6.24-rc1, I noticed that my onboard r8169 had
> > disappeared, and the it remained gone when I rebooted to v2.6.23 and v2.6.22,
> > where it had previously worked.
>
> [...]
> > I am running x86_64 ASUS Z92T laptop (an OEM version of the A6T).
> >
> > I have posted dmesg/lspci/config from v2.6.23 (and soon v2.6.24) at
> > www.math.uwo.ca/~rprince5/r8169/
> >
> > Also these appear to be the relevant log messages from when the device was
> > working. Unfortunately, I didn't have the foresight to save dmesg/lspci from
> > before the device disappeared.
>
> Can you try an older/vendor kernel and power-off the host before restarting ?
>
> I have experienced something similar. My 8168b returns but the magic spell
> is still not clear.
Thanks.
Well, after power cyclic a few times, and reverting to v2.6.23, the card works
again. Unfortunately, I don't have the exact config where the card disappeared
any more, and it now shows up but doesn't work under v2.6.23. I'll spend some
time this weekend, and see if I can track down what causes it to disappear.
One data point: I have a kernel v2.6.23 + patch-2.6.23-rc9-hrt1 and a custom
acpi DSDT that seems to cause the device to disappear.
I have now uploaded dmesg/lspci/config from v2.6.23 from a succesful boot to
www.math.uwo.ca/~rprince5/r8169/
Tom
^ permalink raw reply
* Re: [PATCH] NET: Mark snmp4_icmp_list[] as being unused
From: David Stevens @ 2007-10-26 1:27 UTC (permalink / raw)
To: David Howells; +Cc: dhowells, netdev, netdev-owner
In-Reply-To: <23686.1193353513@redhat.com>
dhowells@redhat.com wrote on 10/25/2007 04:05:13 PM:
> David Stevens <dlstevens@us.ibm.com> wrote:
>
> > What about just removing it, or do you think it's
> > useful for documentation of the order? Either way,
>
> I don't know whether it's intended to be used for something, perhaps a
> debugging macro. Perhaps it should be #if'd out instead.
It was used for /proc/net/snmp header printing, but
most of the items in it were moved to a different MIB (by me).
The new values are printed in a backward-compatible way, but
maintaining the old order means not using this header map.
So, long-winded way of saying I believe it should be
removed, but I missed that when I made it obsolete. :-)
+-DLS
^ permalink raw reply
* Re: [PATCH] NET: Mark snmp4_icmp_list[] as being unused
From: David Miller @ 2007-10-26 1:40 UTC (permalink / raw)
To: dlstevens; +Cc: dhowells, netdev, netdev-owner
In-Reply-To: <OF4EE0CEBB.1648619D-ON88257380.00077574-88257380.0007E67A@us.ibm.com>
From: David Stevens <dlstevens@us.ibm.com>
Date: Thu, 25 Oct 2007 18:27:22 -0700
> dhowells@redhat.com wrote on 10/25/2007 04:05:13 PM:
>
> > David Stevens <dlstevens@us.ibm.com> wrote:
> >
> > > What about just removing it, or do you think it's
> > > useful for documentation of the order? Either way,
> >
> > I don't know whether it's intended to be used for something, perhaps a
> > debugging macro. Perhaps it should be #if'd out instead.
>
> It was used for /proc/net/snmp header printing, but
> most of the items in it were moved to a different MIB (by me).
> The new values are printed in a backward-compatible way, but
> maintaining the old order means not using this header map.
> So, long-winded way of saying I believe it should be
> removed, but I missed that when I made it obsolete. :-)
I've checked just such a change into my tree.
Thanks!
^ permalink raw reply
* Re: [PATCH] UDP: Make use of inet_iif() when doing socket lookups.
From: David Miller @ 2007-10-26 1:55 UTC (permalink / raw)
To: dlstevens; +Cc: vladislav.yasevich, netdev, netdev-owner
In-Reply-To: <OFD4C47A22.AA67398C-ON8825737F.0077CEF6-8825737F.00789CCE@us.ibm.com>
From: David Stevens <dlstevens@us.ibm.com>
Date: Thu, 25 Oct 2007 14:58:29 -0700
> I don't see any problem with this. If you're using IP_MULTICAST_IF with
> a bound socket, it forces you to use that interface, anyway.
>
> I'm not sure multicasting works as expected in some other cases with
> bound sockets (looks like there may be some holes to evade the
> binding), but that's in old code. I don't see any problems from this
> patch.
>
> +-DLS
>
> Acked-by: David L Stevens <dlstevens@us.ibm.com>
Patch applied, thanks everyone!
^ permalink raw reply
* [PATCH] [IPv4] SNMP: Refer correct memory location to display ICMP out-going statistics
From: Mitsuru Chinen @ 2007-10-26 1:59 UTC (permalink / raw)
To: netdev; +Cc: David L Stevens
While displaying ICMP out-going statistics as Out<name> counters in
/proc/net/snmp, the memory location for ICMP in-coming statistics
was referred by mistake.
Acked-by: David L Stevens <dlstevens@us.ibm.com>
Signed-off-by: Mitsuru Chinen <mitch@linux.vnet.ibm.com>
---
net/ipv4/proc.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c
index fd16cb8..b7f7f8a 100644
--- a/net/ipv4/proc.c
+++ b/net/ipv4/proc.c
@@ -312,7 +312,7 @@ static void icmp_put(struct seq_file *seq)
for (i=0; icmpmibmap[i].name != NULL; i++)
seq_printf(seq, " %lu",
snmp_fold_field((void **) icmpmsg_statistics,
- icmpmibmap[i].index));
+ icmpmibmap[i].index | 0x100));
}
/*
--
1.5.3.4
^ permalink raw reply related
* Please pull 'fixes-jgarzik' branch of wireless-2.6
From: John W. Linville @ 2007-10-26 3:08 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA
Jeff,
A few fixes for 2.6.24...
Thanks,
John
---
Individual patches available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/fixes-jgarzik
---
The following changes since commit c9927c2bf4f45bb85e8b502ab3fb79ad6483c244:
Linus Torvalds (1):
Linux 2.6.24-rc1
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git fixes-jgarzik
Anton Blanchard (3):
ipw2100/ipw2200: jiffies_round -> jiffies_round_relative
rt2x00: jiffies_round -> jiffies_round_relative
b43/b43legacy: jiffies_round -> jiffies_round_relative
Michael Wu (1):
rtl8187: Allow multicast frames
Mohamed Abbas (3):
iwl4965: fix scan problem
iwl3945: cancel scan on rxon command
iwl3945: fix direct scan problem
Tomas Winkler (1):
iwlwifi: fix sending probe request in iwl 4965
mabbas (1):
iwl4965: fix driver hang related to hardware scan
drivers/net/wireless/b43/main.c | 2 +-
drivers/net/wireless/b43legacy/main.c | 2 +-
drivers/net/wireless/ipw2100.c | 11 +++--
drivers/net/wireless/ipw2200.c | 6 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 6 +--
drivers/net/wireless/iwlwifi/iwl3945-base.c | 56 +++++++++++++++++++++++----
drivers/net/wireless/iwlwifi/iwl4965-base.c | 56 +++++++++++++++++++++++----
drivers/net/wireless/rt2x00/rt2x00lib.h | 2 +-
drivers/net/wireless/rtl8187_dev.c | 20 +++++----
9 files changed, 121 insertions(+), 40 deletions(-)
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index 9d9ff76..5058e60 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -2391,7 +2391,7 @@ out_requeue:
if (b43_debug(dev, B43_DBG_PWORK_FAST))
delay = msecs_to_jiffies(50);
else
- delay = round_jiffies(HZ * 15);
+ delay = round_jiffies_relative(HZ * 15);
queue_delayed_work(wl->hw->workqueue, &dev->periodic_work, delay);
out:
mutex_unlock(&wl->mutex);
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
index d09479e..f0e56df 100644
--- a/drivers/net/wireless/b43legacy/main.c
+++ b/drivers/net/wireless/b43legacy/main.c
@@ -2260,7 +2260,7 @@ out_requeue:
if (b43legacy_debug(dev, B43legacy_DBG_PWORK_FAST))
delay = msecs_to_jiffies(50);
else
- delay = round_jiffies(HZ);
+ delay = round_jiffies_relative(HZ);
queue_delayed_work(dev->wl->hw->workqueue,
&dev->periodic_work, delay);
out:
diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c
index a6c7904..8d53d08 100644
--- a/drivers/net/wireless/ipw2100.c
+++ b/drivers/net/wireless/ipw2100.c
@@ -1769,7 +1769,7 @@ static int ipw2100_up(struct ipw2100_priv *priv, int deferred)
if (priv->stop_rf_kill) {
priv->stop_rf_kill = 0;
queue_delayed_work(priv->workqueue, &priv->rf_kill,
- round_jiffies(HZ));
+ round_jiffies_relative(HZ));
}
deferred = 1;
@@ -2086,7 +2086,8 @@ static void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status)
/* Make sure the RF Kill check timer is running */
priv->stop_rf_kill = 0;
cancel_delayed_work(&priv->rf_kill);
- queue_delayed_work(priv->workqueue, &priv->rf_kill, round_jiffies(HZ));
+ queue_delayed_work(priv->workqueue, &priv->rf_kill,
+ round_jiffies_relative(HZ));
}
static void send_scan_event(void *data)
@@ -2123,7 +2124,7 @@ static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
if (!delayed_work_pending(&priv->scan_event_later))
queue_delayed_work(priv->workqueue,
&priv->scan_event_later,
- round_jiffies(msecs_to_jiffies(4000)));
+ round_jiffies_relative(msecs_to_jiffies(4000)));
} else {
priv->user_requested_scan = 0;
cancel_delayed_work(&priv->scan_event_later);
@@ -4242,7 +4243,7 @@ static int ipw_radio_kill_sw(struct ipw2100_priv *priv, int disable_radio)
priv->stop_rf_kill = 0;
cancel_delayed_work(&priv->rf_kill);
queue_delayed_work(priv->workqueue, &priv->rf_kill,
- round_jiffies(HZ));
+ round_jiffies_relative(HZ));
} else
schedule_reset(priv);
}
@@ -5981,7 +5982,7 @@ static void ipw2100_rf_kill(struct work_struct *work)
IPW_DEBUG_RF_KILL("RF Kill active, rescheduling GPIO check\n");
if (!priv->stop_rf_kill)
queue_delayed_work(priv->workqueue, &priv->rf_kill,
- round_jiffies(HZ));
+ round_jiffies_relative(HZ));
goto exit_unlock;
}
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
index e3c8284..54f44e5 100644
--- a/drivers/net/wireless/ipw2200.c
+++ b/drivers/net/wireless/ipw2200.c
@@ -1753,7 +1753,7 @@ static int ipw_radio_kill_sw(struct ipw_priv *priv, int disable_radio)
/* Make sure the RF_KILL check timer is running */
cancel_delayed_work(&priv->rf_kill);
queue_delayed_work(priv->workqueue, &priv->rf_kill,
- round_jiffies(2 * HZ));
+ round_jiffies_relative(2 * HZ));
} else
queue_work(priv->workqueue, &priv->up);
}
@@ -4364,7 +4364,7 @@ static void handle_scan_event(struct ipw_priv *priv)
if (!priv->user_requested_scan) {
if (!delayed_work_pending(&priv->scan_event))
queue_delayed_work(priv->workqueue, &priv->scan_event,
- round_jiffies(msecs_to_jiffies(4000)));
+ round_jiffies_relative(msecs_to_jiffies(4000)));
} else {
union iwreq_data wrqu;
@@ -4728,7 +4728,7 @@ static void ipw_rx_notification(struct ipw_priv *priv,
&& priv->status & STATUS_ASSOCIATED)
queue_delayed_work(priv->workqueue,
&priv->request_scan,
- round_jiffies(HZ));
+ round_jiffies_relative(HZ));
/* Send an empty event to user space.
* We don't send the received data on the event because
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index 557deeb..891f90d 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -3232,9 +3232,7 @@ int iwl4965_tx_cmd(struct iwl_priv *priv, struct iwl_cmd *out_cmd,
tx->rate_n_flags = iwl_hw_set_rate_n_flags(iwl_rates[rate_index].plcp,
rate_flags);
- if (ieee80211_is_probe_request(fc))
- tx->tx_flags |= TX_CMD_FLG_TSF_MSK;
- else if (ieee80211_is_back_request(fc))
+ if (ieee80211_is_back_request(fc))
tx->tx_flags |= TX_CMD_FLG_ACK_MSK |
TX_CMD_FLG_IMM_BA_RSP_MASK;
#ifdef CONFIG_IWLWIFI_HT
@@ -3872,7 +3870,7 @@ static void iwl4965_rx_reply_rx(struct iwl_priv *priv,
*/
case IEEE80211_STYPE_ASSOC_RESP:
case IEEE80211_STYPE_REASSOC_RESP:
- if (network_packet && iwl_is_associated(priv)) {
+ if (network_packet) {
#ifdef CONFIG_IWLWIFI_HT
u8 *pos = NULL;
struct ieee802_11_elems elems;
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 83019d1..4f22a71 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -6478,8 +6478,9 @@ static void iwl_bg_scan_check(struct work_struct *data)
IWL_DEBUG(IWL_DL_INFO | IWL_DL_SCAN,
"Scan completion watchdog resetting adapter (%dms)\n",
jiffies_to_msecs(IWL_SCAN_CHECK_WATCHDOG));
+
if (!test_bit(STATUS_EXIT_PENDING, &priv->status))
- queue_work(priv->workqueue, &priv->restart);
+ iwl_send_scan_abort(priv);
}
mutex_unlock(&priv->mutex);
}
@@ -6575,7 +6576,7 @@ static void iwl_bg_request_scan(struct work_struct *data)
spin_unlock_irqrestore(&priv->lock, flags);
scan->suspend_time = 0;
- scan->max_out_time = cpu_to_le32(600 * 1024);
+ scan->max_out_time = cpu_to_le32(200 * 1024);
if (!interval)
interval = suspend_time;
/*
@@ -6605,7 +6606,7 @@ static void iwl_bg_request_scan(struct work_struct *data)
memcpy(scan->direct_scan[0].ssid,
priv->direct_ssid, priv->direct_ssid_len);
direct_mask = 1;
- } else if (!iwl_is_associated(priv)) {
+ } else if (!iwl_is_associated(priv) && priv->essid_len) {
scan->direct_scan[0].id = WLAN_EID_SSID;
scan->direct_scan[0].len = priv->essid_len;
memcpy(scan->direct_scan[0].ssid, priv->essid, priv->essid_len);
@@ -6744,6 +6745,12 @@ static void iwl_bg_post_associate(struct work_struct *data)
mutex_lock(&priv->mutex);
+ if (!priv->interface_id || !priv->is_open) {
+ mutex_unlock(&priv->mutex);
+ return;
+ }
+ iwl_scan_cancel_timeout(priv, 200);
+
conf = ieee80211_get_hw_conf(priv->hw);
priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
@@ -6882,9 +6889,19 @@ static void iwl_mac_stop(struct ieee80211_hw *hw)
struct iwl_priv *priv = hw->priv;
IWL_DEBUG_MAC80211("enter\n");
+
+
+ mutex_lock(&priv->mutex);
+ /* stop mac, cancel any scan request and clear
+ * RXON_FILTER_ASSOC_MSK BIT
+ */
priv->is_open = 0;
- /*netif_stop_queue(dev); */
- flush_workqueue(priv->workqueue);
+ iwl_scan_cancel_timeout(priv, 100);
+ cancel_delayed_work(&priv->post_associate);
+ priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
+ iwl_commit_rxon(priv);
+ mutex_unlock(&priv->mutex);
+
IWL_DEBUG_MAC80211("leave\n");
}
@@ -7169,8 +7186,6 @@ static int iwl_mac_config_interface(struct ieee80211_hw *hw, int if_id,
if (priv->iw_mode == IEEE80211_IF_TYPE_AP)
iwl_config_ap(priv);
else {
- priv->staging_rxon.filter_flags |=
- RXON_FILTER_ASSOC_MSK;
rc = iwl_commit_rxon(priv);
if ((priv->iw_mode == IEEE80211_IF_TYPE_STA) && rc)
iwl_add_station(priv,
@@ -7178,6 +7193,7 @@ static int iwl_mac_config_interface(struct ieee80211_hw *hw, int if_id,
}
} else {
+ iwl_scan_cancel_timeout(priv, 100);
priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
iwl_commit_rxon(priv);
}
@@ -7217,6 +7233,12 @@ static void iwl_mac_remove_interface(struct ieee80211_hw *hw,
IWL_DEBUG_MAC80211("enter\n");
mutex_lock(&priv->mutex);
+
+ iwl_scan_cancel_timeout(priv, 100);
+ cancel_delayed_work(&priv->post_associate);
+ priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
+ iwl_commit_rxon(priv);
+
if (priv->interface_id == conf->if_id) {
priv->interface_id = 0;
memset(priv->bssid, 0, ETH_ALEN);
@@ -7238,6 +7260,7 @@ static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t len)
IWL_DEBUG_MAC80211("enter\n");
+ mutex_lock(&priv->mutex);
spin_lock_irqsave(&priv->lock, flags);
if (!iwl_is_ready_rf(priv)) {
@@ -7268,7 +7291,8 @@ static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t len)
priv->direct_ssid_len = (u8)
min((u8) len, (u8) IW_ESSID_MAX_SIZE);
memcpy(priv->direct_ssid, ssid, priv->direct_ssid_len);
- }
+ } else
+ priv->one_direct_scan = 0;
rc = iwl_scan_initiate(priv);
@@ -7276,6 +7300,7 @@ static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t len)
out_unlock:
spin_unlock_irqrestore(&priv->lock, flags);
+ mutex_unlock(&priv->mutex);
return rc;
}
@@ -7310,6 +7335,8 @@ static int iwl_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
mutex_lock(&priv->mutex);
+ iwl_scan_cancel_timeout(priv, 100);
+
switch (cmd) {
case SET_KEY:
rc = iwl_update_sta_key_info(priv, key, sta_id);
@@ -7479,8 +7506,18 @@ static void iwl_mac_reset_tsf(struct ieee80211_hw *hw)
spin_unlock_irqrestore(&priv->lock, flags);
+ /* we are restarting association process
+ * clear RXON_FILTER_ASSOC_MSK bit
+ */
+ if (priv->iw_mode != IEEE80211_IF_TYPE_AP) {
+ iwl_scan_cancel_timeout(priv, 100);
+ priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
+ iwl_commit_rxon(priv);
+ }
+
/* Per mac80211.h: This is only used in IBSS mode... */
if (priv->iw_mode != IEEE80211_IF_TYPE_IBSS) {
+
IWL_DEBUG_MAC80211("leave - not in IBSS\n");
mutex_unlock(&priv->mutex);
return;
@@ -8558,6 +8595,9 @@ static void iwl_pci_remove(struct pci_dev *pdev)
iwl_rate_control_unregister(priv->hw);
}
+ /*netif_stop_queue(dev); */
+ flush_workqueue(priv->workqueue);
+
/* ieee80211_unregister_hw calls iwl_mac_stop, which flushes
* priv->workqueue... so we can't take down the workqueue
* until now... */
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c
index 5e12792..d60adcb 100644
--- a/drivers/net/wireless/iwlwifi/iwl4965-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c
@@ -6845,8 +6845,9 @@ static void iwl_bg_scan_check(struct work_struct *data)
IWL_DEBUG(IWL_DL_INFO | IWL_DL_SCAN,
"Scan completion watchdog resetting adapter (%dms)\n",
jiffies_to_msecs(IWL_SCAN_CHECK_WATCHDOG));
+
if (!test_bit(STATUS_EXIT_PENDING, &priv->status))
- queue_work(priv->workqueue, &priv->restart);
+ iwl_send_scan_abort(priv);
}
mutex_unlock(&priv->mutex);
}
@@ -6942,7 +6943,7 @@ static void iwl_bg_request_scan(struct work_struct *data)
spin_unlock_irqrestore(&priv->lock, flags);
scan->suspend_time = 0;
- scan->max_out_time = cpu_to_le32(600 * 1024);
+ scan->max_out_time = cpu_to_le32(200 * 1024);
if (!interval)
interval = suspend_time;
@@ -6965,7 +6966,7 @@ static void iwl_bg_request_scan(struct work_struct *data)
memcpy(scan->direct_scan[0].ssid,
priv->direct_ssid, priv->direct_ssid_len);
direct_mask = 1;
- } else if (!iwl_is_associated(priv)) {
+ } else if (!iwl_is_associated(priv) && priv->essid_len) {
scan->direct_scan[0].id = WLAN_EID_SSID;
scan->direct_scan[0].len = priv->essid_len;
memcpy(scan->direct_scan[0].ssid, priv->essid, priv->essid_len);
@@ -7118,6 +7119,12 @@ static void iwl_bg_post_associate(struct work_struct *data)
mutex_lock(&priv->mutex);
+ if (!priv->interface_id || !priv->is_open) {
+ mutex_unlock(&priv->mutex);
+ return;
+ }
+ iwl_scan_cancel_timeout(priv, 200);
+
conf = ieee80211_get_hw_conf(priv->hw);
priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
@@ -7271,9 +7278,19 @@ static void iwl_mac_stop(struct ieee80211_hw *hw)
struct iwl_priv *priv = hw->priv;
IWL_DEBUG_MAC80211("enter\n");
+
+
+ mutex_lock(&priv->mutex);
+ /* stop mac, cancel any scan request and clear
+ * RXON_FILTER_ASSOC_MSK BIT
+ */
priv->is_open = 0;
- /*netif_stop_queue(dev); */
- flush_workqueue(priv->workqueue);
+ iwl_scan_cancel_timeout(priv, 100);
+ cancel_delayed_work(&priv->post_associate);
+ priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
+ iwl_commit_rxon(priv);
+ mutex_unlock(&priv->mutex);
+
IWL_DEBUG_MAC80211("leave\n");
}
@@ -7573,8 +7590,6 @@ static int iwl_mac_config_interface(struct ieee80211_hw *hw, int if_id,
if (priv->iw_mode == IEEE80211_IF_TYPE_AP)
iwl_config_ap(priv);
else {
- priv->staging_rxon.filter_flags |=
- RXON_FILTER_ASSOC_MSK;
rc = iwl_commit_rxon(priv);
if ((priv->iw_mode == IEEE80211_IF_TYPE_STA) && rc)
iwl_rxon_add_station(
@@ -7582,6 +7597,7 @@ static int iwl_mac_config_interface(struct ieee80211_hw *hw, int if_id,
}
} else {
+ iwl_scan_cancel_timeout(priv, 100);
priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
iwl_commit_rxon(priv);
}
@@ -7621,6 +7637,12 @@ static void iwl_mac_remove_interface(struct ieee80211_hw *hw,
IWL_DEBUG_MAC80211("enter\n");
mutex_lock(&priv->mutex);
+
+ iwl_scan_cancel_timeout(priv, 100);
+ cancel_delayed_work(&priv->post_associate);
+ priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
+ iwl_commit_rxon(priv);
+
if (priv->interface_id == conf->if_id) {
priv->interface_id = 0;
memset(priv->bssid, 0, ETH_ALEN);
@@ -7642,6 +7664,7 @@ static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t len)
IWL_DEBUG_MAC80211("enter\n");
+ mutex_lock(&priv->mutex);
spin_lock_irqsave(&priv->lock, flags);
if (!iwl_is_ready_rf(priv)) {
@@ -7672,7 +7695,8 @@ static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t len)
priv->direct_ssid_len = (u8)
min((u8) len, (u8) IW_ESSID_MAX_SIZE);
memcpy(priv->direct_ssid, ssid, priv->direct_ssid_len);
- }
+ } else
+ priv->one_direct_scan = 0;
rc = iwl_scan_initiate(priv);
@@ -7680,6 +7704,7 @@ static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t len)
out_unlock:
spin_unlock_irqrestore(&priv->lock, flags);
+ mutex_unlock(&priv->mutex);
return rc;
}
@@ -7713,6 +7738,8 @@ static int iwl_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
mutex_lock(&priv->mutex);
+ iwl_scan_cancel_timeout(priv, 100);
+
switch (cmd) {
case SET_KEY:
rc = iwl_update_sta_key_info(priv, key, sta_id);
@@ -7903,8 +7930,18 @@ static void iwl_mac_reset_tsf(struct ieee80211_hw *hw)
spin_unlock_irqrestore(&priv->lock, flags);
+ /* we are restarting association process
+ * clear RXON_FILTER_ASSOC_MSK bit
+ */
+ if (priv->iw_mode != IEEE80211_IF_TYPE_AP) {
+ iwl_scan_cancel_timeout(priv, 100);
+ priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
+ iwl_commit_rxon(priv);
+ }
+
/* Per mac80211.h: This is only used in IBSS mode... */
if (priv->iw_mode != IEEE80211_IF_TYPE_IBSS) {
+
IWL_DEBUG_MAC80211("leave - not in IBSS\n");
mutex_unlock(&priv->mutex);
return;
@@ -9152,6 +9189,9 @@ static void iwl_pci_remove(struct pci_dev *pdev)
iwl_rate_control_unregister(priv->hw);
}
+ /*netif_stop_queue(dev); */
+ flush_workqueue(priv->workqueue);
+
/* ieee80211_unregister_hw calls iwl_mac_stop, which flushes
* priv->workqueue... so we can't take down the workqueue
* until now... */
diff --git a/drivers/net/wireless/rt2x00/rt2x00lib.h b/drivers/net/wireless/rt2x00/rt2x00lib.h
index 298faa9..06d9bc0 100644
--- a/drivers/net/wireless/rt2x00/rt2x00lib.h
+++ b/drivers/net/wireless/rt2x00/rt2x00lib.h
@@ -30,7 +30,7 @@
* Interval defines
* Both the link tuner as the rfkill will be called once per second.
*/
-#define LINK_TUNE_INTERVAL ( round_jiffies(HZ) )
+#define LINK_TUNE_INTERVAL ( round_jiffies_relative(HZ) )
#define RFKILL_POLL_INTERVAL ( 1000 )
/*
diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c
index de61c8f..e454ae8 100644
--- a/drivers/net/wireless/rtl8187_dev.c
+++ b/drivers/net/wireless/rtl8187_dev.c
@@ -433,6 +433,9 @@ static int rtl8187_start(struct ieee80211_hw *dev)
rtl818x_iowrite16(priv, &priv->map->INT_MASK, 0xFFFF);
+ rtl818x_iowrite32(priv, &priv->map->MAR[0], ~0);
+ rtl818x_iowrite32(priv, &priv->map->MAR[1], ~0);
+
rtl8187_init_urbs(dev);
reg = RTL818X_RX_CONF_ONLYERLPKT |
@@ -582,32 +585,31 @@ static int rtl8187_config_interface(struct ieee80211_hw *dev, int if_id,
static void rtl8187_configure_filter(struct ieee80211_hw *dev,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count, struct dev_addr_list *mc_list)
+ int mc_count, struct dev_addr_list *mclist)
{
struct rtl8187_priv *priv = dev->priv;
- *total_flags = 0;
-
- if (changed_flags & FIF_ALLMULTI)
- priv->rx_conf ^= RTL818X_RX_CONF_MULTICAST;
if (changed_flags & FIF_FCSFAIL)
priv->rx_conf ^= RTL818X_RX_CONF_FCS;
if (changed_flags & FIF_CONTROL)
priv->rx_conf ^= RTL818X_RX_CONF_CTRL;
if (changed_flags & FIF_OTHER_BSS)
priv->rx_conf ^= RTL818X_RX_CONF_MONITOR;
-
- if (mc_count > 0)
+ if (*total_flags & FIF_ALLMULTI || mc_count > 0)
priv->rx_conf |= RTL818X_RX_CONF_MULTICAST;
+ else
+ priv->rx_conf &= ~RTL818X_RX_CONF_MULTICAST;
+
+ *total_flags = 0;
- if (priv->rx_conf & RTL818X_RX_CONF_MULTICAST)
- *total_flags |= FIF_ALLMULTI;
if (priv->rx_conf & RTL818X_RX_CONF_FCS)
*total_flags |= FIF_FCSFAIL;
if (priv->rx_conf & RTL818X_RX_CONF_CTRL)
*total_flags |= FIF_CONTROL;
if (priv->rx_conf & RTL818X_RX_CONF_MONITOR)
*total_flags |= FIF_OTHER_BSS;
+ if (priv->rx_conf & RTL818X_RX_CONF_MULTICAST)
+ *total_flags |= FIF_ALLMULTI;
rtl818x_iowrite32_async(priv, &priv->map->RX_CONF, priv->rx_conf);
}
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
^ permalink raw reply related
* Please pull 'fixes-davem' branch of wireless-2.6
From: John W. Linville @ 2007-10-26 3:10 UTC (permalink / raw)
To: davem-fT/PcQaiUtIeIZ0/mPfg9Q
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA
Dave,
A few fixes for 2.6.24...also adds Johannes Berg as a mac80211
maintainer, since he probably wrote most of the newest bugs
there... :-)
Thanks,
John
---
Individual patches available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/fixes-davem
---
The following changes since commit c9927c2bf4f45bb85e8b502ab3fb79ad6483c244:
Linus Torvalds (1):
Linux 2.6.24-rc1
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git fixes-davem
Jeff Garzik (1):
mac80211: fix warning created by BIT()
Johannes Berg (1):
add myself as mac80211 maintainer
Michael Wu (1):
mac80211: Fix SSID matching in AP selection
MAINTAINERS | 8 +++++---
net/mac80211/ieee80211_sta.c | 5 +++--
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 76b8571..71badfb 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2442,13 +2442,15 @@ W: http://www.tazenda.demon.co.uk/phil/linux-hp
S: Maintained
MAC80211
-P: Jiri Benc
-M: jbenc-AlSwsSmVLrQ@public.gmane.org
P: Michael Wu
M: flamingice-R9e9/4HEdknk1uMJSBkQmQ@public.gmane.org
+P: Johannes Berg
+M: johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org
+P: Jiri Benc
+M: jbenc-AlSwsSmVLrQ@public.gmane.org
L: linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
W: http://linuxwireless.org/
-T: git kernel.org:/pub/scm/linux/kernel/git/jbenc/mac80211.git
+T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git
S: Maintained
MACVLAN DRIVER
diff --git a/net/mac80211/ieee80211_sta.c b/net/mac80211/ieee80211_sta.c
index f7ffeec..0d996aa 100644
--- a/net/mac80211/ieee80211_sta.c
+++ b/net/mac80211/ieee80211_sta.c
@@ -1182,7 +1182,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct net_device *dev,
aid = le16_to_cpu(mgmt->u.assoc_resp.aid);
printk(KERN_DEBUG "%s: RX %sssocResp from %s (capab=0x%x "
- "status=%d aid=%d)\n",
+ "status=%d aid=%ld)\n",
dev->name, reassoc ? "Rea" : "A", print_mac(mac, mgmt->sa),
capab_info, status_code, aid & ~(BIT(15) | BIT(14)));
@@ -2096,7 +2096,8 @@ static int ieee80211_sta_match_ssid(struct ieee80211_if_sta *ifsta,
{
int tmp, hidden_ssid;
- if (!memcmp(ifsta->ssid, ssid, ssid_len))
+ if (ssid_len == ifsta->ssid_len &&
+ !memcmp(ifsta->ssid, ssid, ssid_len))
return 1;
if (ifsta->flags & IEEE80211_STA_AUTO_BSSID_SEL)
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
^ permalink raw reply related
* Re: Please pull 'fixes-davem' branch of wireless-2.6
From: John W. Linville @ 2007-10-26 4:11 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-wireless
In-Reply-To: <20071026031033.GC14080@tuxdriver.com>
On Thu, Oct 25, 2007 at 11:10:33PM -0400, John W. Linville wrote:
> The following changes since commit c9927c2bf4f45bb85e8b502ab3fb79ad6483c244:
> Linus Torvalds (1):
> Linux 2.6.24-rc1
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git fixes-davem
>
> Jeff Garzik (1):
> mac80211: fix warning created by BIT()
Hmmm...this doesn't actually seem to fix the warning -- oops!
Disregard this request, I'll apply Johannes' fix instead and send
another pull request.
John
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply
* Please pull 'fixes-davem' branch of wireless-2.6 (Use this one!)
From: John W. Linville @ 2007-10-26 4:34 UTC (permalink / raw)
To: davem-fT/PcQaiUtIeIZ0/mPfg9Q
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA
Dave,
(Use this one!)
A few fixes for 2.6.24...also adds Johannes Berg as a mac80211
maintainer, since he probably wrote most of the newest bugs
there... :-)
Thanks,
John
---
Individual patches available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/fixes-davem
---
The following changes since commit c9927c2bf4f45bb85e8b502ab3fb79ad6483c244:
Linus Torvalds (1):
Linux 2.6.24-rc1
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git fixes-davem
Johannes Berg (2):
add myself as mac80211 maintainer
mac80211: fix printk warning on 64-bit
Michael Wu (1):
mac80211: Fix SSID matching in AP selection
MAINTAINERS | 8 +++++---
net/mac80211/ieee80211_sta.c | 5 +++--
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 76b8571..71badfb 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2442,13 +2442,15 @@ W: http://www.tazenda.demon.co.uk/phil/linux-hp
S: Maintained
MAC80211
-P: Jiri Benc
-M: jbenc-AlSwsSmVLrQ@public.gmane.org
P: Michael Wu
M: flamingice-R9e9/4HEdknk1uMJSBkQmQ@public.gmane.org
+P: Johannes Berg
+M: johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org
+P: Jiri Benc
+M: jbenc-AlSwsSmVLrQ@public.gmane.org
L: linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
W: http://linuxwireless.org/
-T: git kernel.org:/pub/scm/linux/kernel/git/jbenc/mac80211.git
+T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git
S: Maintained
MACVLAN DRIVER
diff --git a/net/mac80211/ieee80211_sta.c b/net/mac80211/ieee80211_sta.c
index f7ffeec..fda0e06 100644
--- a/net/mac80211/ieee80211_sta.c
+++ b/net/mac80211/ieee80211_sta.c
@@ -1184,7 +1184,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct net_device *dev,
printk(KERN_DEBUG "%s: RX %sssocResp from %s (capab=0x%x "
"status=%d aid=%d)\n",
dev->name, reassoc ? "Rea" : "A", print_mac(mac, mgmt->sa),
- capab_info, status_code, aid & ~(BIT(15) | BIT(14)));
+ capab_info, status_code, (u16)(aid & ~(BIT(15) | BIT(14))));
if (status_code != WLAN_STATUS_SUCCESS) {
printk(KERN_DEBUG "%s: AP denied association (code=%d)\n",
@@ -2096,7 +2096,8 @@ static int ieee80211_sta_match_ssid(struct ieee80211_if_sta *ifsta,
{
int tmp, hidden_ssid;
- if (!memcmp(ifsta->ssid, ssid, ssid_len))
+ if (ssid_len == ifsta->ssid_len &&
+ !memcmp(ifsta->ssid, ssid, ssid_len))
return 1;
if (ifsta->flags & IEEE80211_STA_AUTO_BSSID_SEL)
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
^ permalink raw reply related
* Re: Please pull 'fixes-davem' branch of wireless-2.6 (Use this one!)
From: David Miller @ 2007-10-26 5:49 UTC (permalink / raw)
To: linville-2XuSBdqkA4R54TAoqtyWWQ
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <20071026043409.GE14080-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
From: "John W. Linville" <linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
Date: Fri, 26 Oct 2007 00:34:09 -0400
> Dave,
>
> (Use this one!)
>
> A few fixes for 2.6.24...also adds Johannes Berg as a mac80211
> maintainer, since he probably wrote most of the newest bugs
> there... :-)
Pulled, thanks John!
^ permalink raw reply
* Re: [PATCH net-2.6.24][trivial] fix inconsistency of terms
From: David Miller @ 2007-10-26 6:04 UTC (permalink / raw)
To: takano; +Cc: netdev, y-kodama
In-Reply-To: <20071009.153234.108020718.takano@axe-inc.co.jp>
From: TAKANO Ryousei <takano@axe-inc.co.jp>
Date: Tue, 09 Oct 2007 15:32:34 +0900 (JST)
>
> Fix inconsistency of terms:
> 1) D-SACK
> 2) F-RTO
>
> Signed-off-by: Ryousei Takano <takano-ryousei@aist.go.jp>
Patch applied, thank you!
^ permalink raw reply
* Re: 2.6.24-rc1 fails with lockup - /sbin/ifconfig / inet_ioctl() / dev_close() / rtl8169_down()
From: Ingo Molnar @ 2007-10-26 6:37 UTC (permalink / raw)
To: Romano Giannetti
Cc: Peter Zijlstra, Linux Kernel Mailing List, David S. Miller,
netdev, Francois Romieu, Edward Hsu, Jeff Garzik,
Stephen Hemminger, Andrew Morton
In-Reply-To: <1193378269.17910.4.camel@localhost>
* Romano Giannetti <romanol@upcomillas.es> wrote:
> > Does this help?
>
> I tried this, but although I have the D-state processes, I cannot see
> any debug trace now. Results are at:
>
> http://www.dea.icai.upcomillas.es/romano/linux/info/2624rc1_3/
>
> Can I try anything more? This is quite a show-stopper for me... and
> before trying to bisect 11Mbyte of patches...
hm, from your log it appears that lockdep did not find anything, still
the hang does trigger.
it's /sbin/ifconfig and inet_ioctl() / dev_close() / rtl8169_down() that
seems to be hanging. I've extracted the relevant backtrace below. I've
Cc:-ed people who might have a better idea about what's going on.
Ingo
------------------>
ifconfig S c0476f80 0 7226 7166
cbb67df0 00000046 c02f3f97 c0476f80 cbb67dc0 c01489d5 c2b81550 c2b8168c
c1cf7b80 00000000 c30bd250 00000000 cbb67dd0 00000282 cbb67e00 c0476f80
cbb67df0 c0132618 00004232 00000000 00000282 cbb67e00 00004232 f884e000
Call Trace:
[schedule_timeout+72/192] schedule_timeout+0x48/0xc0
[schedule_timeout_interruptible+21/32] schedule_timeout_interruptible+0x15/0x20
[msleep_interruptible+39/64] msleep_interruptible+0x27/0x40
[<f88422f0>] rtl8169_down+0xb0/0xd0 [r8169]
[<f88424cf>] rtl8169_close+0x1f/0xb0 [r8169]
[dev_close+71/96] dev_close+0x47/0x60
[dev_change_flags+125/384] dev_change_flags+0x7d/0x180
[devinet_ioctl+1225/1632] devinet_ioctl+0x4c9/0x660
[inet_ioctl+107/144] inet_ioctl+0x6b/0x90
[sock_ioctl+208/544] sock_ioctl+0xd0/0x220
[do_ioctl+40/128] do_ioctl+0x28/0x80
[vfs_ioctl+87/640] vfs_ioctl+0x57/0x280
[sys_ioctl+57/96] sys_ioctl+0x39/0x60
[sysenter_past_esp+95/165] sysenter_past_esp+0x5f/0xa5
=======================
^ permalink raw reply
* Bad TCP checksum error
From: Gaurav Aggarwal @ 2007-10-26 7:41 UTC (permalink / raw)
To: linux-net-owner
Cc: netfilter-devel, netdev, linux-net, linux-kernel, davidsen,
Gaurav Aggarwal
[-- Attachment #1: Type: text/plain, Size: 8621 bytes --]
Hi,
I wrote a program where I am using the nfnetlink and netfilter_queue
model to capture the packet. After that I just change the destination
address of the packet and insert it back into the ip stack. But after
inserting the packet I am getting a bad TCP checksum error. Even I am
getting the same error for IP header checksum. Attached is the source
code and tcpdump on host machine.
/* Source Code */
/* Compile with gcc -lnfnetlink -lnetfilter_queue */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <linux/netfilter.h> /* for NF_ACCEPT */
#include <arpa/inet.h>
#include <libnetfilter_queue/libnetfilter_queue.h>
#define BUFSIZE 2048
struct in_addr foreign;
struct in_addr local;
struct queued_pckt {
char *payload;
int payload_len;
};
struct pseudohdr
{
unsigned long ip_src ;
unsigned long ip_dst ;
unsigned char reserve ;
unsigned char type ;
unsigned short length;
} ;
unsigned short checksum(unsigned short *addr, unsigned int count) {
/* Compute Internet Checksum for "count" bytes beginning at location "addr".
* Algorithm is simple, using a 32-bit accumulator (sum),
* we add sequential 16-bit words to it, and at the end, fold back
* all the carry bits from the top 16 bits into the lower 16 bits.
*/
register long sum = 0;
unsigned short result;
while (count > 1) {
/* This is the inner loop */
sum += * addr++;
count -= 2;
}
/* Add left-over byte, if any */
if (count == 1)
{
result = 0; //make sure top half is zero
* (unsigned char *) (&result) = *(unsigned char *)addr;
sum += result;
}
/*
* Add back carry outs from top 16 bits to low 16 bits.
* Fold 32-bit sum to 16 bits
*/
sum = (sum >> 16) + (sum & 0xffff); /* add high-16 to low-16 */
sum += (sum >> 16); /* add carry */
result = ~sum; /* ones-complement, then truncate to 16 bits */
return (result);
}
unsigned short get_tcp_chksum (struct tcphdr *orig_tcphdr, struct
iphdr *orig_iphdr )
{
struct pseudohdr pseudoh ;
unsigned int total_len = ntohs(orig_iphdr->tot_len);
int tcpopt_len = (orig_tcphdr->doff * 4) - 20;
int tcpdata_len = total_len - (orig_tcphdr->doff * 4) - (orig_iphdr->ihl * 4);
pseudoh.ip_src = orig_iphdr->saddr ;
pseudoh.ip_dst = orig_iphdr->daddr ;
pseudoh.reserve = 0 ;
pseudoh.type = orig_iphdr->protocol ;
pseudoh.length = htons (sizeof (struct tcphdr) + tcpopt_len + tcpdata_len) ;
int totaltcp_len = sizeof(struct pseudohdr) + sizeof(struct tcphdr) +
tcpopt_len + tcpdata_len;
unsigned short *tcp = (unsigned short *)malloc (totaltcp_len);
memcpy ((unsigned char *)tcp, &pseudoh, sizeof(struct pseudohdr));
memcpy ((unsigned char *)tcp + sizeof(struct pseudohdr), (unsigned
char *)orig_tcphdr, sizeof(struct tcphdr));
if (tcpopt_len > 0)
memcpy ((unsigned char *)tcp + sizeof(struct pseudohdr) +
sizeof(struct tcphdr), (unsigned char *)orig_iphdr + (orig_iphdr->ihl
* 4) + sizeof(struct tcphdr), tcpopt_len);
if (tcpdata_len > 0)
memcpy ((unsigned char *)tcp + sizeof(struct pseudohdr) +
sizeof(struct tcphdr) + tcpopt_len, (unsigned char *)orig_tcphdr +
(orig_tcphdr->doff * 4), tcpdata_len);
#if 0
printf("pseudo length: %d\n",pseudoh.length);
printf("tcp hdr length: %d\n",orig_tcphdr->doff*4);
printf("tcp hdr struct length: %d\n",sizeof(struct tcphdr));
printf("tcphdr->doff = %d, tcp opt length:
%d\n",orig_tcphdr->doff,tcpopt_len);
printf("tcp total+psuedo length: %d\n",totaltcp_len);
fflush(stdout);
printf("tcp data len: %d, data start %u\n",
tcpdata_len,orig_tcphdr + (orig_tcphdr->doff*4));
#endif
return (checksum (tcp, totaltcp_len)) ;
}
static void filter(
unsigned char *packet, unsigned int payload_len)
{
struct iphdr *iphdr;
struct tcphdr *tcphdr;
printf ("in filter function\n");
iphdr = (struct iphdr *)packet;
/* check need some datas */
if (payload_len < sizeof(struct iphdr) + sizeof(struct tcphdr)) {
return;
}
/* check IP version */
if (iphdr->protocol == IPPROTO_TCP)
{
tcphdr = (struct tcphdr *)(((u_int32_t *)packet) + 4 * iphdr->ihl);
if (iphdr->daddr == foreign.s_addr)
{
printf ("packet DEST addr = %s\n",inet_ntoa(foreign));
fprintf (stderr, "changing pkt's DEST addr from FOREIGN to LOCAL\n");
iphdr->daddr = local.s_addr;
tcphdr->check = 0 ; // checksum will be calculated later
iphdr->check = checksum(
(unsigned short *)iphdr,
sizeof(struct iphdr));
tcphdr->check = get_tcp_chksum(
tcphdr,
iphdr);
}
}
}
static int cb(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
struct nfq_data *nfa, void *data)
{
int id = 0;
struct nfqnl_msg_packet_hdr *ph;
struct queued_pckt q_pckt;
u_int32_t mark,ifi;
int ret;
char *payload;
printf("entering callback\n");
ph = nfq_get_msg_packet_hdr(nfa);
if (ph){
id = ntohl(ph->packet_id);
printf("hw_protocol=0x%04x hook=%u id=%u ",
ntohs(ph->hw_protocol), ph->hook, id);
}
mark = nfq_get_nfmark(nfa);
if (mark)
printf("mark=%u ", mark);
ifi = nfq_get_indev(nfa);
if (ifi)
printf("indev=%u ", ifi);
ifi = nfq_get_outdev(nfa);
if (ifi)
printf("outdev=%u ", ifi);
q_pckt.payload_len = nfq_get_payload(nfa, &(q_pckt.payload));
if (q_pckt.payload_len >= 0)
{
printf("payload_len=%d ", q_pckt.payload_len);
fputc('\n', stdout);
filter((unsigned char *)q_pckt.payload, q_pckt.payload_len);
}
printf("setting verdict of packet id %d\n",id);
return nfq_set_verdict(qh, id, NF_ACCEPT, q_pckt.payload_len, q_pckt.payload);
}
int main(int argc, char **argv)
{
struct nfq_handle *h;
struct nfq_q_handle *qh;
struct nfnl_handle *nh;
int fd;
int rv;
unsigned char buf[BUFSIZE];
if (argc == 1)
{
inet_aton("10.102.130.222", &(foreign));
inet_aton("10.102.130.105", &(local));
} else if (argc == 3)
{
inet_aton(argv[1], &(foreign));
inet_aton(argv[2], &(local));
}
else
{
printf("Usage: argv[0] [foreign_addr local_addr]\n");
return 0;
}
printf("opening library handle\n");
h = nfq_open();
if (!h) {
fprintf(stderr, "error during nfq_open()\n");
return 0;
}
printf("unbinding existing nf_queue handler for AF_INET (if any)\n");
if (nfq_unbind_pf(h, AF_INET) < 0) {
fprintf(stderr, "error during nfq_unbind_pf()\n");
exit(1);
}
printf("binding nfnetlink_queue as nf_queue handler for AF_INET\n");
if (nfq_bind_pf(h, AF_INET) < 0) {
fprintf(stderr, "error during nfq_bind_pf()\n");
exit(1);
}
printf("binding this socket to queue '0'\n");
qh = nfq_create_queue(h, 0, &cb, NULL);
if (!qh) {
fprintf(stderr, "error during nfq_create_queue()\n");
exit(1);
}
printf("setting copy_packet mode\n");
if (nfq_set_mode(qh, NFQNL_COPY_PACKET, BUFSIZE) < 0) {
fprintf(stderr, "can't set packet_copy mode\n");
exit(1);
}
nh = nfq_nfnlh(h);
fd = nfnl_fd(nh);
while ((rv = recv(fd, buf, BUFSIZE, 0)) && rv >= 0) {
printf("pkt received\n");
nfq_handle_packet(h, buf, rv);
printf("pkt handled\n");
}
printf("unbinding from queue 0\n");
nfq_destroy_queue(qh);
printf("closing library handle\n");
nfq_close(h);
exit(0);
}
/* end - Source Code */
/* TCP dump */
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
12:59:36.706161 IP (tos 0x0, ttl 64, id 61974, offset 0, flags [DF],
proto: TCP (6), length: 60, bad cksum 75 (->8e24)!) 10.102.35.76.36898
> 10.102.130.105.colubris: S, cksum 0xc6d5 (incorrect (-> 0xc74a),
366446207:366446207(0) win 5840 <mss 1460,sackOK,timestamp 14775401
0,nop,wscale 6>
0x0000: 0012 010a 5f4c 000b cd3a 5bfb 0800 4500
0x0010: 003c f216 4000 4006 0075 0a66 234c 0a66
0x0020: 8269 9022 0da2 15d7 867f 0000 0000 a002
0x0030: 16d0 c6d5 0000 0204 05b4 0402 080a 00e1
0x0040: 7469 0000 0000 0103 0306
12:59:39.708619 IP (tos 0x0, ttl 64, id 61975, offset 0, flags [DF],
proto: TCP (6), length: 60, bad cksum 75 (->8e23)!) 10.102.35.76.36898
> 10.102.130.105.colubris: S, cksum 0xc3e7 (incorrect (-> 0xc45c),
366446207:366446207(0) win 5840 <mss 1460,sackOK,timestamp 14776151
0,nop,wscale 6>
0x0000: 0012 010a 5f4c 000b cd3a 5bfb 0800 4500
0x0010: 003c f217 4000 4006 0075 0a66 234c 0a66
0x0020: 8269 9022 0da2 15d7 867f 0000 0000 a002
0x0030: 16d0 c3e7 0000 0204 05b4 0402 080a 00e1
0x0040: 7757 0000 0000 0103 0306
2 packets captured
4 packets received by filter
0 packets dropped by kernel
/* End - TCP dump */
Attached is the dump for ethreal also.
--
Regards,
Gaurav Aggarwal
[-- Attachment #2: nfq_test.c --]
[-- Type: application/octet-stream, Size: 6887 bytes --]
/* Compile with gcc -lnfnetlink -lnetfilter_queue */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <linux/netfilter.h> /* for NF_ACCEPT */
#include <arpa/inet.h>
#include <libnetfilter_queue/libnetfilter_queue.h>
#define BUFSIZE 2048
struct in_addr foreign;
struct in_addr local;
struct queued_pckt {
char *payload;
int payload_len;
};
struct pseudohdr
{
unsigned long ip_src ;
unsigned long ip_dst ;
unsigned char reserve ;
unsigned char type ;
unsigned short length;
} ;
unsigned short checksum(unsigned short *addr, unsigned int count) {
/* Compute Internet Checksum for "count" bytes beginning at location "addr".
* Algorithm is simple, using a 32-bit accumulator (sum),
* we add sequential 16-bit words to it, and at the end, fold back
* all the carry bits from the top 16 bits into the lower 16 bits.
*/
register long sum = 0;
unsigned short result;
while (count > 1) {
/* This is the inner loop */
sum += * addr++;
count -= 2;
}
/* Add left-over byte, if any */
if (count == 1)
{
result = 0; //make sure top half is zero
* (unsigned char *) (&result) = *(unsigned char *)addr;
sum += result;
}
/*
* Add back carry outs from top 16 bits to low 16 bits.
* Fold 32-bit sum to 16 bits
*/
sum = (sum >> 16) + (sum & 0xffff); /* add high-16 to low-16 */
sum += (sum >> 16); /* add carry */
result = ~sum; /* ones-complement, then truncate to 16 bits */
return (result);
}
unsigned short get_tcp_chksum (struct tcphdr *orig_tcphdr, struct iphdr *orig_iphdr )
{
struct pseudohdr pseudoh ;
unsigned int total_len = ntohs(orig_iphdr->tot_len);
int tcpopt_len = (orig_tcphdr->doff * 4) - 20;
int tcpdata_len = total_len - (orig_tcphdr->doff * 4) - (orig_iphdr->ihl * 4);
pseudoh.ip_src = orig_iphdr->saddr ;
pseudoh.ip_dst = orig_iphdr->daddr ;
pseudoh.reserve = 0 ;
pseudoh.type = orig_iphdr->protocol ;
pseudoh.length = htons (sizeof (struct tcphdr) + tcpopt_len + tcpdata_len) ;
int totaltcp_len = sizeof(struct pseudohdr) + sizeof(struct tcphdr) + tcpopt_len + tcpdata_len;
unsigned short *tcp = (unsigned short *)malloc (totaltcp_len);
memcpy ((unsigned char *)tcp, &pseudoh, sizeof(struct pseudohdr));
memcpy ((unsigned char *)tcp + sizeof(struct pseudohdr), (unsigned char *)orig_tcphdr, sizeof(struct tcphdr));
if (tcpopt_len > 0)
memcpy ((unsigned char *)tcp + sizeof(struct pseudohdr) + sizeof(struct tcphdr), (unsigned char *)orig_iphdr + (orig_iphdr->ihl * 4) + sizeof(struct tcphdr), tcpopt_len);
if (tcpdata_len > 0)
memcpy ((unsigned char *)tcp + sizeof(struct pseudohdr) + sizeof(struct tcphdr) + tcpopt_len, (unsigned char *)orig_tcphdr + (orig_tcphdr->doff * 4), tcpdata_len);
#if 0
printf("pseudo length: %d\n",pseudoh.length);
printf("tcp hdr length: %d\n",orig_tcphdr->doff*4);
printf("tcp hdr struct length: %d\n",sizeof(struct tcphdr));
printf("tcphdr->doff = %d, tcp opt length: %d\n",orig_tcphdr->doff,tcpopt_len);
printf("tcp total+psuedo length: %d\n",totaltcp_len);
fflush(stdout);
printf("tcp data len: %d, data start %u\n", tcpdata_len,orig_tcphdr + (orig_tcphdr->doff*4));
#endif
return (checksum (tcp, totaltcp_len)) ;
}
static void filter(
unsigned char *packet, unsigned int payload_len)
{
struct iphdr *iphdr;
struct tcphdr *tcphdr;
printf ("in filter function\n");
iphdr = (struct iphdr *)packet;
/* check need some datas */
if (payload_len < sizeof(struct iphdr) + sizeof(struct tcphdr)) {
return;
}
/* check IP version */
if (iphdr->protocol == IPPROTO_TCP)
{
tcphdr = (struct tcphdr *)(((u_int32_t *)packet) + 4 * iphdr->ihl);
if (iphdr->daddr == foreign.s_addr)
{
printf ("packet DEST addr = %s\n",inet_ntoa(foreign));
fprintf (stderr, "changing pkt's DEST addr from FOREIGN to LOCAL\n");
iphdr->daddr = local.s_addr;
tcphdr->check = 0 ; // checksum will be calculated later
iphdr->check = checksum(
(unsigned short *)iphdr,
sizeof(struct iphdr));
tcphdr->check = get_tcp_chksum(
tcphdr,
iphdr);
}
}
}
static int cb(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
struct nfq_data *nfa, void *data)
{
int id = 0;
struct nfqnl_msg_packet_hdr *ph;
struct queued_pckt q_pckt;
u_int32_t mark,ifi;
int ret;
char *payload;
printf("entering callback\n");
ph = nfq_get_msg_packet_hdr(nfa);
if (ph){
id = ntohl(ph->packet_id);
printf("hw_protocol=0x%04x hook=%u id=%u ",
ntohs(ph->hw_protocol), ph->hook, id);
}
mark = nfq_get_nfmark(nfa);
if (mark)
printf("mark=%u ", mark);
ifi = nfq_get_indev(nfa);
if (ifi)
printf("indev=%u ", ifi);
ifi = nfq_get_outdev(nfa);
if (ifi)
printf("outdev=%u ", ifi);
q_pckt.payload_len = nfq_get_payload(nfa, &(q_pckt.payload));
if (q_pckt.payload_len >= 0)
{
printf("payload_len=%d ", q_pckt.payload_len);
fputc('\n', stdout);
filter((unsigned char *)q_pckt.payload, q_pckt.payload_len);
}
printf("setting verdict of packet id %d\n",id);
return nfq_set_verdict(qh, id, NF_ACCEPT, q_pckt.payload_len, q_pckt.payload);
}
int main(int argc, char **argv)
{
struct nfq_handle *h;
struct nfq_q_handle *qh;
struct nfnl_handle *nh;
int fd;
int rv;
unsigned char buf[BUFSIZE];
if (argc == 1)
{
inet_aton("10.102.130.222", &(foreign));
inet_aton("10.102.130.105", &(local));
} else if (argc == 3)
{
inet_aton(argv[1], &(foreign));
inet_aton(argv[2], &(local));
}
else
{
printf("Usage: argv[0] [foreign_addr local_addr]\n");
return 0;
}
printf("opening library handle\n");
h = nfq_open();
if (!h) {
fprintf(stderr, "error during nfq_open()\n");
return 0;
}
printf("unbinding existing nf_queue handler for AF_INET (if any)\n");
if (nfq_unbind_pf(h, AF_INET) < 0) {
fprintf(stderr, "error during nfq_unbind_pf()\n");
exit(1);
}
printf("binding nfnetlink_queue as nf_queue handler for AF_INET\n");
if (nfq_bind_pf(h, AF_INET) < 0) {
fprintf(stderr, "error during nfq_bind_pf()\n");
exit(1);
}
printf("binding this socket to queue '0'\n");
qh = nfq_create_queue(h, 0, &cb, NULL);
if (!qh) {
fprintf(stderr, "error during nfq_create_queue()\n");
exit(1);
}
printf("setting copy_packet mode\n");
if (nfq_set_mode(qh, NFQNL_COPY_PACKET, BUFSIZE) < 0) {
fprintf(stderr, "can't set packet_copy mode\n");
exit(1);
}
nh = nfq_nfnlh(h);
fd = nfnl_fd(nh);
while ((rv = recv(fd, buf, BUFSIZE, 0)) && rv >= 0) {
printf("pkt received\n");
nfq_handle_packet(h, buf, rv);
printf("pkt handled\n");
}
printf("unbinding from queue 0\n");
nfq_destroy_queue(qh);
printf("closing library handle\n");
nfq_close(h);
exit(0);
}
[-- Attachment #3: dump.pcap --]
[-- Type: application/octet-stream, Size: 204 bytes --]
^ permalink raw reply
* [PATCH] Remove pointless casts from void pointers,
From: Jeff Garzik @ 2007-10-26 9:40 UTC (permalink / raw)
To: LKML
Cc: akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b, rmk-lFZ/pmaqli7XmaaqVzeoHQ,
kernel-OLH4Qvv75CYX/NnBR394Jw, tony.luck-ral2JQCrhuEAvxtiuMwx3w,
jwboyer-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8,
benh-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r,
paulus-eUNUBHrolfbYtjvyW6yDsg,
dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w,
netdev-u79uwXL29TY76Z2rM5mHXA, linux-scsi-u79uwXL29TY76Z2rM5mHXA,
linux-serial-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA,
bryan.wu-OyLXuOCK7orQT0dZR+AlfA, adaplas-Re5JQEeQqe8AvxtiuMwx3w
mostly in and around irq handlers.
Signed-off-by: Jeff Garzik <jgarzik-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
arch/arm/mach-pxa/ssp.c | 2 +-
arch/arm/mach-s3c2410/usb-simtec.c | 2 +-
arch/arm/plat-omap/mailbox.c | 2 +-
arch/ia64/sn/pci/pcibr/pcibr_provider.c | 6 +++---
arch/m68k/amiga/cia.c | 2 +-
arch/ppc/8260_io/enet.c | 4 ++--
arch/ppc/8260_io/fcc_enet.c | 4 ++--
arch/ppc/syslib/ppc85xx_rio.c | 6 +++---
drivers/input/touchscreen/h3600_ts_input.c | 4 ++--
drivers/isdn/hardware/eicon/diva.c | 5 ++---
drivers/net/ibmlana.c | 4 ++--
drivers/net/wireless/airo.c | 5 +++--
drivers/net/wireless/hostap/hostap_hw.c | 2 +-
drivers/net/wireless/libertas/if_cs.c | 2 +-
drivers/scsi/aic7xxx_old.c | 2 +-
drivers/scsi/ibmvscsi/ibmvstgt.c | 4 ++--
drivers/serial/cpm_uart/cpm_uart_core.c | 2 +-
drivers/serial/dz.c | 2 +-
drivers/serial/imx.c | 4 ++--
drivers/serial/uartlite.c | 2 +-
drivers/spi/spi_bfin5xx.c | 2 +-
drivers/video/bf54x-lq043fb.c | 3 +--
drivers/video/intelfb/intelfbhw.c | 2 +-
sound/oss/waveartist.c | 2 +-
24 files changed, 37 insertions(+), 38 deletions(-)
diff --git a/arch/arm/mach-pxa/ssp.c b/arch/arm/mach-pxa/ssp.c
index 71766ac..d042cc8 100644
--- a/arch/arm/mach-pxa/ssp.c
+++ b/arch/arm/mach-pxa/ssp.c
@@ -67,7 +67,7 @@ static int use_count[PXA_SSP_PORTS] = {0, 0, 0};
static irqreturn_t ssp_interrupt(int irq, void *dev_id)
{
- struct ssp_dev *dev = (struct ssp_dev*) dev_id;
+ struct ssp_dev *dev = dev_id;
unsigned int status = SSSR_P(dev->port);
SSSR_P(dev->port) = status; /* clear status bits */
diff --git a/arch/arm/mach-s3c2410/usb-simtec.c b/arch/arm/mach-s3c2410/usb-simtec.c
index bcd562a..6aec86a 100644
--- a/arch/arm/mach-s3c2410/usb-simtec.c
+++ b/arch/arm/mach-s3c2410/usb-simtec.c
@@ -60,7 +60,7 @@ usb_simtec_powercontrol(int port, int to)
static irqreturn_t
usb_simtec_ocirq(int irq, void *pw)
{
- struct s3c2410_hcd_info *info = (struct s3c2410_hcd_info *)pw;
+ struct s3c2410_hcd_info *info = pw;
if (s3c2410_gpio_getpin(S3C2410_GPG10) == 0) {
pr_debug("usb_simtec: over-current irq (oc detected)\n");
diff --git a/arch/arm/plat-omap/mailbox.c b/arch/arm/plat-omap/mailbox.c
index 0360b1f..45a77df 100644
--- a/arch/arm/plat-omap/mailbox.c
+++ b/arch/arm/plat-omap/mailbox.c
@@ -212,7 +212,7 @@ static void __mbox_rx_interrupt(struct omap_mbox *mbox)
static irqreturn_t mbox_interrupt(int irq, void *p)
{
- struct omap_mbox *mbox = (struct omap_mbox *)p;
+ struct omap_mbox *mbox = p;
if (is_mbox_irq(mbox, IRQ_TX))
__mbox_tx_interrupt(mbox);
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_provider.c b/arch/ia64/sn/pci/pcibr/pcibr_provider.c
index ab3eaf8..2c676cc 100644
--- a/arch/ia64/sn/pci/pcibr/pcibr_provider.c
+++ b/arch/ia64/sn/pci/pcibr/pcibr_provider.c
@@ -100,11 +100,11 @@ u16 sn_ioboard_to_pci_bus(struct pci_bus *pci_bus)
static irqreturn_t
pcibr_error_intr_handler(int irq, void *arg)
{
- struct pcibus_info *soft = (struct pcibus_info *)arg;
+ struct pcibus_info *soft = arg;
- if (sal_pcibr_error_interrupt(soft) < 0) {
+ if (sal_pcibr_error_interrupt(soft) < 0)
panic("pcibr_error_intr_handler(): Fatal Bridge Error");
- }
+
return IRQ_HANDLED;
}
diff --git a/arch/m68k/amiga/cia.c b/arch/m68k/amiga/cia.c
index c4a4ffd..343fab4 100644
--- a/arch/m68k/amiga/cia.c
+++ b/arch/m68k/amiga/cia.c
@@ -84,7 +84,7 @@ unsigned char cia_able_irq(struct ciabase *base, unsigned char mask)
static irqreturn_t cia_handler(int irq, void *dev_id)
{
- struct ciabase *base = (struct ciabase *)dev_id;
+ struct ciabase *base = dev_id;
int mach_irq;
unsigned char ints;
diff --git a/arch/ppc/8260_io/enet.c b/arch/ppc/8260_io/enet.c
index 615b658..06bb5b7 100644
--- a/arch/ppc/8260_io/enet.c
+++ b/arch/ppc/8260_io/enet.c
@@ -272,7 +272,7 @@ scc_enet_timeout(struct net_device *dev)
* This is called from the CPM handler, not the MPC core interrupt.
*/
static irqreturn_t
-scc_enet_interrupt(int irq, void * dev_id)
+scc_enet_interrupt(int irq, void *dev_id)
{
struct net_device *dev = dev_id;
volatile struct scc_enet_private *cep;
@@ -280,7 +280,7 @@ scc_enet_interrupt(int irq, void * dev_id)
ushort int_events;
int must_restart;
- cep = (struct scc_enet_private *)dev->priv;
+ cep = dev->priv;
/* Get the interrupt events that caused us to be here.
*/
diff --git a/arch/ppc/8260_io/fcc_enet.c b/arch/ppc/8260_io/fcc_enet.c
index 6f3ed6a..a3a27da 100644
--- a/arch/ppc/8260_io/fcc_enet.c
+++ b/arch/ppc/8260_io/fcc_enet.c
@@ -524,7 +524,7 @@ fcc_enet_timeout(struct net_device *dev)
/* The interrupt handler. */
static irqreturn_t
-fcc_enet_interrupt(int irq, void * dev_id)
+fcc_enet_interrupt(int irq, void *dev_id)
{
struct net_device *dev = dev_id;
volatile struct fcc_enet_private *cep;
@@ -532,7 +532,7 @@ fcc_enet_interrupt(int irq, void * dev_id)
ushort int_events;
int must_restart;
- cep = (struct fcc_enet_private *)dev->priv;
+ cep = dev->priv;
/* Get the interrupt events that caused us to be here.
*/
diff --git a/arch/ppc/syslib/ppc85xx_rio.c b/arch/ppc/syslib/ppc85xx_rio.c
index af2425e..4db3110 100644
--- a/arch/ppc/syslib/ppc85xx_rio.c
+++ b/arch/ppc/syslib/ppc85xx_rio.c
@@ -355,7 +355,7 @@ static irqreturn_t
mpc85xx_rio_tx_handler(int irq, void *dev_instance)
{
int osr;
- struct rio_mport *port = (struct rio_mport *)dev_instance;
+ struct rio_mport *port = dev_instance;
osr = in_be32((void *)&msg_regs->osr);
@@ -522,7 +522,7 @@ static irqreturn_t
mpc85xx_rio_rx_handler(int irq, void *dev_instance)
{
int isr;
- struct rio_mport *port = (struct rio_mport *)dev_instance;
+ struct rio_mport *port = dev_instance;
isr = in_be32((void *)&msg_regs->isr);
@@ -740,7 +740,7 @@ static irqreturn_t
mpc85xx_rio_dbell_handler(int irq, void *dev_instance)
{
int dsr;
- struct rio_mport *port = (struct rio_mport *)dev_instance;
+ struct rio_mport *port = dev_instance;
dsr = in_be32((void *)&msg_regs->dsr);
diff --git a/drivers/input/touchscreen/h3600_ts_input.c b/drivers/input/touchscreen/h3600_ts_input.c
index 2ae6c60..28ae15e 100644
--- a/drivers/input/touchscreen/h3600_ts_input.c
+++ b/drivers/input/touchscreen/h3600_ts_input.c
@@ -109,7 +109,7 @@ struct h3600_dev {
static irqreturn_t action_button_handler(int irq, void *dev_id)
{
int down = (GPLR & GPIO_BITSY_ACTION_BUTTON) ? 0 : 1;
- struct input_dev *dev = (struct input_dev *) dev_id;
+ struct input_dev *dev = dev_id;
input_report_key(dev, KEY_ENTER, down);
input_sync(dev);
@@ -120,7 +120,7 @@ static irqreturn_t action_button_handler(int irq, void *dev_id)
static irqreturn_t npower_button_handler(int irq, void *dev_id)
{
int down = (GPLR & GPIO_BITSY_NPOWER_BUTTON) ? 0 : 1;
- struct input_dev *dev = (struct input_dev *) dev_id;
+ struct input_dev *dev = dev_id;
/*
* This interrupt is only called when we release the key. So we have
diff --git a/drivers/isdn/hardware/eicon/diva.c b/drivers/isdn/hardware/eicon/diva.c
index ffa2afa..1403a54 100644
--- a/drivers/isdn/hardware/eicon/diva.c
+++ b/drivers/isdn/hardware/eicon/diva.c
@@ -515,12 +515,11 @@ diva_xdi_read(void *adapter, void *os_handle, void __user *dst,
irqreturn_t diva_os_irq_wrapper(int irq, void *context)
{
- diva_os_xdi_adapter_t *a = (diva_os_xdi_adapter_t *) context;
+ diva_os_xdi_adapter_t *a = context;
diva_xdi_clear_interrupts_proc_t clear_int_proc;
- if (!a || !a->xdi_adapter.diva_isr_handler) {
+ if (!a || !a->xdi_adapter.diva_isr_handler)
return IRQ_NONE;
- }
if ((clear_int_proc = a->clear_interrupts_proc)) {
(*clear_int_proc) (a);
diff --git a/drivers/net/ibmlana.c b/drivers/net/ibmlana.c
index 91d83ac..65626d6 100644
--- a/drivers/net/ibmlana.c
+++ b/drivers/net/ibmlana.c
@@ -704,9 +704,9 @@ static void irqtxerr_handler(struct net_device *dev)
/* general interrupt entry */
-static irqreturn_t irq_handler(int irq, void *device)
+static irqreturn_t irq_handler(int dummy, void *device)
{
- struct net_device *dev = (struct net_device *) device;
+ struct net_device *dev = device;
u16 ival;
/* in case we're not meant... */
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index 074055e..d1febe8 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -3177,8 +3177,9 @@ static int airo_thread(void *data) {
return 0;
}
-static irqreturn_t airo_interrupt ( int irq, void* dev_id) {
- struct net_device *dev = (struct net_device *)dev_id;
+static irqreturn_t airo_interrupt(int irq, void *dev_id)
+{
+ struct net_device *dev = dev_id;
u16 status;
u16 fid;
struct airo_info *apriv = dev->priv;
diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c
index c592641..286b46c 100644
--- a/drivers/net/wireless/hostap/hostap_hw.c
+++ b/drivers/net/wireless/hostap/hostap_hw.c
@@ -2624,7 +2624,7 @@ static void prism2_check_magic(local_info_t *local)
/* Called only from hardware IRQ */
static irqreturn_t prism2_interrupt(int irq, void *dev_id)
{
- struct net_device *dev = (struct net_device *) dev_id;
+ struct net_device *dev = dev_id;
struct hostap_interface *iface;
local_info_t *local;
int events = 0;
diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c
index 0360cad..f9879d4 100644
--- a/drivers/net/wireless/libertas/if_cs.c
+++ b/drivers/net/wireless/libertas/if_cs.c
@@ -242,7 +242,7 @@ static inline void if_cs_disable_ints(struct if_cs_card *card)
static irqreturn_t if_cs_interrupt(int irq, void *data)
{
- struct if_cs_card *card = (struct if_cs_card *)data;
+ struct if_cs_card *card = data;
u16 int_cause;
lbs_deb_enter(LBS_DEB_CS);
diff --git a/drivers/scsi/aic7xxx_old.c b/drivers/scsi/aic7xxx_old.c
index 8f8db5f..5e32cbc 100644
--- a/drivers/scsi/aic7xxx_old.c
+++ b/drivers/scsi/aic7xxx_old.c
@@ -6472,7 +6472,7 @@ do_aic7xxx_isr(int irq, void *dev_id)
unsigned long cpu_flags;
struct aic7xxx_host *p;
- p = (struct aic7xxx_host *)dev_id;
+ p = dev_id;
if(!p)
return IRQ_NONE;
spin_lock_irqsave(p->host->host_lock, cpu_flags);
diff --git a/drivers/scsi/ibmvscsi/ibmvstgt.c b/drivers/scsi/ibmvscsi/ibmvstgt.c
index 82bcab6..9070ae1 100644
--- a/drivers/scsi/ibmvscsi/ibmvstgt.c
+++ b/drivers/scsi/ibmvscsi/ibmvstgt.c
@@ -539,9 +539,9 @@ out:
srp_iu_put(iue);
}
-static irqreturn_t ibmvstgt_interrupt(int irq, void *data)
+static irqreturn_t ibmvstgt_interrupt(int dummy, void *data)
{
- struct srp_target *target = (struct srp_target *) data;
+ struct srp_target *target = data;
struct vio_port *vport = target_to_port(target);
vio_disable_interrupts(vport->dma_dev);
diff --git a/drivers/serial/cpm_uart/cpm_uart_core.c b/drivers/serial/cpm_uart/cpm_uart_core.c
index b5e4478..236af9d 100644
--- a/drivers/serial/cpm_uart/cpm_uart_core.c
+++ b/drivers/serial/cpm_uart/cpm_uart_core.c
@@ -380,7 +380,7 @@ static void cpm_uart_int_rx(struct uart_port *port)
static irqreturn_t cpm_uart_int(int irq, void *data)
{
u8 events;
- struct uart_port *port = (struct uart_port *)data;
+ struct uart_port *port = data;
struct uart_cpm_port *pinfo = (struct uart_cpm_port *)port;
smc_t __iomem *smcp = pinfo->smcp;
scc_t __iomem *sccp = pinfo->sccp;
diff --git a/drivers/serial/dz.c b/drivers/serial/dz.c
index d31721f..bbae5a2 100644
--- a/drivers/serial/dz.c
+++ b/drivers/serial/dz.c
@@ -324,7 +324,7 @@ static inline void check_modem_status(struct dz_port *dport)
*/
static irqreturn_t dz_interrupt(int irq, void *dev)
{
- struct dz_port *dport = (struct dz_port *)dev;
+ struct dz_port *dport = dev;
unsigned short status;
/* get the reason why we just got an irq */
diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c
index dc19671..56af1f5 100644
--- a/drivers/serial/imx.c
+++ b/drivers/serial/imx.c
@@ -308,7 +308,7 @@ static void imx_start_tx(struct uart_port *port)
static irqreturn_t imx_rtsint(int irq, void *dev_id)
{
- struct imx_port *sport = (struct imx_port *)dev_id;
+ struct imx_port *sport = dev_id;
unsigned int val = readl(sport->port.membase + USR1) & USR1_RTSS;
unsigned long flags;
@@ -324,7 +324,7 @@ static irqreturn_t imx_rtsint(int irq, void *dev_id)
static irqreturn_t imx_txint(int irq, void *dev_id)
{
- struct imx_port *sport = (struct imx_port *)dev_id;
+ struct imx_port *sport = dev_id;
struct circ_buf *xmit = &sport->port.info->xmit;
unsigned long flags;
diff --git a/drivers/serial/uartlite.c b/drivers/serial/uartlite.c
index dfef83f..3a970ed 100644
--- a/drivers/serial/uartlite.c
+++ b/drivers/serial/uartlite.c
@@ -142,7 +142,7 @@ static int ulite_transmit(struct uart_port *port, int stat)
static irqreturn_t ulite_isr(int irq, void *dev_id)
{
- struct uart_port *port = (struct uart_port *)dev_id;
+ struct uart_port *port = dev_id;
int busy;
do {
diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
index 2ef11bb..06fd859 100644
--- a/drivers/spi/spi_bfin5xx.c
+++ b/drivers/spi/spi_bfin5xx.c
@@ -575,7 +575,7 @@ static void giveback(struct driver_data *drv_data)
static irqreturn_t dma_irq_handler(int irq, void *dev_id)
{
- struct driver_data *drv_data = (struct driver_data *)dev_id;
+ struct driver_data *drv_data = dev_id;
struct spi_message *msg = drv_data->cur_msg;
dev_dbg(&drv_data->pdev->dev, "in dma_irq_handler\n");
diff --git a/drivers/video/bf54x-lq043fb.c b/drivers/video/bf54x-lq043fb.c
index 74d11c3..ac1402c 100644
--- a/drivers/video/bf54x-lq043fb.c
+++ b/drivers/video/bf54x-lq043fb.c
@@ -498,8 +498,7 @@ static struct lcd_device *lcd_dev;
static irqreturn_t bfin_bf54x_irq_error(int irq, void *dev_id)
{
-
- /*struct bfin_bf54xfb_info *info = (struct bfin_bf54xfb_info *)dev_id;*/
+ /*struct bfin_bf54xfb_info *info = dev_id;*/
u16 status = bfin_read_EPPI0_STATUS();
diff --git a/drivers/video/intelfb/intelfbhw.c b/drivers/video/intelfb/intelfbhw.c
index 5f6fb7d..fa1fff5 100644
--- a/drivers/video/intelfb/intelfbhw.c
+++ b/drivers/video/intelfb/intelfbhw.c
@@ -1971,7 +1971,7 @@ void intelfbhw_cursor_reset(struct intelfb_info *dinfo)
static irqreturn_t intelfbhw_irq(int irq, void *dev_id)
{
u16 tmp;
- struct intelfb_info *dinfo = (struct intelfb_info *)dev_id;
+ struct intelfb_info *dinfo = dev_id;
spin_lock(&dinfo->int_lock);
diff --git a/sound/oss/waveartist.c b/sound/oss/waveartist.c
index b48c729..8849041 100644
--- a/sound/oss/waveartist.c
+++ b/sound/oss/waveartist.c
@@ -835,7 +835,7 @@ static struct audio_driver waveartist_audio_driver = {
static irqreturn_t
waveartist_intr(int irq, void *dev_id)
{
- wavnc_info *devc = (wavnc_info *)dev_id;
+ wavnc_info *devc = dev_id;
int irqstatus, status;
spin_lock(&waveartist_lock);
--
1.5.2.4
^ permalink raw reply related
* [PATCH] Remove always-true tests in irq handlers
From: Jeff Garzik @ 2007-10-26 9:40 UTC (permalink / raw)
To: LKML; +Cc: akpm, tony.luck, linux-ia64, netdev, ralf
In-Reply-To: <9799624f63e093aa915947aea8fb1b8a5df959a1.1193390973.git.jeff@garzik.org>
In these drivers, dev_id is always non-NULL.
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
---
arch/ia64/hp/sim/simeth.c | 5 -----
arch/mips/pmc-sierra/msp71xx/msp_hwbutton.c | 5 +----
drivers/net/cpmac.c | 3 ---
drivers/net/ucc_geth.c | 3 ---
drivers/net/wan/farsync.c | 11 +++--------
5 files changed, 4 insertions(+), 23 deletions(-)
diff --git a/arch/ia64/hp/sim/simeth.c b/arch/ia64/hp/sim/simeth.c
index 08b117e..9898feb 100644
--- a/arch/ia64/hp/sim/simeth.c
+++ b/arch/ia64/hp/sim/simeth.c
@@ -497,11 +497,6 @@ simeth_interrupt(int irq, void *dev_id)
{
struct net_device *dev = dev_id;
- if ( dev == NULL ) {
- printk(KERN_WARNING "simeth: irq %d for unknown device\n", irq);
- return IRQ_NONE;
- }
-
/*
* very simple loop because we get interrupts only when receiving
*/
diff --git a/arch/mips/pmc-sierra/msp71xx/msp_hwbutton.c b/arch/mips/pmc-sierra/msp71xx/msp_hwbutton.c
index ab96a2d..11769b5 100644
--- a/arch/mips/pmc-sierra/msp71xx/msp_hwbutton.c
+++ b/arch/mips/pmc-sierra/msp71xx/msp_hwbutton.c
@@ -126,9 +126,6 @@ static irqreturn_t hwbutton_handler(int irq, void *data)
struct hwbutton_interrupt *hirq = data;
unsigned long cic_ext = *CIC_EXT_CFG_REG;
- if (irq != hirq->irq)
- return IRQ_NONE;
-
if (CIC_EXT_IS_ACTIVE_HI(cic_ext, hirq->eirq)) {
/* Interrupt: pin is now HI */
CIC_EXT_SET_ACTIVE_LO(cic_ext, hirq->eirq);
@@ -164,7 +161,7 @@ static int msp_hwbutton_register(struct hwbutton_interrupt *hirq)
*CIC_EXT_CFG_REG = cic_ext;
return request_irq(hirq->irq, hwbutton_handler, IRQF_DISABLED,
- hirq->name, (void *)hirq);
+ hirq->name, hirq);
}
static int __init msp_hwbutton_setup(void)
diff --git a/drivers/net/cpmac.c b/drivers/net/cpmac.c
index 6fd95a2..91d1596 100644
--- a/drivers/net/cpmac.c
+++ b/drivers/net/cpmac.c
@@ -661,9 +661,6 @@ static irqreturn_t cpmac_irq(int irq, void *dev_id)
int queue;
u32 status;
- if (!dev)
- return IRQ_NONE;
-
priv = netdev_priv(dev);
status = cpmac_read(priv->regs, CPMAC_MAC_INT_VECTOR);
diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c
index 9741d61..2243d34 100644
--- a/drivers/net/ucc_geth.c
+++ b/drivers/net/ucc_geth.c
@@ -3621,9 +3621,6 @@ static irqreturn_t ucc_geth_irq_handler(int irq, void *info)
ugeth_vdbg("%s: IN", __FUNCTION__);
- if (!ugeth)
- return IRQ_NONE;
-
uccf = ugeth->uccf;
ug_info = ugeth->ug_info;
diff --git a/drivers/net/wan/farsync.c b/drivers/net/wan/farsync.c
index 12dae8e..cf27bf4 100644
--- a/drivers/net/wan/farsync.c
+++ b/drivers/net/wan/farsync.c
@@ -1498,9 +1498,9 @@ do_bottom_half_rx(struct fst_card_info *card)
* Dev_id is our fst_card_info pointer
*/
static irqreturn_t
-fst_intr(int irq, void *dev_id)
+fst_intr(int dummy, void *dev_id)
{
- struct fst_card_info *card;
+ struct fst_card_info *card = dev_id;
struct fst_port_info *port;
int rdidx; /* Event buffer indices */
int wridx;
@@ -1509,17 +1509,12 @@ fst_intr(int irq, void *dev_id)
unsigned int do_card_interrupt;
unsigned int int_retry_count;
- if ((card = dev_id) == NULL) {
- dbg(DBG_INTR, "intr: spurious %d\n", irq);
- return IRQ_NONE;
- }
-
/*
* Check to see if the interrupt was for this card
* return if not
* Note that the call to clear the interrupt is important
*/
- dbg(DBG_INTR, "intr: %d %p\n", irq, card);
+ dbg(DBG_INTR, "intr: %d %p\n", card->irq, card);
if (card->state != FST_RUNNING) {
printk_err
("Interrupt received for card %d in a non running state (%d)\n",
--
1.5.2.4
^ permalink raw reply related
* [PATCH] drivers/net/irda/au1k_ir: fix obvious irq handler bugs
From: Jeff Garzik @ 2007-10-26 9:40 UTC (permalink / raw)
To: LKML; +Cc: akpm, samuel, netdev
In-Reply-To: <9799624f63e093aa915947aea8fb1b8a5df959a1.1193390973.git.jeff@garzik.org>
interrupt handlers return a return value these days.
Also, kill always-true test and unneeded void* cast.
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
---
drivers/net/irda/au1k_ir.c | 11 ++++-------
1 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/drivers/net/irda/au1k_ir.c b/drivers/net/irda/au1k_ir.c
index 4dbdfaa..a1e4508 100644
--- a/drivers/net/irda/au1k_ir.c
+++ b/drivers/net/irda/au1k_ir.c
@@ -627,19 +627,16 @@ static int au1k_irda_rx(struct net_device *dev)
}
-void au1k_irda_interrupt(int irq, void *dev_id)
+static irqreturn_t au1k_irda_interrupt(int dummy, void *dev_id)
{
- struct net_device *dev = (struct net_device *) dev_id;
-
- if (dev == NULL) {
- printk(KERN_ERR "%s: isr: null dev ptr\n", dev->name);
- return;
- }
+ struct net_device *dev = dev_id;
writel(0, IR_INT_CLEAR); /* ack irda interrupts */
au1k_irda_rx(dev);
au1k_tx_ack(dev);
+
+ return IRQ_HANDLED;
}
--
1.5.2.4
^ permalink raw reply related
* [PATCH] NETDRVR, USB: declance, lp486e, s3c2410_udc: minor irq handler cleanups
From: Jeff Garzik @ 2007-10-26 9:40 UTC (permalink / raw)
To: LKML; +Cc: akpm, netdev, dbrownell
In-Reply-To: <9799624f63e093aa915947aea8fb1b8a5df959a1.1193390973.git.jeff@garzik.org>
declance:
- irq handlers do not take 'const int' as first arg
- add KERN_ prefix
lp486e:
- neaten irq handler top of function formatting
- remove pointless void* casts
s3c2410_udc:
- 'irq' argument is merely used in place of a constant;
replace its usage with that constant.
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
---
drivers/net/declance.c | 6 +++---
drivers/net/lp486e.c | 9 ++++-----
drivers/usb/gadget/s3c2410_udc.c | 4 ++--
3 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/drivers/net/declance.c b/drivers/net/declance.c
index 00e0194..6b1e77c 100644
--- a/drivers/net/declance.c
+++ b/drivers/net/declance.c
@@ -719,15 +719,15 @@ out:
spin_unlock(&lp->lock);
}
-static irqreturn_t lance_dma_merr_int(const int irq, void *dev_id)
+static irqreturn_t lance_dma_merr_int(int irq, void *dev_id)
{
struct net_device *dev = dev_id;
- printk("%s: DMA error\n", dev->name);
+ printk(KERN_ERR "%s: DMA error\n", dev->name);
return IRQ_HANDLED;
}
-static irqreturn_t lance_interrupt(const int irq, void *dev_id)
+static irqreturn_t lance_interrupt(int irq, void *dev_id)
{
struct net_device *dev = dev_id;
struct lance_private *lp = netdev_priv(dev);
diff --git a/drivers/net/lp486e.c b/drivers/net/lp486e.c
index c5095ec..0eff1a0 100644
--- a/drivers/net/lp486e.c
+++ b/drivers/net/lp486e.c
@@ -1144,14 +1144,13 @@ i596_handle_CU_completion(struct net_device *dev,
}
static irqreturn_t
-i596_interrupt (int irq, void *dev_instance) {
- struct net_device *dev = (struct net_device *) dev_instance;
- struct i596_private *lp;
+i596_interrupt (int irq, void *dev_instance)
+{
+ struct net_device *dev = dev_instance;
+ struct i596_private *lp = dev->priv;
unsigned short status, ack_cmd = 0;
int frames_in = 0;
- lp = (struct i596_private *) dev->priv;
-
/*
* The 82596 examines the command, performs the required action,
* and then clears the SCB command word.
diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c
index e3e90f8..1b07bc9 100644
--- a/drivers/usb/gadget/s3c2410_udc.c
+++ b/drivers/usb/gadget/s3c2410_udc.c
@@ -893,7 +893,7 @@ static void s3c2410_udc_handle_ep(struct s3c2410_ep *ep)
/*
* s3c2410_udc_irq - interrupt handler
*/
-static irqreturn_t s3c2410_udc_irq(int irq, void *_dev)
+static irqreturn_t s3c2410_udc_irq(int dummy, void *_dev)
{
struct s3c2410_udc *dev = _dev;
int usb_status;
@@ -1016,7 +1016,7 @@ static irqreturn_t s3c2410_udc_irq(int irq, void *_dev)
}
}
- dprintk(DEBUG_VERBOSE, "irq: %d s3c2410_udc_done.\n", irq);
+ dprintk(DEBUG_VERBOSE, "irq: %d s3c2410_udc_done.\n", IRQ_USBD);
/* Restore old index */
udc_write(idx, S3C2410_UDC_INDEX_REG);
--
1.5.2.4
^ permalink raw reply related
* Re: [PATCH 1/3] [NET_CLS_ACT] Introduce skb_act_clone
From: David Miller @ 2007-10-26 9:52 UTC (permalink / raw)
To: hadi; +Cc: kuznet, herbert, kaber, netdev
In-Reply-To: <1192994326.4422.16.camel@localhost>
From: jamal <hadi@cyberus.ca>
Date: Sun, 21 Oct 2007 15:18:46 -0400
> A resubmit against net-2.6 from about an hour ago.
Applied.
^ permalink raw reply
* Re: [PATCH 2/3] [NET_CLS_ACT] Use skb_act_clone
From: David Miller @ 2007-10-26 9:52 UTC (permalink / raw)
To: hadi; +Cc: kuznet, herbert, kaber, netdev
In-Reply-To: <1192994420.4422.19.camel@localhost>
From: jamal <hadi@cyberus.ca>
Date: Sun, 21 Oct 2007 15:20:20 -0400
> A resubmit against net-2.6 from about an hour ago.
Applied.
^ permalink raw reply
* Re: [PATCH 3/3] [NET_DOC] Document some simple rules for actions
From: David Miller @ 2007-10-26 9:52 UTC (permalink / raw)
To: hadi; +Cc: kuznet, herbert, kaber, netdev
In-Reply-To: <1192994537.4422.22.camel@localhost>
From: jamal <hadi@cyberus.ca>
Date: Sun, 21 Oct 2007 15:22:17 -0400
> Against net-2.6
Applied.
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox