[PATCH 34/44] staging: unisys: Prepare vbus_hdr_info to be public

Don Zickus dzickus at redhat.com
Mon May 18 14:52:25 UTC 2015


On Sat, May 16, 2015 at 02:22:16PM +0300, Dan Carpenter wrote:
> On Wed, May 13, 2015 at 01:22:28PM -0400, Benjamin Romer wrote:
> > +	hdr_info = kzalloc(sizeof(*hdr_info), GFP_KERNEL);
> > +	if (!hdr_info) {
> > +		rc = NULL;
> > +		goto away_mem;
> > +	}
> > +
> >  	dev_set_name(&devdata->dev, "visorbus%d", id);
> >  	devdata->dev.bus = &visorbus_type;
> >  	devdata->dev.groups = visorbus_groups;
> > @@ -1344,26 +1352,19 @@ create_bus_instance(struct visorchipset_bus_info *bus_info)
> >  		POSTCODE_LINUX_3(DEVICE_CREATE_FAILURE_PC, id,
> >  				 POSTCODE_SEVERITY_ERR);
> >  		rc = NULL;
> > -		goto away;
> > +		goto away_mem2;
> >  	}
> >  	devdata->devno = id;
> >  	devdata->chan = bus_info->visorchannel;
> >  	if (bus_info->flags.server) {
> >  		init_vbus_channel(devdata->chan);
> >  	} else {
> > -		if (get_vbus_header_info(devdata->chan,
> > -					 &devdata->
> > -					 vbus_hdr_info) >= 0) {
> > -			devdata->vbus_valid = true;
> > -			write_vbus_chp_info(devdata->chan,
> > -					    &devdata->
> > -					    vbus_hdr_info,
> > -					    &chipset_driverinfo
> > -					    );
> > -			write_vbus_bus_info(devdata->chan,
> > -					    &devdata->
> > -						vbus_hdr_info,
> > -					&clientbus_driverinfo);
> > +		if (get_vbus_header_info(devdata->chan, hdr_info) >= 0) {
> > +			devdata->vbus_hdr_info = (void *)hdr_info;
> > +			write_vbus_chp_info(devdata->chan, hdr_info,
> > +					    &chipset_driverinfo);
> > +			write_vbus_bus_info(devdata->chan, hdr_info,
> > +					    &clientbus_driverinfo);
> >  		}
> >  	}
> >  	bus_count++;
> 
> We still leak hdr_info on some paths.

Agreed.  I noticed and fixed this up in patch 37 "Remove server flags".
Simplifying the code made the problem stand out eaiser.  I can migrate the
fix to this patch if you want.

Cheers,
Don


More information about the devel mailing list