All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Kosina <jkosina@suse.cz>
To: "Bruno Prémont" <bonbons@linux-vserver.org>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	linux-input@vger.kernel.org, linux-usb@vger.kernel.org,
	linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	"Rick L. Vinyard Jr." <rvinyard@cs.nmsu.edu>,
	Nicu Pavel <npavel@ituner.com>, Oliver Neukum <oliver@neukum.org>,
	Jaya Kumar <jayakumar.lkml@gmail.com>
Subject: Re: [PATCH v2 1/6] hid: new driver for PicoLCD device
Date: Mon, 22 Mar 2010 09:54:12 +0100 (CET)	[thread overview]
Message-ID: <alpine.LNX.2.00.1003220951440.18642@pobox.suse.cz> (raw)
In-Reply-To: <20100321173737.5fcf3580@neptune.home>

On Sun, 21 Mar 2010, Bruno Prémont wrote:

> > > +	}
> > > +	data->status |= PICOLCD_BUSY;
> > > +	data->pending = work;
> > > +	for (i = k = 0; i < report->maxfield; i++)
> > > +		for (j = 0; j < report->field[i]->report_count; j++) {
> > > +			hid_set_field(report->field[i], j, k < size ? raw_data[k] : 0);
> > > +			k++;
> > > +		}
> > > +	usbhid_submit_report(data->hdev, report, USB_DIR_OUT);
> > > +	complete_all(&data->ready);
> > > +	INIT_COMPLETION(data->ready);
> > 
> > Umm, what does this do, exactly?
> >
> It wakes up anyone waiting on the completion and then resets the completion
> as otherwise any future attempt to wait on it would succeed immediately.
> 
> The complete_all() instead of just complete() comes from the reset() function.
> I can probably reduce it here.
> 
> Will check this combined with your mutex suggestion above.

I am afraid this code is racy as is. You can't be sure that whoever has 
been waiting on the completion has been notified already between 
complete_all() and INIT_COMPLETION(), can you?

Thanks for the driver!

-- 
Jiri Kosina
SUSE Labs, Novell Inc.

WARNING: multiple messages have this Message-ID (diff)
From: Jiri Kosina <jkosina@suse.cz>
To: "Bruno Prémont" <bonbons@linux-vserver.org>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	linux-input@vger.kernel.org, linux-usb@vger.kernel.org,
	linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	"Rick L. Vinyard Jr." <rvinyard@cs.nmsu.edu>,
	Nicu Pavel <npavel@ituner.com>, Oliver Neukum <oliver@neukum.org>,
	Jaya Kumar <jayakumar.lkml@gmail.com>
Subject: Re: [PATCH v2 1/6] hid: new driver for PicoLCD device
Date: Mon, 22 Mar 2010 09:54:12 +0100 (CET)	[thread overview]
Message-ID: <alpine.LNX.2.00.1003220951440.18642@pobox.suse.cz> (raw)
In-Reply-To: <20100321173737.5fcf3580@neptune.home>

On Sun, 21 Mar 2010, Bruno Prémont wrote:

> > > +	}
> > > +	data->status |= PICOLCD_BUSY;
> > > +	data->pending = work;
> > > +	for (i = k = 0; i < report->maxfield; i++)
> > > +		for (j = 0; j < report->field[i]->report_count; j++) {
> > > +			hid_set_field(report->field[i], j, k < size ? raw_data[k] : 0);
> > > +			k++;
> > > +		}
> > > +	usbhid_submit_report(data->hdev, report, USB_DIR_OUT);
> > > +	complete_all(&data->ready);
> > > +	INIT_COMPLETION(data->ready);
> > 
> > Umm, what does this do, exactly?
> >
> It wakes up anyone waiting on the completion and then resets the completion
> as otherwise any future attempt to wait on it would succeed immediately.
> 
> The complete_all() instead of just complete() comes from the reset() function.
> I can probably reduce it here.
> 
> Will check this combined with your mutex suggestion above.

I am afraid this code is racy as is. You can't be sure that whoever has 
been waiting on the completion has been notified already between 
complete_all() and INIT_COMPLETION(), can you?

Thanks for the driver!

-- 
Jiri Kosina
SUSE Labs, Novell Inc.
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: Jiri Kosina <jkosina@suse.cz>
To: "Bruno Prémont" <bonbons@linux-vserver.org>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	linux-input@vger.kernel.org, linux-usb@vger.kernel.org,
	linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	"Rick L. Vinyard Jr." <rvinyard@cs.nmsu.edu>,
	Nicu Pavel <npavel@ituner.com>, Oliver Neukum <oliver@neukum.org>,
	Jaya Kumar <jayakumar.lkml@gmail.com>
Subject: Re: [PATCH v2 1/6] hid: new driver for PicoLCD device
Date: Mon, 22 Mar 2010 08:54:12 +0000	[thread overview]
Message-ID: <alpine.LNX.2.00.1003220951440.18642@pobox.suse.cz> (raw)
In-Reply-To: <20100321173737.5fcf3580@neptune.home>

On Sun, 21 Mar 2010, Bruno Prémont wrote:

