qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: Avi Kivity <avi@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Liu Ping Fan <pingfank@linux.vnet.ibm.com>,
	liu ping fan <qemulist@gmail.com>,
	Anthony Liguori <anthony@codemonkey.ws>,
	qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 10/10] qdev: fix create in place obj's life cycle problem
Date: Mon, 27 Aug 2012 19:14:24 +0200	[thread overview]
Message-ID: <503BAAF0.2020103@siemens.com> (raw)
In-Reply-To: <503BA9BC.5010207@redhat.com>

On 2012-08-27 19:09, Avi Kivity wrote:
> On 08/27/2012 12:47 AM, Jan Kiszka wrote:
>> On 2012-08-27 09:01, Paolo Bonzini wrote:
>>> Il 25/08/2012 09:42, liu ping fan ha scritto:
>>>>>>
>>>>>> I don't see why MMIO dispatch should hold the IDEBus ref rather than the
>>>>>> PCIIDEState.
>>>>>>
>>>> When transfer memory_region_init_io()  3rd para from void* opaque to
>>>> Object* obj,  the obj : opaque is not neccessary 1:1 map. For such
>>>> situation, in order to let MemoryRegionOps tell between them, we
>>>> should pass PCIIDEState->bus[0], bus[1] separately.
>>>
>>> The rule should be that the obj is the object that you want referenced,
>>> and that should be the PCIIDEState.
>>>
>>> But this is anyway moot because it only applies to objects that are
>>> converted to use unlocked dispatch.  This likely will not be the case
>>> for IDE.
>>
>> BTW, I'm pretty sure - after implementing the basics for BQL-free PIO
>> dispatching - that device objects are the wrong target for reference
>> counting. We keep memory regions in our dispatching tables (PIO
>> dispatching needs some refactoring for this), and those regions need
>> protection for BQL-free use. Devices can't pass away as long as the have
>> referenced regions, memory region deregistration services will have to
>> take care of this.
>>
>> I'm currently not using reference counting at all, I'm enforcing that
>> only BQL-protected regions can be deregistered.
> 
> That's a pretty harsh constraint.

Of course. It's a first step, not a long-term restriction. But we have
to do small steps.

> 
>> Also note that there seems to be another misconception in the
>> discussions: deregistration is not only bound to device unplug. It also
>> happens on device reconfiguration, e.g. PCI BAR (re-)mapping. Another
>> strong indicator that we should worry about individual memory regions,
>> not devices.
>>
>>
> 
> Deregistration is fine, the problem is destruction.
> 

