All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tilman Schmidt <tilman@imap.cc>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Karsten Keil <kkeil@suse.de>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	i4ldeveloper@listserv.isdn4linux.de,
	linux-serial@vger.kernel.org, Hansjoerg Lipp <hjlipp@web.de>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>, Greg KH <greg@kroah.com>
Subject: Re: [PATCH] drivers/isdn/gigaset: new M101 driver
Date: Mon, 05 Feb 2007 02:42:09 +0100	[thread overview]
Message-ID: <45C68B71.6050904@imap.cc> (raw)
In-Reply-To: <20070203175623.72a171a1.akpm@linux-foundation.org>

[-- Attachment #1: Type: text/plain, Size: 3333 bytes --]

Am 04.02.2007 02:56 schrieb Andrew Morton:
> On Sun, 04 Feb 2007 02:32:41 +0100 Tilman Schmidt <tilman@imap.cc> wrote:
> 
>>>> +	spin_lock_irqsave(&cs->cmdlock, flags);
>>>> +	cb = cs->cmdbuf;
>>>> +	spin_unlock_irqrestore(&cs->cmdlock, flags);
>>> It is doubtful if the locking here does anything useful.
>> It assures atomicity when reading the cs->cmdbuf pointer.
> 
> I think it's bogus.  If the quantity being copied here is more than 32-bits
> then yes, a lock is appropriate.  But if it's a single word then it's
> unlikely that the locking does anything useful.  Or there might be a bug
> here.

It's a pointer. Are reads and writes of pointer sized objects
guaranteed to be atomic on every platform? If so, I'll happily
omit the locking.

>>>> +	spin_lock_irqsave(&cs->cmdlock, flags);
>>>> +	cb->prev = cs->lastcmdbuf;
>>>> +	if (cs->lastcmdbuf)
>>>> +		cs->lastcmdbuf->next = cb;
>>>> +	else {
>>>> +		cs->cmdbuf = cb;
>>>> +		cs->curlen = len;
>>>> +	}
>>>> +	cs->cmdbytes += len;
>>>> +	cs->lastcmdbuf = cb;
>>>> +	spin_unlock_irqrestore(&cs->cmdlock, flags);
>>> Would the use of list_heads simplify things here?
>> I don't think so. The operations in list.h do not keep track of
>> the total byte count, and adding that in a race-free way appears
>> non-trivial.
> 
> Maintaining a byte count isn't related to maintaining a list.

Sure. But your question was whether the list.h operations would
simplify this code. AFAICS it wouldn't, because the necessity
of maintaining the byte count would complicate a list.h based
solution beyond the current one. Also, this is part of the
interface with the components of the Gigaset driver which are
already part of the kernel. Changing this to a list_head now
would require significant changes in those other parts, too.

>>>> +	tail = atomic_read(&inbuf->tail);
>>>> +	head = atomic_read(&inbuf->head);
>>>> +	gig_dbg(DEBUG_INTR, "buffer state: %u -> %u, receive %u bytes",
>>>> +		head, tail, count);
>>>> +
>>>> +	if (head <= tail) {
>>>> +		n = RBUFSIZE - tail;
>>>> +		if (count >= n) {
>>>> +			/* buffer wraparound */
>>>> +			memcpy(inbuf->data + tail, buf, n);
>>>> +			tail = 0;
>>>> +			buf += n;
>>>> +			count -= n;
>>>> +		} else {
>>>> +			memcpy(inbuf->data + tail, buf, count);
>>>> +			tail += count;
>>>> +			buf += count;
>>>> +			count = 0;
>>>> +		}
>>>> +	}
>>> Perhaps the (fairly revolting) circ_buf.h can be used for this stuff.
>> It probably could, but IMHO readability would suffer rather than improve.
> 
> How about kernel/kfifo.c?

That would indeed fit the bill. But again, this code matches
parts of drivers/isdn/gigaset which are already in the kernel,
and changing it here would require significant corresponding
changes in those other parts.

I'll gladly consider your last two propositions (list_head for
cs->lastcmdbuf and kfifo for cs->inbuf) for a future revision of
the entire set of drivers in drivers/isdn/gigaset, but it goes
way beyond the scope of the present patch, which merely aims at
adding the missing M101 hardware driver.

Thanks,
Tilman

-- 
Tilman Schmidt                          E-Mail: tilman@imap.cc
Bonn, Germany
Diese Nachricht besteht zu 100% aus wiederverwerteten Bits.
Ungeöffnet mindestens haltbar bis: (siehe Rückseite)


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 253 bytes --]

  reply	other threads:[~2007-02-05  1:41 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-01 21:12 [PATCH] drivers/isdn/gigaset: new M101 driver Tilman Schmidt
2007-02-02  1:13 ` Andrew Morton
2007-02-03 16:09   ` Greg KH
2007-02-04  0:26     ` Tilman Schmidt
2007-02-12 18:47       ` Greg KH
2007-02-12 23:49         ` Tilman Schmidt
2007-02-04  1:32   ` Tilman Schmidt
2007-02-04  1:56     ` Andrew Morton
2007-02-05  1:42       ` Tilman Schmidt [this message]
2007-02-05  4:58         ` Andrew Morton
2007-02-05 12:29           ` Tilman Schmidt

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=45C68B71.6050904@imap.cc \
    --to=tilman@imap.cc \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=greg@kroah.com \
    --cc=hjlipp@web.de \
    --cc=i4ldeveloper@listserv.isdn4linux.de \
    --cc=kkeil@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@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 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.