* Re: Problem with Eurotech COM1273 Dual Channel CAN PC104 Module. [not found] <CA+s8ZrqFBun4bo2rJJFHb0FrV7m7PLybUVM+jjahKsdW8bdnaQ@mail.gmail.com> @ 2014-04-15 9:55 ` Wolfgang Grandegger 2014-04-15 10:50 ` Oliver Hartkopp 0 siblings, 1 reply; 16+ messages in thread From: Wolfgang Grandegger @ 2014-04-15 9:55 UTC (permalink / raw) To: khurram gulzar; +Cc: Oliver Hartkopp, socketcan-users, linux-can Hi Khurram, we have switched to a new mailing list some time ago, which I have therefore added to the CC. On Tue, 15 Apr 2014 11:07:15 +0300, khurram gulzar <khurramgulzar@gmail.com> wrote: > Hi Oliver and Wolfgang, > Thanks for your support in advance > I have recently updated the system from Kernel 2.6 to use the new kernel > 3.2 for linux. I have noticed that the socket-can is integrated in the > kernel. I enabled the driver in the kernel from the kernel config. > The drivers are loaded successfully and both the CAN are transmitting the > packets. However its unable to receive any packets on any of the CAN. > The system configurations are still the same loaded drivers > -> can.ko-> can-raw.ko-> sja1000-iomux There is now module named "sja1000-iomux" in the mainline kernel. Where did you get it from? > The address of can is configured to base=0x200,0x204 and irq=10,11 with > speed=1000,1000 i.e. 1Mbits/sec > I have checked the irq in /proc/interrupts. IRQ 10 and 11 are showing > connected to CAN0 and CAN1. Do the IRQ counts increase when you send messages? > Can you please tell me what seems to be wrong- Waiting for your > reply Could you switch to a recent mainline kernel version? Wolfgang. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Problem with Eurotech COM1273 Dual Channel CAN PC104 Module. 2014-04-15 9:55 ` Problem with Eurotech COM1273 Dual Channel CAN PC104 Module Wolfgang Grandegger @ 2014-04-15 10:50 ` Oliver Hartkopp [not found] ` <CA+s8ZroY7j8MLpFQh568QdeB24zBwVAVXbi7RzQF+baFi+Mpkw@mail.gmail.com> [not found] ` <CA+s8Zrqrd_U0g1GRCDzXncgWLA_kO3Hyhjwy6Oe1S0cYohm2og@mail.gmail.com> 0 siblings, 2 replies; 16+ messages in thread From: Oliver Hartkopp @ 2014-04-15 10:50 UTC (permalink / raw) To: Wolfgang Grandegger, khurram gulzar; +Cc: linux-can Hello Khurram, we're obviously in a time loop :-) See your same request ~5 years ago: http://socket-can.996257.n3.nabble.com/Support-needed-for-Eurotech-COM1273-Dual-Channel-CAN-PC104-Module-td1524.html I assume the sja1000_isa driver will be the right one for this old card. It is part of mainline Linux - so no need to compile old SocketCAN sources from the SVN. Regards, Oliver On 15.04.2014 11:55, Wolfgang Grandegger wrote: > Hi Khurram, > > we have switched to a new mailing list some time ago, which I have > therefore added to the CC. > > On Tue, 15 Apr 2014 11:07:15 +0300, khurram gulzar > <khurramgulzar@gmail.com> wrote: >> Hi Oliver and Wolfgang, >> Thanks for your support in advance >> I have recently updated the system from Kernel 2.6 to use the new kernel >> 3.2 for linux. I have noticed that the socket-can is integrated in the >> kernel. I enabled the driver in the kernel from the kernel config. >> The drivers are loaded successfully and both the CAN are transmitting > the >> packets. However its unable to receive any packets on any of the CAN. >> The system configurations are still the same loaded drivers >> -> can.ko-> can-raw.ko-> sja1000-iomux > > There is now module named "sja1000-iomux" in the mainline kernel. > Where did you get it from? > >> The address of can is configured to base=0x200,0x204 and irq=10,11 with >> speed=1000,1000 i.e. 1Mbits/sec >> I have checked the irq in /proc/interrupts. IRQ 10 and 11 are showing >> connected to CAN0 and CAN1. > > Do the IRQ counts increase when you send messages? > >> Can you please tell me what seems to be wrong- Waiting for your >> reply > > Could you switch to a recent mainline kernel version? > > Wolfgang. > > -- > To unsubscribe from this list: send the line "unsubscribe linux-can" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <CA+s8ZroY7j8MLpFQh568QdeB24zBwVAVXbi7RzQF+baFi+Mpkw@mail.gmail.com>]
* Re: Problem with Eurotech COM1273 Dual Channel CAN PC104 Module. [not found] ` <CA+s8ZroY7j8MLpFQh568QdeB24zBwVAVXbi7RzQF+baFi+Mpkw@mail.gmail.com> @ 2014-04-15 11:55 ` Oliver Hartkopp 0 siblings, 0 replies; 16+ messages in thread From: Oliver Hartkopp @ 2014-04-15 11:55 UTC (permalink / raw) To: khurram gulzar; +Cc: Wolfgang Grandegger, linux-can@vger.kernel.org Hello Khurram, the speed is only set with the 'ip' tool now. And regarding the former iomux handling it should be like this: modprobe sja1000_isa port=0x200,0x204 irq=10,11 indirect=1,1 See the code for further module parameter details: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/net/can/sja1000/sja1000_isa.c Regards, Oliver On 15.04.2014 13:25, khurram gulzar wrote: > Thanx Oliver, > Yes indeed its a v.big time loop. > I was previously using sja1000-iomux > sja1000_isa i can only load one module can0 at address 0x200 but cant load > 0x204 bus > modprobe sja1000_isa port=0x200,0x204 irq=10,11 with speed parameter set by ip > link set command > there is an indirect parameter, I have no idea how it is used could you elaborate > my base address is 0x200 and 0x204 with irq 10 and 11 speed 1000,1000 > > > > On Tue, Apr 15, 2014 at 1:50 PM, Oliver Hartkopp <socketcan@hartkopp.net > <mailto:socketcan@hartkopp.net>> wrote: > > Hello Khurram, > > we're obviously in a time loop :-) > > See your same request ~5 years ago: > > http://socket-can.996257.n3.nabble.com/Support-needed-for-Eurotech-COM1273-Dual-Channel-CAN-PC104-Module-td1524.html > > I assume the sja1000_isa driver will be the right one for this old card. > It is part of mainline Linux - so no need to compile old SocketCAN sources > from the SVN. > > Regards, > Oliver > > On 15.04.2014 11:55, Wolfgang Grandegger wrote: > > Hi Khurram, > > > > we have switched to a new mailing list some time ago, which I have > > therefore added to the CC. > > > > On Tue, 15 Apr 2014 11:07:15 +0300, khurram gulzar > > <khurramgulzar@gmail.com <mailto:khurramgulzar@gmail.com>> wrote: > >> Hi Oliver and Wolfgang, > >> Thanks for your support in advance > >> I have recently updated the system from Kernel 2.6 to use the new kernel > >> 3.2 for linux. I have noticed that the socket-can is integrated in the > >> kernel. I enabled the driver in the kernel from the kernel config. > >> The drivers are loaded successfully and both the CAN are transmitting > > the > >> packets. However its unable to receive any packets on any of the CAN. > >> The system configurations are still the same loaded drivers > >> -> can.ko-> can-raw.ko-> sja1000-iomux > > > > There is now module named "sja1000-iomux" in the mainline kernel. > > Where did you get it from? > > > >> The address of can is configured to base=0x200,0x204 and irq=10,11 with > >> speed=1000,1000 i.e. 1Mbits/sec > >> I have checked the irq in /proc/interrupts. IRQ 10 and 11 are showing > >> connected to CAN0 and CAN1. > > > > Do the IRQ counts increase when you send messages? > > > >> Can you please tell me what seems to be wrong- Waiting for your > >> reply > > > > Could you switch to a recent mainline kernel version? > > > > Wolfgang. > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-can" in > > the body of a message to majordomo@vger.kernel.org <mailto:majordomo@vger.kernel.org> > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > > > ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <CA+s8Zrqrd_U0g1GRCDzXncgWLA_kO3Hyhjwy6Oe1S0cYohm2og@mail.gmail.com>]
* Re: Problem with Eurotech COM1273 Dual Channel CAN PC104 Module. [not found] ` <CA+s8Zrqrd_U0g1GRCDzXncgWLA_kO3Hyhjwy6Oe1S0cYohm2og@mail.gmail.com> @ 2014-04-15 12:00 ` Oliver Hartkopp 2014-04-15 12:33 ` Marc Kleine-Budde 0 siblings, 1 reply; 16+ messages in thread From: Oliver Hartkopp @ 2014-04-15 12:00 UTC (permalink / raw) To: khurram gulzar; +Cc: Wolfgang Grandegger, linux-can As I wrote in the other thread: > The command i am executing is > modprobe sja1000_isa port=0x200,0x204 irq=10,11 indirect=1 The parameters for each interface are given separately > but in dmesg it says >>> probe of sja1000_isa.1 failed with error -16 That's correct as you did not provide the 'indirect' flags to the _second_ interface :-) So modprobe sja1000_isa port=0x200,0x204 irq=10,11 indirect=1,1 should make it. > I am now running linux kernel version 3.2 A good choice :-) Best regards, Oliver ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Problem with Eurotech COM1273 Dual Channel CAN PC104 Module. 2014-04-15 12:00 ` Oliver Hartkopp @ 2014-04-15 12:33 ` Marc Kleine-Budde 2014-04-15 13:19 ` Oliver Hartkopp 0 siblings, 1 reply; 16+ messages in thread From: Marc Kleine-Budde @ 2014-04-15 12:33 UTC (permalink / raw) To: Oliver Hartkopp, khurram gulzar; +Cc: Wolfgang Grandegger, linux-can [-- Attachment #1: Type: text/plain, Size: 1160 bytes --] On 04/15/2014 02:00 PM, Oliver Hartkopp wrote: > As I wrote in the other thread: > >> The command i am executing is >> modprobe sja1000_isa port=0x200,0x204 irq=10,11 indirect=1 > > The parameters for each interface are given separately The indirect mode is racy, btw.... > static u8 sja1000_isa_port_read_reg_indirect(const struct sja1000_priv *priv, > int reg) > { > unsigned long base = (unsigned long)priv->reg_base; > > outb(reg, base); > return inb(base + 1); > } > > static void sja1000_isa_port_write_reg_indirect(const struct sja1000_priv *priv, > int reg, u8 val) > { > unsigned long base = (unsigned long)priv->reg_base; > > outb(reg, base); > outb(val, base + 1); > } We need locks. Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de | [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 242 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Problem with Eurotech COM1273 Dual Channel CAN PC104 Module. 2014-04-15 12:33 ` Marc Kleine-Budde @ 2014-04-15 13:19 ` Oliver Hartkopp 2014-04-15 13:42 ` Marc Kleine-Budde 0 siblings, 1 reply; 16+ messages in thread From: Oliver Hartkopp @ 2014-04-15 13:19 UTC (permalink / raw) To: Marc Kleine-Budde, Wolfgang Grandegger; +Cc: khurram gulzar, linux-can Something like this? It uses the dev->dev_id which was missed in the 3e66d0138c05d9792f patch before. Just compile-tested by now ... diff --git a/drivers/net/can/sja1000/sja1000_isa.c b/drivers/net/can/sja1000/sja1000_isa.c index df136a2..46e1784 100644 --- a/drivers/net/can/sja1000/sja1000_isa.c +++ b/drivers/net/can/sja1000/sja1000_isa.c @@ -46,6 +46,7 @@ static int clk[MAXDEV]; static unsigned char cdr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; static unsigned char ocr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; +static spinlock_t indirect_lock[MAXDEV]; /* lock for indirect access mode */ module_param_array(port, ulong, NULL, S_IRUGO); MODULE_PARM_DESC(port, "I/O port number"); @@ -101,19 +102,28 @@ static void sja1000_isa_port_write_reg(const struct sja1000_priv *priv, static u8 sja1000_isa_port_read_reg_indirect(const struct sja1000_priv *priv, int reg) { - unsigned long base = (unsigned long)priv->reg_base; + unsigned long base, flags; + u8 readval; + spin_lock_irqsave(&indirect_lock[priv->dev->dev_id], flags); + base = (unsigned long)priv->reg_base; outb(reg, base); - return inb(base + 1); + readval = inb(base + 1); + spin_unlock_irqrestore(&indirect_lock[priv->dev->dev_id], flags); + + return readval; } static void sja1000_isa_port_write_reg_indirect(const struct sja1000_priv *priv, int reg, u8 val) { - unsigned long base = (unsigned long)priv->reg_base; + unsigned long base, flags; + spin_lock_irqsave(&indirect_lock[priv->dev->dev_id], flags); + base = (unsigned long)priv->reg_base; outb(reg, base); outb(val, base + 1); + spin_unlock_irqrestore(&indirect_lock[priv->dev->dev_id], flags); } static int sja1000_isa_probe(struct platform_device *pdev) @@ -169,6 +179,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) if (iosize == SJA1000_IOSIZE_INDIRECT) { priv->read_reg = sja1000_isa_port_read_reg_indirect; priv->write_reg = sja1000_isa_port_write_reg_indirect; + spin_lock_init(&indirect_lock[idx]); } else { priv->read_reg = sja1000_isa_port_read_reg; priv->write_reg = sja1000_isa_port_write_reg; @@ -198,6 +209,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) platform_set_drvdata(pdev, dev); SET_NETDEV_DEV(dev, &pdev->dev); + dev->dev_id = idx; err = register_sja1000dev(dev); if (err) { On 15.04.2014 14:33, Marc Kleine-Budde wrote: > On 04/15/2014 02:00 PM, Oliver Hartkopp wrote: >> As I wrote in the other thread: >> >>> The command i am executing is >>> modprobe sja1000_isa port=0x200,0x204 irq=10,11 indirect=1 >> >> The parameters for each interface are given separately > > The indirect mode is racy, btw.... > >> static u8 sja1000_isa_port_read_reg_indirect(const struct sja1000_priv *priv, >> int reg) >> { >> unsigned long base = (unsigned long)priv->reg_base; >> >> outb(reg, base); >> return inb(base + 1); >> } >> >> static void sja1000_isa_port_write_reg_indirect(const struct sja1000_priv *priv, >> int reg, u8 val) >> { >> unsigned long base = (unsigned long)priv->reg_base; >> >> outb(reg, base); >> outb(val, base + 1); >> } > > We need locks. > > Marc > ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: Problem with Eurotech COM1273 Dual Channel CAN PC104 Module. 2014-04-15 13:19 ` Oliver Hartkopp @ 2014-04-15 13:42 ` Marc Kleine-Budde 2014-04-15 17:30 ` [PATCH] can: sja1000_isa: add locking for indirect register access mode Oliver Hartkopp 2014-04-26 19:18 ` [PATCH] slip: fix spinlock variant Oliver Hartkopp 0 siblings, 2 replies; 16+ messages in thread From: Marc Kleine-Budde @ 2014-04-15 13:42 UTC (permalink / raw) To: Oliver Hartkopp, Wolfgang Grandegger; +Cc: khurram gulzar, linux-can [-- Attachment #1: Type: text/plain, Size: 4018 bytes --] On 04/15/2014 03:19 PM, Oliver Hartkopp wrote: > Something like this? Yes, no need to move the "base = pric->reg_base" under the lock though. Marc > It uses the dev->dev_id which was missed in the 3e66d0138c05d9792f patch before. > > Just compile-tested by now ... > > diff --git a/drivers/net/can/sja1000/sja1000_isa.c b/drivers/net/can/sja1000/sja1000_isa.c > index df136a2..46e1784 100644 > --- a/drivers/net/can/sja1000/sja1000_isa.c > +++ b/drivers/net/can/sja1000/sja1000_isa.c > @@ -46,6 +46,7 @@ static int clk[MAXDEV]; > static unsigned char cdr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; > static unsigned char ocr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; > static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; > +static spinlock_t indirect_lock[MAXDEV]; /* lock for indirect access mode */ > > module_param_array(port, ulong, NULL, S_IRUGO); > MODULE_PARM_DESC(port, "I/O port number"); > @@ -101,19 +102,28 @@ static void sja1000_isa_port_write_reg(const struct sja1000_priv *priv, > static u8 sja1000_isa_port_read_reg_indirect(const struct sja1000_priv *priv, > int reg) > { > - unsigned long base = (unsigned long)priv->reg_base; > + unsigned long base, flags; > + u8 readval; > > + spin_lock_irqsave(&indirect_lock[priv->dev->dev_id], flags); > + base = (unsigned long)priv->reg_base; > outb(reg, base); > - return inb(base + 1); > + readval = inb(base + 1); > + spin_unlock_irqrestore(&indirect_lock[priv->dev->dev_id], flags); > + > + return readval; > } > > static void sja1000_isa_port_write_reg_indirect(const struct sja1000_priv *priv, > int reg, u8 val) > { > - unsigned long base = (unsigned long)priv->reg_base; > + unsigned long base, flags; > > + spin_lock_irqsave(&indirect_lock[priv->dev->dev_id], flags); > + base = (unsigned long)priv->reg_base; > outb(reg, base); > outb(val, base + 1); > + spin_unlock_irqrestore(&indirect_lock[priv->dev->dev_id], flags); > } > > static int sja1000_isa_probe(struct platform_device *pdev) > @@ -169,6 +179,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) > if (iosize == SJA1000_IOSIZE_INDIRECT) { > priv->read_reg = sja1000_isa_port_read_reg_indirect; > priv->write_reg = sja1000_isa_port_write_reg_indirect; > + spin_lock_init(&indirect_lock[idx]); > } else { > priv->read_reg = sja1000_isa_port_read_reg; > priv->write_reg = sja1000_isa_port_write_reg; > @@ -198,6 +209,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) > > platform_set_drvdata(pdev, dev); > SET_NETDEV_DEV(dev, &pdev->dev); > + dev->dev_id = idx; > > err = register_sja1000dev(dev); > if (err) { > > > > On 15.04.2014 14:33, Marc Kleine-Budde wrote: >> On 04/15/2014 02:00 PM, Oliver Hartkopp wrote: >>> As I wrote in the other thread: >>> >>>> The command i am executing is >>>> modprobe sja1000_isa port=0x200,0x204 irq=10,11 indirect=1 >>> >>> The parameters for each interface are given separately >> >> The indirect mode is racy, btw.... >> >>> static u8 sja1000_isa_port_read_reg_indirect(const struct sja1000_priv *priv, >>> int reg) >>> { >>> unsigned long base = (unsigned long)priv->reg_base; >>> >>> outb(reg, base); >>> return inb(base + 1); >>> } >>> >>> static void sja1000_isa_port_write_reg_indirect(const struct sja1000_priv *priv, >>> int reg, u8 val) >>> { >>> unsigned long base = (unsigned long)priv->reg_base; >>> >>> outb(reg, base); >>> outb(val, base + 1); >>> } >> >> We need locks. >> >> Marc >> > -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de | [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 242 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH] can: sja1000_isa: add locking for indirect register access mode 2014-04-15 13:42 ` Marc Kleine-Budde @ 2014-04-15 17:30 ` Oliver Hartkopp 2014-04-15 21:26 ` Thomas Gleixner ` (2 more replies) 2014-04-26 19:18 ` [PATCH] slip: fix spinlock variant Oliver Hartkopp 1 sibling, 3 replies; 16+ messages in thread From: Oliver Hartkopp @ 2014-04-15 17:30 UTC (permalink / raw) To: Marc Kleine-Budde, Wolfgang Grandegger; +Cc: khurram gulzar, linux-can When accessing the SJA1000 controller registers in the indirect access mode, writing the register number and reading/writing the data has to be an atomic attempt. As the sja1000_isa driver is an old style driver with a fixed number of instances the locking variable depends on the same index like all the other configuration elements given on the module command line. As a positive side effect dev->dev_id is populated by the instance index, which was missing in 3e66d0138c05d9 ("can: populate netdev::dev_id for udev discrimination"). Reported-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net> --- diff --git a/drivers/net/can/sja1000/sja1000_isa.c b/drivers/net/can/sja1000/sja1000_isa.c index df136a2..014695d 100644 --- a/drivers/net/can/sja1000/sja1000_isa.c +++ b/drivers/net/can/sja1000/sja1000_isa.c @@ -46,6 +46,7 @@ static int clk[MAXDEV]; static unsigned char cdr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; static unsigned char ocr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; +static spinlock_t indirect_lock[MAXDEV]; /* lock for indirect access mode */ module_param_array(port, ulong, NULL, S_IRUGO); MODULE_PARM_DESC(port, "I/O port number"); @@ -101,19 +102,26 @@ static void sja1000_isa_port_write_reg(const struct sja1000_priv *priv, static u8 sja1000_isa_port_read_reg_indirect(const struct sja1000_priv *priv, int reg) { - unsigned long base = (unsigned long)priv->reg_base; + unsigned long flags, base = (unsigned long)priv->reg_base; + u8 readval; + spin_lock_irqsave(&indirect_lock[priv->dev->dev_id], flags); outb(reg, base); - return inb(base + 1); + readval = inb(base + 1); + spin_unlock_irqrestore(&indirect_lock[priv->dev->dev_id], flags); + + return readval; } static void sja1000_isa_port_write_reg_indirect(const struct sja1000_priv *priv, int reg, u8 val) { - unsigned long base = (unsigned long)priv->reg_base; + unsigned long flags, base = (unsigned long)priv->reg_base; + spin_lock_irqsave(&indirect_lock[priv->dev->dev_id], flags); outb(reg, base); outb(val, base + 1); + spin_unlock_irqrestore(&indirect_lock[priv->dev->dev_id], flags); } static int sja1000_isa_probe(struct platform_device *pdev) @@ -169,6 +177,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) if (iosize == SJA1000_IOSIZE_INDIRECT) { priv->read_reg = sja1000_isa_port_read_reg_indirect; priv->write_reg = sja1000_isa_port_write_reg_indirect; + spin_lock_init(&indirect_lock[idx]); } else { priv->read_reg = sja1000_isa_port_read_reg; priv->write_reg = sja1000_isa_port_write_reg; @@ -198,6 +207,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) platform_set_drvdata(pdev, dev); SET_NETDEV_DEV(dev, &pdev->dev); + dev->dev_id = idx; err = register_sja1000dev(dev); if (err) { ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH] can: sja1000_isa: add locking for indirect register access mode 2014-04-15 17:30 ` [PATCH] can: sja1000_isa: add locking for indirect register access mode Oliver Hartkopp @ 2014-04-15 21:26 ` Thomas Gleixner 2014-04-15 21:49 ` Marc Kleine-Budde 2014-04-17 19:23 ` Marc Kleine-Budde 2014-04-21 17:39 ` Oliver Hartkopp 2 siblings, 1 reply; 16+ messages in thread From: Thomas Gleixner @ 2014-04-15 21:26 UTC (permalink / raw) To: Oliver Hartkopp Cc: Marc Kleine-Budde, Wolfgang Grandegger, khurram gulzar, linux-can On Tue, 15 Apr 2014, Oliver Hartkopp wrote: > When accessing the SJA1000 controller registers in the indirect access mode, > writing the register number and reading/writing the data has to be an atomic > attempt. > > As the sja1000_isa driver is an old style driver with a fixed number of > instances the locking variable depends on the same index like all the other > configuration elements given on the module command line. > > As a positive side effect dev->dev_id is populated by the instance index, > which was missing in 3e66d0138c05d9 ("can: populate netdev::dev_id for udev > discrimination"). > > Reported-by: Marc Kleine-Budde <mkl@pengutronix.de> > Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net> > > --- > > diff --git a/drivers/net/can/sja1000/sja1000_isa.c b/drivers/net/can/sja1000/sja1000_isa.c > index df136a2..014695d 100644 > --- a/drivers/net/can/sja1000/sja1000_isa.c > +++ b/drivers/net/can/sja1000/sja1000_isa.c > @@ -46,6 +46,7 @@ static int clk[MAXDEV]; > static unsigned char cdr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; > static unsigned char ocr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; > static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; > +static spinlock_t indirect_lock[MAXDEV]; /* lock for indirect access mode */ You need to initialize the spinlock if you want to survive lockdep. Either use the proper static initializer or do an explicit spin_lock_init() on each of the locks before using them. Thanks, tglx ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH] can: sja1000_isa: add locking for indirect register access mode 2014-04-15 21:26 ` Thomas Gleixner @ 2014-04-15 21:49 ` Marc Kleine-Budde 2014-04-16 8:48 ` Thomas Gleixner 0 siblings, 1 reply; 16+ messages in thread From: Marc Kleine-Budde @ 2014-04-15 21:49 UTC (permalink / raw) To: Thomas Gleixner, Oliver Hartkopp Cc: Wolfgang Grandegger, khurram gulzar, linux-can [-- Attachment #1: Type: text/plain, Size: 2391 bytes --] On 04/15/2014 11:26 PM, Thomas Gleixner wrote: > On Tue, 15 Apr 2014, Oliver Hartkopp wrote: > >> When accessing the SJA1000 controller registers in the indirect access mode, >> writing the register number and reading/writing the data has to be an atomic >> attempt. >> >> As the sja1000_isa driver is an old style driver with a fixed number of >> instances the locking variable depends on the same index like all the other >> configuration elements given on the module command line. >> >> As a positive side effect dev->dev_id is populated by the instance index, >> which was missing in 3e66d0138c05d9 ("can: populate netdev::dev_id for udev >> discrimination"). >> >> Reported-by: Marc Kleine-Budde <mkl@pengutronix.de> >> Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net> >> >> --- >> >> diff --git a/drivers/net/can/sja1000/sja1000_isa.c b/drivers/net/can/sja1000/sja1000_isa.c >> index df136a2..014695d 100644 >> --- a/drivers/net/can/sja1000/sja1000_isa.c >> +++ b/drivers/net/can/sja1000/sja1000_isa.c >> @@ -46,6 +46,7 @@ static int clk[MAXDEV]; >> static unsigned char cdr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; >> static unsigned char ocr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; >> static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; >> +static spinlock_t indirect_lock[MAXDEV]; /* lock for indirect access mode */ > > You need to initialize the spinlock if you want to survive lockdep. > > Either use the proper static initializer or do an explicit > spin_lock_init() on each of the locks before using them. There's a spin_lock_init in the probe function: > static int sja1000_isa_probe(struct platform_device *pdev) > @@ -169,6 +177,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) > if (iosize == SJA1000_IOSIZE_INDIRECT) { > priv->read_reg = sja1000_isa_port_read_reg_indirect; > priv->write_reg = sja1000_isa_port_write_reg_indirect; > + spin_lock_init(&indirect_lock[idx]); > } else { > priv->read_reg = sja1000_isa_port_read_reg; > priv->write_reg = sja1000_isa_port_write_reg; Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de | [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 242 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH] can: sja1000_isa: add locking for indirect register access mode 2014-04-15 21:49 ` Marc Kleine-Budde @ 2014-04-16 8:48 ` Thomas Gleixner 0 siblings, 0 replies; 16+ messages in thread From: Thomas Gleixner @ 2014-04-16 8:48 UTC (permalink / raw) To: Marc Kleine-Budde Cc: Oliver Hartkopp, Wolfgang Grandegger, khurram gulzar, linux-can On Tue, 15 Apr 2014, Marc Kleine-Budde wrote: > On 04/15/2014 11:26 PM, Thomas Gleixner wrote: > > On Tue, 15 Apr 2014, Oliver Hartkopp wrote: > > > >> When accessing the SJA1000 controller registers in the indirect access mode, > >> writing the register number and reading/writing the data has to be an atomic > >> attempt. > >> > >> As the sja1000_isa driver is an old style driver with a fixed number of > >> instances the locking variable depends on the same index like all the other > >> configuration elements given on the module command line. > >> > >> As a positive side effect dev->dev_id is populated by the instance index, > >> which was missing in 3e66d0138c05d9 ("can: populate netdev::dev_id for udev > >> discrimination"). > >> > >> Reported-by: Marc Kleine-Budde <mkl@pengutronix.de> > >> Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net> > >> > >> --- > >> > >> diff --git a/drivers/net/can/sja1000/sja1000_isa.c b/drivers/net/can/sja1000/sja1000_isa.c > >> index df136a2..014695d 100644 > >> --- a/drivers/net/can/sja1000/sja1000_isa.c > >> +++ b/drivers/net/can/sja1000/sja1000_isa.c > >> @@ -46,6 +46,7 @@ static int clk[MAXDEV]; > >> static unsigned char cdr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; > >> static unsigned char ocr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; > >> static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; > >> +static spinlock_t indirect_lock[MAXDEV]; /* lock for indirect access mode */ > > > > You need to initialize the spinlock if you want to survive lockdep. > > > > Either use the proper static initializer or do an explicit > > spin_lock_init() on each of the locks before using them. > > There's a spin_lock_init in the probe function: > > > static int sja1000_isa_probe(struct platform_device *pdev) > > @@ -169,6 +177,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) > > if (iosize == SJA1000_IOSIZE_INDIRECT) { > > priv->read_reg = sja1000_isa_port_read_reg_indirect; > > priv->write_reg = sja1000_isa_port_write_reg_indirect; > > + spin_lock_init(&indirect_lock[idx]); Ooops, missed that :) ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH] can: sja1000_isa: add locking for indirect register access mode 2014-04-15 17:30 ` [PATCH] can: sja1000_isa: add locking for indirect register access mode Oliver Hartkopp 2014-04-15 21:26 ` Thomas Gleixner @ 2014-04-17 19:23 ` Marc Kleine-Budde 2014-04-21 17:39 ` Oliver Hartkopp 2 siblings, 0 replies; 16+ messages in thread From: Marc Kleine-Budde @ 2014-04-17 19:23 UTC (permalink / raw) To: Oliver Hartkopp, Wolfgang Grandegger; +Cc: khurram gulzar, linux-can [-- Attachment #1: Type: text/plain, Size: 1057 bytes --] On 04/15/2014 07:30 PM, Oliver Hartkopp wrote: > When accessing the SJA1000 controller registers in the indirect access mode, > writing the register number and reading/writing the data has to be an atomic > attempt. > > As the sja1000_isa driver is an old style driver with a fixed number of > instances the locking variable depends on the same index like all the other > configuration elements given on the module command line. > > As a positive side effect dev->dev_id is populated by the instance index, > which was missing in 3e66d0138c05d9 ("can: populate netdev::dev_id for udev > discrimination"). > > Reported-by: Marc Kleine-Budde <mkl@pengutronix.de> > Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net> Applied to can/master. Thanks, Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de | [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 242 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH] can: sja1000_isa: add locking for indirect register access mode 2014-04-15 17:30 ` [PATCH] can: sja1000_isa: add locking for indirect register access mode Oliver Hartkopp 2014-04-15 21:26 ` Thomas Gleixner 2014-04-17 19:23 ` Marc Kleine-Budde @ 2014-04-21 17:39 ` Oliver Hartkopp [not found] ` <CA+s8ZroSGpijgG4ruk2T1V5Vp1WrCcVjVPPrqGU-rQSDEUxzXg@mail.gmail.com> 2 siblings, 1 reply; 16+ messages in thread From: Oliver Hartkopp @ 2014-04-21 17:39 UTC (permalink / raw) To: khurram gulzar; +Cc: Marc Kleine-Budde, Wolfgang Grandegger, linux-can Hello Khurram, is it possible for you to test this patch with your hardware? It should apply on your used kernel without problems. Thanks & best regards, Oliver On 15.04.2014 19:30, Oliver Hartkopp wrote: > When accessing the SJA1000 controller registers in the indirect access mode, > writing the register number and reading/writing the data has to be an atomic > attempt. > > As the sja1000_isa driver is an old style driver with a fixed number of > instances the locking variable depends on the same index like all the other > configuration elements given on the module command line. > > As a positive side effect dev->dev_id is populated by the instance index, > which was missing in 3e66d0138c05d9 ("can: populate netdev::dev_id for udev > discrimination"). > > Reported-by: Marc Kleine-Budde <mkl@pengutronix.de> > Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net> > > --- > > diff --git a/drivers/net/can/sja1000/sja1000_isa.c b/drivers/net/can/sja1000/sja1000_isa.c > index df136a2..014695d 100644 > --- a/drivers/net/can/sja1000/sja1000_isa.c > +++ b/drivers/net/can/sja1000/sja1000_isa.c > @@ -46,6 +46,7 @@ static int clk[MAXDEV]; > static unsigned char cdr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; > static unsigned char ocr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; > static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; > +static spinlock_t indirect_lock[MAXDEV]; /* lock for indirect access mode */ > > module_param_array(port, ulong, NULL, S_IRUGO); > MODULE_PARM_DESC(port, "I/O port number"); > @@ -101,19 +102,26 @@ static void sja1000_isa_port_write_reg(const struct sja1000_priv *priv, > static u8 sja1000_isa_port_read_reg_indirect(const struct sja1000_priv *priv, > int reg) > { > - unsigned long base = (unsigned long)priv->reg_base; > + unsigned long flags, base = (unsigned long)priv->reg_base; > + u8 readval; > > + spin_lock_irqsave(&indirect_lock[priv->dev->dev_id], flags); > outb(reg, base); > - return inb(base + 1); > + readval = inb(base + 1); > + spin_unlock_irqrestore(&indirect_lock[priv->dev->dev_id], flags); > + > + return readval; > } > > static void sja1000_isa_port_write_reg_indirect(const struct sja1000_priv *priv, > int reg, u8 val) > { > - unsigned long base = (unsigned long)priv->reg_base; > + unsigned long flags, base = (unsigned long)priv->reg_base; > > + spin_lock_irqsave(&indirect_lock[priv->dev->dev_id], flags); > outb(reg, base); > outb(val, base + 1); > + spin_unlock_irqrestore(&indirect_lock[priv->dev->dev_id], flags); > } > > static int sja1000_isa_probe(struct platform_device *pdev) > @@ -169,6 +177,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) > if (iosize == SJA1000_IOSIZE_INDIRECT) { > priv->read_reg = sja1000_isa_port_read_reg_indirect; > priv->write_reg = sja1000_isa_port_write_reg_indirect; > + spin_lock_init(&indirect_lock[idx]); > } else { > priv->read_reg = sja1000_isa_port_read_reg; > priv->write_reg = sja1000_isa_port_write_reg; > @@ -198,6 +207,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) > > platform_set_drvdata(pdev, dev); > SET_NETDEV_DEV(dev, &pdev->dev); > + dev->dev_id = idx; > > err = register_sja1000dev(dev); > if (err) { > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-can" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <CA+s8ZroSGpijgG4ruk2T1V5Vp1WrCcVjVPPrqGU-rQSDEUxzXg@mail.gmail.com>]
* Re: [PATCH] can: sja1000_isa: add locking for indirect register access mode [not found] ` <CA+s8ZroSGpijgG4ruk2T1V5Vp1WrCcVjVPPrqGU-rQSDEUxzXg@mail.gmail.com> @ 2014-04-24 11:41 ` Oliver Hartkopp 0 siblings, 0 replies; 16+ messages in thread From: Oliver Hartkopp @ 2014-04-24 11:41 UTC (permalink / raw) To: khurram gulzar; +Cc: Marc Kleine-Budde, Wolfgang Grandegger, linux-can Hi Khurram, usual faults, when there's no traffic: - interface is not 'up' - bitrate is not set - CAN bus is not terminated - no second CAN node available(*) on the CAN bus to acknowledge the CAN frames * = which the same correct bittiming Are there any interrupts showing up for irq10 or irq11 in /proc/interrupts ?? Because when you see a successful transmission a transmit interrupt must have been there. Can you sent the outputs of: grep " 1[01]:" /proc/interrupts grep " can[01]" /proc/net/dev ip -det link show can0 ip -det link show can1 Thanks, Oliver On 24.04.2014 11:17, khurram gulzar wrote: > Hi Oliver, > I could test it but i have other problems with sja1000_isa driver > I can load the driver successfully. the data is transmitted successfully but > its not able to receive any data. > Can Trace shows the data is transmitted from the device i am controlling but > no interrupt is generated for received data i.e. no data is received :( > The same can card work without any problems with 2.6.26 kernel when socketcan > was not part of kernel. > I have double checked the interrupt jumpers and also the interrupt table in > /proc/interrupts shows the interrupts are linked with 10 to can0 and 11 to > can1 but unfortunately no interrupt > > Any ideas ? > > > > On Mon, Apr 21, 2014 at 8:39 PM, Oliver Hartkopp <socketcan@hartkopp.net > <mailto:socketcan@hartkopp.net>> wrote: > > Hello Khurram, > > is it possible for you to test this patch with your hardware? > > It should apply on your used kernel without problems. > > Thanks & best regards, > Oliver > > On 15.04.2014 19:30, Oliver Hartkopp wrote: > > When accessing the SJA1000 controller registers in the indirect access mode, > > writing the register number and reading/writing the data has to be an atomic > > attempt. > > > > As the sja1000_isa driver is an old style driver with a fixed number of > > instances the locking variable depends on the same index like all the other > > configuration elements given on the module command line. > > > > As a positive side effect dev->dev_id is populated by the instance index, > > which was missing in 3e66d0138c05d9 ("can: populate netdev::dev_id for udev > > discrimination"). > > > > Reported-by: Marc Kleine-Budde <mkl@pengutronix.de > <mailto:mkl@pengutronix.de>> > > Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net > <mailto:socketcan@hartkopp.net>> > > > > --- > > > > diff --git a/drivers/net/can/sja1000/sja1000_isa.c > b/drivers/net/can/sja1000/sja1000_isa.c > > index df136a2..014695d 100644 > > --- a/drivers/net/can/sja1000/sja1000_isa.c > > +++ b/drivers/net/can/sja1000/sja1000_isa.c > > @@ -46,6 +46,7 @@ static int clk[MAXDEV]; > > static unsigned char cdr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; > > static unsigned char ocr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; > > static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; > > +static spinlock_t indirect_lock[MAXDEV]; /* lock for indirect access > mode */ > > > > module_param_array(port, ulong, NULL, S_IRUGO); > > MODULE_PARM_DESC(port, "I/O port number"); > > @@ -101,19 +102,26 @@ static void sja1000_isa_port_write_reg(const > struct sja1000_priv *priv, > > static u8 sja1000_isa_port_read_reg_indirect(const struct sja1000_priv > *priv, > > int reg) > > { > > - unsigned long base = (unsigned long)priv->reg_base; > > + unsigned long flags, base = (unsigned long)priv->reg_base; > > + u8 readval; > > > > + spin_lock_irqsave(&indirect_lock[priv->dev->dev_id], flags); > > outb(reg, base); > > - return inb(base + 1); > > + readval = inb(base + 1); > > + spin_unlock_irqrestore(&indirect_lock[priv->dev->dev_id], flags); > > + > > + return readval; > > } > > > > static void sja1000_isa_port_write_reg_indirect(const struct > sja1000_priv *priv, > > int reg, u8 val) > > { > > - unsigned long base = (unsigned long)priv->reg_base; > > + unsigned long flags, base = (unsigned long)priv->reg_base; > > > > + spin_lock_irqsave(&indirect_lock[priv->dev->dev_id], flags); > > outb(reg, base); > > outb(val, base + 1); > > + spin_unlock_irqrestore(&indirect_lock[priv->dev->dev_id], flags); > > } > > > > static int sja1000_isa_probe(struct platform_device *pdev) > > @@ -169,6 +177,7 @@ static int sja1000_isa_probe(struct platform_device > *pdev) > > if (iosize == SJA1000_IOSIZE_INDIRECT) { > > priv->read_reg = sja1000_isa_port_read_reg_indirect; > > priv->write_reg = sja1000_isa_port_write_reg_indirect; > > + spin_lock_init(&indirect_lock[idx]); > > } else { > > priv->read_reg = sja1000_isa_port_read_reg; > > priv->write_reg = sja1000_isa_port_write_reg; > > @@ -198,6 +207,7 @@ static int sja1000_isa_probe(struct platform_device > *pdev) > > > > platform_set_drvdata(pdev, dev); > > SET_NETDEV_DEV(dev, &pdev->dev); > > + dev->dev_id = idx; > > > > err = register_sja1000dev(dev); > > if (err) { > > > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-can" in > > the body of a message to majordomo@vger.kernel.org <mailto:majordomo@vger.kernel.org> > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH] slip: fix spinlock variant 2014-04-15 13:42 ` Marc Kleine-Budde 2014-04-15 17:30 ` [PATCH] can: sja1000_isa: add locking for indirect register access mode Oliver Hartkopp @ 2014-04-26 19:18 ` Oliver Hartkopp 2014-04-28 3:35 ` David Miller 1 sibling, 1 reply; 16+ messages in thread From: Oliver Hartkopp @ 2014-04-26 19:18 UTC (permalink / raw) To: David Miller; +Cc: Andre Naujoks, Linux Netdev List, linux-can, Alexander Stein With commit cc9fa74e2a ("slip/slcan: added locking in wakeup function") a formerly missing locking was added to slip.c and slcan.c by Andre Naujoks. Alexander Stein contributed the fix 367525c8c2 ("can: slcan: Fix spinlock variant") as the kernel lock debugging advised to use spin_lock_bh() instead of just using spin_lock(). This fix has to be applied to the same code section in slip.c for the same reason too. Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net> --- diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c index cc70ecf..ad4a94e 100644 --- a/drivers/net/slip/slip.c +++ b/drivers/net/slip/slip.c @@ -429,13 +429,13 @@ static void slip_write_wakeup(struct tty_struct *tty) if (!sl || sl->magic != SLIP_MAGIC || !netif_running(sl->dev)) return; - spin_lock(&sl->lock); + spin_lock_bh(&sl->lock); if (sl->xleft <= 0) { /* Now serial buffer is almost free & we can start * transmission of another packet */ sl->dev->stats.tx_packets++; clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); - spin_unlock(&sl->lock); + spin_unlock_bh(&sl->lock); sl_unlock(sl); return; } @@ -443,7 +443,7 @@ static void slip_write_wakeup(struct tty_struct *tty) actual = tty->ops->write(tty, sl->xhead, sl->xleft); sl->xleft -= actual; sl->xhead += actual; - spin_unlock(&sl->lock); + spin_unlock_bh(&sl->lock); } static void sl_tx_timeout(struct net_device *dev) ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH] slip: fix spinlock variant 2014-04-26 19:18 ` [PATCH] slip: fix spinlock variant Oliver Hartkopp @ 2014-04-28 3:35 ` David Miller 0 siblings, 0 replies; 16+ messages in thread From: David Miller @ 2014-04-28 3:35 UTC (permalink / raw) To: socketcan; +Cc: nautsch2, netdev, linux-can, alexander.stein From: Oliver Hartkopp <socketcan@hartkopp.net> Date: Sat, 26 Apr 2014 21:18:32 +0200 > With commit cc9fa74e2a ("slip/slcan: added locking in wakeup function") a > formerly missing locking was added to slip.c and slcan.c by Andre Naujoks. > > Alexander Stein contributed the fix 367525c8c2 ("can: slcan: Fix spinlock > variant") as the kernel lock debugging advised to use spin_lock_bh() instead > of just using spin_lock(). > > This fix has to be applied to the same code section in slip.c for the same > reason too. > > Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net> Applied and queued up for -stable, thanks. ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2014-04-28 3:35 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <CA+s8ZrqFBun4bo2rJJFHb0FrV7m7PLybUVM+jjahKsdW8bdnaQ@mail.gmail.com>
2014-04-15 9:55 ` Problem with Eurotech COM1273 Dual Channel CAN PC104 Module Wolfgang Grandegger
2014-04-15 10:50 ` Oliver Hartkopp
[not found] ` <CA+s8ZroY7j8MLpFQh568QdeB24zBwVAVXbi7RzQF+baFi+Mpkw@mail.gmail.com>
2014-04-15 11:55 ` Oliver Hartkopp
[not found] ` <CA+s8Zrqrd_U0g1GRCDzXncgWLA_kO3Hyhjwy6Oe1S0cYohm2og@mail.gmail.com>
2014-04-15 12:00 ` Oliver Hartkopp
2014-04-15 12:33 ` Marc Kleine-Budde
2014-04-15 13:19 ` Oliver Hartkopp
2014-04-15 13:42 ` Marc Kleine-Budde
2014-04-15 17:30 ` [PATCH] can: sja1000_isa: add locking for indirect register access mode Oliver Hartkopp
2014-04-15 21:26 ` Thomas Gleixner
2014-04-15 21:49 ` Marc Kleine-Budde
2014-04-16 8:48 ` Thomas Gleixner
2014-04-17 19:23 ` Marc Kleine-Budde
2014-04-21 17:39 ` Oliver Hartkopp
[not found] ` <CA+s8ZroSGpijgG4ruk2T1V5Vp1WrCcVjVPPrqGU-rQSDEUxzXg@mail.gmail.com>
2014-04-24 11:41 ` Oliver Hartkopp
2014-04-26 19:18 ` [PATCH] slip: fix spinlock variant Oliver Hartkopp
2014-04-28 3:35 ` 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).