Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d8ec3e6 authored by Chandana Kishori Chiluveru's avatar Chandana Kishori Chiluveru
Browse files

USB: gadget: Enable BAM mode only for BAM2BAM transport



commit ea3e4e39 ("usb: gadget: Enable/Disable USB_BAM based
on composition") enabling USB_BAM irrespective of the transport
used in the driver. Only USB_GADGET_XPORT_BAM2BAM transport was
used for BAM mode. With this change other transports which does
not use BAM also enabling BAM and calling flush_work in function
unbind causing null pointer dereference crash. Hence fix this by
adding transport check for enabling USB_BAM using
bam2bam_func_enabled flag.

Change-Id: Ib2b19e5e9276f2e89d054edda536b590f751cba7
Signed-off-by: default avatarChandana Kishori Chiluveru <cchiluve@codeaurora.org>
parent 4fa286af
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -553,6 +553,7 @@ static int gport_rmnet_disconnect(struct f_rmnet *dev)
static void frmnet_unbind(struct usb_configuration *c, struct usb_function *f)
{
	struct f_rmnet *dev = func_to_rmnet(f);
	enum transport_type	dxport = rmnet_ports[dev->port_num].data_xport;

	pr_debug("%s: portno:%d\n", __func__, dev->port_num);
	if (gadget_is_superspeed(c->cdev->gadget))
@@ -562,8 +563,10 @@ static void frmnet_unbind(struct usb_configuration *c, struct usb_function *f)
	usb_free_descriptors(f->fs_descriptors);

	frmnet_free_req(dev->notify, dev->notify_req);
	if (dxport == USB_GADGET_XPORT_BAM2BAM_IPA) {
		gbam_data_flush_workqueue();
		c->cdev->gadget->bam2bam_func_enabled = false;
	}
	kfree(f->name);
}

@@ -1319,6 +1322,8 @@ static int frmnet_bind_config(struct usb_configuration *c, unsigned portno)
		kfree(f->name);
		return status;
	}
	if (rmnet_ports[portno].data_xport ==
			USB_GADGET_XPORT_BAM2BAM_IPA)
		c->cdev->gadget->bam2bam_func_enabled = true;

	pr_debug("%s: complete\n", __func__);