linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Henrik Rydberg" <rydberg@euromail.se>
To: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Jiri Kosina <jkosina@suse.cz>, Stephane Chatty <chatty@enac.fr>,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 02/11] HID: hid-input: simplify hid_input allocation and registration
Date: Tue, 27 Nov 2012 21:14:07 +0100	[thread overview]
Message-ID: <20121127201407.GA884@polaris.bitmath.org> (raw)
In-Reply-To: <1353684694-5723-3-git-send-email-benjamin.tissoires@gmail.com>

Hi Benjamin,

> In order to provide fine control for the creation of different
> input devices in probe function of third party drivers, this patch
> split the allocations, the registrations and the free of input
> devices.
> 
> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
> ---
>  drivers/hid/hid-input.c | 28 ++++++++++++++++++----------
>  1 file changed, 18 insertions(+), 10 deletions(-)

I don't like this patch, nor its purpose. Drivers should not depend on
the hid core working in a particular way internally, that spells
disaster. There must be some other way in which the same effect can be
achieved?

> 
> diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
> index 47f98a3..eea02b0 100644
> --- a/drivers/hid/hid-input.c
> +++ b/drivers/hid/hid-input.c
> @@ -1206,6 +1206,7 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)
>  	struct hid_driver *drv = hid->driver;
>  	struct hid_report *report;
>  	struct hid_input *hidinput = NULL;
> +	struct hid_input *next;
>  	int i, j, k;
>  
>  	INIT_LIST_HEAD(&hid->inputs);
> @@ -1238,7 +1239,7 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)
>  			if (!hidinput) {
>  				hidinput = hidinput_allocate(hid);
>  				if (!hidinput)
> -					goto out_unwind;
> +					goto out_cleanup;
>  			}
>  
>  			for (i = 0; i < report->maxfield; i++)
> @@ -1253,29 +1254,36 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)
>  				 * UGCI) cram a lot of unrelated inputs into the
>  				 * same interface. */
>  				hidinput->report = report;
> -				if (drv->input_configured)
> -					drv->input_configured(hid, hidinput);
> -				if (input_register_device(hidinput->input))
> -					goto out_cleanup;
>  				hidinput = NULL;
>  			}
>  		}
>  	}
>  
> -	if (hidinput) {
> +	list_for_each_entry(hidinput, &hid->inputs, list) {
>  		if (drv->input_configured)
>  			drv->input_configured(hid, hidinput);
>  		if (input_register_device(hidinput->input))
> -			goto out_cleanup;
> +			goto out_unwind;
>  	}
>  
>  	return 0;
>  
>  out_cleanup:
> -	list_del(&hidinput->list);
> -	input_free_device(hidinput->input);
> -	kfree(hidinput);
> +	list_for_each_entry_safe(hidinput, next, &hid->inputs, list) {
> +		list_del(&hidinput->list);
> +		input_free_device(hidinput->input);
> +		kfree(hidinput);
> +	}
> +	return -1;

Irregular return in the error path?

> +
>  out_unwind:
> +	/* free the non-registered hidinput, starting from the faulty one */
> +	list_for_each_entry_safe_from(hidinput, next, &hid->inputs, list) {
> +		list_del(&hidinput->list);
> +		input_free_device(hidinput->input);
> +		kfree(hidinput);
> +	}
> +
>  	/* unwind the ones we already registered */
>  	hidinput_disconnect(hid);
>  
> -- 
> 1.8.0
> 

Thanks,
Henrik

  reply	other threads:[~2012-11-27 20:13 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-23 15:31 [PATCH 00/11] Support of dual pen/multitouch and new default for win 7 certified devices Benjamin Tissoires
2012-11-23 15:31 ` [PATCH 01/11] HID: hid-input factorize hid_input allocation Benjamin Tissoires
2012-11-27 19:45   ` Henrik Rydberg
2012-11-27 19:47   ` Jiri Kosina
2012-11-29 14:00   ` Jiri Kosina
2012-11-29 14:58     ` Benjamin Tissoires
2012-11-23 15:31 ` [PATCH 02/11] HID: hid-input: simplify hid_input allocation and registration Benjamin Tissoires
2012-11-27 20:14   ` Henrik Rydberg [this message]
2012-11-27 20:19     ` Jiri Kosina
2012-11-23 15:31 ` [PATCH 03/11] HID: hid-input: export hidinput_allocation function Benjamin Tissoires
2012-11-27 20:21   ` Henrik Rydberg
2012-11-29 15:31     ` Benjamin Tissoires
2012-12-02  8:08       ` Henrik Rydberg
2012-11-23 15:31 ` [PATCH 04/11] HID: hid-multitouch: creates and handle stylus report with dual-sensors Benjamin Tissoires
2012-11-27 20:25   ` Henrik Rydberg
2012-11-23 15:31 ` [PATCH 05/11] HID: hid-multitouch: manually send sync event for pen input report Benjamin Tissoires
2012-11-23 15:31 ` [PATCH 06/11] HID: hid-multitouch: append " Pen" to the name of the stylus input Benjamin Tissoires
2012-11-23 15:31 ` [PATCH 07/11] HID: hid-multitouch: rename MT_CLS_DEFAULT into MT_CLS_NSMU Benjamin Tissoires
2012-11-23 15:31 ` [PATCH 08/11] HID: hid-multitouch: add support for Nexio 42" panel Benjamin Tissoires
2012-11-26  8:37   ` Benjamin Tissoires
2012-11-23 15:31 ` [PATCH 09/11] HID: hid-multitouch: check if ContactCount is given for default quirk Benjamin Tissoires
2012-11-23 15:31 ` [PATCH 10/11] HID: hid-multitouch: fix protocol for 3 devices Benjamin Tissoires
2012-11-23 15:31 ` [PATCH 11/11] HID: hid-multitouch: use MT_QUIRK_CONTACT_COUNT_ACCURATE for win 8 devices Benjamin Tissoires
2013-01-03  9:50 ` [PATCH 00/11] Support of dual pen/multitouch and new default for win 7 certified devices Jiri Kosina
2013-01-03 11:34   ` Benjamin Tissoires
2013-01-06 20:03     ` Henrik Rydberg
2013-01-15 16:04       ` Jiri Kosina
2013-01-16  2:55         ` Benjamin Tissoires

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20121127201407.GA884@polaris.bitmath.org \
    --to=rydberg@euromail.se \
    --cc=benjamin.tissoires@gmail.com \
    --cc=chatty@enac.fr \
    --cc=dmitry.torokhov@gmail.com \
    --cc=jkosina@suse.cz \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).