It isn't as you access memory region states that can change after
deregistration. Devices can remove memory regions from the mapping,
alter and then reinsert them. The last to steps must not happen while
anyone is still using a reference to that region.

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
Corporate Competence Center Embedded Linux

  reply	other threads:[~2012-08-27 17:14 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-24  9:49 [Qemu-devel] [PATCH 0/10] rework on hot unplug Liu Ping Fan
2012-08-24  9:49 ` [Qemu-devel] [PATCH 01/10] qom: add, remove of link property need to ref, unref its target Liu Ping Fan
2012-08-24 14:52   ` Paolo Bonzini
2012-08-24  9:49 ` [Qemu-devel] [PATCH 02/10] qdev: change iterator callback seq Liu Ping Fan
2012-08-24  9:49 ` [Qemu-devel] [PATCH 03/10] qom: export object_property_is_child, object_property_is_link Liu Ping Fan
2012-08-24 14:51   ` Paolo Bonzini
2012-08-25  7:43     ` liu ping fan
2012-08-25  8:04   ` Blue Swirl
2012-08-24  9:49 ` [Qemu-devel] [PATCH 04/10] qdev: introduce new interface to remove composite sub-tree Liu Ping Fan
2012-08-24  9:49 ` [Qemu-devel] [PATCH 05/10] qdev: finalize of qbus, qdev will not the right place to free children Liu Ping Fan
2012-08-24 14:50   ` Paolo Bonzini
2012-08-24  9:49 ` [Qemu-devel] [PATCH 06/10] qom: expose object_property_del_child Liu Ping Fan
2012-08-24 14:44   ` Paolo Bonzini
2012-08-24  9:49 ` [Qemu-devel] [PATCH 07/10] unplug: using new intf qdev_delete_subtree in acpi_piix_eject_slot Liu Ping Fan
2012-08-24 10:24   ` Paolo Bonzini
2012-08-25  7:05     ` liu ping fan
2012-08-24  9:49 ` [Qemu-devel] [PATCH 08/10] qdev: rename qdev_unplug to qdev_unplug_req Liu Ping Fan
2012-08-24 14:48   ` Paolo Bonzini
2012-08-24  9:49 ` [Qemu-devel] [PATCH 09/10] mon: release dev's ref hold by qdev_get_peripheral Liu Ping Fan
2012-08-24  9:49 ` [Qemu-devel] [PATCH 10/10] qdev: fix create in place obj's life cycle problem Liu Ping Fan
2012-08-24 14:42   ` Paolo Bonzini
2012-08-25  7:42     ` liu ping fan
2012-08-27  7:01       ` Paolo Bonzini
2012-08-27  7:47         ` Jan Kiszka
2012-08-27  8:17           ` liu ping fan
2012-08-27  8:27             ` Jan Kiszka
2012-08-27 17:09           ` Avi Kivity
2012-08-27 17:14             ` Jan Kiszka [this message]
2012-08-27 18:09               ` Avi Kivity
2012-08-27 18:17                 ` Jan Kiszka
2012-08-27 18:20                   ` Avi Kivity
2012-08-27 18:39                     ` Jan Kiszka
2012-08-27 18:52                       ` Avi Kivity
2012-08-27 19:38                         ` Jan Kiszka
2012-08-27 20:53                           ` Avi Kivity
2012-08-28  1:01                             ` Jan Kiszka
2012-08-29 17:13                               ` Avi Kivity
2012-08-29 17:21                                 ` Jan Kiszka
2012-08-29 17:27                                   ` Avi Kivity
2012-08-29 17:41                                     ` Jan Kiszka
2012-09-03  9:09                                       ` Avi Kivity
2012-08-28  3:09                           ` liu ping fan
2012-08-28  3:38                             ` liu ping fan
2012-08-28  9:42                               ` Jan Kiszka
2012-08-28 10:05                                 ` Paolo Bonzini
2012-08-29 17:23                                 ` Avi Kivity
2012-08-29 17:30                                   ` Jan Kiszka
2012-08-29 17:40                                     ` Avi Kivity
2012-08-29 17:49                                       ` Jan Kiszka
2012-09-01  8:31                                         ` Avi Kivity
2012-09-01  8:57                                           ` Jan Kiszka
2012-09-01  9:30                                             ` Avi Kivity
2012-08-30  5:54                                       ` liu ping fan
2012-08-30  7:08                                         ` Jan Kiszka
2012-08-30  7:47                                           ` liu ping fan
2012-09-01  8:46                                           ` Avi Kivity
2012-09-03  7:44                                             ` liu ping fan
2012-09-03  8:52                                               ` Avi Kivity
2012-09-03 10:06                                                 ` liu ping fan
2012-09-03 10:16                                                   ` Avi Kivity
2012-09-04  2:33                                                     ` liu ping fan
2012-09-04  2:34                                                   ` liu ping fan
2012-09-05  8:19                                                     ` liu ping fan
2012-09-05  9:52                                                       ` Avi Kivity
2012-09-05 10:36                                                         ` Jan Kiszka
2012-09-05 10:53                                                           ` Avi Kivity
2012-09-05 11:11                                                             ` Jan Kiszka
2012-09-05 11:25                                                               ` Avi Kivity
2012-09-05 12:02                                                                 ` Jan Kiszka
2012-09-05 12:17                                                                   ` Avi Kivity
2012-08-27 13:19   ` Anthony Liguori
2012-08-27 15:02     ` Jan Kiszka
2012-08-27 15:14       ` Anthony Liguori
2012-08-27 15:26         ` Jan Kiszka
2012-08-27 16:24           ` Anthony Liguori
2012-08-27 16:59             ` Jan Kiszka
2012-08-27 18:35             ` Avi Kivity
2012-08-27 19:17               ` Anthony Liguori
2012-08-27 19:22                 ` Jan Kiszka
2012-08-27 20:58                 ` Avi Kivity
2012-08-27 21:34                   ` Paolo Bonzini
2012-08-27 18:27     ` Avi Kivity

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=503BAAF0.2020103@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=anthony@codemonkey.ws \
    --cc=avi@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=pingfank@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemulist@gmail.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 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).