netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv2 net-next 1/4] caif-hsi: Remove wake line modification when flushing FIFO
@ 2011-12-06 22:15 Sjur Brændeland
  2011-12-06 22:15 ` [PATCHv2 net-next 2/4] caif: Bad assert triggering false positive Sjur Brændeland
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Sjur Brændeland @ 2011-12-06 22:15 UTC (permalink / raw)
  To: netdev, David Miller; +Cc: Christian Auby, Sjur Brændeland

From: Christian Auby <christian.auby@stericsson.com>

Raising wake before flushing FIFO and lowering it after caused a
spike on AC wake that were sometimes detected and acted upon by the
modem. Fixed this by remove wake line modification when flushing FIFO.

Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
---
 drivers/net/caif/caif_hsi.c |   11 -----------
 1 files changed, 0 insertions(+), 11 deletions(-)

diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c
index 0733525..a85b29e 100644
--- a/drivers/net/caif/caif_hsi.c
+++ b/drivers/net/caif/caif_hsi.c
@@ -117,15 +117,6 @@ static int cfhsi_flush_fifo(struct cfhsi *cfhsi)
 	dev_dbg(&cfhsi->ndev->dev, "%s.\n",
 		__func__);
 
-
-	ret = cfhsi->dev->cfhsi_wake_up(cfhsi->dev);
-	if (ret) {
-		dev_warn(&cfhsi->ndev->dev,
-			"%s: can't wake up HSI interface: %d.\n",
-			__func__, ret);
-		return ret;
-	}
-
 	do {
 		ret = cfhsi->dev->cfhsi_fifo_occupancy(cfhsi->dev,
 				&fifo_occupancy);
@@ -168,8 +159,6 @@ static int cfhsi_flush_fifo(struct cfhsi *cfhsi)
 		}
 	} while (1);
 
-	cfhsi->dev->cfhsi_wake_down(cfhsi->dev);
-
 	return ret;
 }
 
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCHv2 net-next 2/4] caif: Bad assert triggering false positive.
  2011-12-06 22:15 [PATCHv2 net-next 1/4] caif-hsi: Remove wake line modification when flushing FIFO Sjur Brændeland
@ 2011-12-06 22:15 ` Sjur Brændeland
  2011-12-06 22:22   ` David Miller
  2011-12-06 22:15 ` [PATCHv2 net-next 3/4] caif-shm: Bugfixes for caif_shmcore.c Sjur Brændeland
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Sjur Brændeland @ 2011-12-06 22:15 UTC (permalink / raw)
  To: netdev, David Miller; +Cc: Sjur Brændeland

Fix bad assert on fragment size triggering false positive.

Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
---
 net/caif/cfrfml.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/net/caif/cfrfml.c b/net/caif/cfrfml.c
