All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver
@ 2012-02-17 12:24 Stephane Grosjean
  2012-02-17 12:24 ` [PATCH 1/3 v5] can/usb: PEAK-System Technik USB adapters driver core Stephane Grosjean
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Stephane Grosjean @ 2012-02-17 12:24 UTC (permalink / raw)
  To: Oliver Hartkopp
  Cc: linux-can Mailing List, linux usb Mailing List, Stephane Grosjean

That serie of patches adds the peak_usb driver which handles the PCAN-USB
and PCAN-USB Pro adapters from PEAK-System (http://www.peak-system.com).
These patches are planned for kernel v3.02.00 and above.

Stephane Grosjean (3):
  can/usb: PEAK-System Technik USB adapters driver core
  can/usb: PEAK-System Technik PCAN-USB specific part
  can/usb: PEAK-System Technik PCAN-USB Pro specific part

 drivers/net/can/usb/Kconfig                  |    5 +
 drivers/net/can/usb/Makefile                 |    1 +
 drivers/net/can/usb/peak_usb/Makefile        |    2 +
 drivers/net/can/usb/peak_usb/pcan_usb.c      |  901 ++++++++++++++++++++++
 drivers/net/can/usb/peak_usb/pcan_usb_core.c |  954 ++++++++++++++++++++++++
 drivers/net/can/usb/peak_usb/pcan_usb_core.h |  146 ++++
 drivers/net/can/usb/peak_usb/pcan_usb_pro.c  | 1036 ++++++++++++++++++++++++++
 drivers/net/can/usb/peak_usb/pcan_usb_pro.h  |  178 +++++
 8 files changed, 3223 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/can/usb/peak_usb/Makefile
 create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb.c
 create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb_core.c
 create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb_core.h
 create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb_pro.c
 create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb_pro.h

-- 
1.7.5.4


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

* [PATCH 1/3 v5] can/usb: PEAK-System Technik USB adapters driver core
  2012-02-17 12:24 [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver Stephane Grosjean
@ 2012-02-17 12:24 ` Stephane Grosjean
  2012-02-22  7:05 ` [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver Oliver Hartkopp
  2012-02-22 11:03 ` Marc Kleine-Budde
  2 siblings, 0 replies; 11+ messages in thread
From: Stephane Grosjean @ 2012-02-17 12:24 UTC (permalink / raw)
  To: Oliver Hartkopp
  Cc: linux-can Mailing List, linux usb Mailing List, Stephane Grosjean

This patch adds the core of the peak_usb driver which handles PEAK-System
Technik PCAN USB adapters. It defines the parts which are common to the
PCAN-USB adapters: can network interfaces management, network-to/from-usb
data path interface, timestamps management...

Signed-off-by: Stephane Grosjean <s.grosjean@peak-system.com>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
---
v5 changes:
- add some missing usb_anchor_urb() before re-submitting IN urbs
- ask now for usb core to free the transfer buffers when freeing urbs
- respin OUT urbs unlinking on device close
- change any (onoff) ? 1 : 0 into !!onoff
- change probe msgs into something closer to other peak_xx drivers

 drivers/net/can/usb/Kconfig                  |    5 +
 drivers/net/can/usb/Makefile                 |    1 +
 drivers/net/can/usb/peak_usb/Makefile        |    2 +
 drivers/net/can/usb/peak_usb/pcan_usb_core.c |  954 ++++++++++++++++++++++++++
 drivers/net/can/usb/peak_usb/pcan_usb_core.h |  146 ++++
 5 files changed, 1108 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/can/usb/peak_usb/Makefile
 create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb_core.c
 create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb_core.h

