qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@gmail.com>
To: Dmitry Fleytman <dmitry@daynix.com>
Cc: Yan Vugenfirer <yan@daynix.com>,
	Gerhard Wiesinger <lists@wiesinger.com>,
	qemu-devel@nongnu.org, Anthony Liguori <anthony@codemonkey.ws>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH V8 0/5] VMXNET3 paravirtual NIC device implementation
Date: Mon, 7 Jan 2013 15:14:11 +0100	[thread overview]
Message-ID: <20130107141411.GB18749@stefanha-thinkpad.redhat.com> (raw)
In-Reply-To: <1354878909-21369-1-git-send-email-dmitry@daynix.com>

On Fri, Dec 07, 2012 at 01:15:04PM +0200, Dmitry Fleytman wrote:
> > +struct eth_header {
> > +    uint8_t  h_dest[ETH_ALEN];   /* destination eth addr */
> > +    uint8_t  h_source[ETH_ALEN]; /* source ether addr    */
> > +    uint16_t h_proto;            /* packet type ID field */
> > +};
> 
> Looks like it's copy-pasted stuff from /usr/include/linux/if_*.h,
> /usr/include/netinet/*.h, and friends.  If the system-wide headers are
> included names will collide for some of the macros at least.
> 
> Did you check if the slirp/ definitions can be reused?
> 
> [DF] Yes, you are right. This is copy-pasted from different places.
> [DF] Slips definishing do not fully cover our needs.
> 
> 
> I'd rather we import network header definitions once in a generic
> place into the source tree.  That way vmxnet and other components
> don't need to redefine these structs.
> 
> [DF] Exaclty! Our intention is to create generic header with network definitions and make everyone use it.
> [DF] We can move our header to some shared place if you want, however I'd do it in parallel with cleanup
> [DF] of similar definitions in existing code and this is a big change that os out of scope of these patches.

Please put it in a generic place in include/qemu/....  Please
double-check copyright headers you need when copy-pasting code from
various system headers.

> > + 
> > *===========================================================================*/
> 
> Is this huge comment box a sign that the code should be split into a
> foo_tx.c and an foo_rx.c file?
> 
> [DF] As for me this file is not that big to be splitted (<800 lines), however I'll do this if you insist :)

It came to mind because I find comment boxes ugly.  They tend to be
pointless "*********** PUBLIC METHODS ***********" or they show that the
code should really be split.  Just a pet peeve but please do split it if
possible.

> > +static inline void vmxnet3_flush_shmem_changes(void)
> > +{
> > +    /*
> > +     * Flush shared memory changes
> > +     * Needed before sending interrupt to guest to ensure
> > +     * it gets consistent memory state
> > +     */
> > +    smp_wmb();
> > +}
> 
> It's useful to document why a memory barrier is being used in each
> instance.  Therefore hiding smp_wmb() inside a wrapper function isn't
> great.
> 
> [DF] Fixed.
> 
> Also, it's suspicious that smb_wmb() is used but no other barriers are
> used.  What about a read memory barrier when accessing shared memory
> written by the guest?
> 
> [DF] VMWARE interface build a in safe way - you always read out data buffer (packet descriptor) with memcopy,
> [DF] and then check its last byte to see whether it was fully filled by driver.
> [DF] In this case device doesn't need read barriers. Drivers need write barriers of course to secure
> [DF] proper order of writes.

That's not portable, you're making assumptions about memory ordering
which varies from architecture to architecture.  Some of the barriers
compile out on x86 because the memory model is strong.

QEMU is portable across host architectures so you need to use the read
memory barrier.

Stefan

  parent reply	other threads:[~2013-01-07 14:14 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-07 11:15 [Qemu-devel] [PATCH V8 0/5] VMXNET3 paravirtual NIC device implementation Dmitry Fleytman
2012-12-07 11:15 ` [Qemu-devel] [PATCH V8 1/5] Adding utility function net_checksum_add_cont() that allows checksum calculation of scattered data with odd chunk sizes Dmitry Fleytman
2012-12-07 11:15 ` [Qemu-devel] [PATCH V8 2/5] Adding utility function net_checksum_add_iov() for iovec checksum calculation Dmitry Fleytman
2013-01-07 14:04   ` Stefan Hajnoczi
2013-01-11 13:33     ` Dmitry Fleytman
2012-12-07 11:15 ` [Qemu-devel] [PATCH V8 3/5] Adding common definitions for VMWARE devices Dmitry Fleytman
2013-01-07 14:17   ` Stefan Hajnoczi
2013-01-11 13:35     ` Dmitry Fleytman
2013-01-11 15:42       ` Stefan Hajnoczi
2013-01-12 16:14         ` Dmitry Fleytman
2012-12-07 11:15 ` [Qemu-devel] [PATCH V8 4/5] Adding packet abstraction for VMWARE network devices Dmitry Fleytman
2013-01-07 14:35   ` Stefan Hajnoczi
2013-01-12 16:16     ` Dmitry Fleytman
2012-12-07 11:15 ` [Qemu-devel] [PATCH V8 5/5] Adding VMXNET3 device implementation Dmitry Fleytman
2013-01-07 14:52   ` Stefan Hajnoczi
2013-01-12 16:17     ` Dmitry Fleytman
2013-03-27 14:43   ` Alexander Graf
2012-12-26  9:26 ` [Qemu-devel] [PATCH V8 0/5] VMXNET3 paravirtual NIC " Dmitry Fleytman
2013-01-07 15:01   ` Stefan Hajnoczi
2013-01-09 16:16     ` Dmitry Fleytman
2013-01-07 14:14 ` Stefan Hajnoczi [this message]
2013-01-12 16:20   ` Dmitry Fleytman

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=20130107141411.GB18749@stefanha-thinkpad.redhat.com \
    --to=stefanha@gmail.com \
    --cc=anthony@codemonkey.ws \
    --cc=dmitry@daynix.com \
    --cc=lists@wiesinger.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=yan@daynix.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).