index 81660f8..6dc75d4 100644
--- a/net/caif/cfrfml.c
+++ b/net/caif/cfrfml.c
@@ -190,7 +190,7 @@ out:
 
 static int cfrfml_transmit_segment(struct cfrfml *rfml, struct cfpkt *pkt)
 {
-	caif_assert(cfpkt_getlen(pkt) < rfml->fragment_size);
+	caif_assert(cfpkt_getlen(pkt) < rfml->fragment_size + RFM_HEAD_SIZE);
 
 	/* Add info for MUX-layer to route the packet out. */
 	cfpkt_info(pkt)->channel_id = rfml->serv.layer.id;
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCHv2 net-next 3/4] caif-shm: Bugfixes for caif_shmcore.c
  2011-12-06 22:15 [PATCHv2 net-next 1/4] caif-hsi: Remove wake line modification when flushing FIFO Sjur Brændeland
  2011-12-06 22:15 ` [PATCHv2 net-next 2/4] caif: Bad assert triggering false positive Sjur Brændeland
@ 2011-12-06 22:15 ` Sjur Brændeland
  2011-12-06 22:22   ` David Miller
  2011-12-06 22:15 ` [PATCHv2 net-next 4/4] caif: Replace BUG_ON with WARN_ON Sjur Brændeland
  2011-12-06 22:22 ` [PATCHv2 net-next 1/4] caif-hsi: Remove wake line modification when flushing FIFO David Miller
  3 siblings, 1 reply; 8+ messages in thread
From: Sjur Brændeland @ 2011-12-06 22:15 UTC (permalink / raw)
  To: netdev, David Miller; +Cc: Sjur Brændeland

Various bugfixes for caif_shmcore.c:
- fix deadlocks due to improper usage of spin-lock
- add missing spin-lock init
- don't call dev_kfree_skb() with irqs disabled,
  use dev_kfree_skb_irq() instead.
- fix potential skb null pointer de-reference.

Squashed original patches from:
Rabin Vincent <rabin.vincent@stericsson.com>
Durga Prasada Rao BATHINA <durgaprasadarao.b@stericcson.com>
Arun Murthy <arun.murthy@stericsson.com>
Bibek Basu <bibek.basu@stericsson.com>

Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
---
Change since v1: 
- s/dev_kfree_skb_any/dev_kfree_skb_irq/
- fixed two pointer cast warnings

 drivers/net/caif/caif_shmcore.c |   21 +++++++++++----------
 1 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/drivers/net/caif/caif_shmcore.c b/drivers/net/caif/caif_shmcore.c
index d4b26fb..fd59e37 100644
--- a/drivers/net/caif/caif_shmcore.c
+++ b/drivers/net/caif/caif_shmcore.c
@@ -238,11 +238,11 @@ int caif_shmdrv_rx_cb(u32 mbx_msg, void *priv)
 		if ((avail_emptybuff > HIGH_WATERMARK) &&
 					(!pshm_drv->tx_empty_available)) {
 			pshm_drv->tx_empty_available = 1;
+			spin_unlock_irqrestore(&pshm_drv->lock, flags);
 			pshm_drv->cfdev.flowctrl
 					(pshm_drv->pshm_dev->pshm_netdev,
 								CAIF_FLOW_ON);
 
-			spin_unlock_irqrestore(&pshm_drv->lock, flags);
 
 			/* Schedule the work queue. if required */
 			if (!work_pending(&pshm_drv->shm_tx_work))
@@ -285,6 +285,7 @@ static void shm_rx_work_func(struct work_struct *rx_work)
 			list_entry(pshm_drv->rx_full_list.next, struct buf_list,
 					list);
 		list_del_init(&pbuf->list);
+		spin_unlock_irqrestore(&pshm_drv->lock, flags);
 
 		/* Retrieve pointer to start of the packet descriptor area. */
 		pck_desc = (struct shm_pck_desc *) pbuf->desc_vptr;
@@ -360,6 +361,7 @@ static void shm_rx_work_func(struct work_struct *rx_work)
 			pck_desc++;
 		}
 
+		spin_lock_irqsave(&pshm_drv->lock, flags);
 		list_add_tail(&pbuf->list, &pshm_drv->rx_pend_list);
 
 		spin_unlock_irqrestore(&pshm_drv->lock, flags);
@@ -412,7 +414,6 @@ static void shm_tx_work_func(struct work_struct *tx_work)
 
 		if (skb == NULL)
 			goto send_msg;
-
 		/* Check the available no. of buffers in the empty list */
 		list_for_each(pos, &pshm_drv->tx_empty_list)
 			avail_emptybuff++;
@@ -421,9 +422,11 @@ static void shm_tx_work_func(struct work_struct *tx_work)
 					pshm_drv->tx_empty_available) {
 			/* Update blocking condition. */
 			pshm_drv->tx_empty_available = 0;
+			spin_unlock_irqrestore(&pshm_drv->lock, flags);
 			pshm_drv->cfdev.flowctrl
 					(pshm_drv->pshm_dev->pshm_netdev,
 					CAIF_FLOW_OFF);
+			spin_lock_irqsave(&pshm_drv->lock, flags);
 		}
 		/*
 		 * We simply return back to the caller if we do not have space
@@ -469,6 +472,8 @@ static void shm_tx_work_func(struct work_struct *tx_work)
 			}
 
 			skb = skb_dequeue(&pshm_drv->sk_qhead);
+			if (skb == NULL)
+				break;
 			/* Copy in CAIF frame. */
 			skb_copy_bits(skb, 0, pbuf->desc_vptr +
 					pbuf->frm_ofs + SHM_HDR_LEN +
@@ -477,7 +482,7 @@ static void shm_tx_work_func(struct work_struct *tx_work)
 			pshm_drv->pshm_dev->pshm_netdev->stats.tx_packets++;
 			pshm_drv->pshm_dev->pshm_netdev->stats.tx_bytes +=
 									frmlen;
-			dev_kfree_skb(skb);
+			dev_kfree_skb_irq(skb);
 
 			/* Fill in the shared memory packet descriptor area. */
 			pck_desc = (struct shm_pck_desc *) (pbuf->desc_vptr);
@@ -512,16 +517,11 @@ send_msg:
 static int shm_netdev_tx(struct sk_buff *skb, struct net_device *shm_netdev)
 {
 	struct shmdrv_layer *pshm_drv;
-	unsigned long flags = 0;
 
 	pshm_drv = netdev_priv(shm_netdev);
 
-	spin_lock_irqsave(&pshm_drv->lock, flags);
-
 	skb_queue_tail(&pshm_drv->sk_qhead, skb);
 
-	spin_unlock_irqrestore(&pshm_drv->lock, flags);
-
 	/* Schedule Tx work queue. for deferred processing of skbs*/
 	if (!work_pending(&pshm_drv->shm_tx_work))
 		queue_work(pshm_drv->pshm_tx_workqueue, &pshm_drv->shm_tx_work);
@@ -606,6 +606,7 @@ int caif_shmcore_probe(struct shmdev_layer *pshm_dev)
 		pshm_drv->shm_rx_addr = pshm_dev->shm_base_addr +
 						(NR_TX_BUF * TX_BUF_SZ);
 
+	spin_lock_init(&pshm_drv->lock);
 	INIT_LIST_HEAD(&pshm_drv->tx_empty_list);
 	INIT_LIST_HEAD(&pshm_drv->tx_pend_list);
 	INIT_LIST_HEAD(&pshm_drv->tx_full_list);
@@ -640,7 +641,7 @@ int caif_shmcore_probe(struct shmdev_layer *pshm_dev)
 		tx_buf->frm_ofs = SHM_CAIF_FRM_OFS;
 
 		if (pshm_dev->shm_loopback)
-			tx_buf->desc_vptr = (char *)tx_buf->phy_addr;
+			tx_buf->desc_vptr = (unsigned char *)tx_buf->phy_addr;
 		else
 			tx_buf->desc_vptr =
 					ioremap(tx_buf->phy_addr, TX_BUF_SZ);
@@ -664,7 +665,7 @@ int caif_shmcore_probe(struct shmdev_layer *pshm_dev)
 		rx_buf->len = RX_BUF_SZ;
 
 		if (pshm_dev->shm_loopback)
-			rx_buf->desc_vptr = (char *)rx_buf->phy_addr;
+			rx_buf->desc_vptr = (unsigned char *)rx_buf->phy_addr;
 		else
 			rx_buf->desc_vptr =
 					ioremap(rx_buf->phy_addr, RX_BUF_SZ);
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCHv2 net-next 4/4] caif: Replace BUG_ON with WARN_ON.
  2011-12-06 22:15 [PATCHv2 net-next 1/4] caif-hsi: Remove wake line modification when flushing FIFO Sjur Brændeland
  2011-12-06 22:15 ` [PATCHv2 net-next 2/4] caif: Bad assert triggering false positive Sjur Brændeland
  2011-12-06 22:15 ` [PATCHv2 net-next 3/4] caif-shm: Bugfixes for caif_shmcore.c Sjur Brændeland
@ 2011-12-06 22:15 ` Sjur Brændeland
  2011-12-06 22:22   ` David Miller
  2011-12-06 22:22 ` [PATCHv2 net-next 1/4] caif-hsi: Remove wake line modification when flushing FIFO David Miller
  3 siblings, 1 reply; 8+ messages in thread