diff --git a/drivers/net/can/usb/Kconfig b/drivers/net/can/usb/Kconfig
index 0452549..fd3cd6f 100644
--- a/drivers/net/can/usb/Kconfig
+++ b/drivers/net/can/usb/Kconfig
@@ -13,4 +13,9 @@ config CAN_ESD_USB2
           This driver supports the CAN-USB/2 interface
           from esd electronic system design gmbh (http://www.esd.eu).
 
+config CAN_PEAK_USB
+	tristate "PEAK PCAN-USB/USB Pro interfaces"
+	---help---
+	  This driver supports the PCAN-USB and PCAN-USB Pro adapters
+	  from PEAK-System Technik (http://www.peak-system.com).
 endmenu
diff --git a/drivers/net/can/usb/Makefile b/drivers/net/can/usb/Makefile
index fce3cf1..da6d1d3 100644
--- a/drivers/net/can/usb/Makefile
+++ b/drivers/net/can/usb/Makefile
@@ -4,5 +4,6 @@
 
 obj-$(CONFIG_CAN_EMS_USB) += ems_usb.o
 obj-$(CONFIG_CAN_ESD_USB2) += esd_usb2.o
+obj-$(CONFIG_CAN_PEAK_USB) += peak_usb/
 
 ccflags-$(CONFIG_CAN_DEBUG_DEVICES) := -DDEBUG
diff --git a/drivers/net/can/usb/peak_usb/Makefile b/drivers/net/can/usb/peak_usb/Makefile
new file mode 100644
index 0000000..1aefbc8
--- /dev/null
+++ b/drivers/net/can/usb/peak_usb/Makefile
@@ -0,0 +1,2 @@
+obj-$(CONFIG_CAN_PEAK_USB) += peak_usb.o
+peak_usb-y = pcan_usb_core.o pcan_usb.o pcan_usb_pro.o
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
new file mode 100644
index 0000000..601a548
--- /dev/null
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
@@ -0,0 +1,954 @@
+/*
+ * CAN driver for PEAK System USB adapters
+ * Derived from the PCAN project file driver/src/pcan_usb_core.c
+ *
+ * Copyright (C) 2003-2010 PEAK System-Technik GmbH
+ * Copyright (C) 2010-2012 Stephane Grosjean <s.grosjean@peak-system.com>
+ *
+ * Many thanks to Klaus Hitschler <klaus.hitschler@gmx.de>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+#include <linux/init.h>
+#include <linux/signal.h>
+#include <linux/slab.h>
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/usb.h>
+
+#include <linux/can.h>
+#include <linux/can/dev.h>
+#include <linux/can/error.h>
+
+#include "pcan_usb_core.h"
+
+MODULE_AUTHOR("Stephane Grosjean <s.grosjean@peak-system.com>");
+MODULE_DESCRIPTION("CAN driver for PEAK-System USB adapters");
+MODULE_LICENSE("GPL v2");
+
+/* Table of devices that work with this driver */
+static struct usb_device_id peak_usb_table[] = {
+	{USB_DEVICE(PCAN_USB_VENDOR_ID, PCAN_USB_PRODUCT_ID)},
+	{USB_DEVICE(PCAN_USB_VENDOR_ID, PCAN_USBPRO_PRODUCT_ID)},
+	{} /* Terminating entry */
+};
+
+MODULE_DEVICE_TABLE(usb, peak_usb_table);
+
+/* List of supported PCAN-USB adapters (NULL terminated list) */
+static struct peak_usb_adapter *peak_usb_adapters_list[] = {
+	&pcan_usb,
+	&pcan_usb_pro,
+	NULL,
+};
+
+/*
+ * dump memory
+ */
+#define DUMP_WIDTH	16
+void dump_mem(char *prompt, void *p, int l)
+{
+	char tmp[(3 * DUMP_WIDTH) + 1];
+	u8 *pc = p;
+	int i, ltmp;
+
+	pr_info("%s dumping %s (%d bytes):\n",
+		PCAN_USB_DRIVER_NAME, prompt ? prompt : "memory", l);
+	for (i = ltmp = 0; i < l; ) {
+		ltmp += sprintf(tmp + ltmp, "%02X ", *pc++);
+		if ((++i % DUMP_WIDTH) == 0) {
+			pr_info("%s %s\n", PCAN_USB_DRIVER_NAME, tmp);
+			ltmp = 0;
+		}
+	}
+	if (i % DUMP_WIDTH)
+		pr_info("%s %s\n", PCAN_USB_DRIVER_NAME, tmp);
+}
+
+/*
+ * initialize a time_ref object with usb adapter own settings
+ */
+void peak_usb_init_time_ref(struct peak_time_ref *time_ref,
+			    struct peak_usb_adapter *adapter)
+{
+	if (time_ref) {
+		memset(time_ref, 0, sizeof(struct peak_time_ref));
+		time_ref->adapter = adapter;
+	}
+}
+
+static void peak_usb_add_us(struct timeval *tv, u32 delta_us)
+{
+	/* number of s. to add to final time */
+	u32 delta_s = delta_us / 1000000;
+
+	delta_us -= delta_s * 1000000;
+
+	tv->tv_usec += delta_us;
+	if (tv->tv_usec >= 1000000) {
+		tv->tv_usec -= 1000000;
+		delta_s++;
+	}
+	tv->tv_sec += delta_s;
+}
+
+/*
+ * sometimes, another now may be  more recent than current one...
+ */
+void peak_usb_update_ts_now(struct peak_time_ref *time_ref, u32 ts_now)
+{
+	time_ref->ts_dev_2 = ts_now;
+
+	/* should wait at least two passes before computing */
+	if (time_ref->tv_host.tv_sec > 0) {
+		u32 delta_ts = time_ref->ts_dev_2 - time_ref->ts_dev_1;
+
+		if (time_ref->ts_dev_2 < time_ref->ts_dev_1)
+			delta_ts &= (1 << time_ref->adapter->ts_used_bits) - 1;
+
+		time_ref->ts_total += delta_ts;
+	}
+}
+
+/*
+ * register device timestamp as now
+ */
+void peak_usb_set_ts_now(struct peak_time_ref *time_ref, u32 ts_now)
+{
+	if (time_ref->tv_host_0.tv_sec == 0) {
+		do_gettimeofday(&time_ref->tv_host_0);
+		time_ref->tv_host.tv_sec = 0;
+	} else {
+		/*
+		 * delta_us should not be >= 2^32 => delta_s should be < 4294
+		 * handle 32-bits wrapping here: if count of s. reaches 4200,
+		 * reset counters and change time base
+		 */
+		if (time_ref->tv_host.tv_sec != 0) {
+			u32 delta_s = time_ref->tv_host.tv_sec
+						- time_ref->tv_host_0.tv_sec;
+			if (delta_s > 4200) {
+				time_ref->tv_host_0 = time_ref->tv_host;
+				time_ref->ts_total = 0;
+			}
+		}
+
+		do_gettimeofday(&time_ref->tv_host);
+		time_ref->tick_count++;
+	}
+
+	time_ref->ts_dev_1 = time_ref->ts_dev_2;
+	peak_usb_update_ts_now(time_ref, ts_now);
+}
+
+/*
+ * compute timeval according to current ts and time_ref data
+ */
+void peak_usb_get_ts_tv(struct peak_time_ref *time_ref, u32 ts,
+			struct timeval *tv)
+{
+	/* protect from getting timeval before setting now */
+	if (time_ref->tv_host.tv_sec > 0) {
+		u64 delta_us;
+
+		delta_us = ts - time_ref->ts_dev_2;
+		if (ts < time_ref->ts_dev_2)
+			delta_us &= (1 << time_ref->adapter->ts_used_bits) - 1;
+
+		delta_us += time_ref->ts_total;
+
+		delta_us *= time_ref->adapter->us_per_ts_scale;
+		delta_us >>= time_ref->adapter->us_per_ts_shift;
+
+		*tv = time_ref->tv_host_0;
+		peak_usb_add_us(tv, (u32)delta_us);
+	} else {
+		do_gettimeofday(tv);
+	}
+}
+
+/*
+ * callback for bulk Rx urb
+ */
+static void peak_usb_read_bulk_callback(struct urb *urb)
+{
+	struct peak_usb_device *dev = urb->context;
+	struct net_device *netdev;
+	int err;
+
+	netdev = dev->netdev;
+
+	if (!netif_device_present(netdev))
+		return;
+
+	switch (urb->status) {
+	case 0: /* success */
+		break;
+
+	/* device unplugged */
+	case -ENOENT:
+
+	/* occurs when netdev is removed (transport endpoint shutdown) */
+	case -ESHUTDOWN:
+
+	/* occurs on disconnecting PCAN-USB device only (ignored) */
+	case -EILSEQ:
+		return;
+
+	default:
+		if (net_ratelimit())
+			netdev_err(netdev,
+				   "Rx URB aborted (%d)\n", urb->status);
+		goto resubmit_urb;
+	}
+
+	/* protect from any incoming empty msgs */
+	if ((urb->actual_length > 0) && (dev->adapter->dev_decode_buf))
+		/* handle these kinds of msgs only is _start callback called */
+		if (dev->state & PCAN_USB_STATE_STARTED) {
+			err = dev->adapter->dev_decode_buf(dev, urb);
+			if (err)
+				dump_mem("received usb message",
+					urb->transfer_buffer,
+					urb->transfer_buffer_length);
+		}
+
+resubmit_urb:
+	usb_fill_bulk_urb(urb, dev->udev,
+		usb_rcvbulkpipe(dev->udev, dev->ep_msg_in),
+		urb->transfer_buffer, dev->adapter->rx_buffer_size,
+		peak_usb_read_bulk_callback, dev);
+
+	usb_anchor_urb(urb, &dev->rx_submitted);
+	err = usb_submit_urb(urb, GFP_ATOMIC);
+	if (!err)
+		return;
+
+	usb_unanchor_urb(urb);
+
+	if (err == -ENODEV)
+		netif_device_detach(netdev);
+	else
+		netdev_err(netdev, "failed resubmitting read bulk urb: %d\n",
+			   err);
+}
+
+/*
+ * callback for bulk Tx urb
+ */
+static void peak_usb_write_bulk_callback(struct urb *urb)
+{
+	struct peak_tx_urb_context *context = urb->context;
+	struct peak_usb_device *dev;
+	struct net_device *netdev;
+
+	BUG_ON(!context);
+
+	dev = context->dev;
+	netdev = dev->netdev;
+
+	atomic_dec(&dev->active_tx_urbs);
+
+	if (!netif_device_present(netdev))
+		return;
+
+	switch (urb->status) {
+	case 0: /* tx ok */
+		netdev->trans_start = jiffies;
+
+		/* transmission complete interrupt */
+		netdev->stats.tx_packets++;
+		netdev->stats.tx_bytes += context->dlc;
+
+		can_get_echo_skb(netdev, context->echo_index);
+		break;
+
+	case -ENOENT: /* on ifconfig down */
+		break;
+	default:
+		netdev_err(netdev, "Tx URB aborted (%d)\n", urb->status);
+	}
+
+	/* release context */
+	context->echo_index = PCAN_USB_MAX_TX_URBS;
+
+	netif_wake_queue(netdev);
+}
+
+/*
+ * called by netdev to send one skb on the CAN interface.
+ */
+static netdev_tx_t peak_usb_ndo_start_xmit(struct sk_buff *skb,
+					   struct net_device *netdev)
+{
+	struct peak_usb_device *dev = netdev_priv(netdev);
+	struct peak_tx_urb_context *context = NULL;
+	struct net_device_stats *stats = &netdev->stats;
+	struct can_frame *cf = (struct can_frame *)skb->data;
+	struct urb *urb;
+	u8 *obuf;
+	int i, err;
+	size_t size = dev->adapter->tx_buffer_size;
+
+	if (can_dropped_invalid_skb(netdev, skb))
+		return NETDEV_TX_OK;
+
+	if (!dev->adapter->dev_encode_msg) {
+		dev_kfree_skb(skb);
+		stats->tx_dropped++;
+		return NETDEV_TX_OK;
+	}
+
+	for (i = 0; i < PCAN_USB_MAX_TX_URBS; i++)
+		if (dev->tx_contexts[i].echo_index == PCAN_USB_MAX_TX_URBS) {
+			context = dev->tx_contexts + i;
+			break;
+		}
+
+	if (!context) {
+		/* should not occur except during restart */
+		return NETDEV_TX_BUSY;
+	}
+
+	urb = context->urb;
+	obuf = urb->transfer_buffer;
+	context->echo_index = i;
+	context->dlc = cf->can_dlc;
+
+	err = dev->adapter->dev_encode_msg(dev, skb, obuf, &size);
+	if (err) {
+		if (net_ratelimit())
+			netdev_err(netdev, "packet dropped\n");
+		dev_kfree_skb(skb);
+		stats->tx_dropped++;
+		return NETDEV_TX_OK;
+	}
+
+	usb_anchor_urb(urb, &dev->tx_submitted);
+
+	can_put_echo_skb(skb, netdev, context->echo_index);
+
+	atomic_inc(&dev->active_tx_urbs);
+
+	err = usb_submit_urb(urb, GFP_ATOMIC);
+	if (err) {
+		can_free_echo_skb(netdev, context->echo_index);
+
+		usb_unanchor_urb(urb);
+		dev_kfree_skb(skb);
+
+		atomic_dec(&dev->active_tx_urbs);
+
+		if (err == -ENODEV) {
+			netif_device_detach(netdev);
+		} else {
+			netdev_warn(netdev, "tx urb submitting failed err=%d\n",
+					err);
+			stats->tx_dropped++;
+		}
+	} else {
+		netdev->trans_start = jiffies;
+
+		/* slow down tx path */
+		if (atomic_read(&dev->active_tx_urbs) >= PCAN_USB_MAX_TX_URBS)
+			netif_stop_queue(netdev);
+	}
+
+	return NETDEV_TX_OK;
+}
+
+/*
+ * start the CAN interface.
+ * Rx and Tx urbs are allocated here. Rx urbs are submitted here.
+ */
+static int peak_usb_start(struct peak_usb_device *dev)
+{
+	struct net_device *netdev = dev->netdev;
+	int err, i;
+
+	for (i = 0; i < PCAN_USB_MAX_RX_URBS; i++) {
+		struct urb *urb;
+		u8 *buf;
+
+		/* create a URB, and a buffer for it, to receive usb messages */
+		urb = usb_alloc_urb(0, GFP_KERNEL);
+		if (!urb) {
+			netdev_err(netdev, "No memory left for URBs\n");
+			err = -ENOMEM;
+			break;
+		}
+
+		buf = kmalloc(dev->adapter->rx_buffer_size, GFP_KERNEL);
+		if (!buf) {
+			netdev_err(netdev, "No memory left for USB buffer\n");
+			usb_free_urb(urb);
+			err = -ENOMEM;
+			break;
+		}
+
+		usb_fill_bulk_urb(urb, dev->udev,
+			usb_rcvbulkpipe(dev->udev, dev->ep_msg_in),
+			buf, dev->adapter->rx_buffer_size,
+			peak_usb_read_bulk_callback, dev);
+
+		/* ask last usb_free_urb() to also kfree() transfer_buffer */
+		urb->transfer_flags |= URB_FREE_BUFFER;
+		usb_anchor_urb(urb, &dev->rx_submitted);
+
+		err = usb_submit_urb(urb, GFP_KERNEL);
+		if (err) {
+			if (err == -ENODEV)
+				netif_device_detach(dev->netdev);
+
+			usb_unanchor_urb(urb);
+			kfree(buf);
+			usb_free_urb(urb);
+			break;
+		}
+
+		/* drop reference, USB core will take care of freeing it */
+		usb_free_urb(urb);
+	}
+
+	/* did we submit any URBs? Warn if we was not able to submit all urbs */
+	if (i < PCAN_USB_MAX_RX_URBS) {
+		if (i == 0) {
+			netdev_err(netdev, "couldn't setup any rx URB\n");
+			return err;
+		}
+
+		netdev_warn(netdev, "rx performance may be slow\n");
+	}
+
+	/* pre-alloc tx buffers and corresponding urbs */
+	for (i = 0; i < PCAN_USB_MAX_TX_URBS; i++) {
+		struct peak_tx_urb_context *context;
+		struct urb *urb;
+		u8 *buf;
+
+		/* create a URB and a buffer for it, to transmit usb messages */
+		urb = usb_alloc_urb(0, GFP_KERNEL);
+		if (!urb) {
+			netdev_err(netdev, "No memory left for URBs\n");
+			err = -ENOMEM;
+			break;
+		}
+
+		buf = kmalloc(dev->adapter->tx_buffer_size, GFP_KERNEL);
+		if (!buf) {
+			netdev_err(netdev, "No memory left for USB buffer\n");
+			usb_free_urb(urb);
+			err = -ENOMEM;
+			break;
+		}
+
+		context = dev->tx_contexts + i;
+		context->dev = dev;
+		context->urb = urb;
+
+		usb_fill_bulk_urb(urb, dev->udev,
+			usb_sndbulkpipe(dev->udev, dev->ep_msg_out),
+			buf, dev->adapter->tx_buffer_size,
+			peak_usb_write_bulk_callback, context);
+
+		/* ask last usb_free_urb() to also kfree() transfer_buffer */
+		urb->transfer_flags |= URB_FREE_BUFFER;
+	}
+
+	/* warn if we were not able to allocate enough tx contexts */
+	if (i < PCAN_USB_MAX_TX_URBS) {
+		if (i == 0) {
+			netdev_err(netdev, "couldn't setup any tx URB\n");
+			return err;
+		}
+
+		netdev_warn(netdev, "tx performance may be slow\n");
+	}
+
+	if (dev->adapter->dev_start) {
+		err = dev->adapter->dev_start(dev);
+		if (err)
+			goto failed;
+	}
+
+	dev->state |= PCAN_USB_STATE_STARTED;
+
+	/* can set bus on now */
+	if (dev->adapter->dev_set_bus) {
+		err = dev->adapter->dev_set_bus(dev, 1);
+		if (err)
+			goto failed;
+	}
+
+	dev->can.state = CAN_STATE_ERROR_ACTIVE;
+
+	return 0;
+
+failed:
+	if (err == -ENODEV)
+		netif_device_detach(dev->netdev);
+
+	netdev_warn(netdev, "couldn't submit control: %d\n", err);
+
+	return err;
+}
+
+/*
+ * called by netdev to open the corresponding CAN interface.
+ */
+static int peak_usb_ndo_open(struct net_device *netdev)
+{
+	struct peak_usb_device *dev = netdev_priv(netdev);
+	int err;
+
+	/* common open */
+	err = open_candev(netdev);
+	if (err)
+		return err;
+
+	/* finally start device */
+	err = peak_usb_start(dev);
+	if (err) {
+		netdev_err(netdev, "couldn't start device: %d\n", err);
+		close_candev(netdev);
+		return err;
+	}
+
+	dev->open_time = jiffies;
+	netif_start_queue(netdev);
+
+	return 0;
+}
+
+/*
+ * unlink in-flight Rx and Tx urbs and free their memory.
+ */
+static void peak_usb_unlink_all_urbs(struct peak_usb_device *dev)
+{
+	int i;
+
+	/* free all Rx (submitted) urbs */
+	usb_kill_anchored_urbs(&dev->rx_submitted);
+
+	/* free unsubmitted Tx urbs first */
+	for (i = 0; i < PCAN_USB_MAX_TX_URBS; i++) {
+		if (dev->tx_contexts[i].echo_index != PCAN_USB_MAX_TX_URBS) {
+			/* this urb is always submitted, let usb core free */
+			/* by itself */
+			continue;
+		}
+
+		usb_free_urb(dev->tx_contexts[i].urb);
+		dev->tx_contexts[i].urb = NULL;
+	}
+
+	/* then free all submitted Tx urbs */
+	usb_kill_anchored_urbs(&dev->tx_submitted);
+	atomic_set(&dev->active_tx_urbs, 0);
+}
+
+/*
+ * called by netdev to close the corresponding CAN interface.
+ */
+static int peak_usb_ndo_stop(struct net_device *netdev)
+{
+	struct peak_usb_device *dev = netdev_priv(netdev);
+
+	/* unlink all pending urbs and free used memory */
+	peak_usb_unlink_all_urbs(dev);
+
+	netif_stop_queue(netdev);
+
+	dev->state &= ~PCAN_USB_STATE_STARTED;
+
+	if (dev->adapter->dev_stop)
+		dev->adapter->dev_stop(dev);
+
+	close_candev(netdev);
+
+	dev->open_time = 0;
+
+	dev->can.state = CAN_STATE_STOPPED;
+
+	/* can set bus off now */
+	if (dev->adapter->dev_set_bus) {
+		int err = dev->adapter->dev_set_bus(dev, 0);
+
+		if (err)
+			return err;
+	}
+
+	return 0;
+}
+
+/*
+ * handle end of waiting for the device to reset
+ */
+void peak_usb_restart_complete(struct peak_usb_device *dev)
+{
+	/* finally MUST update can state */
+	dev->can.state = CAN_STATE_ERROR_ACTIVE;
+
+	/* netdev queue can be awaken now */
+	netif_wake_queue(dev->netdev);
+}
+
+void peak_usb_async_complete(struct urb *urb)
+{
+	kfree(urb->transfer_buffer);
+	usb_free_urb(urb);
+}
+
+/*
+ * device (auto-)restart mechanism runs in a timer context =>
+ * MUST handle restart with asynchronous usb transfers
+ */
+static int peak_usb_restart(struct peak_usb_device *dev)
+{
+	struct urb *urb;
+	int err;
+	u8 *buf;
+
+	/*
+	 * if device doesn't define any asynchronous restart handler, simply
+	 * wake the netdev queue up
+	 */
+	if (!dev->adapter->dev_restart_async) {
+		peak_usb_restart_complete(dev);
+		return 0;
+	}
+
+	/* first allocate a urb to handle the asynchronous steps */
+	urb = usb_alloc_urb(0, GFP_ATOMIC);
+	if (!urb) {
+		netdev_err(dev->netdev, "no memory left for urb\n");
+		return -ENOMEM;
+	}
+
+	/* also allocate enough space for the commands to send */
+	buf = kmalloc(PCAN_USB_MAX_CMD_LEN, GFP_ATOMIC);
+	if (!buf) {
+		netdev_err(dev->netdev, "no memory left for async cmd\n");
+		usb_free_urb(urb);
+		return -ENOMEM;
+	}
+
+	/* call the device specific handler for the restart */
+	err = dev->adapter->dev_restart_async(dev, urb, buf);
+	if (!err)
+		return 0;
+
+	kfree(buf);
+	usb_free_urb(urb);
+
+	return err;
+}
+
+/*
+ * candev callback used to change CAN mode.
+ * Warning: this is called from a timer context!
+ */
+static int peak_usb_set_mode(struct net_device *netdev, enum can_mode mode)
+{
+	struct peak_usb_device *dev = netdev_priv(netdev);
+	int err = 0;
+
+	if (!dev->open_time)
+		return -EINVAL;
+
+	switch (mode) {
+	case CAN_MODE_START:
+		err = peak_usb_restart(dev);
+		if (err)
+			netdev_err(netdev, "couldn't start device (err %d)\n",
+				   err);
+		break;
+
+	default:
+		return -EOPNOTSUPP;
+	}
+
+	return err;
+}
+
+/*
+ * candev callback used to set device bitrate.
+ */
+static int peak_usb_set_bittiming(struct net_device *netdev)
+{
+	struct peak_usb_device *dev = netdev_priv(netdev);
+	struct can_bittiming *bt = &dev->can.bittiming;
+
+	if (dev->adapter->dev_set_bittiming) {
+		int err = dev->adapter->dev_set_bittiming(dev, bt);
+
+		if (err)
+			netdev_info(netdev, "couldn't set bitrate (err %d)\n",
+				err);
+		return err;
+	}
+
+	return 0;
+}
+
+static const struct net_device_ops peak_usb_netdev_ops = {
+	.ndo_open = peak_usb_ndo_open,
+	.ndo_stop = peak_usb_ndo_stop,
+	.ndo_start_xmit = peak_usb_ndo_start_xmit,
+};
+
+/*
+ * create one device which is attached to CAN controller #ctrl_idx of the
+ * usb adapter.
+ */
+static int peak_usb_create_dev(struct peak_usb_adapter *peak_usb_adapter,
+			       struct usb_interface *intf, int ctrl_idx)
+{
+	struct usb_device *usb_dev = interface_to_usbdev(intf);
+	int sizeof_candev = peak_usb_adapter->sizeof_dev_private;
+	struct peak_usb_device *dev;
+	struct net_device *netdev;
+	int i, err;
+	u16 tmp16;
+
+	if (sizeof_candev < sizeof(struct peak_usb_device))
+		sizeof_candev = sizeof(struct peak_usb_device);
+
+	netdev = alloc_candev(sizeof_candev, PCAN_USB_MAX_TX_URBS);
+	if (!netdev) {
+		dev_err(&intf->dev, "%s: couldn't alloc candev\n",
+			PCAN_USB_DRIVER_NAME);
+		return -ENOMEM;
+	}
+
+	dev = netdev_priv(netdev);
+
+	/* allocate a buffer large enough to send commands */
+	dev->cmd_buf = kmalloc(PCAN_USB_MAX_CMD_LEN, GFP_KERNEL);
+	if (!dev->cmd_buf) {
+		dev_err(&intf->dev, "%s: couldn't alloc cmd buffer\n",
+			PCAN_USB_DRIVER_NAME);
+		err = -ENOMEM;
+		goto lbl_set_intf_data;
+	}
+
+	dev->udev = usb_dev;
+	dev->netdev = netdev;
+	dev->adapter = peak_usb_adapter;
+	dev->ctrl_idx = ctrl_idx;
+	dev->state = PCAN_USB_STATE_CONNECTED;
+
+	dev->ep_msg_in = peak_usb_adapter->ep_msg_in;
+	dev->ep_msg_out = peak_usb_adapter->ep_msg_out[ctrl_idx];
+
+	dev->can.clock = peak_usb_adapter->clock;
+	dev->can.bittiming_const = &peak_usb_adapter->bittiming_const;
+	dev->can.do_set_bittiming = peak_usb_set_bittiming;
+	dev->can.do_set_mode = peak_usb_set_mode;
+	dev->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES |
+				      CAN_CTRLMODE_LISTENONLY;
+
+	netdev->netdev_ops = &peak_usb_netdev_ops;
+
+	netdev->flags |= IFF_ECHO; /* we support local echo */
+
+	init_usb_anchor(&dev->rx_submitted);
+
+	init_usb_anchor(&dev->tx_submitted);
+	atomic_set(&dev->active_tx_urbs, 0);
+
+	for (i = 0; i < PCAN_USB_MAX_TX_URBS; i++)
+		dev->tx_contexts[i].echo_index = PCAN_USB_MAX_TX_URBS;
+
+	dev->prev_siblings = usb_get_intfdata(intf);
+	usb_set_intfdata(intf, dev);
+
+	SET_NETDEV_DEV(netdev, &intf->dev);
+
+	err = register_candev(netdev);
+	if (err) {
+		dev_err(&intf->dev, "couldn't register CAN device: %d\n", err);
+		goto lbl_free_cmd_buf;
+	}
+
+	if (dev->prev_siblings)
+		(dev->prev_siblings)->next_siblings = dev;
+
+	/* keep hw revision into the netdevice */
+	tmp16 = le16_to_cpu(usb_dev->descriptor.bcdDevice);
+	dev->device_rev = tmp16 >> 8;
+
+	if (dev->adapter->dev_init) {
+		err = dev->adapter->dev_init(dev);
+		if (err)
+			goto lbl_free_cmd_buf;
+	}
+
+	/* set bus off */
+	if (dev->adapter->dev_set_bus) {
+		err = dev->adapter->dev_set_bus(dev, 0);
+		if (err)
+			goto lbl_free_cmd_buf;
+	}
+
+	/* get device number early */
+	if (dev->adapter->dev_get_device_id)
+		dev->adapter->dev_get_device_id(dev, &dev->device_number);
+
+	netdev_info(netdev, "attached to %s channel %u (device %u)\n",
+			peak_usb_adapter->name, ctrl_idx, dev->device_number);
+
+	return 0;
+
+lbl_free_cmd_buf:
+	kfree(dev->cmd_buf);
+
+lbl_set_intf_data:
+	usb_set_intfdata(intf, dev->prev_siblings);
+	free_candev(netdev);
+
+	return err;
+}
+
+/*
+ * called by the usb core when the device is removed from the system
+ */
+static void peak_usb_disconnect(struct usb_interface *intf)
+{
+	struct peak_usb_device *dev;
+
+	/* unregister as many netdev devices as siblings */
+	for (dev = usb_get_intfdata(intf); dev; dev = dev->prev_siblings) {
+		struct net_device *netdev = dev->netdev;
+		char name[IFNAMSIZ];
+
+		dev->state &= ~PCAN_USB_STATE_CONNECTED;
+		strncpy(name, netdev->name, IFNAMSIZ);
+
+		unregister_netdev(netdev);
+
+		free_candev(netdev);
+
+		peak_usb_unlink_all_urbs(dev);
+
+		kfree(dev->cmd_buf);
+
+		dev->next_siblings = NULL;
+		if (dev->adapter->dev_free)
+			dev->adapter->dev_free(dev);
+
+		dev_info(&intf->dev, "%s removed\n", name);
+	}
+
+	usb_set_intfdata(intf, NULL);
+}
+
+/*
+ * probe function for new PEAK-System devices
+ */
+static int peak_usb_probe(struct usb_interface *intf,
+			  const struct usb_device_id *id)
+{
+	struct usb_device *usb_dev = interface_to_usbdev(intf);
+	struct peak_usb_adapter *peak_usb_adapter, **pp;
+	int i, err = -ENOMEM;
+
+	usb_dev = interface_to_usbdev(intf);
+
+	/* get corresponding PCAN-USB adapter */
+	for (pp = peak_usb_adapters_list; *pp; pp++)
+		if ((*pp)->device_id == usb_dev->descriptor.idProduct)
+			break;
+
+	peak_usb_adapter = *pp;
+	if (!peak_usb_adapter) {
+		/* should never come except device_id bad usage in this file */
+		pr_err("%s: didn't find device id. 0x%x in devices list\n",
+			PCAN_USB_DRIVER_NAME, usb_dev->descriptor.idProduct);
+		return -ENODEV;
+	}
+
+	/* got corresponding adapter: check if it handles current interface */
+	if (peak_usb_adapter->intf_probe) {
+		err = peak_usb_adapter->intf_probe(intf);
+		if (err)
+			return err;
+	}
+
+	for (i = 0; i < peak_usb_adapter->ctrl_count; i++) {
+		err = peak_usb_create_dev(peak_usb_adapter, intf, i);
+		if (err) {
+			/* deregister already created devices */
+			peak_usb_disconnect(intf);
+			break;
+		}
+	}
+
+	return err;
+}
+
+/* usb specific object needed to register this driver with the usb subsystem */
+static struct usb_driver peak_usb_driver = {
+	.name = PCAN_USB_DRIVER_NAME,
+	.disconnect = peak_usb_disconnect,
+	.probe = peak_usb_probe,
+	.id_table = peak_usb_table,
+};
+
+static int __init peak_usb_init(void)
+{
+	int err;
+
+	/* register this driver with the USB subsystem */
+	err = usb_register(&peak_usb_driver);
+	if (err)
+		pr_err("%s: usb_register failed (err %d)\n",
+			PCAN_USB_DRIVER_NAME, err);
+
+	return err;
+}
+
+static int peak_usb_do_device_exit(struct device *d, void *arg)
+{
+	struct usb_interface *intf = to_usb_interface(d);
+	struct peak_usb_device *dev;
+
+	/* stop as many netdev devices as siblings */
+	for (dev = usb_get_intfdata(intf); dev; dev = dev->prev_siblings) {
+		struct net_device *netdev = dev->netdev;
+
+		if (netif_device_present(netdev))
+			if (dev->adapter->dev_exit)
+				dev->adapter->dev_exit(dev);
+	}
+
+	return 0;
+}
+
+static void __exit peak_usb_exit(void)
+{
+	int err;
+
+	/* last chance do send any synchronous commands here */
+	err = driver_for_each_device(&peak_usb_driver.drvwrap.driver, NULL,
+				     NULL, peak_usb_do_device_exit);
+	if (err)
+		pr_err("%s: failed to stop all can devices (err %d)\n",
+			PCAN_USB_DRIVER_NAME, err);
+
+	/* deregister this driver with the USB subsystem */
+	usb_deregister(&peak_usb_driver);
+
+	pr_info("%s: PCAN-USB interfaces driver unloaded\n",
+		PCAN_USB_DRIVER_NAME);
+}
+
+module_init(peak_usb_init);
+module_exit(peak_usb_exit);
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.h b/drivers/net/can/usb/peak_usb/pcan_usb_core.h
new file mode 100644
index 0000000..a948c5a
--- /dev/null
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.h
@@ -0,0 +1,146 @@
+/*
+ * CAN driver for PEAK System USB adapters
+ * Derived from the PCAN project file driver/src/pcan_usb_core.c
+ *
+ * Copyright (C) 2003-2010 PEAK System-Technik GmbH
+ * Copyright (C) 2010-2012 Stephane Grosjean <s.grosjean@peak-system.com>
+ *
+ * Many thanks to Klaus Hitschler <klaus.hitschler@gmx.de>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+#ifndef PCAN_USB_CORE_H
+#define PCAN_USB_CORE_H
+
+/* PEAK-System vendor id. */
+#define PCAN_USB_VENDOR_ID		0x0c72
+
+/* supported device ids. */
+#define PCAN_USB_PRODUCT_ID		0x000c
+#define PCAN_USBPRO_PRODUCT_ID		0x000d
+
+#define PCAN_USB_DRIVER_NAME		"peak_usb"
+
+/* number of urbs that are submitted for rx/tx per channel */
+#define PCAN_USB_MAX_RX_URBS		4
+#define PCAN_USB_MAX_TX_URBS		10
+
+/* usb adapters maximum channels per usb interface */
+#define PCAN_USB_MAX_CHANNEL		2
+
+/* maximum length of the usb commands sent to/received from  the devices */
+#define PCAN_USB_MAX_CMD_LEN		32
+
+struct peak_usb_device;
+
+/* PEAK-System USB adapter descriptor */
+struct peak_usb_adapter {
+	char *name;
+	u32 device_id;
+	struct can_clock clock;
+	struct can_bittiming_const bittiming_const;
+	unsigned int ctrl_count;
+
+	int (*intf_probe)(struct usb_interface *intf);
+
+	int (*dev_init)(struct peak_usb_device *dev);
+	void (*dev_exit)(struct peak_usb_device *dev);
+	void (*dev_free)(struct peak_usb_device *dev);
+	int (*dev_open)(struct peak_usb_device *dev);
+	int (*dev_close)(struct peak_usb_device *dev);
+	int (*dev_set_bittiming)(struct peak_usb_device *dev,
+					struct can_bittiming *bt);
+	int (*dev_set_bus)(struct peak_usb_device *dev, u8 onoff);
+	int (*dev_get_device_id)(struct peak_usb_device *dev, u32 *device_id);
+	int (*dev_decode_buf)(struct peak_usb_device *dev, struct urb *urb);
+	int (*dev_encode_msg)(struct peak_usb_device *dev, struct sk_buff *skb,
+					u8 *obuf, size_t *size);
+	int (*dev_start)(struct peak_usb_device *dev);
+	int (*dev_stop)(struct peak_usb_device *dev);
+	int (*dev_restart_async)(struct peak_usb_device *dev, struct urb *urb,
+					u8 *buf);
+	u8 ep_msg_in;
+	u8 ep_msg_out[PCAN_USB_MAX_CHANNEL];
+	u8 ts_used_bits;
+	u32 ts_period;
+	u8 us_per_ts_shift;
+	u32 us_per_ts_scale;
+
+	int rx_buffer_size;
+	int tx_buffer_size;
+	int sizeof_dev_private;
+};
+
+extern struct peak_usb_adapter pcan_usb;
+extern struct peak_usb_adapter pcan_usb_pro;
+
+struct peak_time_ref {
+	struct timeval tv_host_0, tv_host;
+	u32 ts_dev_1, ts_dev_2;
+	u64 ts_total;
+	u32 tick_count;
+	struct peak_usb_adapter *adapter;
+};
+
+struct peak_tx_urb_context {
+	struct peak_usb_device *dev;
+	u32 echo_index;
+	u8 dlc;
+	struct urb *urb;
+};
+
+#define PCAN_USB_STATE_CONNECTED	0x00000001
+#define PCAN_USB_STATE_STARTED		0x00000002
+
+/* PEAK-System USB device */
+struct peak_usb_device {
+	struct can_priv can;
+	struct peak_usb_adapter *adapter;
+	unsigned int ctrl_idx;
+	int open_time;
+	u32 state;
+
+	struct sk_buff *echo_skb[PCAN_USB_MAX_TX_URBS];
+
+	struct usb_device *udev;
+	struct net_device *netdev;
+
+	atomic_t active_tx_urbs;
+	struct usb_anchor tx_submitted;
+	struct peak_tx_urb_context tx_contexts[PCAN_USB_MAX_TX_URBS];
+
+	u8 *cmd_buf;
+	struct usb_anchor rx_submitted;
+
+	u32 device_number;
+	u8 device_rev;
+
+	u8 ep_msg_in;
+	u8 ep_msg_out;
+
+	u16 bus_load;
+
+	struct peak_usb_device *prev_siblings;
+	struct peak_usb_device *next_siblings;
+};
+
+void dump_mem(char *prompt, void *p, int l);
+
+/* common timestamp management */
+void peak_usb_init_time_ref(struct peak_time_ref *time_ref,
+			    struct peak_usb_adapter *adapter);
+void peak_usb_update_ts_now(struct peak_time_ref *time_ref, u32 ts_now);
+void peak_usb_set_ts_now(struct peak_time_ref *time_ref, u32 ts_now);
+void peak_usb_get_ts_tv(struct peak_time_ref *time_ref, u32 ts,
+			struct timeval *tv);
+
+void peak_usb_async_complete(struct urb *urb);
+void peak_usb_restart_complete(struct peak_usb_device *dev);
+#endif
-- 
1.7.5.4


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

* Re: [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver
  2012-02-17 12:24 [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver Stephane Grosjean
  2012-02-17 12:24 ` [PATCH 1/3 v5] can/usb: PEAK-System Technik USB adapters driver core Stephane Grosjean
@ 2012-02-22  7:05 ` Oliver Hartkopp
  2012-02-22  7:30   ` Oliver Hartkopp
  2012-02-22 11:03 ` Marc Kleine-Budde
  2 siblings, 1 reply; 11+ messages in thread
From: Oliver Hartkopp @ 2012-02-22  7:05 UTC (permalink / raw)
  To: Stephane Grosjean; +Cc: linux-can Mailing List

On 17.02.2012 13:24, Stephane Grosjean wrote:

> That serie of patches adds the peak_usb driver which handles the PCAN-USB
> and PCAN-USB Pro adapters from PEAK-System (http://www.peak-system.com).
> These patches are planned for kernel v3.02.00 and above.


Hello Stephane,

i tested this driver on my way back home yesterday.

The error handling looks good now.

But the plug-out of the USB hardware (USB & USBpro) when sending traffic
through these interfaces leads to heavy problems.

My setup was

bus0: pcmcia#0, USBpro#0, USB, USB
bus1: pcmcia#1, USBpro#1

I was sending with 'cangen -g0 -i' on both USBpro interfaces.

When unplug the USBpro i got the following kernel dump. After waiting some
more seconds after this kernel dump the system crashed finally - i assume he
issue corrupted some more kernel internal data structures ... 

In the log below the kernel didn't crash immediately therefore i was luckily
able to save it.

This behaviour is reproducible with both USB & USBpro under tx load.

Regards,
Oliver

Feb 21 19:38:01 vwagwolkf484 kernel: [  218.383844] pcmcia_socket pcmcia_socket0: pccard: PCMCIA card inserted into slot 0
Feb 21 19:38:01 vwagwolkf484 kernel: [  218.383861] pcmcia_socket pcmcia_socket0: cs: memory probe 0xf1da0000-0xf2a6ffff: excluding 0xf1f38000-0xf2003fff
Feb 21 19:38:01 vwagwolkf484 kernel: [  218.393616] pcmcia 0.0: pcmcia: registering new device pcmcia0.0 (IRQ: 18)
Feb 21 19:38:01 vwagwolkf484 kernel: [  218.404691] CAN device driver interface
Feb 21 19:38:01 vwagwolkf484 kernel: [  218.407556] sja1000 CAN netdevice driver
Feb 21 19:38:01 vwagwolkf484 kernel: [  218.450049] peak_pcmcia 0.0: PEAK-System pcmcia card PC_CAN_CARD fw 1.5
Feb 21 19:38:01 vwagwolkf484 kernel: [  218.453698] peak_pcmcia 0.0: can0 on channel 0 at 0x00012100 irq 18
Feb 21 19:38:01 vwagwolkf484 kernel: [  218.455216] peak_pcmcia 0.0: can1 on channel 1 at 0x00012120 irq 18
Feb 21 19:39:18 vwagwolkf484 kernel: [  295.686726] usb 2-1.3: new high-speed USB device number 6 using ehci_hcd
Feb 21 19:39:18 vwagwolkf484 kernel: [  295.779176] usb 2-1.3: config 1 interface 0 altsetting 0 bulk endpoint 0x83 has invalid maxpacket 64
Feb 21 19:39:18 vwagwolkf484 kernel: [  295.779184] usb 2-1.3: config 1 interface 1 altsetting 0 bulk endpoint 0x86 has invalid maxpacket 64
Feb 21 19:39:18 vwagwolkf484 kernel: [  295.779923] usb 2-1.3: New USB device found, idVendor=0c72, idProduct=000d
Feb 21 19:39:18 vwagwolkf484 kernel: [  295.779928] usb 2-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb 21 19:39:18 vwagwolkf484 kernel: [  295.779933] usb 2-1.3: Product: PCAN-USB-PRO DEVICE
Feb 21 19:39:18 vwagwolkf484 kernel: [  295.779936] usb 2-1.3: Manufacturer: PEAK-System Technik GmbH
Feb 21 19:39:18 vwagwolkf484 kernel: [  295.822189] peak_usb 2-1.3:1.0: PEAK-System PCAN-USB Pro hwrev 0 serial FFFFFFFF.00000001 (2 channels)
Feb 21 19:39:18 vwagwolkf484 kernel: [  295.822948] peak_usb 2-1.3:1.0: can2: attached to PCAN-USB Pro channel 0 (device 1)
Feb 21 19:39:18 vwagwolkf484 kernel: [  295.825182] peak_usb 2-1.3:1.0: can3: attached to PCAN-USB Pro channel 1 (device 0)
Feb 21 19:39:18 vwagwolkf484 kernel: [  295.825270] usbcore: registered new interface driver peak_usb
Feb 21 19:49:28 vwagwolkf484 kernel: [  904.970430] peak_pcmcia 0.0: setting BTR0=0x00 BTR1=0x1c
Feb 21 19:49:38 vwagwolkf484 kernel: [  914.219487] peak_pcmcia 0.0: setting BTR0=0x00 BTR1=0x1c
Feb 21 19:49:47 vwagwolkf484 kernel: [  923.079481] peak_usb 2-1.3:1.0: can2: setting ccbt=0x001c0006
Feb 21 19:49:51 vwagwolkf484 kernel: [  927.612330] peak_usb 2-1.3:1.0: can3: setting ccbt=0x001c0006
Feb 21 19:51:07 vwagwolkf484 kernel: [ 1003.785392] can: controller area network core (rev 20090105 abi 8)
Feb 21 19:51:07 vwagwolkf484 kernel: [ 1003.785478] NET: Registered protocol family 29
Feb 21 19:51:07 vwagwolkf484 kernel: [ 1003.791537] can: raw protocol (rev 20090105)
Feb 21 19:57:48 vwagwolkf484 kernel: [ 1403.796273] usb 2-1.1: new full-speed USB device number 7 using ehci_hcd
Feb 21 19:57:48 vwagwolkf484 kernel: [ 1403.893358] usb 2-1.1: New USB device found, idVendor=0c72, idProduct=000c
Feb 21 19:57:48 vwagwolkf484 kernel: [ 1403.893363] usb 2-1.1: New USB device strings: Mfr=0, Product=3, SerialNumber=0
Feb 21 19:57:48 vwagwolkf484 kernel: [ 1403.893367] usb 2-1.1: Product: VER1:PEAK    
Feb 21 19:57:48 vwagwolkf484 kernel: [ 1403.893368] VER2:02.8.01        
Feb 21 19:57:48 vwagwolkf484 kernel: [ 1403.893368] DAT :06.05.2004
Feb 21 19:57:48 vwagwolkf484 kernel: [ 1403.893369] TIME:09:35:37
Feb 21 19:57:48 vwagwolkf484 kernel: [ 1403.893370]                              ...
Feb 21 19:57:48 vwagwolkf484 kernel: [ 1403.895828] peak_usb 2-1.1:1.0: PEAK-System PCAN-USB adapter hwrev 28 serial FFFFFFFF (1 channel)
Feb 21 19:57:48 vwagwolkf484 kernel: [ 1403.896329] peak_usb 2-1.1:1.0: can4: attached to PCAN-USB channel 0 (device 46)
Feb 21 19:57:55 vwagwolkf484 kernel: [ 1410.436831] usb 2-1.4: new full-speed USB device number 8 using ehci_hcd
Feb 21 19:57:55 vwagwolkf484 kernel: [ 1410.533390] usb 2-1.4: New USB device found, idVendor=0c72, idProduct=000c
Feb 21 19:57:55 vwagwolkf484 kernel: [ 1410.533394] usb 2-1.4: New USB device strings: Mfr=0, Product=3, SerialNumber=0
Feb 21 19:57:55 vwagwolkf484 kernel: [ 1410.533398] usb 2-1.4: Product: VER1:PEAK    
Feb 21 19:57:55 vwagwolkf484 kernel: [ 1410.533399] VER2:02.8.01        
Feb 21 19:57:55 vwagwolkf484 kernel: [ 1410.533400] DAT :06.05.2004
Feb 21 19:57:55 vwagwolkf484 kernel: [ 1410.533401] TIME:09:35:37
Feb 21 19:57:55 vwagwolkf484 kernel: [ 1410.533402]                              ...
Feb 21 19:57:55 vwagwolkf484 kernel: [ 1410.536035] peak_usb 2-1.4:1.0: PEAK-System PCAN-USB adapter hwrev 28 serial FFFFFFFF (1 channel)
Feb 21 19:57:55 vwagwolkf484 kernel: [ 1410.536525] peak_usb 2-1.4:1.0: can5: attached to PCAN-USB channel 0 (device 255)
Feb 21 20:00:01 vwagwolkf484 kernel: [ 1536.509165] peak_usb 2-1.1:1.0: can4: setting BTR0=0x00 BTR1=0x1c
Feb 21 20:00:06 vwagwolkf484 kernel: [ 1541.171104] peak_usb 2-1.4:1.0: can5: setting BTR0=0x00 BTR1=0x1c
Feb 21 20:27:05 vwagwolkf484 acpid: client 1249[0:0] has disconnected
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.519539] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.519592] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.519632] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.519707] peak_usb 2-1.3:1.0: can3: Rx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.519746] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.523654] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.523701] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.523779] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.523812] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.523905] peak_usb 2-1.3:1.0: can3: Rx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.527772] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.527813] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.527898] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.527945] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.528024] peak_usb 2-1.3:1.0: can3: Rx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.531890] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.531936] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.532017] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.532070] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.532141] peak_usb 2-1.3:1.0: can2: Rx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.536010] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.536057] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.536135] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.536187] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.536259] peak_usb 2-1.3:1.0: can2: Rx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.540126] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.540172] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.540251] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.540285] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.540377] peak_usb 2-1.3:1.0: can2: Rx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.544244] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.544285] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.544369] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.544418] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.544497] peak_usb 2-1.3:1.0: can2: Rx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.548362] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.548409] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.548488] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.548537] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.548613] peak_usb 2-1.3:1.0: can3: Rx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.552483] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.552534] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.552606] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.552662] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.552729] peak_usb 2-1.3:1.0: can3: Rx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.556598] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.556642] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.556724] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.556772] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.556850] peak_usb 2-1.3:1.0: can3: Rx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.560716] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.560764] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.560842] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.560891] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.564836] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.564884] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.564959] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.565014] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.568951] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.568999] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.569076] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.569110] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.573069] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.573108] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.573194] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.573200] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.581180] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.582981] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.582998] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.583004] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.591165] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.593000] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.593012] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.593028] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.601395] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.603321] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.604797] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.606299] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.610389] usb 2-1.3: USB disconnect, device number 6
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.613502] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615086] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615110] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615114] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-108)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615117] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615120] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-108)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615124] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615130] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.623962] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-108)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.623969] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-108)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.623973] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-108)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.623976] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-108)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.623980] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-108)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.623983] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-108)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.623986] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-108)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.623990] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-108)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.623993] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-108)
Feb 21 20:27:10 vwagwolkf484 avahi-daemon[1445]: Withdrawing workstation service for can3.
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.648060] BUG: unable to handle kernel NULL pointer dereference at 00000004
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.649863] IP: [<c104eaf5>] commit_creds+0x15/0xf0
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.651651] *pdpt = 000000002dd77001 *pde = 0000000000000000 
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.653379] Oops: 0000 [#1] SMP 
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.655193] Modules linked in: can_raw can peak_usb peak_pcmcia sja1000 can_dev acpi_cpufreq mperf cpufreq_powersave cpufreq_conservative cpufreq_userspace vcan bnep rfcomm binfmt_misc uinput fuse loop arc4 btusb bluetooth iwlwifi mac80211 snd_hda_codec_hdmi snd_hda_codec_idt pcmcia usbmouse usbhid hid snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq cfg80211 snd_timer snd_seq_device dell_wmi snd sparse_keymap sdhci_pci sdhci soundcore tpm_tis psmouse dell_laptop tpm dcdbas serio_raw i2c_i801 mmc_core yenta_socket rfkill snd_page_alloc wmi tpm_bios battery processor ac evdev power_supply
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.661581] 
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.663608] Pid: 3270, comm: net.agent Not tainted 3.3.0-rc4-00019-g27e74da-dirty #3 Dell Inc. Latitude E6510
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.665862] EIP: 0060:[<c104eaf5>] EFLAGS: 00010246 CPU: 3
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.668036] EIP is at commit_creds+0x15/0xf0
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.670272] EAX: 00000004 EBX: f2790a40 ECX: 000001fa EDX: 00000000
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.672509] ESI: 00000004 EDI: f2974d80 EBP: eddc1dd0 ESP: eddc1dc4
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.674751]  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.676738] Process net.agent (pid: 3270, ti=eddc0000 task=f2974d80 task.ti=eddc0000)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.678506] Stack:
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.680242]  f0799380 00000000 00000000 eddc1ddc c10d9261 f0799380 eddc1e4c c1117c2b
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.682105]  00000000 00001812 00000000 f1a408c0 f0799380 b76f1000 f2974d80 00000008
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.683908]  00000001 080606c0 08060320 0805f320 08048000 eddc1e30 08048000 b76f1000
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.685770] Call Trace:
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.687689]  [<c10d9261>] install_exec_creds+0x11/0x40
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.689569]  [<c1117c2b>] load_elf_binary+0x72b/0xa20
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.691356]  [<c1117500>] ? do_mmap+0x70/0x70
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.693140]  [<c10dae4d>] search_binary_handler+0xed/0x310
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.694971]  [<c10dad84>] ? search_binary_handler+0x24/0x310
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.696890]  [<c11172ea>] load_script+0x24a/0x270
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.698746]  [<c10dae46>] ? search_binary_handler+0xe6/0x310
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.700541]  [<c106e335>] ? __lock_release+0x95/0xc0
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.702336]  [<c11170a0>] ? locks_remove_flock+0x120/0x120
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.704206]  [<c10dae4d>] search_binary_handler+0xed/0x310
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.706009]  [<c10dad84>] ? search_binary_handler+0x24/0x310
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.707821]  [<c10db695>] do_execve_common+0x225/0x2a0
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.710234]  [<c10db722>] do_execve+0x12/0x20
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.712394]  [<c100ad82>] sys_execve+0x32/0x70
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.714244]  [<c144be12>] ptregs_execve+0x12/0x18
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.716031]  [<c144bd97>] ? sysenter_do_call+0x12/0x36
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.717882] Code: bc 27 00 00 00 00 e8 6b ff ff ff 5d c3 0f 0b 8d b4 26 00 00 00 00 55 89 e5 57 56 89 c6 53 64 8b 3d 30 b7 69 c1 8b 9f e0 01 00 00 <8b> 00 3b 9f e4 01 00 00 0f 85 c6 00 00 00 8b 06 85 c0 0f 8e ba 
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.720237] EIP: [<c104eaf5>] commit_creds+0x15/0xf0 SS:ESP 0068:eddc1dc4
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.722348] CR2: 0000000000000004
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.724447] ---[ end trace 235c4f770db8b51e ]---
Feb 21 20:27:10 vwagwolkf484 udevd[2643]: 'net.agent' [3270] terminated by signal 9 (Killed)
Feb 21 20:27:10 vwagwolkf484 NetworkManager[1214]:    SCPlugin-Ifupdown: devices removed (path: /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/net/can3, iface: can3)
Feb 21 20:27:10 vwagwolkf484 avahi-daemon[1445]: Withdrawing workstation service for can2.
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.739715] peak_usb 2-1.3:1.0: can3 removed
Feb 21 20:27:10 vwagwolkf484 NetworkManager[1214]:    SCPlugin-Ifupdown: devices removed (path: /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/net/can2, iface: can2)
Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.771675] peak_usb 2-1.3:1.0: can2 removed
Feb 21 20:27:19 vwagwolkf484 dhclient: DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 13
Feb 21 20:27:32 vwagwolkf484 dhclient: No DHCPOFFERS received.
Feb 21 20:27:32 vwagwolkf484 dhclient: No working leases in persistent database - sleeping.


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

