diff options
Diffstat (limited to 'drivers/media/dvb-core/dmxdev.c')
| -rw-r--r-- | drivers/media/dvb-core/dmxdev.c | 30 | 
1 files changed, 16 insertions, 14 deletions
| diff --git a/drivers/media/dvb-core/dmxdev.c b/drivers/media/dvb-core/dmxdev.c index 5d5a48475a54..f6ee678107d3 100644 --- a/drivers/media/dvb-core/dmxdev.c +++ b/drivers/media/dvb-core/dmxdev.c @@ -1,19 +1,9 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later  /*   * dmxdev.c - DVB demultiplexer device   *   * Copyright (C) 2000 Ralph Metzler & Marcus Metzler   *		      for convergence integrated media GmbH - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 - * of the License, or (at your option) any later version. - * - * 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. - *   */  #define pr_fmt(fmt) "dmxdev: " fmt @@ -1413,7 +1403,7 @@ static const struct dvb_device dvbdev_dvr = {  };  int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *dvb_adapter)  { -	int i; +	int i, ret;  	if (dmxdev->demux->open(dmxdev->demux) < 0)  		return -EUSERS; @@ -1432,14 +1422,26 @@ int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *dvb_adapter)  					    DMXDEV_STATE_FREE);  	} -	dvb_register_device(dvb_adapter, &dmxdev->dvbdev, &dvbdev_demux, dmxdev, +	ret = dvb_register_device(dvb_adapter, &dmxdev->dvbdev, &dvbdev_demux, dmxdev,  			    DVB_DEVICE_DEMUX, dmxdev->filternum); -	dvb_register_device(dvb_adapter, &dmxdev->dvr_dvbdev, &dvbdev_dvr, +	if (ret < 0) +		goto err_register_dvbdev; + +	ret = dvb_register_device(dvb_adapter, &dmxdev->dvr_dvbdev, &dvbdev_dvr,  			    dmxdev, DVB_DEVICE_DVR, dmxdev->filternum); +	if (ret < 0) +		goto err_register_dvr_dvbdev;  	dvb_ringbuffer_init(&dmxdev->dvr_buffer, NULL, 8192);  	return 0; + +err_register_dvr_dvbdev: +	dvb_unregister_device(dmxdev->dvbdev); +err_register_dvbdev: +	vfree(dmxdev->filter); +	dmxdev->filter = NULL; +	return ret;  }  EXPORT_SYMBOL(dvb_dmxdev_init); |