All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Thomas Huth <thuth@redhat.com>
Cc: "Zhao Liu" <zhao1.liu@intel.com>,
	"Xiaoyao Li" <xiaoyao.li@intel.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Daniel P. Berrange" <berrange@redhat.com>,
	qemu-devel@nongnu.org,
	"Richard Henderson" <richard.henderson@linaro.org>,
	kvm@vger.kernel.org, "Gerd Hoffmann" <kraxel@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Laurent Vivier" <lvivier@redhat.com>,
	"Jiaxun Yang" <jiaxun.yang@flygoat.com>,
	"Yi Liu" <yi.l.liu@intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Alistair Francis" <alistair.francis@wdc.com>,
	"Daniel Henrique Barboza" <dbarboza@ventanamicro.com>,
	"Marcelo Tosatti" <mtosatti@redhat.com>,
	qemu-riscv@nongnu.org, "Weiwei Li" <liwei1518@gmail.com>,
	"Amit Shah" <amit@kernel.org>,
	"Yanan Wang" <wangyanan55@huawei.com>,
	"Helge Deller" <deller@gmx.de>,
	"Palmer Dabbelt" <palmer@dabbelt.com>,
	"Ani Sinha" <anisinha@redhat.com>,
	"Igor Mammedov" <imammedo@redhat.com>,
	"Fabiano Rosas" <farosas@suse.de>,
	"Liu Zhiwei" <zhiwei_liu@linux.alibaba.com>,
	"Clément Mathieu--Drif" <clement.mathieu--drif@eviden.com>,
	qemu-arm@nongnu.org,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Huacai Chen" <chenhuacai@kernel.org>,
	"Jason Wang" <jasowang@redhat.com>