* Re: [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver
  2012-02-22  7:05 ` [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver Oliver Hartkopp
@ 2012-02-22  7:30   ` Oliver Hartkopp
  2012-02-22 15:19     ` Stephane Grosjean
  0 siblings, 1 reply; 11+ messages in thread
From: Oliver Hartkopp @ 2012-02-22  7:30 UTC (permalink / raw)
  To: Stephane Grosjean; +Cc: linux-can Mailing List

On 22.02.2012 08:05, Oliver Hartkopp wrote:


> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.519539] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-71)
> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.519592] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-71)
> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.519632] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.519707] peak_usb 2-1.3:1.0: can3: Rx URB aborted (-71)
> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.519746] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!


(..)

> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615114] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-108)
> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615117] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615120] peak_usb 2-1.3:1.0: can2: Tx URB aborted (-108)
> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615124] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.615130] peak_usb 2-1.3:1.0: can_put_echo_skb: BUG! echo_skb is occupied!
> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.623962] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-108)
> Feb 21 20:27:10 vwagwolkf484 kernel: [ 3162.623969] peak_usb 2-1.3:1.0: can3: Tx URB aborted (-108)


-71  => EPROTO          71      /* Protocol error */
-108 => ESHUTDOWN       108     /* Cannot send after transport endpoint shutdown */

+/*
+ * callback for bulk Tx urb
+ */
+static void peak_usb_write_bulk_callback(struct urb *urb)
+{
+       struct peak_tx_urb_context *context = urb->context;
+       struct peak_usb_device *dev;
+       struct net_device *netdev;
+
+       BUG_ON(!context);
+
+       dev = context->dev;
+       netdev = dev->netdev;
+
+       atomic_dec(&dev->active_tx_urbs);
+
+       if (!netif_device_present(netdev))
+               return;
+
+       switch (urb->status) {
+       case 0: /* tx ok */
+               netdev->trans_start = jiffies;
+
+               /* transmission complete interrupt */
+               netdev->stats.tx_packets++;
+               netdev->stats.tx_bytes += context->dlc;
+
+               can_get_echo_skb(netdev, context->echo_index);
+               break;
+
+       case -ENOENT: /* on ifconfig down */
+               break;
+       default:
+               netdev_err(netdev, "Tx URB aborted (%d)\n", urb->status);

Just printing this status and continue with business as usual (netif_wake_queue!) is probably not the right approach 8-)

Please check if it makes sense to check (urb->status != 0) earlier in this callback function.
 
+       }
+
+       /* release context */
+       context->echo_index = PCAN_USB_MAX_TX_URBS;
+
+       netif_wake_queue(netdev);
+}



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

* Re: [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver
  2012-02-17 12:24 [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver Stephane Grosjean
  2012-02-17 12:24 ` [PATCH 1/3 v5] can/usb: PEAK-System Technik USB adapters driver core Stephane Grosjean
  2012-02-22  7:05 ` [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver Oliver Hartkopp
@ 2012-02-22 11:03 ` Marc Kleine-Budde
  2 siblings, 0 replies; 11+ messages in thread
From: Marc Kleine-Budde @ 2012-02-22 11:03 UTC (permalink / raw)
  To: Stephane Grosjean
  Cc: Oliver Hartkopp, linux-can Mailing List, linux usb Mailing List

[-- Attachment #1: Type: text/plain, Size: 1879 bytes --]

Hello USB Mailinglist,

On 02/17/2012 01:24 PM, Stephane Grosjean wrote:
> That serie of patches adds the peak_usb driver which handles the PCAN-USB
> and PCAN-USB Pro adapters from PEAK-System (http://www.peak-system.com).
> These patches are planned for kernel v3.02.00 and above.

Can someone please take a look at the USB related parts of these
drivers, please?

regards,  Marc

> 
> Stephane Grosjean (3):
>   can/usb: PEAK-System Technik USB adapters driver core
>   can/usb: PEAK-System Technik PCAN-USB specific part
>   can/usb: PEAK-System Technik PCAN-USB Pro specific part
> 
>  drivers/net/can/usb/Kconfig                  |    5 +
>  drivers/net/can/usb/Makefile                 |    1 +
>  drivers/net/can/usb/peak_usb/Makefile        |    2 +
>  drivers/net/can/usb/peak_usb/pcan_usb.c      |  901 ++++++++++++++++++++++
>  drivers/net/can/usb/peak_usb/pcan_usb_core.c |  954 ++++++++++++++++++++++++
>  drivers/net/can/usb/peak_usb/pcan_usb_core.h |  146 ++++
>  drivers/net/can/usb/peak_usb/pcan_usb_pro.c  | 1036 ++++++++++++++++++++++++++
>  drivers/net/can/usb/peak_usb/pcan_usb_pro.h  |  178 +++++
>  8 files changed, 3223 insertions(+), 0 deletions(-)
>  create mode 100644 drivers/net/can/usb/peak_usb/Makefile
>  create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb.c
>  create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb_core.c
>  create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb_core.h
>  create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb_pro.c
>  create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb_pro.h
> 


-- 
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: 262 bytes --]

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

* Re: [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver
  2012-02-22  7:30   ` Oliver Hartkopp
@ 2012-02-22 15:19     ` Stephane Grosjean
  2012-02-22 16:01       ` Oliver Hartkopp
  0 siblings, 1 reply; 11+ messages in thread
From: Stephane Grosjean @ 2012-02-22 15:19 UTC (permalink / raw)
  To: Oliver Hartkopp; +Cc: linux-can Mailing List

Le 22/02/2012 08:30, Oliver Hartkopp a écrit :
> On 22.02.2012 08:05, Oliver Hartkopp wrote:
>
>
> Just printing this status and continue with business as usual (netif_wake_queue!) is probably not the right approach 8-)
>
> Please check if it makes sense to check (urb->status != 0) earlier in this callback function.
>

Hi Oliver,

I took time to have a look to how things are done in other (net+usb) 
drivers and it's not easy to conclude to anything: some are testing that 
status (but with some other errno values) while others are always waking 
up the netdev queues... So, I tried to do a "mixed-of", cleaned up the 
code and tested it in (something like) your conditions, that is:

PC1:
can0 -> usb-pro ch1 -+
can1 -> usb-pro ch2  |
can2 -> usb ---------+
                      | 1Mpbs
PC2:                 |
can0 -> pcmcia ch1 --+

PC1:
cangen -g0 -i can0
cangen -g0 -i can2
candump any

I did the two following tests:

- removing the peak_usb driver while sending/reading data:

[ 4354.534576] peak_usb 1-1:1.0: can0: attached to PCAN-USB Pro channel 
0 (device 1898240)
[ 4354.535574] peak_usb 1-1:1.0: can1: attached to PCAN-USB Pro channel 
1 (device 2)
[ 4360.388020] usb 4-1: new full speed USB device number 7 using uhci_hcd
[ 4360.588035] peak_usb 4-1:1.0: PEAK-System PCAN-USB adapter hwrev 28 
serial FFFFFFFF (1 channel)
[ 4360.592034] peak_usb 4-1:1.0: can2: attached to PCAN-USB channel 0 
(device 255)
[ 4363.753037] peak_usb 1-1:1.0: can0: setting ccbt=0x00140006
[ 4363.770637] peak_usb 1-1:1.0: can1: setting ccbt=0x00140006
[ 4363.787775] peak_usb 4-1:1.0: can2: setting BTR0=0x00 BTR1=0x14
[ 4385.878968] usbcore: deregistering interface driver peak_usb
[ 4385.920049] peak_usb 4-1:1.0: can2 removed
[ 4385.948036] peak_usb 1-1:1.0: can1 removed
[ 4385.964042] peak_usb 1-1:1.0: can0 removed
[ 4385.964076] peak_usb: PCAN-USB interfaces driver unloaded

=> ok

- unplug the usb then usb-pro adapters while sending/reading data:

[ 5043.008127] peak_usb 4-1:1.0: PEAK-System PCAN-USB adapter hwrev 28 
serial FFFFFFFF (1 channel)
[ 5043.012133] peak_usb 4-1:1.0: can0: attached to PCAN-USB channel 0 
(device 255)
[ 5048.029973] peak_usb 1-1:1.0: PEAK-System PCAN-USB Pro hwrev 0 serial 
FFFFFFFF.00000001 (2 channels)
[ 5048.030596] peak_usb 1-1:1.0: can1: attached to PCAN-USB Pro channel 
0 (device 1898240)
[ 5048.031717] peak_usb 1-1:1.0: can2: attached to PCAN-USB Pro channel 
1 (device 2)
[ 5053.795570] peak_usb 4-1:1.0: can0: setting BTR0=0x00 BTR1=0x14
[ 5053.825418] peak_usb 1-1:1.0: can1: setting ccbt=0x00140006
[ 5053.844272] peak_usb 1-1:1.0: can2: setting ccbt=0x00140006
[ 5081.440039] usb 4-1: USB disconnect, device number 8
[ 5081.468028] peak_usb 4-1:1.0: can0 removed
[ 5096.856274] usb 1-1: USB disconnect, device number 16
[ 5096.876038] peak_usb 1-1:1.0: can2 removed
[ 5096.896051] peak_usb 1-1:1.0: can1 removed

(then rmmod):

[ 6489.510730] usbcore: deregistering interface driver peak_usb
[ 6489.510756] peak_usb: PCAN-USB interfaces driver unloaded

=> Ok

(I definitively prefer my logs to yours ;-)

In my opinion, the Kernel hangs you got don't come from the 
netif_wake_queue() wrong usage, but these tests lead to run some failure 
cases in the driver with potential bad memory usage... So I did a pass 
on (I hope) all of these cases too. Anyway, this should be better now.

So, if you don't have any other comments or any other (not very 
friendly) tests, I'm ready to send a new version of the peak_usb.

Once again, thanks for your time.

Stéphane



--
PEAK-System Technik GmbH, Otto-Roehm-Strasse 69, D-64293 Darmstadt 
Geschaeftsleitung: A.Gach/U.Wilhelm,St.Nr.:007/241/13586 FA Darmstadt 
HRB-9183 Darmstadt, Ust.IdNr.:DE 202220078, WEE-Reg.-Nr.: DE39305391 
Tel.+49 (0)6151-817320 / Fax:+49 (0)6151-817329, info@peak-system.com

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

* Re: [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver
  2012-02-22 15:19     ` Stephane Grosjean
@ 2012-02-22 16:01       ` Oliver Hartkopp
  2012-02-22 16:33         ` Stephane Grosjean
  0 siblings, 1 reply; 11+ messages in thread
From: Oliver Hartkopp @ 2012-02-22 16:01 UTC (permalink / raw)
  To: Stephane Grosjean; +Cc: linux-can Mailing List

On 22.02.2012 16:19, Stephane Grosjean wrote:

> Le 22/02/2012 08:30, Oliver Hartkopp a écrit :
>> On 22.02.2012 08:05, Oliver Hartkopp wrote:
>>
>>
>> Just printing this status and continue with business as usual
>> (netif_wake_queue!) is probably not the right approach 8-)
>>
>> Please check if it makes sense to check (urb->status != 0) earlier in this
>> callback function.
>>
> 
> Hi Oliver,
> 
> I took time to have a look to how things are done in other (net+usb) drivers
> and it's not easy to conclude to anything: some are testing that status (but
> with some other errno values) while others are always waking up the netdev
> queues... So, I tried to do a "mixed-of", cleaned up the code and tested it in
> (something like) your conditions, that is:
> 
> PC1:
> can0 -> usb-pro ch1 -+
> can1 -> usb-pro ch2  |
> can2 -> usb ---------+
>                      | 1Mpbs
> PC2:                 |
> can0 -> pcmcia ch1 --+
> 
> PC1:
> cangen -g0 -i can0
> cangen -g0 -i can2
> candump any
> 
> I did the two following tests:
> 
> - removing the peak_usb driver while sending/reading data:
> 
> [ 4354.534576] peak_usb 1-1:1.0: can0: attached to PCAN-USB Pro channel 0
> (device 1898240)
> [ 4354.535574] peak_usb 1-1:1.0: can1: attached to PCAN-USB Pro channel 1
> (device 2)
> [ 4360.388020] usb 4-1: new full speed USB device number 7 using uhci_hcd
> [ 4360.588035] peak_usb 4-1:1.0: PEAK-System PCAN-USB adapter hwrev 28 serial
> FFFFFFFF (1 channel)
> [ 4360.592034] peak_usb 4-1:1.0: can2: attached to PCAN-USB channel 0 (device
> 255)
> [ 4363.753037] peak_usb 1-1:1.0: can0: setting ccbt=0x00140006
> [ 4363.770637] peak_usb 1-1:1.0: can1: setting ccbt=0x00140006
> [ 4363.787775] peak_usb 4-1:1.0: can2: setting BTR0=0x00 BTR1=0x14
> [ 4385.878968] usbcore: deregistering interface driver peak_usb
> [ 4385.920049] peak_usb 4-1:1.0: can2 removed
> [ 4385.948036] peak_usb 1-1:1.0: can1 removed
> [ 4385.964042] peak_usb 1-1:1.0: can0 removed
> [ 4385.964076] peak_usb: PCAN-USB interfaces driver unloaded
> 
> => ok


Hm - i didn't test that so far.

But nice it works :-)

