qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 0/4] correct some register return values for vxmnet3
@ 2015-12-22  6:18 Miao Yan
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 1/4] net/vmxnet3: return 1 on device activation failure Miao Yan
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Miao Yan @ 2015-12-22  6:18 UTC (permalink / raw)
  To: jasowang, dmitry, qemu-devel

Qemu vmxnet3 emulation doesn't recognize VMXNET3_CMD_GET_DID_LO,
VMXNET3_CMD_GET_DID_HI and VMXNET3_CMD_GET_DEV_EXTRA_INFO command and 
returns -1 on all of them.

This patchset makes them return correct values.

Changes in v2:
 - return 0 on unknown command

Miao Yan (4):
  net/vmxnet3: return 1 on device activation failure
  net/vmxnet3: return correct value for VMXNET3_CMD_GET_DID_* command
  net/vmxnet3: return correct value for VMXNET3_CMD_GET_DEV_EXTRA_INFO
  net/vmxnet3: return 0 on unknown command

 hw/net/vmxnet3.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH v2 1/4] net/vmxnet3: return 1 on device activation failure
  2015-12-22  6:18 [Qemu-devel] [PATCH v2 0/4] correct some register return values for vxmnet3 Miao Yan
@ 2015-12-22  6:18 ` Miao Yan
  2015-12-22 20:41   ` Shmulik Ladkani
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 2/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DID_* command Miao Yan
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 11+ messages in thread
From: Miao Yan @ 2015-12-22  6:18 UTC (permalink / raw)
  To: jasowang, dmitry, qemu-devel

When reading device status, 0 means device is successfully
activated and 1 means error.

This behavior can be observed by the following steps:

1) run a Linux distro on esxi server
2) modify vmxnet3 Linux driver to give it an invalid
   address to 'adapter->shared_pa' which is the
   shared memory for guest/host communication

This will trigger device activation failure and kernel
log will have the following message:

   [ 7138.403256] vmxnet3 0000:03:00.0 eth1: Failed to activate dev: error 1

