Title: [6162] trunk/drivers/net/irda/bfin_sir.c: Modify bfin_sir driver according feedback from LKML.
Revision
6162
Author
gyang
Date
2009-03-09 00:58:00 -0500 (Mon, 09 Mar 2009)

Log Message

Modify bfin_sir driver according feedback from LKML.

Modified Paths


Diff

Modified: trunk/drivers/net/irda/bfin_sir.c (6161 => 6162)


--- trunk/drivers/net/irda/bfin_sir.c	2009-03-09 02:58:05 UTC (rev 6161)
+++ trunk/drivers/net/irda/bfin_sir.c	2009-03-09 05:58:00 UTC (rev 6162)
@@ -28,7 +28,7 @@
 
 	mtt = mtt < 10000 ? 10000 : mtt;
 	ticks = 1 + mtt / (USEC_PER_SEC / HZ);
-	schedule_timeout_interruptible(ticks);
+	schedule_timeout_uninterruptible(ticks);
 }
 
 static void __devinit bfin_sir_init_ports(struct bfin_sir_port *sp, struct platform_device *pdev)
@@ -67,8 +67,11 @@
 	disable_dma(port->tx_dma_channel);
 #endif
 
-	while (!(SIR_UART_GET_LSR(port) & THRE))
+	while (!(SIR_UART_GET_LSR(port) & THRE)) {
+		cpu_relax();
 		continue;
+	}
+
 	SIR_UART_STOP_TX(port);
 }
 
@@ -205,8 +208,11 @@
 	struct net_device *dev = dev_id;
 	struct bfin_sir_self *self = netdev_priv(dev);
 	struct bfin_sir_port *port = self->sir_port;
+
+	spin_lock(&self->lock);
 	while ((SIR_UART_GET_LSR(port) & DR))
 		bfin_sir_rx_chars(dev);
+	spin_unlock(&self->lock);
 
 	return IRQ_HANDLED;
 }
@@ -217,8 +223,11 @@
 	struct bfin_sir_self *self = netdev_priv(dev);
 	struct bfin_sir_port *port = self->sir_port;
 
+	spin_lock(&self->lock);
 	if (SIR_UART_GET_LSR(port) & THRE)
 		bfin_sir_tx_chars(dev);
+	spin_unlock(&self->lock);
+
 	return IRQ_HANDLED;
 }
 #endif /* CONFIG_SIR_BFIN_PIO */
@@ -264,6 +273,7 @@
 	struct net_device *dev = dev_id;
 	struct bfin_sir_self *self = netdev_priv(dev);
 	struct bfin_sir_port *port = self->sir_port;
+
 	spin_lock(&self->lock);
 	if (!(get_dma_curr_irqstat(port->tx_dma_channel)&DMA_RUN)) {
 		clear_dma_irqstat(port->tx_dma_channel);
@@ -444,7 +454,7 @@
 	dev = sir_port->dev;
 	self = netdev_priv(dev);
 	if (self->open) {
-		flush_scheduled_work();
+		flush_work(&self->work);
 		bfin_sir_shutdown(self->sir_port, dev);
 		netif_device_detach(dev);
 	}
@@ -582,6 +592,7 @@
 static struct net_device_stats *bfin_sir_stats(struct net_device *dev)
 {
 	struct bfin_sir_self *self = netdev_priv(dev);
+
 	return &self->stats;
 }
 
@@ -629,7 +640,7 @@
 {
 	struct bfin_sir_self *self = netdev_priv(dev);
 
-	flush_scheduled_work();
+	flush_work(&self->work);
 	bfin_sir_shutdown(self->sir_port, dev);
 
 	if (self->rxskb) {
@@ -651,7 +662,7 @@
 
 static int bfin_sir_init_iobuf(iobuff_t *io, int size)
 {
-	io->head = kmalloc(size, GFP_KERNEL | GFP_DMA);
+	io->head = kmalloc(size, GFP_KERNEL);
 	if (!io->head)
 		return -ENOMEM;
 	io->truesize = size;
@@ -749,7 +760,6 @@
 	struct net_device *dev = NULL;
 	struct bfin_sir_self *self;
 
-
 	sir_port = platform_get_drvdata(pdev);
 	if (!sir_port)
 		return 0;
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
http://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to