> 
> - unplug the usb then usb-pro adapters while sending/reading data:
> 
> [ 5043.008127] peak_usb 4-1:1.0: PEAK-System PCAN-USB adapter hwrev 28 serial
> FFFFFFFF (1 channel)
> [ 5043.012133] peak_usb 4-1:1.0: can0: attached to PCAN-USB channel 0 (device
> 255)
> [ 5048.029973] peak_usb 1-1:1.0: PEAK-System PCAN-USB Pro hwrev 0 serial
> FFFFFFFF.00000001 (2 channels)
> [ 5048.030596] peak_usb 1-1:1.0: can1: attached to PCAN-USB Pro channel 0
> (device 1898240)
> [ 5048.031717] peak_usb 1-1:1.0: can2: attached to PCAN-USB Pro channel 1
> (device 2)
> [ 5053.795570] peak_usb 4-1:1.0: can0: setting BTR0=0x00 BTR1=0x14
> [ 5053.825418] peak_usb 1-1:1.0: can1: setting ccbt=0x00140006
> [ 5053.844272] peak_usb 1-1:1.0: can2: setting ccbt=0x00140006
> [ 5081.440039] usb 4-1: USB disconnect, device number 8
> [ 5081.468028] peak_usb 4-1:1.0: can0 removed
> [ 5096.856274] usb 1-1: USB disconnect, device number 16
> [ 5096.876038] peak_usb 1-1:1.0: can2 removed
> [ 5096.896051] peak_usb 1-1:1.0: can1 removed


