qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: RockCui-oc <RockCui-oc@zhaoxin.com>
To: Max Reitz <mreitz@redhat.com>, John Snow <jsnow@redhat.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Cc: Peter Maydell <peter.maydell@linaro.org>,
	"Cobe Chen\(BJ-RD\)" <CobeChen@zhaoxin.com>
Subject: 答复: [PATCH] ide:do nothing for identify cmd if no any device attached
Date: Wed, 9 Sep 2020 03:13:41 +0000	[thread overview]
Message-ID: <4ee746f7bb364ed491d2b00a9b810183@zhaoxin.com> (raw)
In-Reply-To: <0347935f-5235-3c61-07cc-fb4435ec45d1@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 3851 bytes --]

Hi John & Max,


  1.  Follow my Log,there are 10000 read 0x1x7 ops. On my Intel I5 platform, if down the frequency to 1.2G, you can see a obviously lag during WINDOWS LOGO animation playing.
  2.  We must supply a CD-ROM to our VDI users.
  3.  In ide_ioport_read() :

---------------------------------------------------------------------------------------------------
case 7:
       if ((!bus->ifs[0].blk && !bus->ifs[1].blk) || (s != bus->ifs && !s->blk)) {
            ret = 0;
       } else {
            ret = s->status;
       }
----------------------------------------------------------------------------------------------------
            so I follow this.

Rock



________________________________
发件人: Max Reitz <mreitz@redhat.com>
发送时间: 2020年9月3日 18:40
收件人: John Snow; RockCui-oc; qemu-devel@nongnu.org
抄送: Cobe Chen(BJ-RD); Peter Maydell
主题: Re: [PATCH] ide:do nothing for identify cmd if no any device attached

On 02.09.20 20:02, John Snow wrote:
> (CC Max for block backend model confusion, see below)
>
> On 8/16/20 11:38 PM, zhaoxin\RockCuioc wrote:
>> This patch is for avoiding win7 IDE driver polling 0x1f7 when
>> no any device attached. During Win7 VM boot procedure, if use virtio for
>> disk and there is no any device be attached on hda & hdb, the win7 IDE
>> driver
>> would poll 0x1f7 for a while. This action may be stop windows LOGO
>> atomic for
>> a while too on a poor performance CPU.
>>
>
> A few questions:
>
> (1) How slow is the probing?
>
> (2) If there are no devices attached, why don't you remove the IDE
> controller so that Windows doesn't have to probe it?
>
>> Signed-off-by: zhaoxin\RockCuioc <RockCui-oc@zhaoxin.com>
>> ---
>>   hw/ide/core.c | 5 +++--
>>   1 file changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/ide/core.c b/hw/ide/core.c
>> index d997a78e47..26d86f4b40 100644
>> --- a/hw/ide/core.c
>> +++ b/hw/ide/core.c
>> @@ -2073,8 +2073,9 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
>>       s = idebus_active_if(bus);
>>       trace_ide_exec_cmd(bus, s, val);
>>   -    /* ignore commands to non existent slave */
>> -    if (s != bus->ifs && !s->blk) {

(Was the first one basically meant to be “s != &bus->ifs[0]”, i.e. to
check that this doesn’t go to the ma^W primary?  Not too obvious.)

>> +    /* ignore commands if no any device exist or non existent slave */
>> +    if ((!bus->ifs[0].blk && !bus->ifs[1].blk) ||
>> +        (s != bus->ifs && !s->blk)) {

(Maybe this could be improved here)

>>           return;
>>       }
>>
>
> I think it's the case that Empty CD-ROM drives will have an anonymous
> block backend representing the empty drive,

(As far as I remember,) yes.

(ide_dev_initfn() ensures all CD drives have one, even if it’s empty.)

> so I suppose this is maybe
> fine?
>
> I suppose the idea is that with no drives on the bus that it's fine to
> ignore the register writes, as there are no devices to record those writes.
>
> (But then, why did we ever only check device1? ...)
>
> Maybe before the block-backend split we used to have to check to see if
> we had attached media or not, but I think nowadays we should always have
> a blk pointer if we have a device model intended to be operating at this
> address.

The check in ide_dev_initfn() looks that way to me.

> So I guess it can be simplified ...?
>
> if (!s->blk) {
>     return;
> }

Probably.  Although there’s a difference, of course, namely if you have
only a secondary device and try to access the primary, this simplified
version will be a no-op, whereas the more complicated version in this
patch would still go on.  I don’t know how real hardware would handle
that case.  Is it even possible to have just a secondary with no primary?

Max


[-- Attachment #2: Type: text/html, Size: 6277 bytes --]

  reply	other threads:[~2020-09-09  3:21 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-17  3:38 [PATCH] ide:do nothing for identify cmd if no any device attached zhaoxin\RockCuioc
2020-08-17  4:15 ` no-reply
2020-09-02 18:02 ` John Snow
2020-09-03 10:40   ` Max Reitz
2020-09-09  3:13     ` RockCui-oc [this message]
2020-10-02 19:37     ` John Snow
2020-11-12  7:29       ` 答复: " RockCui-oc

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=4ee746f7bb364ed491d2b00a9b810183@zhaoxin.com \
    --to=rockcui-oc@zhaoxin.com \
    --cc=CobeChen@zhaoxin.com \
    --cc=jsnow@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /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 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).