diff options
-rw-r--r-- | nfc-pn533-don-t-send-usb-data-off-of-the-stack.patch | 140 | ||||
-rw-r--r-- | qlcnic_sysfs.patch | 12 | ||||
-rw-r--r-- | series | 4 | ||||
-rw-r--r-- | usb-debugfs-cleanup.patch | 1553 | ||||
-rw-r--r-- | usb-debugfs.patch | 476 | ||||
-rw-r--r-- | usb-serial-visor-handle-potential-invalid-device-configuration.patch | 115 |
6 files changed, 6 insertions, 2294 deletions
diff --git a/nfc-pn533-don-t-send-usb-data-off-of-the-stack.patch b/nfc-pn533-don-t-send-usb-data-off-of-the-stack.patch deleted file mode 100644 index a10400977b5a9c..00000000000000 --- a/nfc-pn533-don-t-send-usb-data-off-of-the-stack.patch +++ /dev/null @@ -1,140 +0,0 @@ -From foo@baz Thu May 17 18:35:38 CEST 2018 -Date: Thu, 17 May 2018 18:35:38 +0200 -To: Greg KH <gregkh@linuxfoundation.org> -From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -Subject: [PATCH v3] NFC: pn533: don't send USB data off of the stack - -It's amazing that this driver ever worked, but now that x86 doesn't -allow USB data to be sent off of the stack, it really does not work at -all. Fix this up by properly allocating the data for the small -"commands" that get sent to the device off of the stack. - -We do this for one command by having a whole urb just for ack messages, -as they can be submitted in interrupt context, so we can not use -usb_bulk_msg(). But the poweron command can sleep (and does), so use -usb_bulk_msg() for that transfer. - -Reported-by: Carlos Manuel Santos <cmmpsantos@gmail.com> -Cc: Samuel Ortiz <sameo@linux.intel.com> -Cc: Stephen Hemminger <stephen@networkplumber.org> -Cc: stable <stable@vger.kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> ---- - drivers/nfc/pn533/usb.c | 42 ++++++++++++++++++++++++++++++------------ - 1 file changed, 30 insertions(+), 12 deletions(-) - ---- a/drivers/nfc/pn533/usb.c -+++ b/drivers/nfc/pn533/usb.c -@@ -62,6 +62,9 @@ struct pn533_usb_phy { - struct urb *out_urb; - struct urb *in_urb; - -+ struct urb *ack_urb; -+ u8 *ack_buffer; -+ - struct pn533 *priv; - }; - -@@ -150,13 +153,16 @@ static int pn533_usb_send_ack(struct pn5 - struct pn533_usb_phy *phy = dev->phy; - static const u8 ack[6] = {0x00, 0x00, 0xff, 0x00, 0xff, 0x00}; - /* spec 7.1.1.3: Preamble, SoPC (2), ACK Code (2), Postamble */ -- int rc; - -- phy->out_urb->transfer_buffer = (u8 *)ack; -- phy->out_urb->transfer_buffer_length = sizeof(ack); -- rc = usb_submit_urb(phy->out_urb, flags); -+ if (!phy->ack_buffer) { -+ phy->ack_buffer = kmemdup(ack, sizeof(ack), flags); -+ if (!phy->ack_buffer) -+ return -ENOMEM; -+ } - -- return rc; -+ phy->ack_urb->transfer_buffer = phy->ack_buffer; -+ phy->ack_urb->transfer_buffer_length = sizeof(ack); -+ return usb_submit_urb(phy->ack_urb, flags); - } - - static int pn533_usb_send_frame(struct pn533 *dev, -@@ -375,26 +381,31 @@ static int pn533_acr122_poweron_rdr(stru - /* Power on th reader (CCID cmd) */ - u8 cmd[10] = {PN533_ACR122_PC_TO_RDR_ICCPOWERON, - 0, 0, 0, 0, 0, 0, 3, 0, 0}; -+ char *buffer; -+ int transferred; - int rc; - void *cntx; - struct pn533_acr122_poweron_rdr_arg arg; - - dev_dbg(&phy->udev->dev, "%s\n", __func__); - -+ buffer = kmemdup(cmd, sizeof(cmd), GFP_KERNEL); -+ if (!buffer) -+ return -ENOMEM; -+ - init_completion(&arg.done); - cntx = phy->in_urb->context; /* backup context */ - - phy->in_urb->complete = pn533_acr122_poweron_rdr_resp; - phy->in_urb->context = &arg; - -- phy->out_urb->transfer_buffer = cmd; -- phy->out_urb->transfer_buffer_length = sizeof(cmd); -- - print_hex_dump_debug("ACR122 TX: ", DUMP_PREFIX_NONE, 16, 1, - cmd, sizeof(cmd), false); - -- rc = usb_submit_urb(phy->out_urb, GFP_KERNEL); -- if (rc) { -+ rc = usb_bulk_msg(phy->udev, phy->out_urb->pipe, buffer, sizeof(cmd), -+ &transferred, 0); -+ kfree(buffer); -+ if (rc || (transferred != sizeof(cmd))) { - nfc_err(&phy->udev->dev, - "Reader power on cmd error %d\n", rc); - return rc; -@@ -490,8 +501,9 @@ static int pn533_usb_probe(struct usb_in - - phy->in_urb = usb_alloc_urb(0, GFP_KERNEL); - phy->out_urb = usb_alloc_urb(0, GFP_KERNEL); -+ phy->ack_urb = usb_alloc_urb(0, GFP_KERNEL); - -- if (!phy->in_urb || !phy->out_urb) -+ if (!phy->in_urb || !phy->out_urb || !phy->ack_urb) - goto error; - - usb_fill_bulk_urb(phy->in_urb, phy->udev, -@@ -501,7 +513,9 @@ static int pn533_usb_probe(struct usb_in - usb_fill_bulk_urb(phy->out_urb, phy->udev, - usb_sndbulkpipe(phy->udev, out_endpoint), - NULL, 0, pn533_send_complete, phy); -- -+ usb_fill_bulk_urb(phy->ack_urb, phy->udev, -+ usb_sndbulkpipe(phy->udev, out_endpoint), -+ NULL, 0, pn533_send_complete, phy); - - switch (id->driver_info) { - case PN533_DEVICE_STD: -@@ -554,6 +568,7 @@ static int pn533_usb_probe(struct usb_in - error: - usb_free_urb(phy->in_urb); - usb_free_urb(phy->out_urb); -+ usb_free_urb(phy->ack_urb); - usb_put_dev(phy->udev); - kfree(in_buf); - -@@ -573,10 +588,13 @@ static void pn533_usb_disconnect(struct - - usb_kill_urb(phy->in_urb); - usb_kill_urb(phy->out_urb); -+ usb_kill_urb(phy->ack_urb); - - kfree(phy->in_urb->transfer_buffer); - usb_free_urb(phy->in_urb); - usb_free_urb(phy->out_urb); -+ usb_free_urb(phy->ack_urb); -+ kfree(phy->ack_buffer); - - nfc_info(&interface->dev, "NXP PN533 NFC device disconnected\n"); - } diff --git a/qlcnic_sysfs.patch b/qlcnic_sysfs.patch index ba6b6a1403f4f9..23c3ee88c2c285 100644 --- a/qlcnic_sysfs.patch +++ b/qlcnic_sysfs.patch @@ -96,25 +96,25 @@ } -static const struct device_attribute dev_attr_bridged_mode = { -- .attr = {.name = "bridged_mode", .mode = (S_IRUGO | S_IWUSR)}, -- .show = qlcnic_show_bridged_mode, -- .store = qlcnic_store_bridged_mode, +- .attr = { .name = "bridged_mode", .mode = 0644 }, +- .show = qlcnic_show_bridged_mode, +- .store = qlcnic_store_bridged_mode, -}; - -static const struct device_attribute dev_attr_diag_mode = { -- .attr = {.name = "diag_mode", .mode = (S_IRUGO | S_IWUSR)}, +- .attr = { .name = "diag_mode", .mode = 0644 }, - .show = qlcnic_show_diag_mode, - .store = qlcnic_store_diag_mode, -}; - -static const struct device_attribute dev_attr_beacon = { -- .attr = {.name = "beacon", .mode = (S_IRUGO | S_IWUSR)}, +- .attr = { .name = "beacon", .mode = 0644 }, - .show = qlcnic_show_beacon, - .store = qlcnic_store_beacon, -}; - static const struct bin_attribute bin_attr_crb = { - .attr = {.name = "crb", .mode = (S_IRUGO | S_IWUSR)}, + .attr = { .name = "crb", .mode = 0644 }, .size = 0, @@ -1317,6 +1300,24 @@ void qlcnic_unregister_hwmon_dev(struct } @@ -1,9 +1,5 @@ # -usb-debugfs-cleanup.patch -usb-debugfs.patch -nfc-pn533-don-t-send-usb-data-off-of-the-stack.patch -usb-serial-visor-handle-potential-invalid-device-configuration.patch usb_DEVICE_ATTR.patch diff --git a/usb-debugfs-cleanup.patch b/usb-debugfs-cleanup.patch deleted file mode 100644 index 22b9033cd1bbcb..00000000000000 --- a/usb-debugfs-cleanup.patch +++ /dev/null @@ -1,1553 +0,0 @@ -From 7b3bcbfe0aeedeec64c83cf9655273e8f42f1c54 Mon Sep 17 00:00:00 2001 -From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -Date: Tue, 29 May 2018 10:36:11 +0200 -Subject: [PATCH] usb: debugfs cleanup - -Fix up all of the debugfs calls, no need to check the return values at -all. This cleans up lots of unneeded code. - -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> ---- - drivers/usb/chipidea/ci.h | 2 +- - drivers/usb/chipidea/core.c | 4 +- - drivers/usb/chipidea/debug.c | 56 +++++------------- - drivers/usb/core/usb.c | 26 ++------- - drivers/usb/dwc2/debugfs.c | 78 +++++-------------------- - drivers/usb/dwc3/debugfs.c | 43 ++++---------- - drivers/usb/gadget/udc/atmel_usba_udc.c | 71 ++++------------------ - drivers/usb/gadget/udc/atmel_usba_udc.h | 4 -- - drivers/usb/gadget/udc/bcm63xx_udc.c | 37 ++---------- - drivers/usb/gadget/udc/gr_udc.c | 7 +-- - drivers/usb/gadget/udc/gr_udc.h | 1 - - drivers/usb/gadget/udc/pxa27x_udc.c | 43 ++------------ - drivers/usb/gadget/udc/pxa27x_udc.h | 3 - - drivers/usb/gadget/udc/renesas_usb3.c | 18 +----- - drivers/usb/gadget/udc/s3c2410_udc.c | 17 ++---- - drivers/usb/host/ehci-dbg.c | 30 +++------- - drivers/usb/host/ehci-hcd.c | 5 -- - drivers/usb/host/fhci-dbg.c | 23 ++------ - drivers/usb/host/fhci.h | 2 - - drivers/usb/host/fotg210-hcd.c | 34 +++-------- - drivers/usb/host/imx21-dbg.c | 44 ++++---------- - drivers/usb/host/isp116x-hcd.c | 17 ++---- - drivers/usb/host/ohci-dbg.c | 45 +++----------- - drivers/usb/host/ohci-hcd.c | 5 -- - drivers/usb/host/ohci.h | 3 - - drivers/usb/host/uhci-hcd.c | 15 ++--- - drivers/usb/mon/mon_text.c | 37 +++--------- - drivers/usb/mtu3/mtu3_dr.c | 4 -- - drivers/usb/musb/musb_core.c | 5 +- - drivers/usb/musb/musb_debug.h | 5 +- - drivers/usb/musb/musb_debugfs.c | 44 +++----------- - drivers/usb/musb/musb_dsps.c | 9 +-- - drivers/usb/typec/fusb302/fusb302.c | 24 +++----- - drivers/usb/typec/tcpm.c | 9 +-- - 34 files changed, 157 insertions(+), 613 deletions(-) - -diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h -index 98b7cb3d0064..0bf244d50544 100644 ---- a/drivers/usb/chipidea/ci.h -+++ b/drivers/usb/chipidea/ci.h -@@ -450,7 +450,7 @@ void hw_phymode_configure(struct ci_hdrc *ci); - - void ci_platform_configure(struct ci_hdrc *ci); - --int dbg_create_files(struct ci_hdrc *ci); -+void dbg_create_files(struct ci_hdrc *ci); - - void dbg_remove_files(struct ci_hdrc *ci); - #endif /* __DRIVERS_USB_CHIPIDEA_CI_H */ -diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c -index 33ae87fa3ff3..85fc6db48e44 100644 ---- a/drivers/usb/chipidea/core.c -+++ b/drivers/usb/chipidea/core.c -@@ -1062,9 +1062,7 @@ static int ci_hdrc_probe(struct platform_device *pdev) - ci_hdrc_otg_fsm_start(ci); - - device_set_wakeup_capable(&pdev->dev, true); -- ret = dbg_create_files(ci); -- if (ret) -- goto stop; -+ dbg_create_files(ci); - - ret = sysfs_create_group(&dev->kobj, &ci_attr_group); - if (ret) -diff --git a/drivers/usb/chipidea/debug.c b/drivers/usb/chipidea/debug.c -index ce648cb3ed94..fcc91a338875 100644 ---- a/drivers/usb/chipidea/debug.c -+++ b/drivers/usb/chipidea/debug.c -@@ -340,54 +340,28 @@ DEFINE_SHOW_ATTRIBUTE(ci_registers); - * - * This function returns an error code - */ --int dbg_create_files(struct ci_hdrc *ci) -+void dbg_create_files(struct ci_hdrc *ci) - { -- struct dentry *dent; -- - ci->debugfs = debugfs_create_dir(dev_name(ci->dev), NULL); -- if (!ci->debugfs) -- return -ENOMEM; -- -- dent = debugfs_create_file("device", S_IRUGO, ci->debugfs, ci, -- &ci_device_fops); -- if (!dent) -- goto err; -- -- dent = debugfs_create_file("port_test", S_IRUGO | S_IWUSR, ci->debugfs, -- ci, &ci_port_test_fops); -- if (!dent) -- goto err; -- -- dent = debugfs_create_file("qheads", S_IRUGO, ci->debugfs, ci, -- &ci_qheads_fops); -- if (!dent) -- goto err; - -- dent = debugfs_create_file("requests", S_IRUGO, ci->debugfs, ci, -- &ci_requests_fops); -- if (!dent) -- goto err; -+ debugfs_create_file("device", S_IRUGO, ci->debugfs, ci, -+ &ci_device_fops); -+ debugfs_create_file("port_test", S_IRUGO | S_IWUSR, ci->debugfs, ci, -+ &ci_port_test_fops); -+ debugfs_create_file("qheads", S_IRUGO, ci->debugfs, ci, -+ &ci_qheads_fops); -+ debugfs_create_file("requests", S_IRUGO, ci->debugfs, ci, -+ &ci_requests_fops); - - if (ci_otg_is_fsm_mode(ci)) { -- dent = debugfs_create_file("otg", S_IRUGO, ci->debugfs, ci, -- &ci_otg_fops); -- if (!dent) -- goto err; -+ debugfs_create_file("otg", S_IRUGO, ci->debugfs, ci, -+ &ci_otg_fops); - } - -- dent = debugfs_create_file("role", S_IRUGO | S_IWUSR, ci->debugfs, ci, -- &ci_role_fops); -- if (!dent) -- goto err; -- -- dent = debugfs_create_file("registers", S_IRUGO, ci->debugfs, ci, -- &ci_registers_fops); -- -- if (dent) -- return 0; --err: -- debugfs_remove_recursive(ci->debugfs); -- return -ENOMEM; -+ debugfs_create_file("role", S_IRUGO | S_IWUSR, ci->debugfs, ci, -+ &ci_role_fops); -+ debugfs_create_file("registers", S_IRUGO, ci->debugfs, ci, -+ &ci_registers_fops); - } - - /** -diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c -index 0adb6345ff2e..623be3174fb3 100644 ---- a/drivers/usb/core/usb.c -+++ b/drivers/usb/core/usb.c -@@ -1167,30 +1167,16 @@ static struct notifier_block usb_bus_nb = { - struct dentry *usb_debug_root; - EXPORT_SYMBOL_GPL(usb_debug_root); - --static struct dentry *usb_debug_devices; -- --static int usb_debugfs_init(void) -+static void usb_debugfs_init(void) - { - usb_debug_root = debugfs_create_dir("usb", NULL); -- if (!usb_debug_root) -- return -ENOENT; -- -- usb_debug_devices = debugfs_create_file("devices", 0444, -- usb_debug_root, NULL, -- &usbfs_devices_fops); -- if (!usb_debug_devices) { -- debugfs_remove(usb_debug_root); -- usb_debug_root = NULL; -- return -ENOENT; -- } -- -- return 0; -+ debugfs_create_file("devices", 0444, usb_debug_root, NULL, -+ &usbfs_devices_fops); - } - - static void usb_debugfs_cleanup(void) - { -- debugfs_remove(usb_debug_devices); -- debugfs_remove(usb_debug_root); -+ debugfs_remove_recursive(usb_debug_root); - } - - /* -@@ -1205,9 +1191,7 @@ static int __init usb_init(void) - } - usb_init_pool_max(); - -- retval = usb_debugfs_init(); -- if (retval) -- goto out; -+ usb_debugfs_init(); - - usb_acpi_register(); - retval = bus_register(&usb_bus_type); -diff --git a/drivers/usb/dwc2/debugfs.c b/drivers/usb/dwc2/debugfs.c -index 7e6618ad9f21..d0bdb7997557 100644 ---- a/drivers/usb/dwc2/debugfs.c -+++ b/drivers/usb/dwc2/debugfs.c -@@ -294,52 +294,30 @@ DEFINE_SHOW_ATTRIBUTE(ep); - static void dwc2_hsotg_create_debug(struct dwc2_hsotg *hsotg) - { - struct dentry *root; -- struct dentry *file; - unsigned int epidx; - - root = hsotg->debug_root; - - /* create general state file */ -- -- file = debugfs_create_file("state", 0444, root, hsotg, &state_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create state\n", __func__); -- -- file = debugfs_create_file("testmode", 0644, root, hsotg, -- &testmode_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create testmode\n", -- __func__); -- -- file = debugfs_create_file("fifo", 0444, root, hsotg, &fifo_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create fifo\n", __func__); -+ debugfs_create_file("state", 0444, root, hsotg, &state_fops); -+ debugfs_create_file("testmode", 0644, root, hsotg, &testmode_fops); -+ debugfs_create_file("fifo", 0444, root, hsotg, &fifo_fops); - - /* Create one file for each out endpoint */ - for (epidx = 0; epidx < hsotg->num_of_eps; epidx++) { - struct dwc2_hsotg_ep *ep; - - ep = hsotg->eps_out[epidx]; -- if (ep) { -- file = debugfs_create_file(ep->name, 0444, -- root, ep, &ep_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "failed to create %s debug file\n", -- ep->name); -- } -+ if (ep) -+ debugfs_create_file(ep->name, 0444, root, ep, &ep_fops); - } - /* Create one file for each in endpoint. EP0 is handled with out eps */ - for (epidx = 1; epidx < hsotg->num_of_eps; epidx++) { - struct dwc2_hsotg_ep *ep; - - ep = hsotg->eps_in[epidx]; -- if (ep) { -- file = debugfs_create_file(ep->name, 0444, -- root, ep, &ep_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "failed to create %s debug file\n", -- ep->name); -- } -+ if (ep) -+ debugfs_create_file(ep->name, 0444, root, ep, &ep_fops); - } - } - #else -@@ -792,32 +770,14 @@ DEFINE_SHOW_ATTRIBUTE(dr_mode); - int dwc2_debugfs_init(struct dwc2_hsotg *hsotg) - { - int ret; -- struct dentry *file; -+ struct dentry *root; - -- hsotg->debug_root = debugfs_create_dir(dev_name(hsotg->dev), NULL); -- if (!hsotg->debug_root) { -- ret = -ENOMEM; -- goto err0; -- } -+ root = debugfs_create_dir(dev_name(hsotg->dev), NULL); -+ hsotg->debug_root = root; - -- file = debugfs_create_file("params", 0444, -- hsotg->debug_root, -- hsotg, ¶ms_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create params\n", __func__); -- -- file = debugfs_create_file("hw_params", 0444, -- hsotg->debug_root, -- hsotg, &hw_params_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create hw_params\n", -- __func__); -- -- file = debugfs_create_file("dr_mode", 0444, -- hsotg->debug_root, -- hsotg, &dr_mode_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create dr_mode\n", __func__); -+ debugfs_create_file("params", 0444, root, hsotg, ¶ms_fops); -+ debugfs_create_file("hw_params", 0444, root, hsotg, &hw_params_fops); -+ debugfs_create_file("dr_mode", 0444, root, hsotg, &dr_mode_fops); - - /* Add gadget debugfs nodes */ - dwc2_hsotg_create_debug(hsotg); -@@ -826,24 +786,18 @@ int dwc2_debugfs_init(struct dwc2_hsotg *hsotg) - GFP_KERNEL); - if (!hsotg->regset) { - ret = -ENOMEM; -- goto err1; -+ goto err; - } - - hsotg->regset->regs = dwc2_regs; - hsotg->regset->nregs = ARRAY_SIZE(dwc2_regs); - hsotg->regset->base = hsotg->regs; - -- file = debugfs_create_regset32("regdump", 0444, hsotg->debug_root, -- hsotg->regset); -- if (!file) { -- ret = -ENOMEM; -- goto err1; -- } -+ debugfs_create_regset32("regdump", 0444, root, hsotg->regset); - - return 0; --err1: -+err: - debugfs_remove_recursive(hsotg->debug_root); --err0: - return ret; - } - -diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c -index 2f07be1e1f31..df8e73ec3342 100644 ---- a/drivers/usb/dwc3/debugfs.c -+++ b/drivers/usb/dwc3/debugfs.c -@@ -716,9 +716,6 @@ static void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep, - struct dentry *dir; - - dir = debugfs_create_dir(dep->name, parent); -- if (IS_ERR_OR_NULL(dir)) -- return; -- - dwc3_debugfs_create_endpoint_files(dep, dir); - } - -@@ -740,49 +737,31 @@ static void dwc3_debugfs_create_endpoint_dirs(struct dwc3 *dwc, - void dwc3_debugfs_init(struct dwc3 *dwc) - { - struct dentry *root; -- struct dentry *file; -- -- root = debugfs_create_dir(dev_name(dwc->dev), NULL); -- if (IS_ERR_OR_NULL(root)) { -- if (!root) -- dev_err(dwc->dev, "Can't create debugfs root\n"); -- return; -- } -- dwc->root = root; - - dwc->regset = kzalloc(sizeof(*dwc->regset), GFP_KERNEL); -- if (!dwc->regset) { -- debugfs_remove_recursive(root); -+ if (!dwc->regset) - return; -- } - - dwc->regset->regs = dwc3_regs; - dwc->regset->nregs = ARRAY_SIZE(dwc3_regs); - dwc->regset->base = dwc->regs - DWC3_GLOBALS_REGS_START; - -- file = debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset); -- if (!file) -- dev_dbg(dwc->dev, "Can't create debugfs regdump\n"); -+ root = debugfs_create_dir(dev_name(dwc->dev), NULL); -+ dwc->root = root; -+ -+ debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset); - - if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)) { -- file = debugfs_create_file("mode", S_IRUGO | S_IWUSR, root, -- dwc, &dwc3_mode_fops); -- if (!file) -- dev_dbg(dwc->dev, "Can't create debugfs mode\n"); -+ debugfs_create_file("mode", S_IRUGO | S_IWUSR, root, dwc, -+ &dwc3_mode_fops); - } - - if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE) || - IS_ENABLED(CONFIG_USB_DWC3_GADGET)) { -- file = debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root, -- dwc, &dwc3_testmode_fops); -- if (!file) -- dev_dbg(dwc->dev, "Can't create debugfs testmode\n"); -- -- file = debugfs_create_file("link_state", S_IRUGO | S_IWUSR, -- root, dwc, &dwc3_link_state_fops); -- if (!file) -- dev_dbg(dwc->dev, "Can't create debugfs link_state\n"); -- -+ debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root, dwc, -+ &dwc3_testmode_fops); -+ debugfs_create_file("link_state", S_IRUGO | S_IWUSR, root, dwc, -+ &dwc3_link_state_fops); - dwc3_debugfs_create_endpoint_dirs(dwc, root); - } - } -diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c -index 2f586f2bda7e..a4d99bf50f2f 100644 ---- a/drivers/usb/gadget/udc/atmel_usba_udc.c -+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c -@@ -206,94 +206,45 @@ static void usba_ep_init_debugfs(struct usba_udc *udc, - struct dentry *ep_root; - - ep_root = debugfs_create_dir(ep->ep.name, udc->debugfs_root); -- if (!ep_root) -- goto err_root; - ep->debugfs_dir = ep_root; - -- ep->debugfs_queue = debugfs_create_file("queue", 0400, ep_root, -- ep, &queue_dbg_fops); -- if (!ep->debugfs_queue) -- goto err_queue; -- -- if (ep->can_dma) { -- ep->debugfs_dma_status -- = debugfs_create_u32("dma_status", 0400, ep_root, -- &ep->last_dma_status); -- if (!ep->debugfs_dma_status) -- goto err_dma_status; -- } -- if (ep_is_control(ep)) { -- ep->debugfs_state -- = debugfs_create_u32("state", 0400, ep_root, -- &ep->state); -- if (!ep->debugfs_state) -- goto err_state; -- } -- -- return; -- --err_state: -+ debugfs_create_file("queue", 0400, ep_root, ep, &queue_dbg_fops); - if (ep->can_dma) -- debugfs_remove(ep->debugfs_dma_status); --err_dma_status: -- debugfs_remove(ep->debugfs_queue); --err_queue: -- debugfs_remove(ep_root); --err_root: -- dev_err(&ep->udc->pdev->dev, -- "failed to create debugfs directory for %s\n", ep->ep.name); -+ debugfs_create_u32("dma_status", 0400, ep_root, -+ &ep->last_dma_status); -+ if (ep_is_control(ep)) -+ debugfs_create_u32("state", 0400, ep_root, &ep->state); - } - - static void usba_ep_cleanup_debugfs(struct usba_ep *ep) - { -- debugfs_remove(ep->debugfs_queue); -- debugfs_remove(ep->debugfs_dma_status); -- debugfs_remove(ep->debugfs_state); -- debugfs_remove(ep->debugfs_dir); -- ep->debugfs_dma_status = NULL; -- ep->debugfs_dir = NULL; -+ debugfs_remove_recursive(ep->debugfs_dir); - } - - static void usba_init_debugfs(struct usba_udc *udc) - { -- struct dentry *root, *regs; -+ struct dentry *root; - struct resource *regs_resource; - - root = debugfs_create_dir(udc->gadget.name, NULL); -- if (IS_ERR(root) || !root) -- goto err_root; - udc->debugfs_root = root; - - regs_resource = platform_get_resource(udc->pdev, IORESOURCE_MEM, - CTRL_IOMEM_ID); - - if (regs_resource) { -- regs = debugfs_create_file_size("regs", 0400, root, udc, -- ®s_dbg_fops, -- resource_size(regs_resource)); -- if (!regs) -- goto err_regs; -- udc->debugfs_regs = regs; -+ debugfs_create_file_size("regs", 0400, root, udc, -+ ®s_dbg_fops, -+ resource_size(regs_resource)); - } - - usba_ep_init_debugfs(udc, to_usba_ep(udc->gadget.ep0)); -- -- return; -- --err_regs: -- debugfs_remove(root); --err_root: -- udc->debugfs_root = NULL; -- dev_err(&udc->pdev->dev, "debugfs is not available\n"); - } - - static void usba_cleanup_debugfs(struct usba_udc *udc) - { - usba_ep_cleanup_debugfs(to_usba_ep(udc->gadget.ep0)); -- debugfs_remove(udc->debugfs_regs); -- debugfs_remove(udc->debugfs_root); -- udc->debugfs_regs = NULL; -- udc->debugfs_root = NULL; -+ debugfs_remove_recursive(udc->debugfs_root); - } - #else - static inline void usba_ep_init_debugfs(struct usba_udc *udc, -diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.h b/drivers/usb/gadget/udc/atmel_usba_udc.h -index d7eb7cf4fd5c..030bf797cd25 100644 ---- a/drivers/usb/gadget/udc/atmel_usba_udc.h -+++ b/drivers/usb/gadget/udc/atmel_usba_udc.h -@@ -287,9 +287,6 @@ struct usba_ep { - #ifdef CONFIG_USB_GADGET_DEBUG_FS - u32 last_dma_status; - struct dentry *debugfs_dir; -- struct dentry *debugfs_queue; -- struct dentry *debugfs_dma_status; -- struct dentry *debugfs_state; - #endif - }; - -@@ -344,7 +341,6 @@ struct usba_udc { - - #ifdef CONFIG_USB_GADGET_DEBUG_FS - struct dentry *debugfs_root; -- struct dentry *debugfs_regs; - #endif - - struct regmap *pmc; -diff --git a/drivers/usb/gadget/udc/bcm63xx_udc.c b/drivers/usb/gadget/udc/bcm63xx_udc.c -index 3a8df8601074..c1fcc77403ea 100644 ---- a/drivers/usb/gadget/udc/bcm63xx_udc.c -+++ b/drivers/usb/gadget/udc/bcm63xx_udc.c -@@ -288,8 +288,6 @@ struct bcm63xx_req { - * @ep0_reply: Pending reply from gadget driver. - * @ep0_request: Outstanding ep0 request. - * @debugfs_root: debugfs directory: /sys/kernel/debug/<DRV_MODULE_NAME>. -- * @debugfs_usbd: debugfs file "usbd" for controller state. -- * @debugfs_iudma: debugfs file "usbd" for IUDMA state. - */ - struct bcm63xx_udc { - spinlock_t lock; -@@ -330,8 +328,6 @@ struct bcm63xx_udc { - struct usb_request *ep0_request; - - struct dentry *debugfs_root; -- struct dentry *debugfs_usbd; -- struct dentry *debugfs_iudma; - }; - - static const struct usb_ep_ops bcm63xx_udc_ep_ops; -@@ -2247,34 +2243,16 @@ DEFINE_SHOW_ATTRIBUTE(bcm63xx_iudma_dbg); - */ - static void bcm63xx_udc_init_debugfs(struct bcm63xx_udc *udc) - { -- struct dentry *root, *usbd, *iudma; -+ struct dentry *root; - - if (!IS_ENABLED(CONFIG_USB_GADGET_DEBUG_FS)) - return; - - root = debugfs_create_dir(udc->gadget.name, NULL); -- if (IS_ERR(root) || !root) -- goto err_root; -- -- usbd = debugfs_create_file("usbd", 0400, root, udc, -- &bcm63xx_usbd_dbg_fops); -- if (!usbd) -- goto err_usbd; -- iudma = debugfs_create_file("iudma", 0400, root, udc, -- &bcm63xx_iudma_dbg_fops); -- if (!iudma) -- goto err_iudma; -- - udc->debugfs_root = root; -- udc->debugfs_usbd = usbd; -- udc->debugfs_iudma = iudma; -- return; --err_iudma: -- debugfs_remove(usbd); --err_usbd: -- debugfs_remove(root); --err_root: -- dev_err(udc->dev, "debugfs is not available\n"); -+ -+ debugfs_create_file("usbd", 0400, root, udc, &bcm63xx_usbd_dbg_fops); -+ debugfs_create_file("iudma", 0400, root, udc, &bcm63xx_iudma_dbg_fops); - } - - /** -@@ -2285,12 +2263,7 @@ static void bcm63xx_udc_init_debugfs(struct bcm63xx_udc *udc) - */ - static void bcm63xx_udc_cleanup_debugfs(struct bcm63xx_udc *udc) - { -- debugfs_remove(udc->debugfs_iudma); -- debugfs_remove(udc->debugfs_usbd); -- debugfs_remove(udc->debugfs_root); -- udc->debugfs_iudma = NULL; -- udc->debugfs_usbd = NULL; -- udc->debugfs_root = NULL; -+ debugfs_remove_recursive(udc->debugfs_root); - } - - /*********************************************************************** -diff --git a/drivers/usb/gadget/udc/gr_udc.c b/drivers/usb/gadget/udc/gr_udc.c -index ca83c15d8ea4..729e60e49564 100644 ---- a/drivers/usb/gadget/udc/gr_udc.c -+++ b/drivers/usb/gadget/udc/gr_udc.c -@@ -209,15 +209,12 @@ static void gr_dfs_create(struct gr_udc *dev) - const char *name = "gr_udc_state"; - - dev->dfs_root = debugfs_create_dir(dev_name(dev->dev), NULL); -- dev->dfs_state = debugfs_create_file(name, 0444, dev->dfs_root, dev, -- &gr_dfs_fops); -+ debugfs_create_file(name, 0444, dev->dfs_root, dev, &gr_dfs_fops); - } - - static void gr_dfs_delete(struct gr_udc *dev) - { -- /* Handles NULL and ERR pointers internally */ -- debugfs_remove(dev->dfs_state); -- debugfs_remove(dev->dfs_root); -+ debugfs_remove_recursive(dev->dfs_root); - } - - #else /* !CONFIG_USB_GADGET_DEBUG_FS */ -diff --git a/drivers/usb/gadget/udc/gr_udc.h b/drivers/usb/gadget/udc/gr_udc.h -index 3e913268c8c5..417ad2aa2cc7 100644 ---- a/drivers/usb/gadget/udc/gr_udc.h -+++ b/drivers/usb/gadget/udc/gr_udc.h -@@ -217,7 +217,6 @@ struct gr_udc { - spinlock_t lock; /* General lock, a.k.a. "dev->lock" in comments */ - - struct dentry *dfs_root; -- struct dentry *dfs_state; - }; - - #define to_gr_udc(gadget) (container_of((gadget), struct gr_udc, gadget)) -diff --git a/drivers/usb/gadget/udc/pxa27x_udc.c b/drivers/usb/gadget/udc/pxa27x_udc.c -index a58242e901df..014233252299 100644 ---- a/drivers/usb/gadget/udc/pxa27x_udc.c -+++ b/drivers/usb/gadget/udc/pxa27x_udc.c -@@ -205,50 +205,19 @@ DEFINE_SHOW_ATTRIBUTE(eps_dbg); - - static void pxa_init_debugfs(struct pxa_udc *udc) - { -- struct dentry *root, *state, *queues, *eps; -+ struct dentry *root; - - root = debugfs_create_dir(udc->gadget.name, NULL); -- if (IS_ERR(root) || !root) -- goto err_root; -- -- state = debugfs_create_file("udcstate", 0400, root, udc, -- &state_dbg_fops); -- if (!state) -- goto err_state; -- queues = debugfs_create_file("queues", 0400, root, udc, -- &queues_dbg_fops); -- if (!queues) -- goto err_queues; -- eps = debugfs_create_file("epstate", 0400, root, udc, -- &eps_dbg_fops); -- if (!eps) -- goto err_eps; -- - udc->debugfs_root = root; -- udc->debugfs_state = state; -- udc->debugfs_queues = queues; -- udc->debugfs_eps = eps; -- return; --err_eps: -- debugfs_remove(eps); --err_queues: -- debugfs_remove(queues); --err_state: -- debugfs_remove(root); --err_root: -- dev_err(udc->dev, "debugfs is not available\n"); -+ -+ debugfs_create_file("udcstate", 0400, root, udc, &state_dbg_fops); -+ debugfs_create_file("queues", 0400, root, udc, &queues_dbg_fops); -+ debugfs_create_file("epstate", 0400, root, udc, &eps_dbg_fops); - } - - static void pxa_cleanup_debugfs(struct pxa_udc *udc) - { -- debugfs_remove(udc->debugfs_eps); -- debugfs_remove(udc->debugfs_queues); -- debugfs_remove(udc->debugfs_state); -- debugfs_remove(udc->debugfs_root); -- udc->debugfs_eps = NULL; -- udc->debugfs_queues = NULL; -- udc->debugfs_state = NULL; -- udc->debugfs_root = NULL; -+ debugfs_remove_recursive(udc->debugfs_root); - } - - #else -diff --git a/drivers/usb/gadget/udc/pxa27x_udc.h b/drivers/usb/gadget/udc/pxa27x_udc.h -index 1128d39a4255..13b2977399ab 100644 ---- a/drivers/usb/gadget/udc/pxa27x_udc.h -+++ b/drivers/usb/gadget/udc/pxa27x_udc.h -@@ -476,9 +476,6 @@ struct pxa_udc { - #endif - #ifdef CONFIG_USB_GADGET_DEBUG_FS - struct dentry *debugfs_root; -- struct dentry *debugfs_state; -- struct dentry *debugfs_queues; -- struct dentry *debugfs_eps; - #endif - }; - #define to_pxa(g) (container_of((g), struct pxa_udc, gadget)) -diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c -index 5caf78bbbf7c..977ea1a02cf9 100644 ---- a/drivers/usb/gadget/udc/renesas_usb3.c -+++ b/drivers/usb/gadget/udc/renesas_usb3.c -@@ -2391,22 +2391,10 @@ static const struct file_operations renesas_usb3_b_device_fops = { - static void renesas_usb3_debugfs_init(struct renesas_usb3 *usb3, - struct device *dev) - { -- struct dentry *root, *file; -+ usb3->dentry = debugfs_create_dir(dev_name(dev), NULL); - -- root = debugfs_create_dir(dev_name(dev), NULL); -- if (IS_ERR_OR_NULL(root)) { -- dev_info(dev, "%s: Can't create the root\n", __func__); -- return; -- } -- -- file = debugfs_create_file("b_device", 0644, root, usb3, -- &renesas_usb3_b_device_fops); -- if (!file) { -- dev_info(dev, "%s: Can't create debugfs mode\n", __func__); -- debugfs_remove_recursive(root); -- } else { -- usb3->dentry = root; -- } -+ debugfs_create_file("b_device", 0644, usb3->dentry, usb3, -+ &renesas_usb3_b_device_fops); - } - - /*------- platform_driver ------------------------------------------------*/ -diff --git a/drivers/usb/gadget/udc/s3c2410_udc.c b/drivers/usb/gadget/udc/s3c2410_udc.c -index f154f49e98c8..8bf5ad7a59ad 100644 ---- a/drivers/usb/gadget/udc/s3c2410_udc.c -+++ b/drivers/usb/gadget/udc/s3c2410_udc.c -@@ -1871,13 +1871,9 @@ static int s3c2410_udc_probe(struct platform_device *pdev) - if (retval) - goto err_add_udc; - -- if (s3c2410_udc_debugfs_root) { -- udc->regs_info = debugfs_create_file("registers", S_IRUGO, -- s3c2410_udc_debugfs_root, -- udc, &s3c2410_udc_debugfs_fops); -- if (!udc->regs_info) -- dev_warn(dev, "debugfs file creation failed\n"); -- } -+ udc->regs_info = debugfs_create_file("registers", S_IRUGO, -+ s3c2410_udc_debugfs_root, udc, -+ &s3c2410_udc_debugfs_fops); - - dev_dbg(dev, "probe ok\n"); - -@@ -1994,11 +1990,6 @@ static int __init udc_init(void) - dprintk(DEBUG_NORMAL, "%s\n", gadget_name); - - s3c2410_udc_debugfs_root = debugfs_create_dir(gadget_name, NULL); -- if (IS_ERR(s3c2410_udc_debugfs_root)) { -- pr_err("%s: debugfs dir creation failed %ld\n", -- gadget_name, PTR_ERR(s3c2410_udc_debugfs_root)); -- s3c2410_udc_debugfs_root = NULL; -- } - - retval = platform_driver_register(&udc_driver_24x0); - if (retval) -@@ -2014,7 +2005,7 @@ static int __init udc_init(void) - static void __exit udc_exit(void) - { - platform_driver_unregister(&udc_driver_24x0); -- debugfs_remove(s3c2410_udc_debugfs_root); -+ debugfs_remove_recursive(s3c2410_udc_debugfs_root); - } - - module_init(udc_init); -diff --git a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c -index 3ed75aaa09d9..7619cfb06883 100644 ---- a/drivers/usb/host/ehci-dbg.c -+++ b/drivers/usb/host/ehci-dbg.c -@@ -1028,29 +1028,15 @@ static inline void create_debug_files(struct ehci_hcd *ehci) - struct usb_bus *bus = &ehci_to_hcd(ehci)->self; - - ehci->debug_dir = debugfs_create_dir(bus->bus_name, ehci_debug_root); -- if (!ehci->debug_dir) -- return; - -- if (!debugfs_create_file("async", S_IRUGO, ehci->debug_dir, bus, -- &debug_async_fops)) -- goto file_error; -- -- if (!debugfs_create_file("bandwidth", S_IRUGO, ehci->debug_dir, bus, -- &debug_bandwidth_fops)) -- goto file_error; -- -- if (!debugfs_create_file("periodic", S_IRUGO, ehci->debug_dir, bus, -- &debug_periodic_fops)) -- goto file_error; -- -- if (!debugfs_create_file("registers", S_IRUGO, ehci->debug_dir, bus, -- &debug_registers_fops)) -- goto file_error; -- -- return; -- --file_error: -- debugfs_remove_recursive(ehci->debug_dir); -+ debugfs_create_file("async", S_IRUGO, ehci->debug_dir, bus, -+ &debug_async_fops); -+ debugfs_create_file("bandwidth", S_IRUGO, ehci->debug_dir, bus, -+ &debug_bandwidth_fops); -+ debugfs_create_file("periodic", S_IRUGO, ehci->debug_dir, bus, -+ &debug_periodic_fops); -+ debugfs_create_file("registers", S_IRUGO, ehci->debug_dir, bus, -+ &debug_registers_fops); - } - - static inline void remove_debug_files(struct ehci_hcd *ehci) -diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c -index d927adf3afcd..89c47ae5c7d3 100644 ---- a/drivers/usb/host/ehci-hcd.c -+++ b/drivers/usb/host/ehci-hcd.c -@@ -1311,10 +1311,6 @@ static int __init ehci_hcd_init(void) - - #ifdef CONFIG_DYNAMIC_DEBUG - ehci_debug_root = debugfs_create_dir("ehci", usb_debug_root); -- if (!ehci_debug_root) { -- retval = -ENOENT; -- goto err_debug; -- } - #endif - - #ifdef PLATFORM_DRIVER -@@ -1361,7 +1357,6 @@ static int __init ehci_hcd_init(void) - #ifdef CONFIG_DYNAMIC_DEBUG - debugfs_remove(ehci_debug_root); - ehci_debug_root = NULL; --err_debug: - #endif - clear_bit(USB_EHCI_LOADED, &usb_hcds_loaded); - return retval; -diff --git a/drivers/usb/host/fhci-dbg.c b/drivers/usb/host/fhci-dbg.c -index ebf9bb219f75..100048b3bd17 100644 ---- a/drivers/usb/host/fhci-dbg.c -+++ b/drivers/usb/host/fhci-dbg.c -@@ -83,27 +83,14 @@ void fhci_dfs_create(struct fhci_hcd *fhci) - struct device *dev = fhci_to_hcd(fhci)->self.controller; - - fhci->dfs_root = debugfs_create_dir(dev_name(dev), usb_debug_root); -- if (!fhci->dfs_root) { -- WARN_ON(1); -- return; -- } -- -- fhci->dfs_regs = debugfs_create_file("regs", S_IFREG | S_IRUGO, -- fhci->dfs_root, fhci, &fhci_dfs_regs_fops); - -- fhci->dfs_irq_stat = debugfs_create_file("irq_stat", -- S_IFREG | S_IRUGO, fhci->dfs_root, fhci, -- &fhci_dfs_irq_stat_fops); -- -- WARN_ON(!fhci->dfs_regs || !fhci->dfs_irq_stat); -+ debugfs_create_file("regs", S_IFREG | S_IRUGO, fhci->dfs_root, fhci, -+ &fhci_dfs_regs_fops); -+ debugfs_create_file("irq_stat", S_IFREG | S_IRUGO, fhci->dfs_root, fhci, -+ &fhci_dfs_irq_stat_fops); - } - - void fhci_dfs_destroy(struct fhci_hcd *fhci) - { -- if (!fhci->dfs_root) -- return; -- -- debugfs_remove(fhci->dfs_irq_stat); -- debugfs_remove(fhci->dfs_regs); -- debugfs_remove(fhci->dfs_root); -+ debugfs_remove_recursive(fhci->dfs_root); - } -diff --git a/drivers/usb/host/fhci.h b/drivers/usb/host/fhci.h -index e7ec41d62410..2ce5031d866d 100644 ---- a/drivers/usb/host/fhci.h -+++ b/drivers/usb/host/fhci.h -@@ -262,8 +262,6 @@ struct fhci_hcd { - #ifdef CONFIG_FHCI_DEBUG - int usb_irq_stat[13]; - struct dentry *dfs_root; -- struct dentry *dfs_regs; -- struct dentry *dfs_irq_stat; - #endif - }; - -diff --git a/drivers/usb/host/fotg210-hcd.c b/drivers/usb/host/fotg210-hcd.c -index d8abf401918a..e64eb47770c8 100644 ---- a/drivers/usb/host/fotg210-hcd.c -+++ b/drivers/usb/host/fotg210-hcd.c -@@ -844,28 +844,16 @@ static int debug_registers_open(struct inode *inode, struct file *file) - static inline void create_debug_files(struct fotg210_hcd *fotg210) - { - struct usb_bus *bus = &fotg210_to_hcd(fotg210)->self; -+ struct dentry *root; - -- fotg210->debug_dir = debugfs_create_dir(bus->bus_name, -- fotg210_debug_root); -- if (!fotg210->debug_dir) -- return; -- -- if (!debugfs_create_file("async", S_IRUGO, fotg210->debug_dir, bus, -- &debug_async_fops)) -- goto file_error; -- -- if (!debugfs_create_file("periodic", S_IRUGO, fotg210->debug_dir, bus, -- &debug_periodic_fops)) -- goto file_error; -+ root = debugfs_create_dir(bus->bus_name, fotg210_debug_root); -+ fotg210->debug_dir = root; - -- if (!debugfs_create_file("registers", S_IRUGO, fotg210->debug_dir, bus, -- &debug_registers_fops)) -- goto file_error; -- -- return; -- --file_error: -- debugfs_remove_recursive(fotg210->debug_dir); -+ debugfs_create_file("async", S_IRUGO, root, bus, &debug_async_fops); -+ debugfs_create_file("periodic", S_IRUGO, root, bus, -+ &debug_periodic_fops); -+ debugfs_create_file("registers", S_IRUGO, root, bus, -+ &debug_registers_fops); - } - - static inline void remove_debug_files(struct fotg210_hcd *fotg210) -@@ -5686,10 +5674,6 @@ static int __init fotg210_hcd_init(void) - sizeof(struct fotg210_itd)); - - fotg210_debug_root = debugfs_create_dir("fotg210", usb_debug_root); -- if (!fotg210_debug_root) { -- retval = -ENOENT; -- goto err_debug; -- } - - retval = platform_driver_register(&fotg210_hcd_driver); - if (retval < 0) -@@ -5699,7 +5683,7 @@ static int __init fotg210_hcd_init(void) - clean: - debugfs_remove(fotg210_debug_root); - fotg210_debug_root = NULL; --err_debug: -+ - clear_bit(USB_EHCI_LOADED, &usb_hcds_loaded); - return retval; - } -diff --git a/drivers/usb/host/imx21-dbg.c b/drivers/usb/host/imx21-dbg.c -index a213ed6f07b5..7fcf1d9dd7f3 100644 ---- a/drivers/usb/host/imx21-dbg.c -+++ b/drivers/usb/host/imx21-dbg.c -@@ -417,46 +417,22 @@ DEFINE_SHOW_ATTRIBUTE(debug_isoc); - - static void create_debug_files(struct imx21 *imx21) - { -- imx21->debug_root = debugfs_create_dir(dev_name(imx21->dev), NULL); -- if (!imx21->debug_root) -- goto failed_create_rootdir; -+ struct dentry *root; - -- if (!debugfs_create_file("status", S_IRUGO, -- imx21->debug_root, imx21, &debug_status_fops)) -- goto failed_create; -+ root = debugfs_create_dir(dev_name(imx21->dev), NULL); -+ imx21->debug_root = root; - -- if (!debugfs_create_file("dmem", S_IRUGO, -- imx21->debug_root, imx21, &debug_dmem_fops)) -- goto failed_create; -- -- if (!debugfs_create_file("etd", S_IRUGO, -- imx21->debug_root, imx21, &debug_etd_fops)) -- goto failed_create; -- -- if (!debugfs_create_file("statistics", S_IRUGO, -- imx21->debug_root, imx21, &debug_statistics_fops)) -- goto failed_create; -- -- if (!debugfs_create_file("isoc", S_IRUGO, -- imx21->debug_root, imx21, &debug_isoc_fops)) -- goto failed_create; -- -- return; -- --failed_create: -- debugfs_remove_recursive(imx21->debug_root); -- --failed_create_rootdir: -- imx21->debug_root = NULL; -+ debugfs_create_file("status", S_IRUGO, root, imx21, &debug_status_fops); -+ debugfs_create_file("dmem", S_IRUGO, root, imx21, &debug_dmem_fops); -+ debugfs_create_file("etd", S_IRUGO, root, imx21, &debug_etd_fops); -+ debugfs_create_file("statistics", S_IRUGO, root, imx21, -+ &debug_statistics_fops); -+ debugfs_create_file("isoc", S_IRUGO, root, imx21, &debug_isoc_fops); - } - -- - static void remove_debug_files(struct imx21 *imx21) - { -- if (imx21->debug_root) { -- debugfs_remove_recursive(imx21->debug_root); -- imx21->debug_root = NULL; -- } -+ debugfs_remove_recursive(imx21->debug_root); - } - - #endif -diff --git a/drivers/usb/host/isp116x-hcd.c b/drivers/usb/host/isp116x-hcd.c -index 4602ed801f0a..74da136d322a 100644 ---- a/drivers/usb/host/isp116x-hcd.c -+++ b/drivers/usb/host/isp116x-hcd.c -@@ -1198,14 +1198,11 @@ static int isp116x_debug_show(struct seq_file *s, void *unused) - } - DEFINE_SHOW_ATTRIBUTE(isp116x_debug); - --static int create_debug_file(struct isp116x *isp116x) -+static void create_debug_file(struct isp116x *isp116x) - { - isp116x->dentry = debugfs_create_file(hcd_name, - S_IRUGO, NULL, isp116x, - &isp116x_debug_fops); -- if (!isp116x->dentry) -- return -ENOMEM; -- return 0; - } - - static void remove_debug_file(struct isp116x *isp116x) -@@ -1215,8 +1212,8 @@ static void remove_debug_file(struct isp116x *isp116x) - - #else - --#define create_debug_file(d) 0 --#define remove_debug_file(d) do{}while(0) -+static inline void create_debug_file(struct isp116x *isp116x) { } -+static inline void remove_debug_file(struct isp116x *isp116x) { } - - #endif /* CONFIG_DEBUG_FS */ - -@@ -1643,16 +1640,10 @@ static int isp116x_probe(struct platform_device *pdev) - - device_wakeup_enable(hcd->self.controller); - -- ret = create_debug_file(isp116x); -- if (ret) { -- ERR("Couldn't create debugfs entry\n"); -- goto err7; -- } -+ create_debug_file(isp116x); - - return 0; - -- err7: -- usb_remove_hcd(hcd); - err6: - usb_put_hcd(hcd); - err5: -diff --git a/drivers/usb/host/ohci-dbg.c b/drivers/usb/host/ohci-dbg.c -index ac7d4ac34b02..d3ee1f52aaab 100644 ---- a/drivers/usb/host/ohci-dbg.c -+++ b/drivers/usb/host/ohci-dbg.c -@@ -762,50 +762,23 @@ static int debug_registers_open(struct inode *inode, struct file *file) - static inline void create_debug_files (struct ohci_hcd *ohci) - { - struct usb_bus *bus = &ohci_to_hcd(ohci)->self; -+ struct dentry *root; - -- ohci->debug_dir = debugfs_create_dir(bus->bus_name, ohci_debug_root); -- if (!ohci->debug_dir) -- goto dir_error; -+ root = debugfs_create_dir(bus->bus_name, ohci_debug_root); -+ ohci->debug_dir = root; - -- ohci->debug_async = debugfs_create_file("async", S_IRUGO, -- ohci->debug_dir, ohci, -- &debug_async_fops); -- if (!ohci->debug_async) -- goto async_error; -- -- ohci->debug_periodic = debugfs_create_file("periodic", S_IRUGO, -- ohci->debug_dir, ohci, -- &debug_periodic_fops); -- if (!ohci->debug_periodic) -- goto periodic_error; -- -- ohci->debug_registers = debugfs_create_file("registers", S_IRUGO, -- ohci->debug_dir, ohci, -- &debug_registers_fops); -- if (!ohci->debug_registers) -- goto registers_error; -+ debugfs_create_file("async", S_IRUGO, root, ohci, &debug_async_fops); -+ debugfs_create_file("periodic", S_IRUGO, root, ohci, -+ &debug_periodic_fops); -+ debugfs_create_file("registers", S_IRUGO, root, ohci, -+ &debug_registers_fops); - - ohci_dbg (ohci, "created debug files\n"); -- return; -- --registers_error: -- debugfs_remove(ohci->debug_periodic); --periodic_error: -- debugfs_remove(ohci->debug_async); --async_error: -- debugfs_remove(ohci->debug_dir); --dir_error: -- ohci->debug_periodic = NULL; -- ohci->debug_async = NULL; -- ohci->debug_dir = NULL; - } - - static inline void remove_debug_files (struct ohci_hcd *ohci) - { -- debugfs_remove(ohci->debug_registers); -- debugfs_remove(ohci->debug_periodic); -- debugfs_remove(ohci->debug_async); -- debugfs_remove(ohci->debug_dir); -+ debugfs_remove_recursive(ohci->debug_dir); - } - - /*-------------------------------------------------------------------------*/ -diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c -index 4806e0f9e8d4..210181fd98d2 100644 ---- a/drivers/usb/host/ohci-hcd.c -+++ b/drivers/usb/host/ohci-hcd.c -@@ -1258,10 +1258,6 @@ static int __init ohci_hcd_mod_init(void) - set_bit(USB_OHCI_LOADED, &usb_hcds_loaded); - - ohci_debug_root = debugfs_create_dir("ohci", usb_debug_root); -- if (!ohci_debug_root) { -- retval = -ENOENT; -- goto error_debug; -- } - - #ifdef PS3_SYSTEM_BUS_DRIVER - retval = ps3_ohci_driver_register(&PS3_SYSTEM_BUS_DRIVER); -@@ -1318,7 +1314,6 @@ static int __init ohci_hcd_mod_init(void) - #endif - debugfs_remove(ohci_debug_root); - ohci_debug_root = NULL; -- error_debug: - - clear_bit(USB_OHCI_LOADED, &usb_hcds_loaded); - return retval; -diff --git a/drivers/usb/host/ohci.h b/drivers/usb/host/ohci.h -index 508a803139dd..ef4813bfc5bf 100644 ---- a/drivers/usb/host/ohci.h -+++ b/drivers/usb/host/ohci.h -@@ -431,9 +431,6 @@ struct ohci_hcd { - struct work_struct nec_work; /* Worker for NEC quirk */ - - struct dentry *debug_dir; -- struct dentry *debug_async; -- struct dentry *debug_periodic; -- struct dentry *debug_registers; - - /* platform-specific data -- must come last */ - unsigned long priv[0] __aligned(sizeof(s64)); -diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c -index f9c3947577fc..6218bfe54f52 100644 ---- a/drivers/usb/host/uhci-hcd.c -+++ b/drivers/usb/host/uhci-hcd.c -@@ -590,14 +590,10 @@ static int uhci_start(struct usb_hcd *hcd) - init_waitqueue_head(&uhci->waitqh); - - #ifdef UHCI_DEBUG_OPS -- dentry = debugfs_create_file(hcd->self.bus_name, -- S_IFREG|S_IRUGO|S_IWUSR, uhci_debugfs_root, -- uhci, &uhci_debug_operations); -- if (!dentry) { -- dev_err(uhci_dev(uhci), "couldn't create uhci debugfs entry\n"); -- return -ENOMEM; -- } -- uhci->dentry = dentry; -+ uhci->dentry = debugfs_create_file(hcd->self.bus_name, -+ S_IFREG|S_IRUGO|S_IWUSR, -+ uhci_debugfs_root, uhci, -+ &uhci_debug_operations); - #endif - - uhci->frame = dma_zalloc_coherent(uhci_dev(uhci), -@@ -882,8 +878,6 @@ static int __init uhci_hcd_init(void) - if (!errbuf) - goto errbuf_failed; - uhci_debugfs_root = debugfs_create_dir("uhci", usb_debug_root); -- if (!uhci_debugfs_root) -- goto debug_failed; - #endif - - uhci_up_cachep = kmem_cache_create("uhci_urb_priv", -@@ -918,7 +912,6 @@ static int __init uhci_hcd_init(void) - #if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG) - debugfs_remove(uhci_debugfs_root); - --debug_failed: - kfree(errbuf); - - errbuf_failed: -diff --git a/drivers/usb/mon/mon_text.c b/drivers/usb/mon/mon_text.c -index 984f7e12a6a5..bc5ecd5ff565 100644 ---- a/drivers/usb/mon/mon_text.c -+++ b/drivers/usb/mon/mon_text.c -@@ -700,7 +700,6 @@ static const struct file_operations mon_fops_text_u = { - - int mon_text_add(struct mon_bus *mbus, const struct usb_bus *ubus) - { -- struct dentry *d; - enum { NAMESZ = 10 }; - char name[NAMESZ]; - int busnum = ubus? ubus->busnum: 0; -@@ -713,42 +712,32 @@ int mon_text_add(struct mon_bus *mbus, const struct usb_bus *ubus) - rc = snprintf(name, NAMESZ, "%dt", busnum); - if (rc <= 0 || rc >= NAMESZ) - goto err_print_t; -- d = debugfs_create_file(name, 0600, mon_dir, mbus, -+ mbus->dent_t = debugfs_create_file(name, 0600, mon_dir, mbus, - &mon_fops_text_t); -- if (d == NULL) -- goto err_create_t; -- mbus->dent_t = d; - } - - rc = snprintf(name, NAMESZ, "%du", busnum); - if (rc <= 0 || rc >= NAMESZ) - goto err_print_u; -- d = debugfs_create_file(name, 0600, mon_dir, mbus, &mon_fops_text_u); -- if (d == NULL) -- goto err_create_u; -- mbus->dent_u = d; -+ mbus->dent_u = debugfs_create_file(name, 0600, mon_dir, mbus, -+ &mon_fops_text_u); - - rc = snprintf(name, NAMESZ, "%ds", busnum); - if (rc <= 0 || rc >= NAMESZ) - goto err_print_s; -- d = debugfs_create_file(name, 0600, mon_dir, mbus, &mon_fops_stat); -- if (d == NULL) -- goto err_create_s; -- mbus->dent_s = d; -+ mbus->dent_s = debugfs_create_file(name, 0600, mon_dir, mbus, -+ &mon_fops_stat); - - return 1; - --err_create_s: - err_print_s: - debugfs_remove(mbus->dent_u); - mbus->dent_u = NULL; --err_create_u: - err_print_u: - if (ubus != NULL) { - debugfs_remove(mbus->dent_t); - mbus->dent_t = NULL; - } --err_create_t: - err_print_t: - return 0; - } -@@ -756,8 +745,7 @@ int mon_text_add(struct mon_bus *mbus, const struct usb_bus *ubus) - void mon_text_del(struct mon_bus *mbus) - { - debugfs_remove(mbus->dent_u); -- if (mbus->dent_t != NULL) -- debugfs_remove(mbus->dent_t); -+ debugfs_remove(mbus->dent_t); - debugfs_remove(mbus->dent_s); - } - -@@ -775,18 +763,7 @@ static void mon_text_ctor(void *mem) - - int __init mon_text_init(void) - { -- struct dentry *mondir; -- -- mondir = debugfs_create_dir("usbmon", usb_debug_root); -- if (IS_ERR(mondir)) { -- /* debugfs not available, but we can use usbmon without it */ -- return 0; -- } -- if (mondir == NULL) { -- printk(KERN_NOTICE TAG ": unable to create usbmon directory\n"); -- return -ENOMEM; -- } -- mon_dir = mondir; -+ mon_dir = debugfs_create_dir("usbmon", usb_debug_root); - return 0; - } - -diff --git a/drivers/usb/mtu3/mtu3_dr.c b/drivers/usb/mtu3/mtu3_dr.c -index 8c3bbf732bc4..ac60e9c8564e 100644 ---- a/drivers/usb/mtu3/mtu3_dr.c -+++ b/drivers/usb/mtu3/mtu3_dr.c -@@ -378,10 +378,6 @@ static void ssusb_debugfs_init(struct ssusb_mtk *ssusb) - struct dentry *root; - - root = debugfs_create_dir(dev_name(ssusb->dev), usb_debug_root); -- if (!root) { -- dev_err(ssusb->dev, "create debugfs root failed\n"); -- return; -- } - ssusb->dbgfs_root = root; - - debugfs_create_file("mode", 0644, root, ssusb, &ssusb_mode_fops); -diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c -index 5cc64980058b..b7d56272f9d1 100644 ---- a/drivers/usb/musb/musb_core.c -+++ b/drivers/usb/musb/musb_core.c -@@ -2387,9 +2387,7 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) - if (status < 0) - goto fail3; - -- status = musb_init_debugfs(musb); -- if (status < 0) -- goto fail4; -+ musb_init_debugfs(musb); - - status = sysfs_create_group(&musb->controller->kobj, &musb_attr_group); - if (status) -@@ -2404,7 +2402,6 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) - fail5: - musb_exit_debugfs(musb); - --fail4: - musb_gadget_cleanup(musb); - musb_host_cleanup(musb); - -diff --git a/drivers/usb/musb/musb_debug.h b/drivers/usb/musb/musb_debug.h -index 5e0f079dde21..c444a80fe1da 100644 ---- a/drivers/usb/musb/musb_debug.h -+++ b/drivers/usb/musb/musb_debug.h -@@ -20,12 +20,11 @@ - void musb_dbg(struct musb *musb, const char *fmt, ...); - - #ifdef CONFIG_DEBUG_FS --int musb_init_debugfs(struct musb *musb); -+void musb_init_debugfs(struct musb *musb); - void musb_exit_debugfs(struct musb *musb); - #else --static inline int musb_init_debugfs(struct musb *musb) -+static inline void musb_init_debugfs(struct musb *musb) - { -- return 0; - } - static inline void musb_exit_debugfs(struct musb *musb) - { -diff --git a/drivers/usb/musb/musb_debugfs.c b/drivers/usb/musb/musb_debugfs.c -index e2050cac3eae..f42858e2b54c 100644 ---- a/drivers/usb/musb/musb_debugfs.c -+++ b/drivers/usb/musb/musb_debugfs.c -@@ -321,48 +321,18 @@ static const struct file_operations musb_softconnect_fops = { - .release = single_release, - }; - --int musb_init_debugfs(struct musb *musb) -+void musb_init_debugfs(struct musb *musb) - { -- struct dentry *root; -- struct dentry *file; -- int ret; -+ struct dentry *root; - - root = debugfs_create_dir(dev_name(musb->controller), NULL); -- if (!root) { -- ret = -ENOMEM; -- goto err0; -- } -- -- file = debugfs_create_file("regdump", S_IRUGO, root, musb, -- &musb_regdump_fops); -- if (!file) { -- ret = -ENOMEM; -- goto err1; -- } -- -- file = debugfs_create_file("testmode", S_IRUGO | S_IWUSR, -- root, musb, &musb_test_mode_fops); -- if (!file) { -- ret = -ENOMEM; -- goto err1; -- } -- -- file = debugfs_create_file("softconnect", S_IRUGO | S_IWUSR, -- root, musb, &musb_softconnect_fops); -- if (!file) { -- ret = -ENOMEM; -- goto err1; -- } -- - musb->debugfs_root = root; - -- return 0; -- --err1: -- debugfs_remove_recursive(root); -- --err0: -- return ret; -+ debugfs_create_file("regdump", S_IRUGO, root, musb, &musb_regdump_fops); -+ debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root, musb, -+ &musb_test_mode_fops); -+ debugfs_create_file("softconnect", S_IRUGO | S_IWUSR, root, musb, -+ &musb_softconnect_fops); - } - - void /* __init_or_exit */ musb_exit_debugfs(struct musb *musb) -diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c -index cfe6bfcbeb5d..fb871eabcc10 100644 ---- a/drivers/usb/musb/musb_dsps.c -+++ b/drivers/usb/musb/musb_dsps.c -@@ -399,24 +399,17 @@ static irqreturn_t dsps_interrupt(int irq, void *hci) - static int dsps_musb_dbg_init(struct musb *musb, struct dsps_glue *glue) - { - struct dentry *root; -- struct dentry *file; - char buf[128]; - - sprintf(buf, "%s.dsps", dev_name(musb->controller)); - root = debugfs_create_dir(buf, NULL); -- if (!root) -- return -ENOMEM; - glue->dbgfs_root = root; - - glue->regset.regs = dsps_musb_regs; - glue->regset.nregs = ARRAY_SIZE(dsps_musb_regs); - glue->regset.base = musb->ctrl_base; - -- file = debugfs_create_regset32("regdump", S_IRUGO, root, &glue->regset); -- if (!file) { -- debugfs_remove_recursive(root); -- return -ENOMEM; -- } -+ debugfs_create_regset32("regdump", S_IRUGO, root, &glue->regset); - return 0; - } - -diff --git a/drivers/usb/typec/fusb302/fusb302.c b/drivers/usb/typec/fusb302/fusb302.c -index 9c1eba9ea004..07b07ddf6af0 100644 ---- a/drivers/usb/typec/fusb302/fusb302.c -+++ b/drivers/usb/typec/fusb302/fusb302.c -@@ -117,7 +117,6 @@ struct fusb302_chip { - u32 snk_pdo[PDO_MAX_OBJECTS]; - - #ifdef CONFIG_DEBUG_FS -- struct dentry *dentry; - /* lock for log buffer access */ - struct mutex logbuffer_lock; - int logbuffer_head; -@@ -215,33 +214,26 @@ DEFINE_SHOW_ATTRIBUTE(fusb302_debug); - - static struct dentry *rootdir; - --static int fusb302_debugfs_init(struct fusb302_chip *chip) -+static void fusb302_debugfs_init(struct fusb302_chip *chip) - { - mutex_init(&chip->logbuffer_lock); -- if (!rootdir) { -+ if (!rootdir) - rootdir = debugfs_create_dir("fusb302", NULL); -- if (!rootdir) -- return -ENOMEM; -- } -- -- chip->dentry = debugfs_create_file(dev_name(chip->dev), -- S_IFREG | 0444, rootdir, -- chip, &fusb302_debug_fops); - -- return 0; -+ debugfs_create_file(dev_name(chip->dev), S_IFREG | 0444, rootdir, chip, -+ &fusb302_debug_fops); - } - - static void fusb302_debugfs_exit(struct fusb302_chip *chip) - { -- debugfs_remove(chip->dentry); -- debugfs_remove(rootdir); -+ debugfs_remove_recursive(rootdir); - } - - #else - - static void fusb302_log(const struct fusb302_chip *chip, - const char *fmt, ...) { } --static int fusb302_debugfs_init(const struct fusb302_chip *chip) { return 0; } -+static void fusb302_debugfs_init(const struct fusb302_chip *chip) { } - static void fusb302_debugfs_exit(const struct fusb302_chip *chip) { } - - #endif -@@ -1773,9 +1765,7 @@ static int fusb302_probe(struct i2c_client *client, - return -EPROBE_DEFER; - } - -- ret = fusb302_debugfs_init(chip); -- if (ret < 0) -- return ret; -+ fusb302_debugfs_init(chip); - - chip->wq = create_singlethread_workqueue(dev_name(chip->dev)); - if (!chip->wq) { -diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c -index 0ccd2ce1eb59..1443b3233371 100644 ---- a/drivers/usb/typec/tcpm.c -+++ b/drivers/usb/typec/tcpm.c -@@ -566,15 +566,12 @@ DEFINE_SHOW_ATTRIBUTE(tcpm_debug); - - static struct dentry *rootdir; - --static int tcpm_debugfs_init(struct tcpm_port *port) -+static void tcpm_debugfs_init(struct tcpm_port *port) - { - mutex_init(&port->logbuffer_lock); - /* /sys/kernel/debug/tcpm/usbcX */ -- if (!rootdir) { -+ if (!rootdir) - rootdir = debugfs_create_dir("tcpm", NULL); -- if (!rootdir) -- return -ENOMEM; -- } - - port->dentry = debugfs_create_file(dev_name(port->dev), - S_IFREG | 0444, rootdir, -@@ -595,7 +592,7 @@ static void tcpm_log(const struct tcpm_port *port, const char *fmt, ...) { } - __printf(2, 3) - static void tcpm_log_force(struct tcpm_port *port, const char *fmt, ...) { } - static void tcpm_log_source_caps(struct tcpm_port *port) { } --static int tcpm_debugfs_init(const struct tcpm_port *port) { return 0; } -+static void tcpm_debugfs_init(const struct tcpm_port *port) { return 0; } - static void tcpm_debugfs_exit(const struct tcpm_port *port) { } - - #endif --- -2.17.0 - diff --git a/usb-debugfs.patch b/usb-debugfs.patch deleted file mode 100644 index 79ef25f0ea42d2..00000000000000 --- a/usb-debugfs.patch +++ /dev/null @@ -1,476 +0,0 @@ ---- - drivers/usb/chipidea/ci.h | 2 - - drivers/usb/chipidea/core.c | 4 -- - drivers/usb/chipidea/debug.c | 56 ++++++++---------------------- - drivers/usb/core/usb.c | 26 ++------------ - drivers/usb/dwc2/debugfs.c | 78 ++++++++----------------------------------- - drivers/usb/dwc3/debugfs.c | 33 +++--------------- - drivers/usb/host/ehci-dbg.c | 30 ++++------------ - drivers/usb/mon/mon_text.c | 37 +++----------------- - 8 files changed, 60 insertions(+), 206 deletions(-) - ---- a/drivers/usb/chipidea/ci.h -+++ b/drivers/usb/chipidea/ci.h -@@ -450,7 +450,7 @@ void hw_phymode_configure(struct ci_hdrc - - void ci_platform_configure(struct ci_hdrc *ci); - --int dbg_create_files(struct ci_hdrc *ci); -+void dbg_create_files(struct ci_hdrc *ci); - - void dbg_remove_files(struct ci_hdrc *ci); - #endif /* __DRIVERS_USB_CHIPIDEA_CI_H */ ---- a/drivers/usb/chipidea/core.c -+++ b/drivers/usb/chipidea/core.c -@@ -1062,9 +1062,7 @@ static int ci_hdrc_probe(struct platform - ci_hdrc_otg_fsm_start(ci); - - device_set_wakeup_capable(&pdev->dev, true); -- ret = dbg_create_files(ci); -- if (ret) -- goto stop; -+ dbg_create_files(ci); - - ret = sysfs_create_group(&dev->kobj, &ci_attr_group); - if (ret) ---- a/drivers/usb/chipidea/debug.c -+++ b/drivers/usb/chipidea/debug.c -@@ -340,54 +340,28 @@ DEFINE_SHOW_ATTRIBUTE(ci_registers); - * - * This function returns an error code - */ --int dbg_create_files(struct ci_hdrc *ci) -+void dbg_create_files(struct ci_hdrc *ci) - { -- struct dentry *dent; -- - ci->debugfs = debugfs_create_dir(dev_name(ci->dev), NULL); -- if (!ci->debugfs) -- return -ENOMEM; -- -- dent = debugfs_create_file("device", S_IRUGO, ci->debugfs, ci, -- &ci_device_fops); -- if (!dent) -- goto err; -- -- dent = debugfs_create_file("port_test", S_IRUGO | S_IWUSR, ci->debugfs, -- ci, &ci_port_test_fops); -- if (!dent) -- goto err; - -- dent = debugfs_create_file("qheads", S_IRUGO, ci->debugfs, ci, -- &ci_qheads_fops); -- if (!dent) -- goto err; -- -- dent = debugfs_create_file("requests", S_IRUGO, ci->debugfs, ci, -- &ci_requests_fops); -- if (!dent) -- goto err; -+ debugfs_create_file("device", S_IRUGO, ci->debugfs, ci, -+ &ci_device_fops); -+ debugfs_create_file("port_test", S_IRUGO | S_IWUSR, ci->debugfs, ci, -+ &ci_port_test_fops); -+ debugfs_create_file("qheads", S_IRUGO, ci->debugfs, ci, -+ &ci_qheads_fops); -+ debugfs_create_file("requests", S_IRUGO, ci->debugfs, ci, -+ &ci_requests_fops); - - if (ci_otg_is_fsm_mode(ci)) { -- dent = debugfs_create_file("otg", S_IRUGO, ci->debugfs, ci, -- &ci_otg_fops); -- if (!dent) -- goto err; -+ debugfs_create_file("otg", S_IRUGO, ci->debugfs, ci, -+ &ci_otg_fops); - } - -- dent = debugfs_create_file("role", S_IRUGO | S_IWUSR, ci->debugfs, ci, -- &ci_role_fops); -- if (!dent) -- goto err; -- -- dent = debugfs_create_file("registers", S_IRUGO, ci->debugfs, ci, -- &ci_registers_fops); -- -- if (dent) -- return 0; --err: -- debugfs_remove_recursive(ci->debugfs); -- return -ENOMEM; -+ debugfs_create_file("role", S_IRUGO | S_IWUSR, ci->debugfs, ci, -+ &ci_role_fops); -+ debugfs_create_file("registers", S_IRUGO, ci->debugfs, ci, -+ &ci_registers_fops); - } - - /** ---- a/drivers/usb/core/usb.c -+++ b/drivers/usb/core/usb.c -@@ -1167,30 +1167,16 @@ static struct notifier_block usb_bus_nb - struct dentry *usb_debug_root; - EXPORT_SYMBOL_GPL(usb_debug_root); - --static struct dentry *usb_debug_devices; -- --static int usb_debugfs_init(void) -+static void usb_debugfs_init(void) - { - usb_debug_root = debugfs_create_dir("usb", NULL); -- if (!usb_debug_root) -- return -ENOENT; -- -- usb_debug_devices = debugfs_create_file("devices", 0444, -- usb_debug_root, NULL, -- &usbfs_devices_fops); -- if (!usb_debug_devices) { -- debugfs_remove(usb_debug_root); -- usb_debug_root = NULL; -- return -ENOENT; -- } -- -- return 0; -+ debugfs_create_file("devices", 0444, usb_debug_root, NULL, -+ &usbfs_devices_fops); - } - - static void usb_debugfs_cleanup(void) - { -- debugfs_remove(usb_debug_devices); -- debugfs_remove(usb_debug_root); -+ debugfs_remove_recursive(usb_debug_root); - } - - /* -@@ -1205,9 +1191,7 @@ static int __init usb_init(void) - } - usb_init_pool_max(); - -- retval = usb_debugfs_init(); -- if (retval) -- goto out; -+ usb_debugfs_init(); - - usb_acpi_register(); - retval = bus_register(&usb_bus_type); ---- a/drivers/usb/dwc2/debugfs.c -+++ b/drivers/usb/dwc2/debugfs.c -@@ -293,52 +293,30 @@ DEFINE_SHOW_ATTRIBUTE(ep); - static void dwc2_hsotg_create_debug(struct dwc2_hsotg *hsotg) - { - struct dentry *root; -- struct dentry *file; - unsigned int epidx; - - root = hsotg->debug_root; - - /* create general state file */ -- -- file = debugfs_create_file("state", 0444, root, hsotg, &state_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create state\n", __func__); -- -- file = debugfs_create_file("testmode", 0644, root, hsotg, -- &testmode_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create testmode\n", -- __func__); -- -- file = debugfs_create_file("fifo", 0444, root, hsotg, &fifo_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create fifo\n", __func__); -+ debugfs_create_file("state", 0444, root, hsotg, &state_fops); -+ debugfs_create_file("testmode", 0644, root, hsotg, &testmode_fops); -+ debugfs_create_file("fifo", 0444, root, hsotg, &fifo_fops); - - /* Create one file for each out endpoint */ - for (epidx = 0; epidx < hsotg->num_of_eps; epidx++) { - struct dwc2_hsotg_ep *ep; - - ep = hsotg->eps_out[epidx]; -- if (ep) { -- file = debugfs_create_file(ep->name, 0444, -- root, ep, &ep_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "failed to create %s debug file\n", -- ep->name); -- } -+ if (ep) -+ debugfs_create_file(ep->name, 0444, root, ep, &ep_fops); - } - /* Create one file for each in endpoint. EP0 is handled with out eps */ - for (epidx = 1; epidx < hsotg->num_of_eps; epidx++) { - struct dwc2_hsotg_ep *ep; - - ep = hsotg->eps_in[epidx]; -- if (ep) { -- file = debugfs_create_file(ep->name, 0444, -- root, ep, &ep_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "failed to create %s debug file\n", -- ep->name); -- } -+ if (ep) -+ debugfs_create_file(ep->name, 0444, root, ep, &ep_fops); - } - } - #else -@@ -790,32 +768,14 @@ DEFINE_SHOW_ATTRIBUTE(dr_mode); - int dwc2_debugfs_init(struct dwc2_hsotg *hsotg) - { - int ret; -- struct dentry *file; -+ struct dentry *root; - -- hsotg->debug_root = debugfs_create_dir(dev_name(hsotg->dev), NULL); -- if (!hsotg->debug_root) { -- ret = -ENOMEM; -- goto err0; -- } -+ root = debugfs_create_dir(dev_name(hsotg->dev), NULL); -+ hsotg->debug_root = root; - -- file = debugfs_create_file("params", 0444, -- hsotg->debug_root, -- hsotg, ¶ms_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create params\n", __func__); -- -- file = debugfs_create_file("hw_params", 0444, -- hsotg->debug_root, -- hsotg, &hw_params_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create hw_params\n", -- __func__); -- -- file = debugfs_create_file("dr_mode", 0444, -- hsotg->debug_root, -- hsotg, &dr_mode_fops); -- if (IS_ERR(file)) -- dev_err(hsotg->dev, "%s: failed to create dr_mode\n", __func__); -+ debugfs_create_file("params", 0444, root, hsotg, ¶ms_fops); -+ debugfs_create_file("hw_params", 0444, root, hsotg, &hw_params_fops); -+ debugfs_create_file("dr_mode", 0444, root, hsotg, &dr_mode_fops); - - /* Add gadget debugfs nodes */ - dwc2_hsotg_create_debug(hsotg); -@@ -824,24 +784,18 @@ int dwc2_debugfs_init(struct dwc2_hsotg - GFP_KERNEL); - if (!hsotg->regset) { - ret = -ENOMEM; -- goto err1; -+ goto err; - } - - hsotg->regset->regs = dwc2_regs; - hsotg->regset->nregs = ARRAY_SIZE(dwc2_regs); - hsotg->regset->base = hsotg->regs; - -- file = debugfs_create_regset32("regdump", 0444, hsotg->debug_root, -- hsotg->regset); -- if (!file) { -- ret = -ENOMEM; -- goto err1; -- } -+ debugfs_create_regset32("regdump", 0444, root, hsotg->regset); - - return 0; --err1: -+err: - debugfs_remove_recursive(hsotg->debug_root); --err0: - return ret; - } - ---- a/drivers/usb/dwc3/debugfs.c -+++ b/drivers/usb/dwc3/debugfs.c -@@ -716,9 +716,6 @@ static void dwc3_debugfs_create_endpoint - struct dentry *dir; - - dir = debugfs_create_dir(dep->name, parent); -- if (IS_ERR_OR_NULL(dir)) -- return; -- - dwc3_debugfs_create_endpoint_files(dep, dir); - } - -@@ -740,14 +737,8 @@ static void dwc3_debugfs_create_endpoint - void dwc3_debugfs_init(struct dwc3 *dwc) - { - struct dentry *root; -- struct dentry *file; - - root = debugfs_create_dir(dev_name(dwc->dev), NULL); -- if (IS_ERR_OR_NULL(root)) { -- if (!root) -- dev_err(dwc->dev, "Can't create debugfs root\n"); -- return; -- } - dwc->root = root; - - dwc->regset = kzalloc(sizeof(*dwc->regset), GFP_KERNEL); -@@ -760,29 +751,19 @@ void dwc3_debugfs_init(struct dwc3 *dwc) - dwc->regset->nregs = ARRAY_SIZE(dwc3_regs); - dwc->regset->base = dwc->regs - DWC3_GLOBALS_REGS_START; - -- file = debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset); -- if (!file) -- dev_dbg(dwc->dev, "Can't create debugfs regdump\n"); -+ debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset); - - if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)) { -- file = debugfs_create_file("mode", S_IRUGO | S_IWUSR, root, -- dwc, &dwc3_mode_fops); -- if (!file) -- dev_dbg(dwc->dev, "Can't create debugfs mode\n"); -+ debugfs_create_file("mode", S_IRUGO | S_IWUSR, root, dwc, -+ &dwc3_mode_fops); - } - - if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE) || - IS_ENABLED(CONFIG_USB_DWC3_GADGET)) { -- file = debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root, -- dwc, &dwc3_testmode_fops); -- if (!file) -- dev_dbg(dwc->dev, "Can't create debugfs testmode\n"); -- -- file = debugfs_create_file("link_state", S_IRUGO | S_IWUSR, -- root, dwc, &dwc3_link_state_fops); -- if (!file) -- dev_dbg(dwc->dev, "Can't create debugfs link_state\n"); -- -+ debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root, dwc, -+ &dwc3_testmode_fops); -+ debugfs_create_file("link_state", S_IRUGO | S_IWUSR, root, dwc, -+ &dwc3_link_state_fops); - dwc3_debugfs_create_endpoint_dirs(dwc, root); - } - } ---- a/drivers/usb/host/ehci-dbg.c -+++ b/drivers/usb/host/ehci-dbg.c -@@ -1028,29 +1028,15 @@ static inline void create_debug_files(st - struct usb_bus *bus = &ehci_to_hcd(ehci)->self; - - ehci->debug_dir = debugfs_create_dir(bus->bus_name, ehci_debug_root); -- if (!ehci->debug_dir) -- return; - -- if (!debugfs_create_file("async", S_IRUGO, ehci->debug_dir, bus, -- &debug_async_fops)) -- goto file_error; -- -- if (!debugfs_create_file("bandwidth", S_IRUGO, ehci->debug_dir, bus, -- &debug_bandwidth_fops)) -- goto file_error; -- -- if (!debugfs_create_file("periodic", S_IRUGO, ehci->debug_dir, bus, -- &debug_periodic_fops)) -- goto file_error; -- -- if (!debugfs_create_file("registers", S_IRUGO, ehci->debug_dir, bus, -- &debug_registers_fops)) -- goto file_error; -- -- return; -- --file_error: -- debugfs_remove_recursive(ehci->debug_dir); -+ debugfs_create_file("async", S_IRUGO, ehci->debug_dir, bus, -+ &debug_async_fops); -+ debugfs_create_file("bandwidth", S_IRUGO, ehci->debug_dir, bus, -+ &debug_bandwidth_fops); -+ debugfs_create_file("periodic", S_IRUGO, ehci->debug_dir, bus, -+ &debug_periodic_fops); -+ debugfs_create_file("registers", S_IRUGO, ehci->debug_dir, bus, -+ &debug_registers_fops); - } - - static inline void remove_debug_files(struct ehci_hcd *ehci) ---- a/drivers/usb/mon/mon_text.c -+++ b/drivers/usb/mon/mon_text.c -@@ -700,7 +700,6 @@ static const struct file_operations mon_ - - int mon_text_add(struct mon_bus *mbus, const struct usb_bus *ubus) - { -- struct dentry *d; - enum { NAMESZ = 10 }; - char name[NAMESZ]; - int busnum = ubus? ubus->busnum: 0; -@@ -713,42 +712,32 @@ int mon_text_add(struct mon_bus *mbus, c - rc = snprintf(name, NAMESZ, "%dt", busnum); - if (rc <= 0 || rc >= NAMESZ) - goto err_print_t; -- d = debugfs_create_file(name, 0600, mon_dir, mbus, -+ mbus->dent_t = debugfs_create_file(name, 0600, mon_dir, mbus, - &mon_fops_text_t); -- if (d == NULL) -- goto err_create_t; -- mbus->dent_t = d; - } - - rc = snprintf(name, NAMESZ, "%du", busnum); - if (rc <= 0 || rc >= NAMESZ) - goto err_print_u; -- d = debugfs_create_file(name, 0600, mon_dir, mbus, &mon_fops_text_u); -- if (d == NULL) -- goto err_create_u; -- mbus->dent_u = d; -+ mbus->dent_u = debugfs_create_file(name, 0600, mon_dir, mbus, -+ &mon_fops_text_u); - - rc = snprintf(name, NAMESZ, "%ds", busnum); - if (rc <= 0 || rc >= NAMESZ) - goto err_print_s; -- d = debugfs_create_file(name, 0600, mon_dir, mbus, &mon_fops_stat); -- if (d == NULL) -- goto err_create_s; -- mbus->dent_s = d; -+ mbus->dent_s = debugfs_create_file(name, 0600, mon_dir, mbus, -+ &mon_fops_stat); - - return 1; - --err_create_s: - err_print_s: - debugfs_remove(mbus->dent_u); - mbus->dent_u = NULL; --err_create_u: - err_print_u: - if (ubus != NULL) { - debugfs_remove(mbus->dent_t); - mbus->dent_t = NULL; - } --err_create_t: - err_print_t: - return 0; - } -@@ -756,8 +745,7 @@ err_print_t: - void mon_text_del(struct mon_bus *mbus) - { - debugfs_remove(mbus->dent_u); -- if (mbus->dent_t != NULL) -- debugfs_remove(mbus->dent_t); -+ debugfs_remove(mbus->dent_t); - debugfs_remove(mbus->dent_s); - } - -@@ -775,18 +763,7 @@ static void mon_text_ctor(void *mem) - - int __init mon_text_init(void) - { -- struct dentry *mondir; -- -- mondir = debugfs_create_dir("usbmon", usb_debug_root); -- if (IS_ERR(mondir)) { -- /* debugfs not available, but we can use usbmon without it */ -- return 0; -- } -- if (mondir == NULL) { -- printk(KERN_NOTICE TAG ": unable to create usbmon directory\n"); -- return -ENOMEM; -- } -- mon_dir = mondir; -+ mon_dir = debugfs_create_dir("usbmon", usb_debug_root); - return 0; - } - diff --git a/usb-serial-visor-handle-potential-invalid-device-configuration.patch b/usb-serial-visor-handle-potential-invalid-device-configuration.patch deleted file mode 100644 index c73ab62cb07578..00000000000000 --- a/usb-serial-visor-handle-potential-invalid-device-configuration.patch +++ /dev/null @@ -1,115 +0,0 @@ -From foo@baz Sun Apr 29 17:37:43 CEST 2018 -Date: Sun, 29 Apr 2018 17:37:43 +0200 -To: Greg KH <gregkh@linuxfoundation.org> -From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -Subject: [PATCH] USB: serial: visor: handle potential invalid device configuration - -If we get an invalid device configuration from a palm 3 type device, we -might incorrectly parse things, and we have the potential to crash in -"interesting" ways. - -Fix this up by verifying the size of the configuration passed to us by -the device, and only if it is correct, will we handle it. - -Reported-by: Andrey Konovalov <andreyknvl@google.com> -Reviewed-by: Andrey Konovalov <andreyknvl@google.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> - ---- - -Here is my long-forgotten patch for the visor driver to resolve an issue -that Andrey found back in September of 2017. Sorry for the long delay. - -Johan, I incorporated your review comments of my original one-off patch -here as well. - - ---- - drivers/usb/serial/visor.c | 69 ++++++++++++++++++++++----------------------- - 1 file changed, 35 insertions(+), 34 deletions(-) - ---- a/drivers/usb/serial/visor.c -+++ b/drivers/usb/serial/visor.c -@@ -335,47 +335,48 @@ static int palm_os_3_probe(struct usb_se - goto exit; - } - -- if (retval == sizeof(*connection_info)) { -- connection_info = (struct visor_connection_info *) -- transfer_buffer; -- -- num_ports = le16_to_cpu(connection_info->num_ports); -- for (i = 0; i < num_ports; ++i) { -- switch ( -- connection_info->connections[i].port_function_id) { -- case VISOR_FUNCTION_GENERIC: -- string = "Generic"; -- break; -- case VISOR_FUNCTION_DEBUGGER: -- string = "Debugger"; -- break; -- case VISOR_FUNCTION_HOTSYNC: -- string = "HotSync"; -- break; -- case VISOR_FUNCTION_CONSOLE: -- string = "Console"; -- break; -- case VISOR_FUNCTION_REMOTE_FILE_SYS: -- string = "Remote File System"; -- break; -- default: -- string = "unknown"; -- break; -- } -- dev_info(dev, "%s: port %d, is for %s use\n", -- serial->type->description, -- connection_info->connections[i].port, string); -- } -+ if (retval != sizeof(*connection_info)) { -+ dev_err(dev, "Invalid connection information received from device\n"); -+ retval = -ENODEV; -+ goto exit; - } -- /* -- * Handle devices that report invalid stuff here. -- */ -+ -+ connection_info = (struct visor_connection_info *)transfer_buffer; -+ -+ num_ports = le16_to_cpu(connection_info->num_ports); -+ -+ /* Handle devices that report invalid stuff here. */ - if (num_ports == 0 || num_ports > 2) { - dev_warn(dev, "%s: No valid connect info available\n", - serial->type->description); - num_ports = 2; - } - -+ for (i = 0; i < num_ports; ++i) { -+ switch (connection_info->connections[i].port_function_id) { -+ case VISOR_FUNCTION_GENERIC: -+ string = "Generic"; -+ break; -+ case VISOR_FUNCTION_DEBUGGER: -+ string = "Debugger"; -+ break; -+ case VISOR_FUNCTION_HOTSYNC: -+ string = "HotSync"; -+ break; -+ case VISOR_FUNCTION_CONSOLE: -+ string = "Console"; -+ break; -+ case VISOR_FUNCTION_REMOTE_FILE_SYS: -+ string = "Remote File System"; -+ break; -+ default: -+ string = "unknown"; -+ break; -+ } -+ dev_info(dev, "%s: port %d, is for %s use\n", -+ serial->type->description, -+ connection_info->connections[i].port, string); -+ } - dev_info(dev, "%s: Number of ports: %d\n", serial->type->description, - num_ports); - |