Doesn't fit to your described setup ... anyway ...

> 
> (then rmmod):
> 
> [ 6489.510730] usbcore: deregistering interface driver peak_usb
> [ 6489.510756] peak_usb: PCAN-USB interfaces driver unloaded
> 
> => Ok
> 
> (I definitively prefer my logs to yours ;-)


i can imagine that :-)

Pls try the following:

PC1:
can0 -> usb-pro ch1 ----+
can1 -> usb-pro ch2 -+  |
can2 -> usb ---------+  |
                     |  | 1Mpbs
PC2:                 |  |
can0 -> pcmcia ch1 --+  |
can1 -> pcmcia ch2 -----+

PC1:
cangen -g0 -i can0
cangen -g0 -i can1
candump any

PC2:
cangen -g0 -i can0
cangen -g0 -i can1
candump any

and then pull the usb-pro from PC1 ...

That's really unfriendly 8-)

> In my opinion, the Kernel hangs you got don't come from the netif_wake_queue()
> wrong usage, but these tests lead to run some failure cases in the driver with
> potential bad memory usage... So I did a pass on (I hope) all of these cases
> too. Anyway, this should be better now.

>

> So, if you don't have any other comments or any other (not very friendly)
> tests, I'm ready to send a new version of the peak_usb.


Please check this use-case above. And when it works with your fixed driver you
can probalby check the 'old' v5 version to see if you can follow my bug report
on your setup.