> > > +	}
> > > +	data->status |= PICOLCD_BUSY;
> > > +	data->pending = work;
> > > +	for (i = k = 0; i < report->maxfield; i++)
> > > +		for (j = 0; j < report->field[i]->report_count; j++) {
> > > +			hid_set_field(report->field[i], j, k < size ? raw_data[k] : 0);
> > > +			k++;
> > > +		}
> > > +	usbhid_submit_report(data->hdev, report, USB_DIR_OUT);
> > > +	complete_all(&data->ready);
> > > +	INIT_COMPLETION(data->ready);
> > 
> > Umm, what does this do, exactly?
> >
> It wakes up anyone waiting on the completion and then resets the completion
> as otherwise any future attempt to wait on it would succeed immediately.
> 
> The complete_all() instead of just complete() comes from the reset() function.
> I can probably reduce it here.
> 
> Will check this combined with your mutex suggestion above.

I am afraid this code is racy as is. You can't be sure that whoever has 
been waiting on the completion has been notified already between 
complete_all() and INIT_COMPLETION(), can you?

Thanks for the driver!

-- 
Jiri Kosina
SUSE Labs, Novell Inc.

  parent reply	other threads:[~2010-03-22  8:54 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-20 16:00 [PATCH v2 0/6] hid: new driver for PicoLCD device Bruno Prémont
2010-03-20 16:00 ` Bruno Prémont
2010-03-20 16:00 ` Bruno Prémont
2010-03-20 16:02 ` [PATCH v2 1/6] " Bruno Prémont
2010-03-20 16:02   ` Bruno Prémont
2010-03-20 16:02   ` Bruno Prémont
2010-03-21  3:46   ` Dmitry Torokhov
2010-03-21  3:46     ` Dmitry Torokhov
2010-03-21  3:46     ` Dmitry Torokhov
2010-03-21 16:37     ` Bruno Prémont
2010-03-21 16:37       ` Bruno Prémont
2010-03-21 16:37       ` Bruno Prémont
2010-03-22  4:35       ` Dmitry Torokhov
2010-03-22  4:35         ` Dmitry Torokhov
2010-03-22  4:35         ` Dmitry Torokhov
2010-03-22 11:38         ` Bruno Prémont
2010-03-22 11:38           ` Bruno Prémont
2010-03-22 11:38           ` Bruno Prémont
2010-03-22  8:54       ` Jiri Kosina [this message]
2010-03-22  8:54         ` Jiri Kosina
2010-03-22  8:54         ` Jiri Kosina
2010-03-20 16:04 ` [PATCH v2 2/6] hid: add framebuffer support to " Bruno Prémont
2010-03-20 16:04   ` Bruno Prémont
2010-03-20 16:04   ` Bruno Prémont
2010-03-21  3:25   ` Dmitry Torokhov
2010-03-21  3:25     ` Dmitry Torokhov
2010-03-21  3:25     ` Dmitry Torokhov
2010-03-21  7:24   ` Jaya Kumar
2010-03-21  7:24     ` Jaya Kumar
2010-03-21  7:24     ` Jaya Kumar
2010-03-21 16:11     ` Bruno Prémont
2010-03-21 16:11       ` Bruno Prémont
2010-03-22  8:56       ` Jiri Kosina
2010-03-22  8:56         ` Jiri Kosina
2010-03-20 16:06 ` [PATCH v2 3/6] hid: add backlight " Bruno Prémont
2010-03-20 16:06   ` Bruno Prémont
2010-03-20 16:06   ` Bruno Prémont
2010-03-22  8:59   ` Jiri Kosina
2010-03-22  8:59     ` Jiri Kosina
2010-03-22 11:01     ` Bruno Prémont
2010-03-22 11:01       ` Bruno Prémont
2010-03-20 16:08 ` [PATCH v2 4/6] hid: add lcd " Bruno Prémont
2010-03-20 16:08   ` Bruno Prémont
2010-03-20 16:10 ` [PATCH v2 5/6] hid: add GPO (leds) " Bruno Prémont
2010-03-20 16:10   ` Bruno Prémont
2010-03-20 16:10   ` Bruno Prémont
2010-03-20 16:11 ` [PATCH v2 6/6] hid: add experimental access to PicoLCD device's EEPROM and FLASH Bruno Prémont
2010-03-20 16:11   ` [PATCH v2 6/6] hid: add experimental access to PicoLCD device's Bruno Prémont
2010-03-20 16:11   ` [PATCH v2 6/6] hid: add experimental access to PicoLCD device's EEPROM and FLASH Bruno Prémont
2010-03-21  3:08   ` Dmitry Torokhov
2010-03-21  3:08     ` [PATCH v2 6/6] hid: add experimental access to PicoLCD device's Dmitry Torokhov
2010-03-21 10:29     ` [PATCH v2 6/6] hid: add experimental access to PicoLCD device's EEPROM and FLASH Bruno Prémont
2010-03-21 10:29       ` [PATCH v2 6/6] hid: add experimental access to PicoLCD device's Bruno Prémont
2010-03-21 10:29       ` [PATCH v2 6/6] hid: add experimental access to PicoLCD device's EEPROM and FLASH Bruno Prémont

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=alpine.LNX.2.00.1003220951440.18642@pobox.suse.cz \
    --to=jkosina@suse.cz \
    --cc=bonbons@linux-vserver.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=jayakumar.lkml@gmail.com \
    --cc=linux-fbdev@vger.kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=npavel@ituner.com \
    --cc=oliver@neukum.org \
    --cc=rvinyard@cs.nmsu.edu \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.