qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: liu ping fan <qemulist@gmail.com>
Cc: Jan Kiszka <jan.kiszka@siemens.com>,
	Marcelo Tosatti <mtosatti@redhat.com>,
	qemu-devel@nongnu.org, Anthony Liguori <anthony@codemonkey.ws>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH V3 08/11] qom: introduce reclaimer to release obj in async
Date: Thu, 13 Sep 2012 11:45:27 +0300	[thread overview]
Message-ID: <50519D27.4090109@redhat.com> (raw)
In-Reply-To: <CAJnKYQ=A+uycaMM2G9VSoHZ+15s7NUm-4+4g37qzzO0V5SNT=A@mail.gmail.com>

On 09/13/2012 09:54 AM, liu ping fan wrote:
> On Tue, Sep 11, 2012 at 5:37 PM, Avi Kivity <avi@redhat.com> wrote:
>> On 09/11/2012 12:32 PM, liu ping fan wrote:
>>> On Tue, Sep 11, 2012 at 4:32 PM, Avi Kivity <avi@redhat.com> wrote:
>>>> On 09/11/2012 10:51 AM, Liu Ping Fan wrote:
>>>>> From: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
>>>>>
>>>>> DeviceState will be protected by refcnt from disappearing during
>>>>> dispatching. But when refcnt comes down to zero, DeviceState may
>>>>> be still in use by iohandler, timer etc in main loop, we just delay
>>>>> its free untill no reader.
>>>>>
>>>>
>>>> How can this be?  We elevate the refcount while dispatching I/O.  If we
>>>> have similar problems with the timer, we need to employ a similar solution.
>>>>
>>> Yes, at the next step, plan to covert iohandler, timer etc to use
>>> refcount as memory. Here just a temp solution.
>>
>> I prefer not to ever introduce it.
>>
>> What we can do is introduce a sub-region for e1000's mmio that will take
>> only the device lock, and let original region use the old dispatch path
>> (and also take the device lock).  As we thread the various subsystems
>> e1000 uses, we can expand the sub-region until it covers all of e1000's
>> functions, then fold it back into the main region.
>>
> Introducing new sub-region for e1000  seems no help to resolve this
> issue. It can not tell whether main-loop still use it or not.

What is "it" here? (actually two of them).

> I think the key point is that original code SYNC eliminate all the
> readers of DeviceState at acpi_piix_eject_slot() by
> dev->unit()/exit(), so each subsystem will no access it in future.
> But now, we can delete the DeviceState async.

But deleting happens when we are guaranteed to have no I/O dispatch.

> Currently, we can just use e1000->unmap() to detach itself from each
> subsystem(Not implemented in this series patches for timer,...) to
> achieve the goal, because their readers are still under the protection
> of big lock, but when they are out of big lock, we need extra effort
> like memory system.

I see what you mean.  So you defer the deletion to a context where the
big lock is held.

But this solves nothing.  The device model accesses the network stack
and timer subsystem without the big lock held.  So you either need to
thread those two subsystems, or take the big lock in the I/O handlers.
If you do that, you can also take the big lock in the destructor.  If we
make the big lock a recursive lock, then the destructor can be invoked
in any context.

To summarize, I propose:
- drop the reclaimer
- make the bql recursive
- take the bql in the e1000 destructor
- take the bql in the e1000 I/O handlers when it accesses the timer or
network subsystems
(rest for a bit)
- thread the timer subsystem
- drop bql from around timer accesses
- thread the network subsystem
- drop bql from e1000 I/O handlers and destructor

does this work?