Best regards,
Oliver

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

* Re: [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver
  2012-02-22 16:01       ` Oliver Hartkopp
@ 2012-02-22 16:33         ` Stephane Grosjean
  2012-02-22 16:40           ` Oliver Hartkopp
  0 siblings, 1 reply; 11+ messages in thread
From: Stephane Grosjean @ 2012-02-22 16:33 UTC (permalink / raw)
  To: Oliver Hartkopp; +Cc: linux-can Mailing List

Le 22/02/2012 17:01, Oliver Hartkopp a écrit :

> Pls try the following:
>
> PC1:
> can0 ->  usb-pro ch1 ----+
> can1 ->  usb-pro ch2 -+  |
> can2 ->  usb ---------+  |
>                       |  | 1Mpbs
> PC2:                 |  |
> can0 ->  pcmcia ch1 --+  |
> can1 ->  pcmcia ch2 -----+
>
> PC1:
> cangen -g0 -i can0
> cangen -g0 -i can1
> candump any
>
> PC2:
> cangen -g0 -i can0
> cangen -g0 -i can1
> candump any
>
> and then pull the usb-pro from PC1 ...
>
> That's really unfriendly 8-)


Ok, I found another cable and set up your tesbed: now the usb-pro is 
pulled and both "candump" always are displaying data sent by "cangen 
can0" from PC2 and read from pcan-usb on PC1... Both drivers can be 
removed without any problem.


>
> Please check this use-case above. And when it works with your fixed driver you
> can probalby check the 'old' v5 version to see if you can follow my bug report
> on your setup.

???
I'm sorry I don't understand what you mean: why should I check the v5 
version? And what is (to) "follow your bug report on my setup" ???

Stéphane

--
PEAK-System Technik GmbH, Otto-Roehm-Strasse 69, D-64293 Darmstadt 
Geschaeftsleitung: A.Gach/U.Wilhelm,St.Nr.:007/241/13586 FA Darmstadt 
HRB-9183 Darmstadt, Ust.IdNr.:DE 202220078, WEE-Reg.-Nr.: DE39305391 
Tel.+49 (0)6151-817320 / Fax:+49 (0)6151-817329, info@peak-system.com

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

* Re: [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver
  2012-02-22 16:33         ` Stephane Grosjean
@ 2012-02-22 16:40           ` Oliver Hartkopp
  2012-02-22 17:03             ` Stephane Grosjean
  0 siblings, 1 reply; 11+ messages in thread
From: Oliver Hartkopp @ 2012-02-22 16:40 UTC (permalink / raw)
  To: Stephane Grosjean; +Cc: linux-can Mailing List

On 22.02.2012 17:33, Stephane Grosjean wrote:

> Le 22/02/2012 17:01, Oliver Hartkopp a écrit :
> 
>> Pls try the following:
>>
>> PC1:
>> can0 ->  usb-pro ch1 ----+
>> can1 ->  usb-pro ch2 -+  |
>> can2 ->  usb ---------+  |
>>                       |  | 1Mpbs
>> PC2:                 |  |
>> can0 ->  pcmcia ch1 --+  |
>> can1 ->  pcmcia ch2 -----+
>>
>> PC1:
>> cangen -g0 -i can0
>> cangen -g0 -i can1
>> candump any
>>
>> PC2:
>> cangen -g0 -i can0
>> cangen -g0 -i can1
>> candump any
>>
>> and then pull the usb-pro from PC1 ...
>>
>> That's really unfriendly 8-)
> 
> 
> Ok, I found another cable and set up your tesbed: now the usb-pro is pulled
> and both "candump" always are displaying data sent by "cangen can0" from PC2
> and read from pcan-usb on PC1... Both drivers can be removed without any problem.


cangen can0 only on PC2?

pls put the cangen on PC2 _and_ PC1 as shown above.


>>
>> Please check this use-case above. And when it works with your fixed driver you
>> can probalby check the 'old' v5 version to see if you can follow my bug report
>> on your setup.
> 
> ???
> I'm sorry I don't understand what you mean: why should I check the v5 version?


Didn't you write that you made some changes before the test??

> And what is (to) "follow your bug report on my setup" ???


I just wanted to make sure that you can see the same effect with your setup
that i had with version 5.

Regards,
Oliver

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

* Re: [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver
  2012-02-22 16:40           ` Oliver Hartkopp
@ 2012-02-22 17:03             ` Stephane Grosjean
  2012-02-22 17:50               ` Oliver Hartkopp
  0 siblings, 1 reply; 11+ messages in thread
From: Stephane Grosjean @ 2012-02-22 17:03 UTC (permalink / raw)
  To: Oliver Hartkopp; +Cc: linux-can Mailing List

Le 22/02/2012 17:40, Oliver Hartkopp a écrit :
> On 22.02.2012 17:33, Stephane Grosjean wrote:
>
>> Le 22/02/2012 17:01, Oliver Hartkopp a écrit :
>>
>>> Pls try the following:
>>>
>>> PC1:
>>> can0 ->   usb-pro ch1 ----+
>>> can1 ->   usb-pro ch2 -+  |
>>> can2 ->   usb ---------+  |
>>>                        |  | 1Mpbs
>>> PC2:                 |  |
>>> can0 ->   pcmcia ch1 --+  |
>>> can1 ->   pcmcia ch2 -----+
>>>
>>> PC1:
>>> cangen -g0 -i can0
>>> cangen -g0 -i can1
>>> candump any
>>>
>>> PC2:
>>> cangen -g0 -i can0
>>> cangen -g0 -i can1
>>> candump any
>>>
>>> and then pull the usb-pro from PC1 ...
>>>
>>> That's really unfriendly 8-)
>>
>> Ok, I found another cable and set up your tesbed: now the usb-pro is pulled
>> and both "candump" always are displaying data sent by "cangen can0" from PC2
>> and read from pcan-usb on PC1... Both drivers can be removed without any problem.
>
> cangen can0 only on PC2?
>
> pls put the cangen on PC2 _and_ PC1 as shown above.
>

Sorry but your scheme showed cangen only on can0 and can1... which are 
mapped to usb-pro can interfaces. on PC1, which is pulled from PC1! So, 
no more can data is sent from PC1! Remains only "cangen can0" from PC2!
I just did another test, adding "cangen can2" on PC1 too... Everything 
is still ok, on both sides...

>
>>> Please check this use-case above. And when it works with your fixed driver you
>>> can probalby check the 'old' v5 version to see if you can follow my bug report
>>> on your setup.
>> ???
>> I'm sorry I don't understand what you mean: why should I check the v5 version?
>
> Didn't you write that you made some changes before the test??
>> And what is (to) "follow your bug report on my setup" ???
>
> I just wanted to make sure that you can see the same effect with your setup
> that i had with version 5.

Ok, confusion came from the fact that, once I did modifications into v5, 
this automatically became a "v6"  for me ...
So you want me to reproduce your crash using the "old" v5, right? I 
already did that, I confirm that the pc hanged with v5, removing the 
driver and/or pulling (one of) the usb adapters.

Should I now wait for any linux-usb ml review before posting this v6?

Regards,

Stéphane
--
PEAK-System Technik GmbH, Otto-Roehm-Strasse 69, D-64293 Darmstadt 
Geschaeftsleitung: A.Gach/U.Wilhelm,St.Nr.:007/241/13586 FA Darmstadt 
HRB-9183 Darmstadt, Ust.IdNr.:DE 202220078, WEE-Reg.-Nr.: DE39305391 
Tel.+49 (0)6151-817320 / Fax:+49 (0)6151-817329, info@peak-system.com

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

* Re: [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver
  2012-02-22 17:03             ` Stephane Grosjean
@ 2012-02-22 17:50               ` Oliver Hartkopp
  0 siblings, 0 replies; 11+ messages in thread
From: Oliver Hartkopp @ 2012-02-22 17:50 UTC (permalink / raw)
  To: Stephane Grosjean; +Cc: linux-can Mailing List

On 22.02.2012 18:03, Stephane Grosjean wrote:

> Le 22/02/2012 17:40, Oliver Hartkopp a écrit :
>> On 22.02.2012 17:33, Stephane Grosjean wrote:
>>
>>> Le 22/02/2012 17:01, Oliver Hartkopp a écrit :
>>>
>>>> Pls try the following:
>>>>
>>>> PC1:
>>>> can0 ->   usb-pro ch1 ----+
>>>> can1 ->   usb-pro ch2 -+  |
>>>> can2 ->   usb ---------+  |
>>>>                        |  | 1Mpbs
>>>> PC2:                 |  |
>>>> can0 ->   pcmcia ch1 --+  |
>>>> can1 ->   pcmcia ch2 -----+
>>>>
>>>> PC1:
>>>> cangen -g0 -i can0
>>>> cangen -g0 -i can1
>>>> candump any
>>>>
>>>> PC2:
>>>> cangen -g0 -i can0
>>>> cangen -g0 -i can1
>>>> candump any
>>>>
>>>> and then pull the usb-pro from PC1 ...
>>>>
>>>> That's really unfriendly 8-)
>>>
>>> Ok, I found another cable and set up your tesbed: now the usb-pro is pulled
>>> and both "candump" always are displaying data sent by "cangen can0" from PC2
>>> and read from pcan-usb on PC1... Both drivers can be removed without any
>>> problem.
>>
>> cangen can0 only on PC2?
>>
>> pls put the cangen on PC2 _and_ PC1 as shown above.
>>
> 
> Sorry but your scheme showed cangen only on can0 and can1... which are mapped
> to usb-pro can interfaces. on PC1, which is pulled from PC1! So, no more can
> data is sent from PC1! Remains only "cangen can0" from PC2!


It's not relevant if there's any traffic left, when you pulled the usb-pro.

The trick is to get maximum load (rx AND tx) to the USB adapter when
disconnecting the USB.

Therefore putting max tx load to _both_ PCs CAN interfaces was my plan - and
this is presented in the testbed description IMHO. Or did i miss anything?

> I just did another test, adding "cangen can2" on PC1 too... Everything is
> still ok, on both sides...


Fine.


>>> And what is (to) "follow your bug report on my setup" ???
>>
>> I just wanted to make sure that you can see the same effect with your setup
>> that i had with version 5.
> 
> Ok, confusion came from the fact that, once I did modifications into v5, this
> automatically became a "v6"  for me ...
> So you want me to reproduce your crash using the "old" v5, right? I already
> did that, I confirm that the pc hanged with v5, removing the driver and/or
> pulling (one of) the usb adapters.


Ah, ok. That's important. Because if i would had any problems that you do not
see in your setup, my testbed might have been broken or my kernel might be
misconfigured for that testing purpose.

> Should I now wait for any linux-usb ml review before posting this v6?


IMO it makes no sense to review an outdated patch.

Please post your v6 as you did for the v5 - adding some changelog.

Regards,
Oliver

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

end of thread, other threads:[~2012-02-22 17:51 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-17 12:24 [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver Stephane Grosjean
2012-02-17 12:24 ` [PATCH 1/3 v5] can/usb: PEAK-System Technik USB adapters driver core Stephane Grosjean
2012-02-22  7:05 ` [PATCH 0/3 v5] can/usb: Add PEAK-System PCAN USB adapters driver Oliver Hartkopp
2012-02-22  7:30   ` Oliver Hartkopp
2012-02-22 15:19     ` Stephane Grosjean
2012-02-22 16:01       ` Oliver Hartkopp
2012-02-22 16:33         ` Stephane Grosjean
2012-02-22 16:40           ` Oliver Hartkopp
2012-02-22 17:03             ` Stephane Grosjean
2012-02-22 17:50               ` Oliver Hartkopp
2012-02-22 11:03 ` Marc Kleine-Budde

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.