So return 1 on device activation failure instead of -1;

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
---
 hw/net/vmxnet3.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index e168285..9185408 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -1652,7 +1652,7 @@ static uint64_t vmxnet3_get_command_status(VMXNET3State *s)
 
     switch (s->last_command) {
     case VMXNET3_CMD_ACTIVATE_DEV:
-        ret = (s->device_active) ? 0 : -1;
+        ret = (s->device_active) ? 0 : 1;
         VMW_CFPRN("Device active: %" PRIx64, ret);
         break;
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH v2 2/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DID_* command
  2015-12-22  6:18 [Qemu-devel] [PATCH v2 0/4] correct some register return values for vxmnet3 Miao Yan
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 1/4] net/vmxnet3: return 1 on device activation failure Miao Yan
@ 2015-12-22  6:18 ` Miao Yan
  2015-12-22 20:49   ` Shmulik Ladkani
  2015-12-22 21:17   ` Shmulik Ladkani
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 3/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DEV_EXTRA_INFO Miao Yan
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 4/4] net/vmxnet3: return 0 on unknown command Miao Yan
  3 siblings, 2 replies; 11+ messages in thread
From: Miao Yan @ 2015-12-22  6:18 UTC (permalink / raw)
  To: jasowang, dmitry, qemu-devel

VMXNET3_CMD_GET_DID_LO should return PCI ID of the device
and VMXNET3_CMD_GET_DID_HI should return vmxnet3 revision ID.

This behavior can be observed by the following steps:

1) run a Linux distro on esxi server
2) modify vmxnet3 Linux driver to read DID_HI and DID_LO:

  VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DID_LO);
  lo =  VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);

  VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DID_HI);
  high =  VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
  pr_info("vmxnet3 DID lo: 0x%x, high: 0x%x\n", lo, high);

The kernel log will have something like the following message:

  [ 7005.111170] vmxnet3 DID lo: 0x7b0, high: 0x1

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
---
Changes in v2: 
 - update vmxnet3_handle_command not to print error when issuing these commands

 hw/net/vmxnet3.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 9185408..cddbf6d 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -1640,6 +1640,14 @@ static void vmxnet3_handle_command(VMXNET3State *s, uint64_t cmd)
                   "adaptive ring info flags");
         break;
 
+    case VMXNET3_CMD_GET_DID_LO:
+        VMW_CBPRN("Set: Get lower part of device ID");
+        break;
+
+    case VMXNET3_CMD_GET_DID_HI:
+        VMW_CBPRN("Set: Get upper part of device ID");
+        break;
+
     default:
         VMW_CBPRN("Received unknown command: %" PRIx64, cmd);
         break;
@@ -1683,6 +1691,14 @@ static uint64_t vmxnet3_get_command_status(VMXNET3State *s)
         ret = VMXNET3_DISABLE_ADAPTIVE_RING;
         break;
 
+    case VMXNET3_CMD_GET_DID_LO:
+        ret = PCI_DEVICE_ID_VMWARE_VMXNET3;
+        break;
+
+    case VMXNET3_CMD_GET_DID_HI:
+        ret = VMXNET3_DEVICE_REVISION;
+        break;
+
     default:
         VMW_WRPRN("Received request for unknown command: %x", s->last_command);
         ret = -1;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH v2 3/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DEV_EXTRA_INFO
  2015-12-22  6:18 [Qemu-devel] [PATCH v2 0/4] correct some register return values for vxmnet3 Miao Yan
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 1/4] net/vmxnet3: return 1 on device activation failure Miao Yan
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 2/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DID_* command Miao Yan
@ 2015-12-22  6:18 ` Miao Yan
  2015-12-22 20:51   ` Shmulik Ladkani
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 4/4] net/vmxnet3: return 0 on unknown command Miao Yan
  3 siblings, 1 reply; 11+ messages in thread
From: Miao Yan @ 2015-12-22  6:18 UTC (permalink / raw)
  To: jasowang, dmitry, qemu-devel

VMXNET3_CMD_GET_DEV_EXTRA_INFO should return 0 for emulation
mode

This behavior can be observed by the following steps:

1) run a Linux distro on esxi server
2) modify vmxnet3 Linux driver to read the register:

  VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DEV_EXTRA_INFO);
  ret =  VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
  pr_info("vmxnet3 dev_info: 0x%x\n", ret);

The kernel log will have some like the following message:

  [ 7005.111170] vmxnet3 dev_info: 0x0

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
---
Changes in v2: 
 - update vmxnet3_handle_command not to print error when issuing these commands

 hw/net/vmxnet3.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index cddbf6d..b8bc360 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -1648,6 +1648,10 @@ static void vmxnet3_handle_command(VMXNET3State *s, uint64_t cmd)
         VMW_CBPRN("Set: Get upper part of device ID");
         break;
 
+    case VMXNET3_CMD_GET_DEV_EXTRA_INFO:
+        VMW_CBPRN("Set: Get device extra info");
+        break;
+
     default:
         VMW_CBPRN("Received unknown command: %" PRIx64, cmd);
         break;
@@ -1667,6 +1671,7 @@ static uint64_t vmxnet3_get_command_status(VMXNET3State *s)
     case VMXNET3_CMD_RESET_DEV:
     case VMXNET3_CMD_QUIESCE_DEV:
     case VMXNET3_CMD_GET_QUEUE_STATUS:
+    case VMXNET3_CMD_GET_DEV_EXTRA_INFO:
         ret = 0;
         break;
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH v2 4/4] net/vmxnet3: return 0 on unknown command
  2015-12-22  6:18 [Qemu-devel] [PATCH v2 0/4] correct some register return values for vxmnet3 Miao Yan
                   ` (2 preceding siblings ...)
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 3/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DEV_EXTRA_INFO Miao Yan
@ 2015-12-22  6:18 ` Miao Yan
  3 siblings, 0 replies; 11+ messages in thread
From: Miao Yan @ 2015-12-22  6:18 UTC (permalink / raw)
  To: jasowang, dmitry, qemu-devel

Return 0 on unknown command, this is what esxi behaves.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
---
 hw/net/vmxnet3.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index b8bc360..a429405 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -1706,7 +1706,7 @@ static uint64_t vmxnet3_get_command_status(VMXNET3State *s)
 
     default:
         VMW_WRPRN("Received request for unknown command: %x", s->last_command);
-        ret = -1;
+        ret = 0;
         break;
     }
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH v2 1/4] net/vmxnet3: return 1 on device activation failure
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 1/4] net/vmxnet3: return 1 on device activation failure Miao Yan
@ 2015-12-22 20:41   ` Shmulik Ladkani
  2015-12-22 21:13     ` Shmulik Ladkani
  0 siblings, 1 reply; 11+ messages in thread
From: Shmulik Ladkani @ 2015-12-22 20:41 UTC (permalink / raw)
  To: Miao Yan; +Cc: dmitry, jasowang, qemu-devel

Hi,

On Mon, 21 Dec 2015 22:18:21 -0800 Miao Yan <yanmiaobest@gmail.com> wrote:
> When reading device status, 0 means device is successfully
> activated and 1 means error.
> 
> This behavior can be observed by the following steps:
> 
> 1) run a Linux distro on esxi server
> 2) modify vmxnet3 Linux driver to give it an invalid
>    address to 'adapter->shared_pa' which is the
>    shared memory for guest/host communication
> 
> This will trigger device activation failure and kernel
> log will have the following message:
> 
>    [ 7138.403256] vmxnet3 0000:03:00.0 eth1: Failed to activate dev: error 1

Could it be that various other error codes might be returned from ESXi
for a VMXNET3_CMD_ACTIVATE_DEV read, depending on device condition?

Regards,
Shmulik

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH v2 2/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DID_* command
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 2/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DID_* command Miao Yan
@ 2015-12-22 20:49   ` Shmulik Ladkani
  2015-12-23  3:02     ` Miao Yan
  2015-12-22 21:17   ` Shmulik Ladkani
  1 sibling, 1 reply; 11+ messages in thread
