diff options
Diffstat (limited to 'drivers/usb/serial/keyspan.c')
| -rw-r--r-- | drivers/usb/serial/keyspan.c | 20 | 
1 files changed, 15 insertions, 5 deletions
| diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c index 077c714f1285..e07b15ed5814 100644 --- a/drivers/usb/serial/keyspan.c +++ b/drivers/usb/serial/keyspan.c @@ -410,6 +410,8 @@ static void	usa26_instat_callback(struct urb *urb)  	}  	port = serial->port[msg->port];  	p_priv = usb_get_serial_port_data(port); +	if (!p_priv) +		goto resubmit;  	/* Update handshaking pin state information */  	old_dcd_state = p_priv->dcd_state; @@ -420,7 +422,7 @@ static void	usa26_instat_callback(struct urb *urb)  	if (old_dcd_state != p_priv->dcd_state)  		tty_port_tty_hangup(&port->port, true); - +resubmit:  	/* Resubmit urb so we continue receiving */  	err = usb_submit_urb(urb, GFP_ATOMIC);  	if (err != 0) @@ -527,6 +529,8 @@ static void	usa28_instat_callback(struct urb *urb)  	}  	port = serial->port[msg->port];  	p_priv = usb_get_serial_port_data(port); +	if (!p_priv) +		goto resubmit;  	/* Update handshaking pin state information */  	old_dcd_state = p_priv->dcd_state; @@ -537,7 +541,7 @@ static void	usa28_instat_callback(struct urb *urb)  	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)  		tty_port_tty_hangup(&port->port, true); - +resubmit:  		/* Resubmit urb so we continue receiving */  	err = usb_submit_urb(urb, GFP_ATOMIC);  	if (err != 0) @@ -607,6 +611,8 @@ static void	usa49_instat_callback(struct urb *urb)  	}  	port = serial->port[msg->portNumber];  	p_priv = usb_get_serial_port_data(port); +	if (!p_priv) +		goto resubmit;  	/* Update handshaking pin state information */  	old_dcd_state = p_priv->dcd_state; @@ -617,7 +623,7 @@ static void	usa49_instat_callback(struct urb *urb)  	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)  		tty_port_tty_hangup(&port->port, true); - +resubmit:  	/* Resubmit urb so we continue receiving */  	err = usb_submit_urb(urb, GFP_ATOMIC);  	if (err != 0) @@ -855,6 +861,8 @@ static void	usa90_instat_callback(struct urb *urb)  	port = serial->port[0];  	p_priv = usb_get_serial_port_data(port); +	if (!p_priv) +		goto resubmit;  	/* Update handshaking pin state information */  	old_dcd_state = p_priv->dcd_state; @@ -865,7 +873,7 @@ static void	usa90_instat_callback(struct urb *urb)  	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)  		tty_port_tty_hangup(&port->port, true); - +resubmit:  	/* Resubmit urb so we continue receiving */  	err = usb_submit_urb(urb, GFP_ATOMIC);  	if (err != 0) @@ -926,6 +934,8 @@ static void	usa67_instat_callback(struct urb *urb)  	port = serial->port[msg->port];  	p_priv = usb_get_serial_port_data(port); +	if (!p_priv) +		goto resubmit;  	/* Update handshaking pin state information */  	old_dcd_state = p_priv->dcd_state; @@ -934,7 +944,7 @@ static void	usa67_instat_callback(struct urb *urb)  	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)  		tty_port_tty_hangup(&port->port, true); - +resubmit:  	/* Resubmit urb so we continue receiving */  	err = usb_submit_urb(urb, GFP_ATOMIC);  	if (err != 0) | 