From: Sjur Brændeland @ 2011-12-06 22:15 UTC (permalink / raw)
  To: netdev, David Miller; +Cc: Roar Førde, Sjur Brændeland

From: Roar Førde <roar.forde@stericsson.com>

BUG_ON is too strict in a number of circumstances,
use WARN_ON instead. Protocol errors should not halt the system.

Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
---
Since v1: removed and changed some OOM related printouts.

 drivers/net/caif/caif_hsi.c     |    2 +-
 drivers/net/caif/caif_serial.c  |    4 ++--
 drivers/net/caif/caif_shmcore.c |    6 +++++-
 net/caif/caif_dev.c             |   10 ++++------
 4 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c
index a85b29e..0a4fc62 100644
--- a/drivers/net/caif/caif_hsi.c
+++ b/drivers/net/caif/caif_hsi.c
@@ -933,7 +933,7 @@ static int cfhsi_xmit(struct sk_buff *skb, struct net_device *dev)
 
 		/* Create HSI frame. */
 		len = cfhsi_tx_frm(desc, cfhsi);
-		BUG_ON(!len);
+		WARN_ON(!len);
 
 		/* Set up new transfer. */
 		res = cfhsi->dev->cfhsi_tx(cfhsi->tx_buf, len, cfhsi->dev);