From: Shmulik Ladkani @ 2015-12-22 20:49 UTC (permalink / raw)
  To: Miao Yan; +Cc: dmitry, jasowang, qemu-devel

Hi,

On Mon, 21 Dec 2015 22:18:22 -0800 Miao Yan <yanmiaobest@gmail.com> wrote:
> VMXNET3_CMD_GET_DID_LO should return PCI ID of the device
> and VMXNET3_CMD_GET_DID_HI should return vmxnet3 revision ID.
> 
> This behavior can be observed by the following steps:
> 
> 1) run a Linux distro on esxi server
> 2) modify vmxnet3 Linux driver to read DID_HI and DID_LO:
> 
>   VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DID_LO);
>   lo =  VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
> 
>   VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DID_HI);
>   high =  VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
>   pr_info("vmxnet3 DID lo: 0x%x, high: 0x%x\n", lo, high);
> 
> The kernel log will have something like the following message:
> 
>   [ 7005.111170] vmxnet3 DID lo: 0x7b0, high: 0x1

[...]

> +    case VMXNET3_CMD_GET_DID_HI:
> +        ret = VMXNET3_DEVICE_REVISION;
> +        break;
> +

Do we know whether VMXNET3_DEVICE_REVISION needs to be returned, or
should it be VMXNET3_DEVICE_VERSION instead?

I see both are currently defined as 1, but I assume this could
potentially be changed in the future.

How can we tell what's the right semantics for VMXNET3_CMD_GET_DID_HI?

Regards,
Shmulik

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH v2 3/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DEV_EXTRA_INFO
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 3/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DEV_EXTRA_INFO Miao Yan
@ 2015-12-22 20:51   ` Shmulik Ladkani
  0 siblings, 0 replies; 11+ messages in thread
From: Shmulik Ladkani @ 2015-12-22 20:51 UTC (permalink / raw)
  To: Miao Yan; +Cc: dmitry, jasowang, qemu-devel

Hi,

On Mon, 21 Dec 2015 22:18:23 -0800 Miao Yan <yanmiaobest@gmail.com> wrote:
> VMXNET3_CMD_GET_DEV_EXTRA_INFO should return 0 for emulation
> mode
> 
> This behavior can be observed by the following steps:
> 
> 1) run a Linux distro on esxi server
> 2) modify vmxnet3 Linux driver to read the register:
> 
>   VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DEV_EXTRA_INFO);
>   ret =  VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
>   pr_info("vmxnet3 dev_info: 0x%x\n", ret);
> 
> The kernel log will have some like the following message:
> 
>   [ 7005.111170] vmxnet3 dev_info: 0x0
> 
> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>

Reviewed-by: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH v2 1/4] net/vmxnet3: return 1 on device activation failure
  2015-12-22 20:41   ` Shmulik Ladkani
