All of lore.kernel.org
 help / color / mirror / Atom feed
From: Liran Alon <liran.alon@oracle.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: ehabkost@redhat.com, qemu-devel@nongnu.org,
	Nikita Leshenko <nikita.leshchenko@oracle.com>,
	pbonzini@redhat.com, rth@twiddle.net
Subject: Re: [PATCH 05/14] hw/i386/vmport: Report VMX type in CMD_GETVERSION
Date: Tue, 10 Mar 2020 18:39:33 +0200	[thread overview]
Message-ID: <8c856884-a5f1-d522-b0be-9edee6623ca4@oracle.com> (raw)
In-Reply-To: <20200310104713-mutt-send-email-mst@kernel.org>


On 10/03/2020 17:10, Michael S. Tsirkin wrote:
> On Tue, Mar 10, 2020 at 04:46:19PM +0200, Liran Alon wrote:
>> On 10/03/2020 16:08, Michael S. Tsirkin wrote:
>>> On Tue, Mar 10, 2020 at 03:35:25PM +0200, Liran Alon wrote:
>>>> On 10/03/2020 14:53, Michael S. Tsirkin wrote:
>>>>> On Tue, Mar 10, 2020 at 02:43:51PM +0200, Liran Alon wrote:
>>>>>> On 10/03/2020 14:35, Michael S. Tsirkin wrote:
>>>>>>> On Tue, Mar 10, 2020 at 02:25:28PM +0200, Liran Alon wrote:
>>>>>>>> On 10/03/2020 14:14, Michael S. Tsirkin wrote:
>>>>>>>>> On Tue, Mar 10, 2020 at 01:54:02AM +0200, Liran Alon wrote:
>>> But in this case, the names are confusing,
>>> violate our coding style, I could go on.
>> The only thing that violates the coding style is "VMX_Type" enum type name
>> instead of "VMXType".
> All enum names too. Supposed to be CamelCase. Again VMX is

Looking at other enums defined in QEMU, it doesn't seem that constant 
names are CamelCase. Only the enum type name.
E.g. PVSCSIRegOffset, BiosAtaTranslation and etc.

>>> No you also copy names and comments. Which might make sense in the
>>> context of the original project but seem to make no sense here.
>>> E.g. for vmware a given product is deprecated but why does QEMU care?
>> What is the harm in specifying that? It gives more context.
>>> enum values are not even listed. What is poor user supposed to do -
>>> take out a calculator to figure it out?
>> What do you mean by listed?
> So imagine: as a user, I want to set this to some reasonable value.
>
> Supposedly this is why you have the enum there in the
> 1st place right? Let's see how does all this help me:
>
> - first enum is VMX_TYPE_UNSET. Unset? I guess that's
> the default. I want to set it, make sure it's a good value.
> - next one is VMX_TYPE_EXPRESS. comment says deprecated though.
>    I will keep clear.
> - Next enum is VMX_TYPE_SCALABLE_SERVER. Hmm that says ESX.
> I guess it's good! However what's scalable server?
> There's no vmware in sight,
> brings up unrelated search results.
> Scalable server? No I need to research that.
> I guess I will just ignore all this and go by the comments.
> Okay! Wait so what is the value I need to supply to the
> property?
> Oh right I need to recall that enum values are sequential.
> So first one it says is 0. Let me count. It's 2 I guess.
>
> Okay I will try ...

The person who is expected to manipulate this property is quite advance 
to begin with...
The process described above is quite simple for such person.