diff --git a/drivers/net/caif/caif_serial.c b/drivers/net/caif/caif_serial.c
index 23406e6..9341a2d 100644
--- a/drivers/net/caif/caif_serial.c
+++ b/drivers/net/caif/caif_serial.c
@@ -261,7 +261,7 @@ static int handle_tx(struct ser_device *ser)
 		skb_pull(skb, tty_wr);
 		if (skb->len == 0) {
 			struct sk_buff *tmp = skb_dequeue(&ser->head);
-			BUG_ON(tmp != skb);
+			WARN_ON(tmp != skb);
 			if (in_interrupt())
 				dev_kfree_skb_irq(skb);
 			else
@@ -305,7 +305,7 @@ static void ldisc_tx_wakeup(struct tty_struct *tty)
 
 	ser = tty->disc_data;
 	BUG_ON(ser == NULL);
-	BUG_ON(ser->tty != tty);
+	WARN_ON(ser->tty != tty);
 	handle_tx(ser);
 }
 
diff --git a/drivers/net/caif/caif_shmcore.c b/drivers/net/caif/caif_shmcore.c
index fd59e37..5b20413 100644
--- a/drivers/net/caif/caif_shmcore.c
+++ b/drivers/net/caif/caif_shmcore.c
@@ -337,7 +337,11 @@ static void shm_rx_work_func(struct work_struct *rx_work)
 			/* Get a suitable CAIF packet and copy in data. */
 			skb = netdev_alloc_skb(pshm_drv->pshm_dev->pshm_netdev,
 							frm_pck_len + 1);
-			BUG_ON(skb == NULL);
+
+			if (skb == NULL) {
+				pr_info("OOM: Try next frame in descriptor\n");
+				break;
+			}
 
 			p = skb_put(skb, frm_pck_len);
 			memcpy(p, pbuf->desc_vptr + frm_pck_ofs, frm_pck_len);
