summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
0c427ca)
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
static void sja1000_write_cmdreg(struct sja1000_priv *priv, u8 val)
{
static void sja1000_write_cmdreg(struct sja1000_priv *priv, u8 val)
{
- /* the command register needs some locking on SMP systems */
-
-#ifdef CONFIG_SMP
-
+ /*
+ * 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);
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)
}
static int sja1000_probe_chip(struct net_device *dev)
priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES |
CAN_CTRLMODE_BERR_REPORTING;
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);
if (sizeof_priv)
priv->priv = (void *)priv + sizeof(struct sja1000_priv);
void __iomem *reg_base; /* ioremap'ed address to registers */
unsigned long irq_flags; /* for request_irq() */
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 */
u16 flags; /* custom mode flags */
u8 ocr; /* output control register */