@ 2015-12-22 21:13     ` Shmulik Ladkani
  0 siblings, 0 replies; 11+ messages in thread
From: Shmulik Ladkani @ 2015-12-22 21:13 UTC (permalink / raw)
  To: Miao Yan; +Cc: dmitry, jasowang, qemu-devel

On Tue, 22 Dec 2015 22:41:34 +0200 Shmulik Ladkani <shmulik.ladkani@ravellosystems.com> wrote:
> Could it be that various other error codes might be returned from ESXi
> for a VMXNET3_CMD_ACTIVATE_DEV read, depending on device condition?

Thinking this over, the commit takes us one step into a finer device
implementation, and we can always fine-tune it in the future.

Reviewed-by: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH v2 2/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DID_* command
  2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 2/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DID_* command Miao Yan
  2015-12-22 20:49   ` Shmulik Ladkani
@ 2015-12-22 21:17   ` Shmulik Ladkani
  1 sibling, 0 replies; 11+ messages in thread
From: Shmulik Ladkani @ 2015-12-22 21:17 UTC (permalink / raw)
  To: Miao Yan; +Cc: dmitry, jasowang, qemu-devel

On Mon, 21 Dec 2015 22:18:22 -0800 Miao Yan <yanmiaobest@gmail.com> wrote:
> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>

Reviewed-by: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH v2 2/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DID_* command
  2015-12-22 20:49   ` Shmulik Ladkani
@ 2015-12-23  3:02     ` Miao Yan
  0 siblings, 0 replies; 11+ messages in thread
From: Miao Yan @ 2015-12-23  3:02 UTC (permalink / raw)
  To: Shmulik Ladkani; +Cc: Dmitry Fleytman, Jason Wang, QEMU

2015-12-23 4:49 GMT+08:00 Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>:
> Hi,
>
> On Mon, 21 Dec 2015 22:18:22 -0800 Miao Yan <yanmiaobest@gmail.com> wrote:
>> VMXNET3_CMD_GET_DID_LO should return PCI ID of the device
>> and VMXNET3_CMD_GET_DID_HI should return vmxnet3 revision ID.
>>
>> This behavior can be observed by the following steps:
>>
>> 1) run a Linux distro on esxi server
>> 2) modify vmxnet3 Linux driver to read DID_HI and DID_LO:
>>
>>   VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DID_LO);
>>   lo =  VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
>>
>>   VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DID_HI);
>>   high =  VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
>>   pr_info("vmxnet3 DID lo: 0x%x, high: 0x%x\n", lo, high);
>>
>> The kernel log will have something like the following message:
>>
>>   [ 7005.111170] vmxnet3 DID lo: 0x7b0, high: 0x1
>
> [...]
>
>> +    case VMXNET3_CMD_GET_DID_HI:
>> +        ret = VMXNET3_DEVICE_REVISION;
>> +        break;
>> +
>
> Do we know whether VMXNET3_DEVICE_REVISION needs to be returned, or
> should it be VMXNET3_DEVICE_VERSION instead?

VMXNET3_DEVICE_VERSION is only used as return value of reading
UPT version register, maybe it's better to rename it to
VMXNET3_UPT_REVERSION.

>
> I see both are currently defined as 1, but I assume this could
> potentially be changed in the future.
>
> How can we tell what's the right semantics for VMXNET3_CMD_GET_DID_HI?

By inspecting what esxi does. It always returns 1 for VMXNET3_CMD_GET_DID_HI.
So maybe we should stick it to 1.

>
> Regards,
> Shmulik

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2015-12-23  3:02 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-22  6:18 [Qemu-devel] [PATCH v2 0/4] correct some register return values for vxmnet3 Miao Yan
2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 1/4] net/vmxnet3: return 1 on device activation failure Miao Yan
2015-12-22 20:41   ` Shmulik Ladkani
2015-12-22 21:13     ` Shmulik Ladkani
2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 2/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DID_* command Miao Yan
2015-12-22 20:49   ` Shmulik Ladkani
2015-12-23  3:02     ` Miao Yan
2015-12-22 21:17   ` Shmulik Ladkani
2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 3/4] net/vmxnet3: return correct value for VMXNET3_CMD_GET_DEV_EXTRA_INFO Miao Yan
2015-12-22 20:51   ` Shmulik Ladkani
2015-12-22  6:18 ` [Qemu-devel] [PATCH v2 4/4] net/vmxnet3: return 0 on unknown command Miao Yan

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).