All of lore.kernel.org
 help / color / mirror / Atom feed
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,


  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.