
On 01/29/2018 12:53 PM, Ján Tomko wrote:
On Mon, Jan 29, 2018 at 12:43:14PM -0500, John Ferlan wrote:
On 01/29/2018 04:18 AM, Ján Tomko wrote:
On Fri, Jan 05, 2018 at 06:47:25PM -0500, John Ferlan wrote:
Move the checks that various attributes are not set on any controller other than SCSI controller using virtio-scsi model into the common controller validate checks.
Need to also add a qemuDomainResetSCSIControllerModel call in order to ensure we get the "right" SCSI model if it's not set by default since it wouldn't be set during post parse processing.
So we should set it in post-parse processing once instead of adding this second call.
Jan
This is a point you raised in v3:
https://www.redhat.com/archives/libvir-list/2017-December/msg00293.html
to which I responded:
https://www.redhat.com/archives/libvir-list/2017-December/msg00304.html
and even carried into my v4:
https://www.redhat.com/archives/libvir-list/2018-January/msg00103.html
So, now that we're here again - the question becomes, do we really want post parse processing to set a default model if it's not set?
Yes, the used model should be recorded in the XML.
Should that be part of this series? Should it be a followup? Should be something done before this one and then rework this one?
Ideally a prerequisite. If that's too much yak shaving for you, at least add a comment to the validate function saying picking a default model really does not belong in a validation function.
As usual a seemingly simple request sends me down the rabbit hole. Setting a default controller model in qemuDomainControllerDefPostParse would require passing @qemuCaps - simple enough until one checks out the caller qemuDomainDeviceDefPostParse which notes: " /* Note that qemuCaps may be NULL when this function is called. This * function shall not fail in that case. It will be re-run on VM startup * with the capabilities populated. */ " <sigh> So, would adding the following to patch 1 for the Reset function suffice? /** qemuDomainResetSCSIControllerModel * @def: Domain def * @qemuCaps: QEMU capabilities * @model: model to reset "default" to - either by @def or @qemuCaps * * Typically qemuDomainControllerDefPostParse would be used to set * a default controller model; however, qemuDomainDeviceDefPostParse * can be passed a NULL @qemuCaps, so setting the default model may * not be possible. Thus we're left to calling this Reset function * from numerous locations that need to get the default model for * the controller when one is not defined. * * Returns 0 on success, -1 on failure */ I can also add a note in qemuDomainDeviceDefValidateController that restates this for this patch, e.g.: if (controller->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) { /* Resetting the default should have been handled during post parse * parse callback; however, at that time we could not guarantee that * qemuCaps was valid, so we're left doing this now */ if ((qemuDomainResetSCSIControllerModel(def, qemuCaps, &model)) < 0) return -1; }
Are there drawbacks to doing so? One drawback that I kept coming back to is that LSI becomes the default qemu model instead of VIRTIO-SCSI (it's the order of setting *model in qemuDomainSetSCSIControllerModel).
When was virtio-scsi the default model? Now we'd just record the picked default in XML.
virtio-scsi was never the default AFAIK... That wasn't the point/problem. The problem is described in the next paragraph.
Jan
That drawback caused problems when setting the model if we create a new SCSI controller during something like hotplug because we had already filled the current controller or when adding one VIRTIO-SCSI controller but more than 7 disks (or hostdevs) that end up using that controller. Although I think that's at least partially resolved by other changes I've already made.
I looked it up, this is handled by c52dbafe and 07beea6c John