>>>
>>>> I'm not sure I understand what you are
>>>> suggesting.
>>>>
>>>> -Liran
>>> Something like the below.
>>>
>>> /*
>>>    * Most guests are fine with the default.
>>>    * Some legacy guests hard-code a given type.
>>>    * See https://urldefense.com/v3/__https://github.com/vmware/open-vm-tools/blob/master/open-vm-tools/lib/include/vm_vmx_type.h__;!!GqivPVa7Brio!M9wko4CSBSs3xFA2QY7MIL_jvAxlU5aRZE1jN2hzG5jnk8rdlpYCDs2ymrkJ8GE$
>>>    * for an up-to-date list of values.
>>>    *
>>>    * Reasonable options:
>>>    * 0 - unset?
>>>    * 1 - VMware Express (deprecated)
>>>    * 2 - VMware ESX server
>>>    * 3 - VMware Workstation
>>>    * 4 - ACE 1.x (deprecated)
>>>    */
>>>
>>> DEFINE_PROP_UINT8("vm-executable-type", VMPortState, vm_executable_type, 2 /* VMware ESX server */),
>>>
>> Why is it better to specify a list of all options in a comment than an enum?
> Because that lets you use english. Look you didn't even list options.
> User's supposed to do the math in his/her head. Why is that?
Figuring out an enum value from definition is trivial. If you wish, I 
can change those to #define to make it more clear but error-prone.
> Oh because we lifted this wholesale from some other header.
That's not the reason.
>> Isn't enum invented exactly for enumerating all possible values of a field?
> No - it just assigns names to constants. If you then proceed not to use
> the names, then it's pointless.
It's not. It exactly lists all the various possible values. In contrast 
to directing the reader to a link (which may be broken in the future),
to figure out from there what should be the values. That seems more 
annoying to me as a reader.
>> Note that even in this simple case, you needed to write "VMware ESX server"
>> twice instead of referring to an enum constant. It doesn't seem more elegant
>> to me.
> I felt this bears repetition.
> But sure, you can drop it in DEFINE_PROP_UINT8 if you like.
> If you really feel you must, do:
>
> #define VM_PORT_DEFAULT_VM_EXECUTABLE 2
> near the comment.

Why not just define the entire enum then?...

This approach seems quite common for all device emulation code.
E.g. BTSTAT_HATIMEOUT in HostBusAdapterStatus, 
PVSCSI_REG_OFFSET_LAST_STS_3 in PVSCSIRegOffset, VMXNET3_CMD_UPDATE_IML 
in vmxnet3.h and etc.

>> And again, I disagree with renaming the field to "vm-executable-type"
>> instead of "vmx-type".
>>
>> -Liran
> Acronims is a bad idea in user interfaces if avoidable, or unless
> universal. Either these interfaces are needed or they aren't.
> I question their usefulness, but if they are useful they should
> have names that do not require guesswork to understand.
>
Giving new names to existing terminology that can be matched against 
existing guest code which interface with your device emulation is what 
requires guesswork.
Using names matching the guest code driver is what doesn't require 
guesswork and is more intuitive to understand.

Let's agree that I will fix coding convention issue (VMX_Type -> 
VMXType) and link to open-vm-tools but remain with the enum.
And see what other maintainers have to see about this on v2.

