From: Amit Shah <amit.shah@redhat.com>
To: Sjur BRENDELAND <sjur.brandeland@stericsson.com>
Cc: "sjurbren@gmail.com" <sjurbren@gmail.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Linus Walleij <linus.walleij@linaro.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
"yrl.pp-manager.tt@hitachi.com" <yrl.pp-manager.tt@hitachi.com>,
Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Subject: Re: [PATCH 1/3] virtio_console:Merge struct buffer_token into struct port_buffer
Date: Mon, 1 Oct 2012 15:09:49 +0530 [thread overview]
Message-ID: <20121001093949.GE9810@amit.redhat.com> (raw)
In-Reply-To: <81C3A93C17462B4BBD7E272753C1057923BD8365F7@EXDCVYMBSTM005.EQ1STM.local>
On (Wed) 26 Sep 2012 [09:48:12], Sjur BRENDELAND wrote:
> > > This merge reduces code size by unifying the approach for
> > > sending scatter-lists and regular buffers. Any type of
> > > write operation (splice, write, put_chars) will now allocate
> > > a port_buffer and send_buf() and free_buf() can always be used.
> >
> > Thanks!
> > This looks much nicer and simpler. I just have some comments below.
>
> OK, good to hear that you agree to this kind of change. I'll do a respin
> of this patch fixing the issues you have pointed out.
>
> > > static void free_buf(struct port_buffer *buf)
> > > {
> > > + int i;
> > > +
> > > kfree(buf->buf);
> >
> > this should be done only when !buf->sgpages, or (see below)
>
> Agree, I'll put this statement in an else branch to the if-statement below.
Not necessary; see my comments in another mail.
> > > -static struct port_buffer *alloc_buf(size_t buf_size)
> > > +static struct port_buffer *alloc_buf(struct virtqueue *vq, size_t buf_size,
> > > + int nrbufs)
> > > {
> > > struct port_buffer *buf;
> > > + size_t alloc_size;
> > >
> > > - buf = kmalloc(sizeof(*buf), GFP_KERNEL);
> > > + /* Allocate buffer and the scatter list */
> > > + alloc_size = sizeof(*buf) + sizeof(struct scatterlist) * nrbufs;
> >
> > This allocates one redundant sg entry when nrbuf > 0,
> > but I think it is OK. (just a comment)
>
> I did this on purpose for the sake of simplicity, but I can
> change this to something like:
> alloc_size = sizeof(*buf) + sizeof(buf->sg) * max(nrbufs - 1, 1);
>
>
> > > + buf = kmalloc(alloc_size, GFP_ATOMIC);
> >
> > This should be kzalloc(), or buf->buf and others are not initialized,
> > which will cause unexpected kfree bug at kfree(buf->buf) in free_buf.
>
> Agree, kzalloc() is better in this case.
Not really -- one thing I've picked up from Rusty is to use kmallocs
and explicitly initialise values. Then, missing such initialisations
(like in this case) will cause tools like valgrind to show the error
pretty quickly.
> > > if (!buf)
> > > goto fail;
> > > - buf->buf = kzalloc(buf_size, GFP_KERNEL);
> > > +
> > > + buf->sgpages = nrbufs;
> > > + if (nrbufs > 0)
> > > + return buf;
> > > +
> > > + buf->buf = kmalloc(buf_size, GFP_ATOMIC);
> >
> > You can also use kzalloc here as previous code does.
> > But if the reason why using kzalloc comes from the security,
> > I think kmalloc is enough here, since the host can access
> > all the guest pages anyway.
>
> With this new patch alloc_buf() is used both for both RX and TX.
> The out_vq did previously use malloc(). But I have preserved
> the legacy behavior for the in_vq by calling memset() in function
> fill_queue().
But we're dropping the memset/kzalloc anyway.
Amit
next prev parent reply other threads:[~2012-10-01 9:39 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-25 13:47 [PATCHv6 0/3] virtio_console: Add rproc_serial device sjur.brandeland
2012-09-25 13:47 ` [PATCH 1/3] virtio_console:Merge struct buffer_token into struct port_buffer sjur.brandeland
2012-09-25 13:47 ` [PATCHv5 2/3] virtio_console: Add support for remoteproc serial sjur.brandeland
2012-09-26 23:52 ` Rusty Russell
2012-10-01 9:52 ` Amit Shah
2012-09-25 13:47 ` [PATCH 3/3] virtio_console: Don't initialize buffers to zero sjur.brandeland
2012-10-01 8:24 ` Amit Shah
[not found] ` <1348580837-10919-2-git-send-email-sjur.brandeland@stericsson.com>
2012-09-26 2:44 ` [PATCH 1/3] virtio_console:Merge struct buffer_token into struct port_buffer Masami Hiramatsu
2012-09-26 7:48 ` Sjur BRENDELAND
2012-09-26 9:40 ` Masami Hiramatsu
2012-09-26 23:42 ` Rusty Russell
2012-10-01 9:39 ` Amit Shah [this message]
2012-10-01 9:35 ` Amit Shah
2012-09-28 12:48 ` [PATCHv6 0/3] virtio_console: Add rproc_serial device Amit Shah
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=20121001093949.GE9810@amit.redhat.com \
--to=amit.shah@redhat.com \
--cc=linus.walleij@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mst@redhat.com \
--cc=sjur.brandeland@stericsson.com \
--cc=sjurbren@gmail.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=yrl.pp-manager.tt@hitachi.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;
as well as URLs for NNTP newsgroup(s).