-- 
error compiling committee.c: too many arguments to function

  reply	other threads:[~2012-09-13  8:45 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-11  7:51 [Qemu-devel] [PATCH V3 0/10] prepare unplug out of protection of global lock Liu Ping Fan
2012-09-11  7:51 ` [Qemu-devel] [PATCH V3 01/11] atomic: introduce atomic operations Liu Ping Fan
2012-09-11  8:04   ` Avi Kivity
2012-09-13  6:54     ` liu ping fan
2012-09-13  8:14       ` Avi Kivity
2012-09-13  8:19         ` Paolo Bonzini
2012-09-13  8:23           ` Avi Kivity
2012-09-13  8:29             ` Paolo Bonzini
2012-09-13  8:45           ` liu ping fan
2012-09-19 13:16         ` Jamie Lokier
2012-09-19 13:32       ` Jamie Lokier
2012-09-19 14:12         ` Peter Maydell
2012-09-19 15:53           ` Jamie Lokier
2012-09-11  8:15   ` Peter Maydell
2012-09-13  6:53     ` liu ping fan
2012-09-11  7:51 ` [Qemu-devel] [PATCH V3 02/11] qom: apply atomic on object's refcount Liu Ping Fan
2012-09-11  7:51 ` [Qemu-devel] [PATCH V3 03/11] hotplug: introduce qdev_unplug_complete() to remove device from views Liu Ping Fan
2012-09-11  7:51 ` [Qemu-devel] [PATCH V3 04/11] pci: remove pci device from mem view when unplug Liu Ping Fan
2012-09-11  7:51 ` [Qemu-devel] [PATCH V3 05/11] memory: introduce ref, unref interface for MemoryRegionOps Liu Ping Fan
2012-09-11  8:08   ` Avi Kivity
2012-09-11  7:51 ` [Qemu-devel] [PATCH V3 06/11] memory: make mmio dispatch able to be out of biglock Liu Ping Fan
2012-09-11  8:25   ` Avi Kivity
2012-09-11  8:47   ` Avi Kivity
2012-09-11  7:51 ` [Qemu-devel] [PATCH V3 07/11] memory: implement e1000's MemoryRegionOps ref/unref Liu Ping Fan
2012-09-11  8:37   ` Avi Kivity
2012-09-11  7:51 ` [Qemu-devel] [PATCH V3 08/11] qom: introduce reclaimer to release obj in async Liu Ping Fan
2012-09-11  8:32   ` Avi Kivity
2012-09-11  9:32     ` liu ping fan
2012-09-11  9:37       ` Avi Kivity
2012-09-13  6:54         ` liu ping fan
2012-09-13  8:45           ` Avi Kivity [this message]
2012-09-13  9:59             ` liu ping fan
2012-09-13 10:09               ` Avi Kivity
2012-09-11  7:51 ` [Qemu-devel] [PATCH V3 09/11] vcpu: make QemuThread as tls to store thread-self info Liu Ping Fan
2012-09-11  7:51 ` [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap Liu Ping Fan
2012-09-11  8:35   ` Avi Kivity
2012-09-11  9:44     ` liu ping fan
2012-09-11  9:54       ` Avi Kivity
2012-09-11 10:04         ` Jan Kiszka
2012-09-11 11:03           ` Avi Kivity
2012-09-11 11:08             ` Jan Kiszka
2012-09-11 12:20               ` Avi Kivity
2012-09-11 12:25                 ` Jan Kiszka
2012-09-11 12:30                   ` Avi Kivity
2012-09-11 12:35                     ` Jan Kiszka
2012-09-11 12:39                       ` Avi Kivity
2012-09-19  4:25                         ` Peter Crosthwaite
2012-09-19  4:32                           ` Edgar E. Iglesias
2012-09-19  4:40                             ` Peter Crosthwaite
2012-09-19  7:55                               ` Avi Kivity
2012-09-19 11:46                                 ` Edgar E. Iglesias
2012-09-19 12:12                                   ` Avi Kivity
2012-09-19 12:17                                     ` Edgar E. Iglesias
2012-09-19 13:01                                     ` Igor Mitsyanko
2012-09-19 13:03                                       ` Avi Kivity
2012-09-19  7:57                               ` Jan Kiszka
2012-09-19 13:07                                 ` Igor Mitsyanko
2012-09-11  9:57       ` Jan Kiszka
2012-09-11 12:24         ` Avi Kivity
2012-09-11 12:41           ` Avi Kivity
2012-09-11 14:54             ` Marcelo Tosatti
2012-09-13  6:55               ` liu ping fan
2012-09-13  6:55             ` liu ping fan
2012-09-13  8:19               ` Avi Kivity
2012-09-17  2:24                 ` liu ping fan
2012-09-19  8:01                   ` Avi Kivity
2012-09-19  8:36                     ` liu ping fan
2012-09-19  9:05                       ` Avi Kivity
2012-09-20  7:51                         ` liu ping fan
2012-09-20  9:15                           ` Avi Kivity
2012-09-21  7:27                             ` liu ping fan
2012-09-11  7:51 ` [Qemu-devel] [PATCH V3 11/11] vcpu: push mmio dispatcher out of big lock Liu Ping Fan

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=50519D27.4090109@redhat.com \
    --to=avi@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=jan.kiszka@siemens.com \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.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).