From: Jason Andryuk <jandryuk@gmail.com>
To: reinette chatre <reinette.chatre@intel.com>
Cc: Samuel Ortiz <samuel@sortiz.org>,
Tomas Winkler <tomasw@gmail.com>,
"linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>
Subject: Re: kernel BUG at drivers/net/wireless/iwlwifi/iwl3945-base.c:3127!
Date: Thu, 05 Mar 2009 23:12:14 -0500 [thread overview]
Message-ID: <1236312734.19328.37.camel@rainbow> (raw)
In-Reply-To: <1236299085.6612.229.camel@rc-desk>
On Thu, 2009-03-05 at 16:24 -0800, reinette chatre wrote:
> On Thu, 2009-03-05 at 15:50 -0800, Jason Andryuk wrote:
> > On Wed, 2009-03-04 at 16:04 -0800, reinette chatre wrote:
> > > On Wed, 2009-03-04 at 11:47 -0800, Jason Andryuk wrote:
> > > > On Wed, Mar 4, 2009 at 2:19 PM, reinette chatre
> > > > <reinette.chatre@intel.com> wrote:
> > > > > On Tue, 2009-03-03 at 20:32 -0800, Jason Andryuk wrote:
> > > > >> On Sun, Mar 1, 2009 at 10:37 PM, Jason Andryuk <jandryuk@gmail.com> wrote:
> > > > >> > I tested c2a0aa3cb733452e749727680e380dca6cc10a68 "iwl3945: use
> > > > >> > iwl_rb_status" with the additional patches to initialize rb_stts
> > > > >> > (copied from iwl_rx_queue_alloc) and to convert the BUG_ON to a
> > > > >> > WARN_ON.
> > > > >> >
> > > > >> > The driver runs without segfaulting. So far the WARN_ON has not been
> > > > >> > triggered, but the driver fails to finish authentication with the AP.
> > > > >> > I receive "wlan0: authentication with AP 00:30:bd:c0:90:24 timed out"
> > > > >>
> > > > >> Ok, I started poking around with manually checking interesting commits instead of git bisect.
> > > > >>
> > > > >> 55b3e21... iwl3945: use iwl-io.h and delete iwl-3945-io.h with BUG->WARN patch works.
> > > > >>
> > > > >> bb64785... iwlwifi: use iwl_cmd instead of iwl3945_cmd
> > > > >> fails to authenticate to the AP. It generates a Microcode SW Error attached below.
> > > > >>
> > > > >> The previous revision:
> > > > >> a0dedce... iwlwifi: replace IWL_ERROR with IWL_ERR
> > > > >> Authenticates to the AP and works just fine.
> > > > >>
> > > > >> I keep looking over commitdiff bb64785... but I cannot see what is causing problems. I even tried modifying iwl3945_cmd in various ways from a0dedce... but those attempts kept working.
> > > > >>
> > > > >> During testing, I saw a lot of UNKNOWN 0x1b
> > > > >> [ 8892.625374] ieee80211 phy0: I iwl3945_rx_handle r = 162, i = 160, UNKNOWN, 0x1b
> > > > >> Currently in the logs for commit a0dedce... it shows up as REPLY_3945_RX.
> > > > >>
> > > > >> Any ideas?
> > > > >
> > > > > Thank you very much for this digging.
> > > > >
> > > > > Are you running on 64bit?
> > > >
> > > > Yes, 64bit.
> > >
> > > could you please try this patch on top of latest wireless-testing?
> > >
> > > Thanks
> > >
> > > Reinette
> > >
> > >
> > > diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
> > > index 0a75053..00b25a8 100644
> > > --- a/drivers/net/wireless/iwlwifi/iwl-3945.c
> > > +++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
> > > @@ -743,6 +743,7 @@ void iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
> > > struct iwl3945_tfd *tfd_tmp = (struct iwl3945_tfd *)txq->tfds;
> > > struct iwl3945_tfd *tfd = &tfd_tmp[txq->q.read_ptr];
> > > struct pci_dev *dev = priv->pci_dev;
> > > + int index = txq->q.read_ptr;
> > > int i;
> > > int counter;
> > >
> > > @@ -759,6 +760,13 @@ void iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
> > > return;
> > > }
> > >
> > > + /* Unmap tx_cmd */
> > > + if (counter)
> > > + pci_unmap_single(dev,
> > > + pci_unmap_addr(&txq->cmd[index]->meta, mapping),
> > > + pci_unmap_len(&txq->cmd[index]->meta, len),
> > > + PCI_DMA_TODEVICE);
> > > +
> > > /* unmap chunks if any */
> > >
> > > for (i = 1; i < counter; i++) {
> >
> > Reinette,
> >
> > I applied the patch, but iwl3945 did not authenticate with my AP
> >
>
> oh no.
>
> I will install a 64bit system here to try and reproduce this ...
>
> Reinette
I created the patch below, made of the iwl_host_cmd and iwl_meta_cmd
portions of commit "bb64785... iwlwifi: use iwl_cmd instead of
iwl3945_cmd". Applied to "a0dedce... iwlwifi: replace IWL_ERROR with
IWL_ERR", I am able to connect and transfer data successfully. There
are three warning during compilation (type mismatch with
cmd.meta.u.callback).
So something with the remainder of the iwl_cmd conversion is wrong. Are
there alignment restrictions for the ucode?
Thanks for looking into this.
Jason
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-led.c b/drivers/net/wireless/iwlwifi/iwl-3945-led.c
index 958e705..0cdfea7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945-led.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945-led.c
@@ -83,7 +83,7 @@ static inline int iwl3945_brightness_to_idx(enum led_brightness brightness)
static int iwl_send_led_cmd(struct iwl_priv *priv,
struct iwl_led_cmd *led_cmd)
{
- struct iwl3945_host_cmd cmd = {
+ struct iwl_host_cmd cmd = {
.id = REPLY_LEDS_CMD,
.len = sizeof(struct iwl_led_cmd),
.data = led_cmd,
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h
index 63bf832..9aeee87 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.h
@@ -147,23 +147,8 @@ struct iwl3945_frame {
#define SN_TO_SEQ(ssn) (((ssn) << 4) & IEEE80211_SCTL_SEQ)
#define MAX_SN ((IEEE80211_SCTL_SEQ) >> 4)
-struct iwl3945_cmd;
struct iwl_priv;
-struct iwl3945_cmd_meta {
- struct iwl3945_cmd_meta *source;
- union {
- struct sk_buff *skb;
- int (*callback)(struct iwl_priv *priv,
- struct iwl3945_cmd *cmd, struct sk_buff *skb);
- } __attribute__ ((packed)) u;
-
- /* The CMD_SIZE_HUGE flag bit indicates that the command
- * structure is stored at the end of the shared queue memory. */
- u32 flags;
-
-} __attribute__ ((packed));
-
/**
* struct iwl3945_cmd
*
@@ -172,7 +157,7 @@ struct iwl3945_cmd_meta {
* (which is relatively huge; space is allocated separately).
*/
struct iwl3945_cmd {
- struct iwl3945_cmd_meta meta;
+ struct iwl_cmd_meta meta;
struct iwl_cmd_header hdr;
union {
struct iwl3945_addsta_cmd addsta;
@@ -193,15 +178,8 @@ struct iwl3945_cmd {
} __attribute__ ((packed)) cmd;
} __attribute__ ((packed));
-struct iwl3945_host_cmd {
- u8 id;
- u16 len;
- struct iwl3945_cmd_meta meta;
- const void *data;
-};
-
#define TFD39_MAX_PAYLOAD_SIZE (sizeof(struct iwl3945_cmd) - \
- sizeof(struct iwl3945_cmd_meta))
+ sizeof(struct iwl_cmd_meta))
/*
* RX related structures and functions
@@ -288,7 +266,7 @@ extern void iwl3945_tx_queue_free(struct iwl_priv *priv, struct iwl3945_tx_queue
extern int iwl3945_send_cmd_pdu(struct iwl_priv *priv, u8 id, u16 len,
const void *data);
extern int __must_check iwl3945_send_cmd(struct iwl_priv *priv,
- struct iwl3945_host_cmd *cmd);
+ struct iwl_host_cmd *cmd);
extern unsigned int iwl3945_fill_beacon_frame(struct iwl_priv *priv,
struct ieee80211_hdr *hdr,int left);
extern int iwl3945_rx_queue_update_write_ptr(struct iwl_priv *priv,
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index d84c4ce..7b216e0 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -501,7 +501,7 @@ static inline int iwl3945_is_ready_rf(struct iwl_priv *priv)
* failed. On success, it turns the index (> 0) of command in the
* command queue.
*/
-static int iwl3945_enqueue_hcmd(struct iwl_priv *priv, struct iwl3945_host_cmd *cmd)
+static int iwl3945_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
{
struct iwl3945_tx_queue *txq = &priv->txq39[IWL_CMD_QUEUE_NUM];
struct iwl_queue *q = &txq->q;
@@ -580,7 +580,7 @@ static int iwl3945_enqueue_hcmd(struct iwl_priv *priv, struct iwl3945_host_cmd *
return ret ? ret : idx;
}
-static int iwl3945_send_cmd_async(struct iwl_priv *priv, struct iwl3945_host_cmd *cmd)
+static int iwl3945_send_cmd_async(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
{
int ret;
@@ -605,7 +605,7 @@ static int iwl3945_send_cmd_async(struct iwl_priv *priv, struct iwl3945_host_cmd
return 0;
}
-static int iwl3945_send_cmd_sync(struct iwl_priv *priv, struct iwl3945_host_cmd *cmd)
+static int iwl3945_send_cmd_sync(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
{
int cmd_idx;
int ret;
@@ -695,7 +695,7 @@ out:
return ret;
}
-int iwl3945_send_cmd(struct iwl_priv *priv, struct iwl3945_host_cmd *cmd)
+int iwl3945_send_cmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
{
if (cmd->meta.flags & CMD_ASYNC)
return iwl3945_send_cmd_async(priv, cmd);
@@ -705,7 +705,7 @@ int iwl3945_send_cmd(struct iwl_priv *priv, struct iwl3945_host_cmd *cmd)
int iwl3945_send_cmd_pdu(struct iwl_priv *priv, u8 id, u16 len, const void *data)
{
- struct iwl3945_host_cmd cmd = {
+ struct iwl_host_cmd cmd = {
.id = id,
.len = len,
.data = data,
@@ -716,7 +716,7 @@ int iwl3945_send_cmd_pdu(struct iwl_priv *priv, u8 id, u16 len, const void *data
static int __must_check iwl3945_send_cmd_u32(struct iwl_priv *priv, u8 id, u32 val)
{
- struct iwl3945_host_cmd cmd = {
+ struct iwl_host_cmd cmd = {
.id = id,
.len = sizeof(val),
.data = &val,
@@ -895,7 +895,7 @@ static int iwl3945_send_rxon_assoc(struct iwl_priv *priv)
int rc = 0;
struct iwl_rx_packet *res = NULL;
struct iwl3945_rxon_assoc_cmd rxon_assoc;
- struct iwl3945_host_cmd cmd = {
+ struct iwl_host_cmd cmd = {
.id = REPLY_RXON_ASSOC,
.len = sizeof(rxon_assoc),
.meta.flags = CMD_WANT_SKB,
@@ -1079,7 +1079,7 @@ static int iwl3945_send_scan_abort(struct iwl_priv *priv)
{
int rc = 0;
struct iwl_rx_packet *res;
- struct iwl3945_host_cmd cmd = {
+ struct iwl_host_cmd cmd = {
.id = REPLY_SCAN_ABORT_CMD,
.meta.flags = CMD_WANT_SKB,
};
@@ -1135,7 +1135,7 @@ static int iwl3945_card_state_sync_callback(struct iwl_priv *priv,
*/
static int iwl3945_send_card_state(struct iwl_priv *priv, u32 flags, u8 meta_flag)
{
- struct iwl3945_host_cmd cmd = {
+ struct iwl_host_cmd cmd = {
.id = REPLY_CARD_STATE_CMD,
.len = sizeof(u32),
.data = &flags,
@@ -1181,7 +1181,7 @@ int iwl3945_send_add_station(struct iwl_priv *priv,
{
struct iwl_rx_packet *res = NULL;
int rc = 0;
- struct iwl3945_host_cmd cmd = {
+ struct iwl_host_cmd cmd = {
.id = REPLY_ADD_STA,
.len = sizeof(struct iwl3945_addsta_cmd),
.meta.flags = flags,
@@ -2799,7 +2799,7 @@ static int iwl3945_get_measurement(struct iwl_priv *priv,
{
struct iwl_spectrum_cmd spectrum;
struct iwl_rx_packet *res;
- struct iwl3945_host_cmd cmd = {
+ struct iwl_host_cmd cmd = {
.id = REPLY_SPECTRUM_MEASUREMENT_CMD,
.data = (void *)&spectrum,
.meta.flags = CMD_WANT_SKB,
@@ -5984,7 +5984,7 @@ static void iwl3945_bg_request_scan(struct work_struct *data)
{
struct iwl_priv *priv =
container_of(data, struct iwl_priv, request_scan);
- struct iwl3945_host_cmd cmd = {
+ struct iwl_host_cmd cmd = {
.id = REPLY_SCAN_CMD,
.len = sizeof(struct iwl3945_scan_cmd),
.meta.flags = CMD_SIZE_HUGE,
next prev parent reply other threads:[~2009-03-06 4:12 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-18 0:06 kernel BUG at drivers/net/wireless/iwlwifi/iwl3945-base.c:3127! Deuce
2009-01-18 17:41 ` Deuce
2009-01-26 11:44 ` Samuel Ortiz
2009-01-27 3:13 ` Jason Andryuk
2009-01-27 3:35 ` Jason Andryuk
2009-01-27 16:24 ` Samuel Ortiz
2009-01-27 23:31 ` Jason Andryuk
2009-01-28 7:12 ` Tomas Winkler
2009-01-28 11:37 ` Samuel Ortiz
2009-01-28 11:52 ` Tomas Winkler
2009-01-28 12:12 ` Samuel Ortiz
2009-02-20 4:17 ` Jason Andryuk
2009-02-20 19:49 ` reinette chatre
2009-02-23 0:10 ` Jason Andryuk
2009-02-23 4:37 ` Jason Andryuk
2009-02-23 19:21 ` reinette chatre
2009-02-23 22:28 ` reinette chatre
2009-02-24 3:02 ` Jason Andryuk
2009-02-24 0:15 ` reinette chatre
2009-02-24 2:47 ` Jason Andryuk
2009-03-02 3:37 ` Jason Andryuk
2009-03-04 4:32 ` Jason Andryuk
2009-03-04 19:19 ` reinette chatre
2009-03-04 19:47 ` Jason Andryuk
2009-03-05 0:04 ` reinette chatre
2009-03-05 23:50 ` Jason Andryuk
2009-03-06 0:24 ` reinette chatre
2009-03-06 4:12 ` Jason Andryuk [this message]
2009-03-06 5:39 ` reinette chatre
2009-03-10 1:40 ` Jason Andryuk
2009-03-10 3:32 ` Jason Andryuk
2009-03-10 5:04 ` reinette chatre
2009-03-10 13:10 ` Jason Andryuk
2009-03-10 18:22 ` Abhijeet Kolekar
2009-03-11 3:11 ` Jason Andryuk
2009-03-11 2:57 ` Jason Andryuk
2009-03-11 3:40 ` Jason Andryuk
2009-03-13 3:31 ` Jason Andryuk
2009-03-16 12:10 ` Jason Andryuk
2009-03-17 1:44 ` Jason Andryuk
2009-03-19 1:52 ` Jason Andryuk
2009-03-20 1:22 ` Jason Andryuk
2009-03-20 20:39 ` Abhijeet Kolekar
2009-03-22 17:29 ` Jason Andryuk
2009-03-23 0:37 ` Jason Andryuk
2009-03-27 16:28 ` reinette chatre
2009-03-31 22:22 ` reinette chatre
2009-04-01 1:28 ` Jason Andryuk
2009-04-21 1:41 ` Jason Andryuk
2009-04-21 15:42 ` reinette chatre
-- strict thread matches above, loose matches on Subject: below --
2009-01-09 3:28 Deuce
2009-01-09 19:12 ` reinette chatre
2009-01-09 23:07 ` Deuce
2009-01-12 18:38 ` Samuel Ortiz
2009-01-13 3:12 ` Deuce
2009-01-13 4:37 ` Deuce
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1236312734.19328.37.camel@rainbow \
--to=jandryuk@gmail.com \
--cc=linux-wireless@vger.kernel.org \
--cc=reinette.chatre@intel.com \
--cc=samuel@sortiz.org \
--cc=tomasw@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).