From: Greg KH <gregkh@linuxfoundation.org>
To: Vladimir Stankovic <vladimir.stankovic@displaylink.com>
Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org,
mausb-host-devel@displaylink.com
Subject: Re: [PATCH v6 3/8] usb: mausb_host: HCD initialization
Date: Fri, 15 May 2020 15:07:54 +0200 [thread overview]
Message-ID: <20200515130754.GD1937631@kroah.com> (raw)
In-Reply-To: <20200515123502.12099-4-vladimir.stankovic@displaylink.com>
On Fri, May 15, 2020 at 02:34:57PM +0200, Vladimir Stankovic wrote:
> --- /dev/null
> +++ b/drivers/usb/host/mausb/hcd.c
> @@ -0,0 +1,120 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (c) 2019 - 2020 DisplayLink (UK) Ltd.
> + */
> +#include "hcd.h"
> +
> +#include "utils.h"
> +
> +static int mausb_bus_match(struct device *dev, struct device_driver *drv);
> +
> +static const struct file_operations mausb_fops;
> +
> +static unsigned int major;
> +static unsigned int minor = 1;
> +static dev_t devt;
> +static struct device *device;
> +
> +struct mausb_hcd *mhcd;
> +static struct class *mausb_class;
> +static struct bus_type mausb_bus_type = {
> + .name = DEVICE_NAME,
> + .match = mausb_bus_match,
> +};
A static bus type??? For a single driver?
> +
> +static struct device_driver mausb_driver = {
> + .name = DEVICE_NAME,
> + .bus = &mausb_bus_type,
> + .owner = THIS_MODULE,
> +};
Wait, what??? A static "raw" struct device_driver? Why???
> +
> +static void mausb_remove(void)
> +{
> + struct usb_hcd *hcd, *shared_hcd;
> +
> + hcd = mhcd->hcd_hs_ctx->hcd;
> + shared_hcd = mhcd->hcd_ss_ctx->hcd;
> +
> + if (shared_hcd) {
> + usb_remove_hcd(shared_hcd);
> + usb_put_hcd(shared_hcd);
> + mhcd->hcd_ss_ctx = NULL;
> + }
> +
> + usb_remove_hcd(hcd);
> + usb_put_hcd(hcd);
> + mhcd->hcd_hs_ctx = NULL;
> +}
> +
> +static int mausb_bus_match(struct device *dev, struct device_driver *drv)
> +{
> + if (strncmp(dev->bus->name, drv->name, strlen(drv->name)))
> + return 0;
> + else
> + return 1;
> +}
> +
> +int mausb_init_hcd(void)
> +{
> + int retval = register_chrdev(0, DEVICE_NAME, &mausb_fops);
> +
> + if (retval < 0)
> + return retval;
> +
> + major = (unsigned int)retval;
> + retval = bus_register(&mausb_bus_type);
> + if (retval)
> + goto bus_register_error;
> +
> + mausb_class = class_create(THIS_MODULE, CLASS_NAME);
> + if (IS_ERR(mausb_class)) {
> + retval = (int)PTR_ERR(mausb_class);
> + goto class_error;
> + }
> +
> + retval = driver_register(&mausb_driver);
> + if (retval)
> + goto driver_register_error;
> +
> + mhcd = kzalloc(sizeof(*mhcd), GFP_ATOMIC);
> + if (!mhcd) {
> + retval = -ENOMEM;
> + goto mausb_hcd_alloc_failed;
> + }
> +
> + devt = MKDEV(major, minor);
> + device = device_create(mausb_class, NULL, devt, mhcd, DEVICE_NAME);
> + if (IS_ERR(device)) {
> + retval = (int)IS_ERR(device);
> + goto device_create_error;
> + }
> +
> + device->driver = &mausb_driver;
Why? What is this device going to do? What do you need it for?
> +
> + return retval;
> +device_create_error:
> + kfree(mhcd);
> + mhcd = NULL;
> +mausb_hcd_alloc_failed:
> + driver_unregister(&mausb_driver);
> +driver_register_error:
> + class_destroy(mausb_class);
> +class_error:
> + bus_unregister(&mausb_bus_type);
> +bus_register_error:
> + unregister_chrdev(major, DEVICE_NAME);
I thought you were using the misc device, what are you doing with a
class and chardev? Why is that still here?
> +
> + return retval;
> +}
> +
> +void mausb_deinit_hcd(void)
> +{
> + if (mhcd) {
> + mausb_remove();
> + device_destroy(mausb_class, devt);
> + driver_unregister(&mausb_driver);
> + class_destroy(mausb_class);
> + bus_unregister(&mausb_bus_type);
> + unregister_chrdev(major, DEVICE_NAME);
> + }
> +}
> diff --git a/drivers/usb/host/mausb/hcd.h b/drivers/usb/host/mausb/hcd.h
> new file mode 100644
> index 000000000000..e2374af67663
> --- /dev/null
> +++ b/drivers/usb/host/mausb/hcd.h
> @@ -0,0 +1,65 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * Copyright (c) 2019 - 2020 DisplayLink (UK) Ltd.
> + */
> +#ifndef __MAUSB_HCD_H__
> +#define __MAUSB_HCD_H__
> +
> +#include <linux/slab.h>
> +#include <linux/usb.h>
> +#include <linux/usb/hcd.h>
> +
> +#define DEVICE_NAME "mausb_host_hcd"
> +#define CLASS_NAME "mausb"
> +
> +#define NUMBER_OF_PORTS 15
Why this max?
> +
> +#define MAX_USB_DEVICE_DEPTH 6
Where does this max come from?
> +
> +#define RESPONSE_TIMEOUT 5000
Units?
> +
> +#define MAUSB_PORT_20_STATUS_LOW_SPEED 0x0200
> +#define MAUSB_PORT_20_STATUS_HIGH_SPEED 0x0400
Device ids? Something else?
If something else, use BIT()?
> +
> +enum mausb_device_type {
> + USBDEVICE = 0,
> + USB20HUB = 1,
> + USB30HUB = 2
Trailing , please
> +};
> +
> +enum mausb_device_speed {
> + LOW_SPEED = 0,
> + FULL_SPEED = 1,
> + HIGH_SPEED = 2,
> + SUPER_SPEED = 3,
> + SUPER_SPEED_PLUS = 4
, please.
> +};
Where do these values come from?
> +
> +struct mausb_hcd {
> + spinlock_t lock; /* Protect HCD during URB processing */
> + struct device *pdev;
> + u16 connected_ports;
Why u16?
> +
> + struct rb_root mausb_urbs;
> + struct hub_ctx *hcd_ss_ctx;
> + struct hub_ctx *hcd_hs_ctx;
> + struct notifier_block power_state_listener;
> +};
> +
> +struct mausb_dev {
> + u32 port_status;
> + struct rb_root usb_devices;
> + u8 dev_speed;
> + void *ma_dev;
> +};
> +
> +struct hub_ctx {
> + struct mausb_hcd *mhcd;
> + struct usb_hcd *hcd;
> + struct mausb_dev ma_devs[NUMBER_OF_PORTS];
> +};
> +
> +int mausb_init_hcd(void);
> +void mausb_deinit_hcd(void);
> +
> +#endif /* __MAUSB_HCD_H__ */
> diff --git a/drivers/usb/host/mausb/mausb_core.c b/drivers/usb/host/mausb/mausb_core.c
> index 44f76a1b74de..485f241d2b4c 100644
> --- a/drivers/usb/host/mausb/mausb_core.c
> +++ b/drivers/usb/host/mausb/mausb_core.c
> @@ -4,6 +4,7 @@
> */
> #include <linux/module.h>
>
> +#include "hcd.h"
> #include "utils.h"
>
> MODULE_LICENSE("GPL");
> @@ -11,12 +12,27 @@ MODULE_AUTHOR("DisplayLink (UK) Ltd.");
>
> static int mausb_host_init(void)
> {
> - return mausb_host_dev_register();
> + int status = mausb_host_dev_register();
> +
> + if (status < 0)
> + goto exit;
> +
> + status = mausb_init_hcd();
> + if (status < 0)
> + goto cleanup_dev;
> +
> + return 0;
> +
> +cleanup_dev:
> + mausb_host_dev_deregister();
> +exit:
> + return status;
> }
>
> static void mausb_host_exit(void)
> {
> dev_info(mausb_host_dev.this_device, "Module unloading started...");
This is debugging statements, please remove. If a driver works
properly, it does not print anything out.
Especially as you never give the user the chance to see if module
unloading ever finished :)
thanks,
greg k-h
next prev parent reply other threads:[~2020-05-15 13:08 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-12 14:42 [PATCH v3 0/8] Add MA USB Host driver Vladimir Stankovic
2020-03-27 15:26 ` [PATCH v4 " vladimir.stankovic
2020-03-27 15:26 ` [PATCH v4 1/8] usb: Add MA-USB Host kernel module vladimir.stankovic
2020-03-27 16:25 ` Alan Stern
2020-03-27 15:26 ` [PATCH v4 2/8] usb: mausb_host: Add link layer implementation vladimir.stankovic
2020-03-27 15:26 ` [PATCH v4 3/8] usb: mausb_host: HCD initialization vladimir.stankovic
2020-03-27 15:26 ` [PATCH v4 4/8] usb: mausb_host: Implement initial hub handlers vladimir.stankovic
2020-03-27 16:37 ` Alan Stern
2020-04-13 15:16 ` Vladimir Stankovic
2020-03-27 15:26 ` [PATCH v4 5/8] usb: mausb_host: Introduce PAL processing vladimir.stankovic
2020-03-27 16:35 ` Alan Stern
2020-03-28 3:56 ` kbuild test robot
2020-03-28 3:56 ` kbuild test robot
2020-03-27 15:26 ` [PATCH v4 6/8] usb: mausb_host: Add logic for PAL-to-PAL communication vladimir.stankovic
2020-03-27 15:26 ` [PATCH v4 7/8] usb: mausb_host: MA-USB PAL events processing vladimir.stankovic
2020-03-28 10:35 ` kbuild test robot
2020-03-28 10:35 ` kbuild test robot
2020-04-04 16:07 ` kbuild test robot
2020-04-04 16:07 ` kbuild test robot
2020-03-27 15:26 ` [PATCH v4 8/8] usb: mausb_host: Process MA-USB data packets vladimir.stankovic
2020-04-25 9:19 ` [PATCH v5 0/8] Add MA USB Host driver vladimir.stankovic
2020-04-25 9:19 ` [PATCH v5 1/8] usb: Add MA-USB Host kernel module vladimir.stankovic
2020-04-28 11:03 ` Greg KH
2020-04-25 9:19 ` [PATCH v5 2/8] usb: mausb_host: Add link layer implementation vladimir.stankovic
2020-04-25 9:19 ` [PATCH v5 3/8] usb: mausb_host: HCD initialization vladimir.stankovic
2020-04-28 11:07 ` Greg KH
2020-04-25 9:19 ` [PATCH v5 4/8] usb: mausb_host: Implement initial hub handlers vladimir.stankovic
2020-04-25 9:19 ` [PATCH v5 5/8] usb: mausb_host: Introduce PAL processing vladimir.stankovic
2020-04-26 0:32 ` Alan Stern
2020-04-26 12:32 ` Vladimir Stankovic
2020-04-26 14:31 ` Alan Stern
2020-04-26 14:45 ` [External] " Vladimir Stankovic
2020-04-26 20:56 ` Alan Stern
2020-04-30 14:37 ` Vladimir Stankovic
2020-04-30 15:18 ` Alan Stern
2020-04-30 15:34 ` Vladimir Stankovic
2020-04-30 15:41 ` Alan Stern
2020-04-25 9:19 ` [PATCH v5 6/8] usb: mausb_host: Add logic for PAL-to-PAL communication vladimir.stankovic
2020-04-25 9:19 ` [PATCH v5 7/8] usb: mausb_host: MA-USB PAL events processing vladimir.stankovic
2020-04-28 11:08 ` Greg KH
2020-04-25 9:19 ` [PATCH v5 8/8] usb: mausb_host: Process MA-USB data packets vladimir.stankovic
2020-04-28 11:04 ` [PATCH v5 0/8] Add MA USB Host driver Greg KH
2020-04-30 16:51 ` [External] " Vladimir Stankovic
2020-04-30 20:02 ` Greg KH
2020-05-15 13:04 ` Vladimir Stankovic
2020-05-29 12:48 ` Pavel Machek
2020-05-15 12:34 ` [PATCH v6 " Vladimir Stankovic
2020-05-15 12:34 ` [PATCH v6 1/8] usb: Add MA-USB Host kernel module Vladimir Stankovic
2020-05-15 13:01 ` Greg KH
2020-06-11 18:20 ` Vladimir Stankovic
2020-05-15 13:02 ` Greg KH
2020-06-11 18:19 ` [External] " Vladimir Stankovic
2020-05-15 12:34 ` [PATCH v6 2/8] usb: mausb_host: Add link layer implementation Vladimir Stankovic
2020-05-15 12:34 ` [PATCH v6 3/8] usb: mausb_host: HCD initialization Vladimir Stankovic
2020-05-15 13:03 ` Greg KH
2020-06-11 18:19 ` Vladimir Stankovic
2020-05-15 13:07 ` Greg KH [this message]
2020-06-11 18:18 ` [External] " Vladimir Stankovic
2020-06-18 8:18 ` Greg KH
2020-05-15 12:34 ` [PATCH v6 4/8] usb: mausb_host: Implement initial hub handlers Vladimir Stankovic
2020-05-15 12:34 ` [PATCH v6 5/8] usb: mausb_host: Introduce PAL processing Vladimir Stankovic
2020-05-15 12:35 ` [PATCH v6 6/8] usb: mausb_host: Add logic for PAL-to-PAL communication Vladimir Stankovic
2020-05-15 12:35 ` [PATCH v6 7/8] usb: mausb_host: MA-USB PAL events processing Vladimir Stankovic
2020-05-15 12:35 ` [PATCH v6 8/8] usb: mausb_host: Process MA-USB data packets Vladimir Stankovic
2020-05-15 13:08 ` [PATCH v6 0/8] Add MA USB Host driver Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200515130754.GD1937631@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mausb-host-devel@displaylink.com \
--cc=vladimir.stankovic@displaylink.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.