diff --git a/net/caif/caif_dev.c b/net/caif/caif_dev.c
index 9b298c1..b0ce14f 100644
--- a/net/caif/caif_dev.c
+++ b/net/caif/caif_dev.c
@@ -58,7 +58,6 @@ static int q_high = 50; /* Percent */
 struct cfcnfg *get_cfcnfg(struct net *net)
 {
 	struct caif_net *caifn;
-	BUG_ON(!net);
 	caifn = net_generic(net, caif_net_id);
 	if (!caifn)
 		return NULL;
@@ -69,7 +68,6 @@ EXPORT_SYMBOL(get_cfcnfg);
 static struct caif_device_entry_list *caif_device_list(struct net *net)
 {
 	struct caif_net *caifn;
-	BUG_ON(!net);
 	caifn = net_generic(net, caif_net_id);
 	if (!caifn)
 		return NULL;
@@ -507,15 +505,15 @@ static struct notifier_block caif_device_notifier = {
 static int caif_init_net(struct net *net)
 {
 	struct caif_net *caifn = net_generic(net, caif_net_id);
-	BUG_ON(!caifn);
+	if (WARN_ON(!caifn))
+		return -EINVAL;
+
 	INIT_LIST_HEAD(&caifn->caifdevs.list);
 	mutex_init(&caifn->caifdevs.lock);
 
 	caifn->cfg = cfcnfg_create();
-	if (!caifn->cfg) {
-		pr_warn("can't create cfcnfg\n");
+	if (!caifn->cfg)
 		return -ENOMEM;
-	}
 
 	return 0;
 }
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCHv2 net-next 1/4] caif-hsi: Remove wake line modification when flushing FIFO
  2011-12-06 22:15 [PATCHv2 net-next 1/4] caif-hsi: Remove wake line modification when flushing FIFO Sjur Brændeland
                   ` (2 preceding siblings ...)
  2011-12-06 22:15 ` [PATCHv2 net-next 4/4] caif: Replace BUG_ON with WARN_ON Sjur Brændeland
@ 2011-12-06 22:22 ` David Miller
  3 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2011-12-06 22:22 UTC (permalink / raw)
  To: sjur.brandeland; +Cc: netdev, christian.auby

From: Sjur Brændeland <sjur.brandeland@stericsson.com>
Date: Tue,  6 Dec 2011 23:15:41 +0100

> From: Christian Auby <christian.auby@stericsson.com>
> 
> Raising wake before flushing FIFO and lowering it after caused a
> spike on AC wake that were sometimes detected and acted upon by the
> modem. Fixed this by remove wake line modification when flushing FIFO.
> 
> Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>

Applied.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCHv2 net-next 2/4] caif: Bad assert triggering false positive.
  2011-12-06 22:15 ` [PATCHv2 net-next 2/4] caif: Bad assert triggering false positive Sjur Brændeland
@ 2011-12-06 22:22   ` David Miller
  0 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2011-12-06 22:22 UTC (permalink / raw)
  To: sjur.brandeland; +Cc: netdev

From: Sjur Brændeland <sjur.brandeland@stericsson.com>
Date: Tue,  6 Dec 2011 23:15:42 +0100

> Fix bad assert on fragment size triggering false positive.
> 
> Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>

Applied.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCHv2 net-next 3/4] caif-shm: Bugfixes for caif_shmcore.c
  2011-12-06 22:15 ` [PATCHv2 net-next 3/4] caif-shm: Bugfixes for caif_shmcore.c Sjur Brændeland
@ 2011-12-06 22:22   ` David Miller
  0 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2011-12-06 22:22 UTC (permalink / raw)
  To: sjur.brandeland; +Cc: netdev

From: Sjur Brændeland <sjur.brandeland@stericsson.com>
Date: Tue,  6 Dec 2011 23:15:43 +0100

> Various bugfixes for caif_shmcore.c:
> - fix deadlocks due to improper usage of spin-lock
> - add missing spin-lock init
> - don't call dev_kfree_skb() with irqs disabled,
>   use dev_kfree_skb_irq() instead.
> - fix potential skb null pointer de-reference.
> 
> Squashed original patches from:
> Rabin Vincent <rabin.vincent@stericsson.com>
> Durga Prasada Rao BATHINA <durgaprasadarao.b@stericcson.com>
> Arun Murthy <arun.murthy@stericsson.com>
> Bibek Basu <bibek.basu@stericsson.com>
> 
> Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
> ---
> Change since v1: 
> - s/dev_kfree_skb_any/dev_kfree_skb_irq/
> - fixed two pointer cast warnings

Applied.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCHv2 net-next 4/4] caif: Replace BUG_ON with WARN_ON.
  2011-12-06 22:15 ` [PATCHv2 net-next 4/4] caif: Replace BUG_ON with WARN_ON Sjur Brændeland
@ 2011-12-06 22:22   ` David Miller
  0 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2011-12-06 22:22 UTC (permalink / raw)
  To: sjur.brandeland; +Cc: netdev, roar.forde

From: Sjur Brændeland <sjur.brandeland@stericsson.com>
Date: Tue,  6 Dec 2011 23:15:44 +0100

> From: Roar Førde <roar.forde@stericsson.com>
> 
> BUG_ON is too strict in a number of circumstances,
> use WARN_ON instead. Protocol errors should not halt the system.
> 
> Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
> ---
> Since v1: removed and changed some OOM related printouts.

Applied.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2011-12-06 22:22 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-06 22:15 [PATCHv2 net-next 1/4] caif-hsi: Remove wake line modification when flushing FIFO Sjur Brændeland
2011-12-06 22:15 ` [PATCHv2 net-next 2/4] caif: Bad assert triggering false positive Sjur Brændeland
2011-12-06 22:22   ` David Miller
2011-12-06 22:15 ` [PATCHv2 net-next 3/4] caif-shm: Bugfixes for caif_shmcore.c Sjur Brændeland
2011-12-06 22:22   ` David Miller
2011-12-06 22:15 ` [PATCHv2 net-next 4/4] caif: Replace BUG_ON with WARN_ON Sjur Brændeland
2011-12-06 22:22   ` David Miller
2011-12-06 22:22 ` [PATCHv2 net-next 1/4] caif-hsi: Remove wake line modification when flushing FIFO David Miller

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).