From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=56529 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P1MG7-0006FL-2Y for qemu-devel@nongnu.org; Thu, 30 Sep 2010 12:45:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1P1MG4-0006Qi-6U for qemu-devel@nongnu.org; Thu, 30 Sep 2010 12:45:26 -0400 Received: from moutng.kundenserver.de ([212.227.126.187]:53558) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1P1MG3-0006QG-Qi for qemu-devel@nongnu.org; Thu, 30 Sep 2010 12:45:24 -0400 Message-ID: <4CA4BE9E.6020401@mail.berlios.de> Date: Thu, 30 Sep 2010 18:45:18 +0200 From: Stefan Weil MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] eepro100: Add support for multiple individual addresses (multiple IA) References: <4CA38D83.9040106@mail.berlios.de> <1285790395-25460-1-git-send-email-weil@mail.berlios.de> <20100929203010.GA7472@laped.lan> In-Reply-To: <20100929203010.GA7472@laped.lan> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Edgar E. Iglesias" Cc: QEMU Developers , "Michael S. Tsirkin" Am 29.09.2010 22:30, schrieb Edgar E. Iglesias: > On Wed, Sep 29, 2010 at 09:59:55PM +0200, Stefan Weil wrote: > >> I reviewed the latest sources of Linux, FreeBSD and NetBSD. >> They all reset the multiple IA bit (multi_ia in BSD) to zero, >> but I did not find code which sets this bit to one >> (like it is done by some routers). >> >> Running Windows guests also did not set this bit. >> >> Intel's Open Source Software Developer Manual does not >> give much information on the semantics related to this bit, >> so I had to guess how it works. The guess was good enough >> to make the router emulation work. >> >> >> Related changes in this patch: >> * Update naming and documentation of the internal hash register. >> It is not limited to multicast, but also used for multiple IA. >> * Dump complete configuration register when debug traces are enabled. >> * Debug output when multiple IA bit is set during CmdConfigure. >> * Debug output when frames are received because multiple IA bit is set, >> or when they are ignored although it is set. >> >> Cc: Michael S. Tsirkin >> Signed-off-by: Stefan Weil >> --- >> hw/eepro100.c | 30 +++++++++++++++++++++--------- >> 1 files changed, 21 insertions(+), 9 deletions(-) >> >> diff --git a/hw/eepro100.c b/hw/eepro100.c >> index 2b75c8f..5f6dcb6 100644 >> --- a/hw/eepro100.c >> +++ b/hw/eepro100.c >> @@ -219,7 +219,8 @@ typedef enum { >> >> typedef struct { >> PCIDevice dev; >> - uint8_t mult[8]; /* multicast mask array */ >> + /* Hash register (multicast mask array, multiple individual addresses). */ >> + uint8_t mult[8]; >> > > Nitpick: > It seems to me like if mult is only used internally. If so, why not > represent the hash filter with an uint64_t? > > Then you can replace the current memsets with ->mult = 0 and simplify > the match logic. > > > [snip] That's correct. Is it possible to change mult in the VMStateDescription from VMSTATE_BUFFER to VMSTATE_UINT64 without loosing compatibility? I doubt that there will be a large gain in runtime speed by this change. See also hw/ne2000.c and hw/rtl8139.c - they use similar code. So any change should be applied to those nics, too. Regards, Stefan