]> rtime.felk.cvut.cz Git - socketcan-devel.git/commitdiff
Make protected command register access CONFIG_SMP unconditional.
authorhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Wed, 19 May 2010 16:21:00 +0000 (16:21 +0000)
committerhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Wed, 19 May 2010 16:21:00 +0000 (16:21 +0000)
Added missing spin_lock_init() for the defined locking variable.

git-svn-id: svn://svn.berlios.de//socketcan/trunk@1181 030b6a49-0b11-0410-94ab-b0dab22257f2

kernel/2.6/drivers/net/can/sja1000/sja1000.c
kernel/2.6/drivers/net/can/sja1000/sja1000.h

index 5ba308d18f0a07c00f3ee4f9d1297311447d9870..59183cb2067784af79f1f214984be09ee859bff4 100644 (file)
@@ -90,23 +90,16 @@ static struct can_bittiming_const sja1000_bittiming_const = {
 
 static void sja1000_write_cmdreg(struct sja1000_priv *priv, u8 val)
 {
-       /* the command register needs some locking on SMP systems */
-
-#ifdef CONFIG_SMP
-
        unsigned long flags;
 
+       /*
+        * The command register needs some locking and time to settle
+        * the write_reg() operation - especially on SMP systems.
+        */
        spin_lock_irqsave(&priv->cmdreg_lock, flags);
        priv->write_reg(priv, REG_CMR, val);
        priv->read_reg(priv, REG_SR);
        spin_unlock_irqrestore(&priv->cmdreg_lock, flags);
-
-#else
-
-       /* write to the command register without locking */
-       priv->write_reg(priv, REG_CMR, val);
-
-#endif
 }
 
 static int sja1000_probe_chip(struct net_device *dev)
@@ -644,6 +637,8 @@ struct net_device *alloc_sja1000dev(int sizeof_priv)
        priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES |
                CAN_CTRLMODE_BERR_REPORTING;
 
+       spin_lock_init(&priv->cmdreg_lock);
+
        if (sizeof_priv)
                priv->priv = (void *)priv + sizeof(struct sja1000_priv);
 
index 6720b371d83a2b3704bc7ae4bc5196a4f51faeba..b9dfcb894c9a4a50ec0596c2ec7d3705466a2fb7 100644 (file)
@@ -167,10 +167,8 @@ struct sja1000_priv {
 
        void __iomem *reg_base;  /* ioremap'ed address to registers */
        unsigned long irq_flags; /* for request_irq() */
+       spinlock_t cmdreg_lock;  /* lock for concurrent cmd register writes */
 
-#ifdef CONFIG_SMP
-       spinlock_t cmdreg_lock; /* lock for concurrent cmd register writes */
-#endif
 
        u16 flags;              /* custom mode flags */
        u8 ocr;                 /* output control register */