Subject: Re: How to mark internal properties
Date: Mon, 12 May 2025 08:34:46 +0200	[thread overview]
Message-ID: <87selauyk9.fsf@pond.sub.org> (raw)
In-Reply-To: <2f526570-7ab0-479c-967c-b3f95f9f19e3@redhat.com> (Thomas Huth's message of "Fri, 9 May 2025 12:04:19 +0200")

Thomas Huth <thuth@redhat.com> writes:

> On 09/05/2025 09.32, Zhao Liu wrote:
>> On Fri, May 09, 2025 at 02:49:27PM +0800, Xiaoyao Li wrote:
>>> Date: Fri, 9 May 2025 14:49:27 +0800
>>> From: Xiaoyao Li <xiaoyao.li@intel.com>
>>> Subject: Re: [PATCH v4 12/27] target/i386/cpu: Remove
>>>   CPUX86State::enable_cpuid_0xb field
>>>
>>> On 5/8/2025 9:35 PM, Philippe Mathieu-Daudé wrote:
>>>> The CPUX86State::enable_cpuid_0xb boolean was only disabled
>>>> for the pc-q35-2.6 and pc-i440fx-2.6 machines, which got
>>>> removed. Being now always %true, we can remove it and simplify
>>>> cpu_x86_cpuid().
>>>>
>>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>>> ---
>>>> target/i386/cpu.h | 3 ---
>>>> target/i386/cpu.c | 6 ------
>>>> 2 files changed, 9 deletions(-)
>>>>
>>>> diff --git a/target/i386/cpu.h b/target/i386/cpu.h
>>>> index 0db70a70439..06817a31cf9 100644
>>>> --- a/target/i386/cpu.h
>>>> +++ b/target/i386/cpu.h
>>>> @@ -2241,9 +2241,6 @@ struct ArchCPU {
>>>>       */
>>>>      bool legacy_multi_node;
>>>> -    /* Compatibility bits for old machine types: */
>>>> -    bool enable_cpuid_0xb;
>>>> -
>>>>      /* Enable auto level-increase for all CPUID leaves */
>>>>      bool full_cpuid_auto_level;
>>>> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
>>>> index 49179f35812..6fe37f71b1e 100644
>>>> --- a/target/i386/cpu.c
>>>> +++ b/target/i386/cpu.c
>>>> @@ -6982,11 +6982,6 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
>>>>          break;
>>>>      case 0xB:
>>>>            /* Extended Topology Enumeration Leaf */
>>>> -        if (!cpu->enable_cpuid_0xb) {
>>>> -            *eax = *ebx = *ecx = *edx = 0;
>>>> -            break;
>>>> -        }
>>>> -
>>>>          *ecx = count & 0xff;
>>>>          *edx = cpu->apic_id;
>>>> @@ -8828,7 +8823,6 @@ static const Property x86_cpu_properties[] = {
>>>>      DEFINE_PROP_UINT64("ucode-rev", X86CPU, ucode_rev, 0),
>>>>      DEFINE_PROP_BOOL("full-cpuid-auto-level", X86CPU, full_cpuid_auto_level, true),
>>>>      DEFINE_PROP_STRING("hv-vendor-id", X86CPU, hyperv_vendor),
>>>> -    DEFINE_PROP_BOOL("cpuid-0xb", X86CPU, enable_cpuid_0xb, true),
>>>
>>> It's deprecating the "cpuid-0xb" property.
>>>
>>> I think we need go with the standard process to deprecate it.
>> 
>> Thanks! I got your point.
>> 
>> Though this property is introduced for compatibility, as its comment
>> said "Compatibility bits for old machine types", it is also useful for
>> somer users.
>
> Thanks for your clarifications, Zhao! But I think this shows again the 
> problem that we have hit a couple of times in the past already: Properties 
> are currently used for both, config knobs for the users and internal 
> switches for configuration of the machine. We lack a proper way to say "this 
> property is usable for the user" and "this property is meant for internal 
> configuration only".

Correct.

Exposing properties meant for internal use at the external interface
inevitably leads to (uncertainty about) external use.

> I wonder whether we could maybe come up with a naming scheme to better 
> distinguish the two sets, e.g. by using a prefix similar to the "x-" prefix 
> for experimental properties? We could e.g. say that all properties starting 
> with a "q-" are meant for QEMU-internal configuration only or something 
> similar (and maybe even hide those from the default help output when running 
> "-device xyz,help" ?)? Anybody any opinions or better ideas on this?

This papers over our inability / unwillingness to isolate the external
interface from internal detail.

The proper solution is to make the internal properties inaccessible at
the external interface.  This requires declaring properties' intent.
Which strikes me as a very good idea.

A naming convention is a simple, stupid way to do that.  There are
drawbacks, as experience with the "x-" prefix has shown:

* Flipping a flag bit involves changing the name.  Tolerable when all
  uses are internal, compatibility break when not.  Not a problem when
  the bit governs external access, of course.

* Name capture: consider InputBarrier properties x-origin, y-origin.
  Oops.

* If we have multiple flag bits, their prefixes can accumulate.  This
  gets ugly and confusing real quick.  Not an issue when at most one of
  the flags can be set, as is the case for "unstable" and "internal
  use".

* QAPI reserves "q_" for the generator's use.  Since "q-" would get
  mapped to "q_" in C, we risk name clashes.

For what it's worth, QAPI abandoned the "x-" naming convention (commit
a3c45b3e629 (qapi: New special feature flag "unstable"), commit message
appended for your convenience).  Developers are free to use "x-" to help
guide human users, but the feature flag is the sole source of thruth.



[...]



commit a3c45b3e62962f99338716b1347cfb0d427cea44
Author: Markus Armbruster <armbru@redhat.com>
Date:   Thu Oct 28 12:25:12 2021 +0200

    qapi: New special feature flag "unstable"
    
    By convention, names starting with "x-" are experimental.  The parts
    of external interfaces so named may be withdrawn or changed
    incompatibly in future releases.
    
    The naming convention makes unstable interfaces easy to recognize.
    Promoting something from experimental to stable involves a name
    change.  Client code needs to be updated.  Occasionally bothersome.
    
    Worse, the convention is not universally observed:
    
    * QOM type "input-barrier" has properties "x-origin", "y-origin".
      Looks accidental, but it's ABI since 4.2.
    
    * QOM types "memory-backend-file", "memory-backend-memfd",
      "memory-backend-ram", and "memory-backend-epc" have a property
      "x-use-canonical-path-for-ramblock-id" that is documented to be
      stable despite its name.
    
    We could document these exceptions, but documentation helps only
    humans.  We want to recognize "unstable" in code, like "deprecated".
    
    So support recognizing it the same way: introduce new special feature
    flag "unstable".  It will be treated specially by the QAPI generator,
    like the existing feature flag "deprecated", and unlike regular
    feature flags.
    
    This commit updates documentation and prepares tests.  The next commit
    updates the QAPI schema.  The remaining patches update the QAPI
    generator and wire up -compat policy checking.
    
    Management applications can then use query-qmp-schema and -compat to
    manage or guard against use of unstable interfaces the same way as for
    deprecated interfaces.
    
    docs/devel/qapi-code-gen.txt no longer mandates the naming convention.
    Using it anyway might help writers of programs that aren't
    full-fledged management applications.  Not using it can save us
    bothersome renames.  We'll see how that shakes out.
    
    Signed-off-by: Markus Armbruster <armbru@redhat.com>
    Reviewed-by: Juan Quintela <quintela@redhat.com>
    Reviewed-by: John Snow <jsnow@redhat.com>
    Message-Id: <20211028102520.747396-2-armbru@redhat.com>


  parent reply	other threads:[~2025-05-12  6:34 UTC|newest]

Thread overview: 123+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-08 13:35 [PATCH v4 00/27] hw/i386/pc: Remove deprecated 2.6 and 2.7 PC machines Philippe Mathieu-Daudé
2025-05-08 13:35 ` [PATCH v4 01/27] hw/i386/pc: Remove deprecated pc-q35-2.6 and pc-i440fx-2.6 machines Philippe Mathieu-Daudé
2025-05-09 15:23   ` Igor Mammedov
2025-06-02  6:13     ` Thomas Huth
2025-06-02  8:53       ` Philippe Mathieu-Daudé
2025-06-02 10:26         ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 02/27] hw/i386/pc: Remove PCMachineClass::legacy_cpu_hotplug field Philippe Mathieu-Daudé
2025-05-09 15:18   ` Igor Mammedov
2025-10-31 14:28   ` [PATCH v5] " Igor Mammedov
2025-10-31 23:27     ` BALATON Zoltan
2025-11-03  9:42       ` Igor Mammedov
2025-11-03 15:10         ` Zhao Liu
2025-11-26 15:37     ` Zhao Liu
2025-12-01  9:23       ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 03/27] hw/nvram/fw_cfg: Rename fw_cfg_init_mem() with '_nodma' suffix Philippe Mathieu-Daudé
2025-05-09  2:49   ` Zhao Liu
2025-05-09 15:33   ` Igor Mammedov
2025-05-15  8:04   ` Xiaoyao Li
2025-05-08 13:35 ` [PATCH v4 04/27] hw/mips/loongson3_virt: Prefer using fw_cfg_init_mem_nodma() Philippe Mathieu-Daudé
2025-05-09  2:49   ` Zhao Liu
2025-05-09 15:35   ` Igor Mammedov
2025-05-15  8:05   ` Xiaoyao Li
2025-05-08 13:35 ` [PATCH v4 05/27] hw/nvram/fw_cfg: Factor fw_cfg_init_mem_internal() out Philippe Mathieu-Daudé
2025-05-09  2:50   ` Zhao Liu
2025-05-09 15:38   ` Igor Mammedov
2025-05-15  8:08   ` Xiaoyao Li
2025-12-02 14:37   ` Zhao Liu
2025-05-08 13:35 ` [PATCH v4 06/27] hw/nvram/fw_cfg: Rename fw_cfg_init_mem_wide() -> fw_cfg_init_mem_dma() Philippe Mathieu-Daudé
2025-05-09  2:52   ` Zhao Liu
2025-05-09  6:51   ` Zhao Liu
2025-05-09 15:39     ` Igor Mammedov
2025-05-15  8:17   ` Xiaoyao Li
2025-05-08 13:35 ` [PATCH v4 07/27] hw/i386/x86: Remove X86MachineClass::fwcfg_dma_enabled field Philippe Mathieu-Daudé
2025-05-09  3:23   ` Zhao Liu
2025-05-09 15:41   ` Igor Mammedov
2025-05-09 15:44     ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 08/27] hw/i386/pc: Remove multiboot.bin Philippe Mathieu-Daudé
2025-05-09  6:11   ` Zhao Liu
2025-05-08 13:35 ` [PATCH v4 09/27] hw/nvram/fw_cfg: Remove fw_cfg_io_properties::dma_enabled Philippe Mathieu-Daudé
2025-05-09  6:37   ` Zhao Liu
2025-05-09 16:00   ` Igor Mammedov
2025-11-27 14:28   ` Zhao Liu
2025-05-08 13:35 ` [PATCH v4 10/27] hw/i386/pc: Remove linuxboot.bin Philippe Mathieu-Daudé
2025-05-09  6:53   ` Zhao Liu
2025-05-09 16:04   ` Igor Mammedov
2025-11-27 14:34     ` Zhao Liu
2025-05-08 13:35 ` [PATCH v4 11/27] hw/i386/pc: Remove pc_compat_2_6[] array Philippe Mathieu-Daudé
2025-05-09  6:54   ` Zhao Liu
2025-05-12  8:19   ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 12/27] target/i386/cpu: Remove CPUX86State::enable_cpuid_0xb field Philippe Mathieu-Daudé
2025-05-09  6:49   ` Xiaoyao Li
2025-05-09  7:32     ` Zhao Liu
2025-05-09 10:04       ` How to mark internal properties (was: Re: [PATCH v4 12/27] target/i386/cpu: Remove CPUX86State::enable_cpuid_0xb field) Thomas Huth
2025-05-12  2:45         ` Zhao Liu
2025-05-12  6:34         ` Markus Armbruster [this message]
2025-05-12  8:46         ` Peter Maydell
2025-05-12  9:06           ` Daniel P. Berrangé
2025-05-12 10:54             ` How to mark internal properties Markus Armbruster
2025-05-12 13:33               ` Xiaoyao Li
2025-05-12 14:41                 ` BALATON Zoltan
2025-05-13  8:16                   ` Thomas Huth
2025-05-12 14:48               ` Mark Cave-Ayland
2025-05-13  8:18                 ` Markus Armbruster
2025-05-13  9:26                   ` BALATON Zoltan
2025-05-13  9:32                     ` Daniel P. Berrangé
2025-05-13 10:38                       ` Markus Armbruster
2025-05-13 11:01                     ` Markus Armbruster
2025-05-26  8:58                     ` Markus Armbruster
2025-05-12 15:22               ` Igor Mammedov
2025-05-13  8:08                 ` Markus Armbruster
2025-05-12 15:00       ` [PATCH v4 12/27] target/i386/cpu: Remove CPUX86State::enable_cpuid_0xb field Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 13/27] target/i386/cpu: Remove CPUX86State::fill_mtrr_mask field Philippe Mathieu-Daudé
2025-05-09  9:30   ` Zhao Liu
2025-05-12 15:24   ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 14/27] hw/intc/apic: Remove APICCommonState::legacy_instance_id field Philippe Mathieu-Daudé
2025-05-09  9:30   ` Zhao Liu
2025-05-13  8:34   ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 15/27] hw/core/machine: Remove hw_compat_2_6[] array Philippe Mathieu-Daudé
2025-05-09  9:31   ` Zhao Liu
2025-05-13  8:36   ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 16/27] hw/virtio/virtio-mmio: Remove VirtIOMMIOProxy::format_transport_address field Philippe Mathieu-Daudé
2025-05-09  9:33   ` Zhao Liu
2025-05-08 13:35 ` [PATCH v4 17/27] hw/i386/pc: Remove deprecated pc-q35-2.7 and pc-i440fx-2.7 machines Philippe Mathieu-Daudé
2025-05-09  9:33   ` Zhao Liu
2025-05-13  8:53   ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 18/27] hw/i386/pc: Remove pc_compat_2_7[] array Philippe Mathieu-Daudé
2025-05-09  9:35   ` Zhao Liu
2025-05-08 13:35 ` [PATCH v4 19/27] target/i386/cpu: Remove CPUX86State::full_cpuid_auto_level field Philippe Mathieu-Daudé
2025-05-09  9:37   ` Zhao Liu
2025-05-13 11:02   ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 20/27] target/i386/cpu: Remove CPUX86State::enable_l3_cache field Philippe Mathieu-Daudé
2025-05-09  9:11   ` Zhao Liu
2025-05-13 11:14     ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 21/27] hw/audio/pcspk: Remove PCSpkState::migrate field Philippe Mathieu-Daudé
2025-05-09  9:38   ` Zhao Liu
2025-05-13  9:02   ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 22/27] hw/core/machine: Remove hw_compat_2_7[] array Philippe Mathieu-Daudé
2025-05-09  9:38   ` Zhao Liu
2025-05-08 13:35 ` [PATCH v4 23/27] hw/i386/intel_iommu: Remove IntelIOMMUState::buggy_eim field Philippe Mathieu-Daudé
2025-05-09  9:41   ` Zhao Liu
2025-05-13  9:16   ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 24/27] hw/intc/ioapic: Remove IOAPICCommonState::version field Philippe Mathieu-Daudé
2025-05-09 10:32   ` Zhao Liu
2025-05-13 10:28   ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 25/27] hw/virtio/virtio-pci: Remove VirtIOPCIProxy::ignore_backend_features field Philippe Mathieu-Daudé
2025-05-09  9:43   ` Zhao Liu
2025-05-13 10:30   ` Igor Mammedov
2025-05-08 13:35 ` [PATCH v4 26/27] hw/char/virtio-serial: Do not expose the 'emergency-write' property Philippe Mathieu-Daudé
2025-05-09  9:13   ` Mark Cave-Ayland
2025-05-09  9:46   ` Zhao Liu
2025-05-08 13:35 ` [PATCH v4 27/27] hw/virtio/virtio-pci: Remove VIRTIO_PCI_FLAG_PAGE_PER_VQ definition Philippe Mathieu-Daudé
2025-05-09 10:19   ` Zhao Liu
2025-05-13 10:48   ` Igor Mammedov
2025-05-13 11:23 ` [PATCH v4 00/27] hw/i386/pc: Remove deprecated 2.6 and 2.7 PC machines Igor Mammedov
2025-05-30 11:35   ` Michael S. Tsirkin
2025-05-30 12:08     ` Peter Krempa
2025-05-30 12:50       ` Jiri Denemark
2025-06-17  6:54       ` Zhao Liu
2025-10-31 10:33 ` Igor Mammedov
2025-10-31 10:51   ` Philippe Mathieu-Daudé
2025-10-31 14:14     ` Zhao Liu
2025-10-31 14:23       ` Igor Mammedov
2025-11-03 15:05         ` Zhao Liu

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=87selauyk9.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=alistair.francis@wdc.com \
    --cc=amit@kernel.org \
    --cc=anisinha@redhat.com \
    --cc=berrange@redhat.com \
    --cc=chenhuacai@kernel.org \
    --cc=clement.mathieu--drif@eviden.com \
    --cc=dbarboza@ventanamicro.com \
    --cc=deller@gmx.de \
    --cc=eduardo@habkost.net \
    --cc=farosas@suse.de \
    --cc=imammedo@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=jiaxun.yang@flygoat.com \
    --cc=kraxel@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=liwei1518@gmail.com \
    --cc=lvivier@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=palmer@dabbelt.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-riscv@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    --cc=wangyanan55@huawei.com \
    --cc=xiaoyao.li@intel.com \
    --cc=yi.l.liu@intel.com \
    --cc=zhao1.liu@intel.com \
    --cc=zhiwei_liu@linux.alibaba.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 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.