From: Jeff Garzik <jgarzik@pobox.com>
To: Kyle Moffett <mrmacman_g4@mac.com>
Cc: Wen Xiong <wendyx@us.ibm.com>,
linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org
Subject: Re: [ patch 1/7] drivers/serial/jsm: new serial device driver
Date: Sun, 27 Feb 2005 19:49:52 -0500 [thread overview]
Message-ID: <42226AB0.90303@pobox.com> (raw)
In-Reply-To: <71DF725E-891C-11D9-8040-000393ACC76E@mac.com>
Kyle Moffett wrote:
> On Feb 27, 2005, at 18:38, Wen Xiong wrote:
>
>> +/*
>> + * jsm_init_globals()
>> + *
>> + * This is where we initialize the globals from the static insmod
>> + * configuration variables. These are declared near the head of
>> + * this file.
>> + */
>> +static void jsm_init_globals(void)
>> +{
>> + int i = 0;
>> +
>> + jsm_rawreadok = rawreadok;
>> + jsm_trcbuf_size = trcbuf_size;
>> + jsm_debug = debug;
>> +
>> + for (i = 0; i < MAXBOARDS; i++) {
>> + jsm_Board[i] = NULL;
>> + jsm_board_slot[i] = (char *)kmalloc(20, GFP_KERNEL);
>> + memset(jsm_board_slot[i], 0, 20);
>> + }
>
>
> Instead of several 20-byte kmallocs, you could help reduce memory
> usage and fragmentation with something like this:
>
> static void *jsm_board_slot_mem;
>
> jsm_board_slot_mem = kmalloc(20*MAXBOARDS, GFP_KERNEL);
> memset(jsm_board_slot_mem, 0, 20*MAXBOARDS)
> for (i = 0; i < MAXBOARDS; i++) {
> jsm_Board[i] = NULL;
> jsm_board_slot[i] = &jsm_board_slot_mem[20*i];
> }
>
> Then free like this:
> kfree(jsm_board_slot_mem);
Agree with your initial comment, but you missed an overall point:
MAXBOARDS must be eliminated completely. We do not impose such limits
in Linux.
Information should be allocated on a per-device basis.
> On the other hand, it might be nice to have all these structures
> dynamically allocated, so that the no-boards case only uses the 8 or
> 16 bytes of RAM required for a struct list_head. In that case you
> could clump the other board info into a single struct instead of
> multiple independent static arrays. Something like this might work:
>
> struct jsm_board_instance {
> struct list_head board_list;
> struct board_t board;
> char slot[20];
> [...etc...]
> };
> static struct list_head jsm_board_list = LIST_HEAD_INIT(jsm_board_list);
> static spinlock_t jsm_board_list_lock = SPIN_LOCK_UNLOCKED;
>
> Then when doing hardware add/remove, take the lock and do the list
> manipulation, then unlock.
Correct-a-mundo!
This is the way it should be done.
Jeff
next prev parent reply other threads:[~2005-02-28 0:52 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-27 23:38 [ patch 1/7] drivers/serial/jsm: new serial device driver Wen Xiong
2005-02-28 0:05 ` Kyle Moffett
2005-02-28 0:49 ` Jeff Garzik [this message]
2005-02-28 0:19 ` Jeff Garzik
2005-03-04 21:06 ` Wen Xiong
2005-03-04 22:54 ` Jeff Garzik
2005-02-28 6:57 ` Greg KH
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=42226AB0.90303@pobox.com \
--to=jgarzik@pobox.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=mrmacman_g4@mac.com \
--cc=wendyx@us.ibm.com \
/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