On Fri, 2015-10-02 at 10:37 -0700, Dmitry Torokhov wrote:
On Wed, Sep 23, 2015 at 01:54:59PM -0400, cpaul-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org wrote:
quoted
+static int userio_device_write(struct serio *id, unsigned char
val)
+{
+ struct userio_device *userio = id->port_data;
+ unsigned long flags;
+
+ if (!userio)
+ return -1;
I still have the same question: how can this happen? Where do we
reset
port data to NULL? What happens if we set to NULL after checking?
Actually David pointed out this line was not needed, somehow it still
got left in the patch. I'll send an updated version in just a minute
with the changes.
Cheers,
Lyude
quoted
+
+ spin_lock_irqsave(&userio->buf_lock, flags);
+
+ userio->buf[userio->head] = val;
+ userio->head = (userio->head + 1) % USERIO_BUFSIZE;
+
+ if (userio->head == userio->tail)
+ dev_warn(userio_misc.this_device,
+ "Buffer overflowed, userio client isn't
keeping up");
+
+ spin_unlock_irqrestore(&userio->buf_lock, flags);
+
+ wake_up_interruptible(&userio->waitq);
+
+ return 0;
+}
Thanks.