From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793286741; b=K7DkmG8/ZfSbUvNtVrivHRMo33bs4wtw4xHVGCi4kG54E3a1IzRNkO8oCUYDIzzDOADi kHY/rxUpwpw+4R7F58JzKizX3rNSL6rBW0ymK/f5s5rFcEV8FF0ap4LvVXuGUBLCswDLJ CTsOel/fSWtIbeJP4hzuwwGLiF29bagXSbOeDp6tT8sIB4P/3VADLlxeU6JT+Xp/6sy48 CFVEvwXoNHaK/CHTU55tlhtmxNpHN8fNBHvBbKkAITYVrCtRAujv9ntbvk3df2PLvVrkh IF5zbQP81TRkaUmSZAnzKNjnsGmxhwS8vlgYddVhZVBtF4MtjMY3Y4iLAuqKaDSbbGQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793286741; h=DMARC-Filter:DKIM-Signature:Received:X-MC-Unique: X-Mimecast-MFC-AGG-ID:Received:Received:Date:From:To:Cc:Subject: Message-ID:Reply-To:References:MIME-Version:Content-Type: Content-Disposition:Content-Transfer-Encoding:In-Reply-To:User-Agent: X-Scanned-By; bh=sy6RcJq7kWnzNPatcCz5vMju7T26X8KtMwEXCbitl90=; b=igph783FHPm4rlymmzH5EN1xskO4XNSuwsb/tUC1Sv8T0SxIQFTF5L1Le6hoNZaKQ7R+ xDdEq7dfFv6ZOFtax8PIiN1MHagYGH/KKRlPP2aoQfAfNwoeumZwz3W1gvbLvM6u3tHt3 EVEggsEQrNUblHJD9WkTEUNQM7/XKmwmAKA/xqTjjwHaiTmon9mGwnYn2Ka6Tp3hnZ0ay AO735ghESBxv2B/WgvoaThBBKc3jDu4lFgnuQrBeWw8DouMiv66K6126KbUwkO1kcNTim q+eIdLWUi0JRcJnKtZ9Va7jsSz/dF2/2mYEXnoOY+UQoWWFF7d1QdcdyDXF8UCVzy9Q== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=Xm56vkH9; arc=none smtp.remote-ip=170.10.129.124 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A94B7606A31D for ; Thu, 29 Oct 2026 15:12:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org A94B7606A31D Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=Xm56vkH9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1793286739; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sy6RcJq7kWnzNPatcCz5vMju7T26X8KtMwEXCbitl90=; b=Xm56vkH9ATMJMygfPZSg+6GK3F6dQs7YPsYUO98Xep2m+NG+NICizkX3sSRQ6aFxum1tFS 2r5qzweZVvntR9s1vJ+llUI80AT507RpAf8Wam+f6LXJQP6VwleF7JeNpCHZ3Pdfknrstd mi7fwEqZHv79SYuWjlc8dXp0RGQs8wo= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-647-lR4E_uxDPxGRis0Bj7u-cg-1; Thu, 29 Oct 2026 11:12:15 -0400 X-MC-Unique: lR4E_uxDPxGRis0Bj7u-cg-1 X-Mimecast-MFC-AGG-ID: lR4E_uxDPxGRis0Bj7u-cg_1793286731 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 5CA951956043; Thu, 29 Oct 2026 15:12:09 +0000 (UTC) Received: from redhat.com (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 11F131955F08; Thu, 29 Oct 2026 15:11:43 +0000 (UTC) Date: Thu, 29 Oct 2026 15:11:41 +0000 From: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= To: Markus Armbruster Cc: =?utf-8?Q?Marc-Andr=C3=A9?= Lureau , qemu-devel@nongnu.org, Michael Roth , John Snow , Peter Maydell , Mauro Carvalho Chehab , Pierrick Bouvier , Paolo Bonzini , Kostiantyn Kostiuk , Eric Blake , David Hildenbrand , Igor Mammedov , "Edgar E. Iglesias" , Jason Wang , Marcelo Tosatti , kvm@vger.kernel.org, Alberto Garcia , Kevin Wolf , Hanna Reitz , Philippe =?utf-8?Q?Mathieu-Daud=C3=A9?= , Zhao Liu , Jonathan Cameron , Junjie Cao , Anisa Su , Elena Ufimtseva , Jagannathan Raman , John Levon , Thanos Makatos , =?utf-8?Q?C=C3=A9dric?= Le Goater , Cornelia Huck , Eric Farman , Matthew Rosato , Richard Henderson , Ilya Leoshkevich , qemu-block@nongnu.org, linux-cxl@vger.kernel.org, qemu-s390x@nongnu.org, "Michael S. Tsirkin" , Sergio Lopez , qemu-arm@nongnu.org, Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , Chao Liu , qemu-riscv@nongnu.org, Song Gao <17746591750@163.com>, Bibo Mao , Xianglai Li , Jiaxun Yang , Pedro Barbuda , Mohamed Mediouni , Nicholas Piggin , Harsh Prateek Bora , Amit Machhiwal , qemu-ppc@nongnu.org, Zhang Chen , Li Zhijian , Alistair Francis , Alexander Graf , "Gonglei (Arei)" , zhenwei pi , Ani Sinha , Luc Michel , =?utf-8?Q?C=C3=A9dric?= Le Goater , Jamin Lin , Kane Chen , Samuel Tardieu , "Denis V. Lunev" , FangSheng Huang , Tyrone Ting , Hao Wu , Keith Busch , Klaus Jensen , Jesper Devantier , Aditya Gupta , Glenn Miles , Conor Dooley , Sebastian Huber , Halil Pasic , Christian Borntraeger , Jason Herne , Titus Rwantare , Stefano Stabellini , Anthony PERARD , Peter Xu , Chinmay Rath , Hendrik Brueckner , xen-devel@lists.xenproject.org, Roman Bolshakov , Phil Dennis-Jordan , Fam Zheng , Farhan Ali , Alex Williamson , Tao Tang , Stefan Berger , Fabiano Rosas , Mark Cave-Ayland , Artyom Tarasenko , Yoshinori Sato , Jiri Pirko , Eric Auger , Laurent Vivier Subject: Re: [PATCH v7 54/65] qdev: adjust PciDevfn declared type Message-ID: Reply-To: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= References: <20261020-qom-qapi-v7-0-431a86b02b58@redhat.com> <20261020-qom-qapi-v7-54-431a86b02b58@redhat.com> <87zevz5h4k.fsf@pond.sub.org> <87o6ce47rr.fsf@pond.sub.org> X-Mailing-List: kvm@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <87o6ce47rr.fsf@pond.sub.org> User-Agent: Mutt/2.4.2 (2026-08-30) X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 On Wed, Oct 28, 2026 at 08:13:44AM +0100, Markus Armbruster wrote: > Daniel P. Berrangé writes: > > > On Tue, Oct 27, 2026 at 03:54:03PM +0100, Markus Armbruster wrote: > >> Marc-André Lureau writes: > >> > >> > Hi > >> > > >> > On Fri, Oct 23, 2026 at 2:04 PM Daniel P. Berrangé wrote: > >> >> > >> >> On Tue, Oct 20, 2026 at 02:46:11PM +0400, Marc-André Lureau wrote: > >> >> > PciDevfn is a bit special, since it accepts integer and string as > >> >> > setter, but only output integer as getter. > > > > snip > > > >> > But I agree we > >> > could do better. > >> > > >> > There are multiple options. We could keep declaring the property as > >> > str instead. In this case, the getter should probably return a string > >> > for consistency and correctness. This might surprise some existing > >> > users though. > >> > >> I.e. ditch numeric suppport for numeric addresses, right? > >> > >> Incompatible change. Do we care? > >> > >> If we don't, we should be honest about it and mark qom-get unstable. > >> > >> > We could introduce new properties like `devfn-str` and `devfn-int` > >> > that alias the same value. > >> > >> Compatibility break. If breaking compatibility is okay, I'd rather use > >> the opportunity to get rid of cleverness, and go with your first option. > >> > >> > We could also introduce a new structured QAPI type. > >> > >> What kind of type do you have in mind? > > > > IMHO the root cause design flaw here was to overload 'addr' as a > > way to set both the slot number and function number, as using > > one property for two pieces of data is a well known anti-pattern > > we caution against. > > > > IOW, we should have had 'slot' and 'function' as separate properties > > from the start. > > Fair. > > Our modeling of PCI is old and weird. > > What we call "pci-device" isn't a device, it's a function, where > function 0 sort of stands in for the device. Mmm, yes, interesting way of looking at it. > Its "addr" isn't a PCI address, it's the address of the function on its > PCI bus, i.e. the tail of a PCI address. > > > From a CLI POV, we could easily change 'addr' to mean only the slot > > number, since it is always parsed in string format without the > > magic (slot << 4) | function encoding. Then add a 'function' prop > > In CLI, HMP and QMP string (not integer), value "5" is shorthand for > "5.0", and means device 5, function 0. > > We could deprecate the .FN part in favor of a new property "function". > > Once we drop support for .FN from "addr", its name becomes even more > misleading than it always was. Yes. > > The challenge is the impact on QMP with strict typing, as ideally > > int format would soley represent the slot number, but today the > > int format is encoded (slot << 4) | function. So anyone relying > > on int format in QMP would silently have a semantic change if we > > altered what 'addr' means. > > That's a no-go. > > > Deprecating 'addr' entirely and adding brand new 'slot' and > > 'function' properties would be a significant disruption to > > a syntax which has been documented for years (decades). > > What about this: > > * No change to PCIDevice member @devfn: encodes slot and function as an > integer. > > * New "pci-device" properties "slot" and "function". "slot" sets just > the slot bits of @devfn, and "function" sets just the function bits. > Both default to zero, so specifying just "slot" gives you > PCI_DEVFN(slot, 0), which makes sense. > > * Deprecate "pci-device" property "addr" for QMP. We can keep it around > for longer than the required grace period if that helps. > > * Declare it legacy for CLI and HMP, with no intent to remove it. We can't easily keep it in CLI/HMP, while removing from QMP can we ? As long as the property exists on the PCIDevice object, it will be accessible everywhere. Perhaps keep it relatively simple and merely deprecate the string syntax of 'addr' in QMP. That's the place where it is really ugy. Force QMP over to only the integer syntax for 'addr', and leave CLI/HMP accepting the (optionally dotted) string syntax. Mgmt apps like libvirt will have to adapt. Tedious, but actually quite simple compared to most deprecations, as the integer syntax can already be used with all historical QEMU versions in QMP that mgmt apps ever need to deal with. They can unconditionally change their code to int syntax and not worry about old/new QEMUs at all. With regards, Daniel -- |: https://berrange.com ~~ https://hachyderm.io/@berrange :| |: https://libvirt.org ~~ https://entangle-photo.org :| |: https://pixelfed.art/berrange ~~ https://fstop138.berrange.com :|