-Liran




  reply	other threads:[~2020-03-10 16:40 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-09 23:53 [PATCH 00/14]: hw/i386/vmport: Bug fixes and improvements Liran Alon
2020-03-09 23:53 ` [PATCH 01/14] hw/i386/vmport: Propagate IOPort read to vCPU EAX register Liran Alon
2020-03-09 23:53 ` [PATCH 02/14] hw/i386/vmport: Set EAX to -1 on failed and unsupported commands Liran Alon
2020-03-09 23:54 ` [PATCH 03/14] hw/i386/vmport: Add device properties Liran Alon
2020-03-09 23:54 ` [PATCH 04/14] hw/i386/vmport: Introduce vmx-version property Liran Alon
2020-03-10  9:32   ` Michael S. Tsirkin
2020-03-10 11:05     ` Liran Alon
2020-03-10 11:18       ` Michael S. Tsirkin
2020-03-10 11:28         ` Liran Alon
2020-03-10 11:44           ` Michael S. Tsirkin
2020-03-10 11:53             ` Liran Alon
2020-03-09 23:54 ` [PATCH 05/14] hw/i386/vmport: Report VMX type in CMD_GETVERSION Liran Alon
2020-03-10  9:20   ` Michael S. Tsirkin
2020-03-10 11:18     ` Liran Alon
2020-03-10 11:23       ` Michael S. Tsirkin
2020-03-10 11:40         ` Liran Alon
2020-03-10 11:47           ` Michael S. Tsirkin
2020-03-10 12:14   ` Michael S. Tsirkin
2020-03-10 12:25     ` Liran Alon
2020-03-10 12:35       ` Michael S. Tsirkin
2020-03-10 12:43         ` Liran Alon
2020-03-10 12:53           ` Michael S. Tsirkin
2020-03-10 13:35             ` Liran Alon
2020-03-10 14:08               ` Michael S. Tsirkin
2020-03-10 14:46                 ` Liran Alon
2020-03-10 15:10                   ` Michael S. Tsirkin
2020-03-10 16:39                     ` Liran Alon [this message]
2020-03-10 17:36                       ` Michael S. Tsirkin
2020-03-10 17:58                         ` Liran Alon
2020-03-10 21:16                   ` Michael S. Tsirkin
2020-03-10 21:34                     ` Liran Alon
2020-03-10 21:49                       ` Michael S. Tsirkin
2020-03-10 21:59                         ` Liran Alon
2020-03-10 22:04                           ` Michael S. Tsirkin
2020-03-09 23:54 ` [PATCH 06/14] hw/i386/vmport: Define enum for all commands Liran Alon
2020-03-10  9:28   ` Michael S. Tsirkin
2020-03-10 11:16     ` Liran Alon
2020-03-10 11:23       ` Michael S. Tsirkin
2020-03-10 11:37         ` Liran Alon
2020-03-10 11:46           ` Michael S. Tsirkin
2020-03-10 11:54             ` Liran Alon
2020-03-09 23:54 ` [PATCH 07/14] hw/i386/vmport: Add support for CMD_GETBIOSUUID Liran Alon
2020-03-10  9:22   ` Michael S. Tsirkin
2020-03-10 11:44     ` Liran Alon
2020-03-10 12:01       ` Michael S. Tsirkin
2020-03-10 12:37         ` Liran Alon
2020-03-10 13:01           ` Michael S. Tsirkin
2020-03-10  9:34   ` Michael S. Tsirkin
2020-03-10 11:13     ` Liran Alon
2020-03-10 11:22       ` Michael S. Tsirkin
2020-03-10 11:35         ` Liran Alon
2020-03-10 14:24         ` Liran Alon
2020-03-10 14:39           ` Michael S. Tsirkin
2020-03-10 14:56             ` Liran Alon
2020-03-09 23:54 ` [PATCH 08/14] hw/i386/vmport: Add support for CMD_GETTIME Liran Alon
2020-03-09 23:54 ` [PATCH 09/14] hw/i386/vmport: Add support for CMD_GETTIMEFULL Liran Alon
2020-03-09 23:54 ` [PATCH 10/14] hw/i386/vmport: Add support for CMD_GET_VCPU_INFO Liran Alon
2020-03-09 23:54 ` [PATCH 11/14] hw/i386/vmport: Allow x2apic without IR Liran Alon
2020-03-09 23:54 ` [PATCH 12/14] i386/cpu: Store LAPIC bus frequency in CPU structure Liran Alon
2020-03-10  9:29   ` Michael S. Tsirkin
2020-03-10 10:53     ` Liran Alon
2020-03-10 12:27       ` Michael S. Tsirkin
2020-03-10 12:29         ` Liran Alon
2020-03-09 23:54 ` [PATCH 13/14] hw/i386/vmport: Add support for CMD_GETHZ Liran Alon
2020-03-09 23:54 ` [PATCH 14/14] hw/i386/vmport: Assert vmport initialized before registering commands Liran Alon
2020-03-10  9:30   ` Michael S. Tsirkin
2020-03-10 10:57     ` Liran Alon
2020-03-10  0:13 ` [PATCH 00/14]: hw/i386/vmport: Bug fixes and improvements no-reply
2020-03-10  0:16   ` Liran Alon
2020-03-10  0:53 ` no-reply
2020-03-10  0:54 ` no-reply
2020-03-10  0:57   ` Liran Alon
2020-03-10  1:10 ` no-reply
2020-03-10  1:49 ` no-reply
2020-03-10  1:50 ` no-reply
2020-03-10  2:04 ` no-reply
2020-03-10  2:22 ` no-reply
2020-03-10  2:56 ` no-reply
2020-03-10  2:56 ` no-reply

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=8c856884-a5f1-d522-b0be-9edee6623ca4@oracle.com \
    --to=liran.alon@oracle.com \
    --cc=ehabkost@redhat.com \
    --cc=mst@redhat.com \
    --cc=nikita.leshchenko@oracle.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.