qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: kwolf@redhat.com, stefanha@redhat.com, qemu-devel@nongnu.org,
	anthony@codemonkey.ws
Subject: Re: [Qemu-devel] [RFC PATCH 0/8] Remove stub mon-protocol-event for block
Date: Mon, 23 Sep 2013 15:06:51 -0400	[thread overview]
Message-ID: <5240914B.6080301@linux.vnet.ibm.com> (raw)
In-Reply-To: <5237BE02.5030001@linux.vnet.ibm.com>

于 2013/9/16 22:27, Wenchao Xia 写道:
> 于 2013/9/16 18:02, Paolo Bonzini 写道:
>> Il 16/09/2013 06:59, Wenchao Xia ha scritto:
>>> 于 2013/9/12 17:31, Paolo Bonzini 写道:
>>>> Il 12/09/2013 11:15, Wenchao Xia ha scritto:
>>>>> This series will remove the usage of symbols of mon-protocol-event in
>>>>> qemu-img, qemu-nbd and qemu-io, in short remove the connetion for 
>>>>> block
>>>>> layer.
>>>>>
>>>>> Background:
>>>>>     I am tring to decouple block layer code with other unnnessary
>>>>> components,
>>>>> and in ./stub there many symbols that qemu-img linked as fake
>>>>> implemtion.
>>>>> As a first step, I am decouple monitor with block layer code, this is
>>>>> the
>>>>> first part of it.
>>>>>     There are still other stub symbols for monitor, which will be
>>>>> solved later.
>>>>> It seems error handlering is also link with those symbols, and will
>>>>> adjust
>>>>> that.
>>>>>
>>>>> Wenchao Xia (8):
>>>>>     1 block: use type MonitorEvent directly
>>>>>     2 block: do not include monitor.h in block.c
>>>>>     3 qapi: move MonitorEvent define
>>>>>     4 qapi: rename MonitorEvent to QEvent
>>>>>     5 block: add a callback layer for common functions
>>>>>     6 block: replace monitor_protocol_event() with callback
>>>>>     7 block: do not include monitor.h
>>>>>     7 stubs: remove mon-protocol-event.o in stub obj
>>>>>
>>>>>    block.c                    |   22 ++++++++++++++++++----
>>>>>    block/qcow2-refcount.c     |    4 +++-
>>>>>    blockjob.c                 |   10 ++++++++--
>>>>>    include/block/block.h      |   12 ++++++++++++
>>>>>    include/block/block_int.h  |    3 +--
>>>>>    include/monitor/monitor.h  |   40
>>>>> ++--------------------------------------
>>>>>    include/qapi/qmp/qevent.h  |   41
>>>>> +++++++++++++++++++++++++++++++++++++++++
>>>>>    include/qapi/qmp/types.h   |    1 +
>>>>>    monitor.c                  |   12 ++++++------
>>>>>    stubs/Makefile.objs        |    1 -
>>>>>    stubs/mon-protocol-event.c |    2 +-
>>>>>    tests/Makefile             |    3 ++-
>>>>>    ui/vnc.c                   |    2 +-
>>>>>    vl.c                       |    4 ++++
>>>>>    14 files changed, 100 insertions(+), 57 deletions(-)
>>>>>    create mode 100644 include/qapi/qmp/qevent.h
>>>>>
>>>> Patches 1-4 look good.  I'm not sure of the advantage of the last 
>>>> four,
>>>> however.  The ugly part of monitor_protocol_event is not really the
>>>> stub, but the dependency on QObject.
>>> I think replacing QObject with QAPI types is another issue we could
>>> improve. The last
>>> foure patches tries decouple monitor code with block layer code from
>>> build time.
>>> The files in ./stubs is needed since some symbols are needed in some
>>> program which don't
>>> need it really, and I think, that tips the code are not organized very
>>> well in .c file level.
>> That may very well be the case.  However, picking a function, replacing
>> it with a function pointer, and throwing it into a struct, will not
>> improve the structure at the .c file level very much.
>>
>> It does not abstract anything.  In order to provide a useful
>> abstractions, the questions to answer are:
>>
>> 1) If a library wanted to provide a callback for events, would the
>> current design (using QObject) be the right thing to do?  (If you change
>> the design, it might happen that the stub goes away naturally and that
>   I think it would not goes away even QAPI is used. The ./stubs is a 
> symbol
> issue at link time, so whenever block layer use a symbol belong to 
> monitor component,
> the stubs would be needed.
>   In my opinion, there could be two steps: remove this symbol in block 
> code,
> replace it with QAPI in monitor code.
>
>> the work in these patches does nothing except obscure the history).
>>
>> 2) Are there other services that the block layer could desire from the
>> monitor?
>>
>   I have a draft makefile which link the core block code, it
> shows that only event and error printf(include mon_is_qmp) service
> are used by block code now. Those symbols basically are listed in 
> ./stubs.
>
>> 3) Could any tool (e.g. qemu-io) desire to implement
>> monitor_protocol_event?  If so, what other services could it provide
>> that the QEMU monitor provides?
>>
>   It seems tools do not need event service now, they link with stubs.
>
>>> After removing ./stubs, the code will be more clear
>> If done in the right way, yes.  If done in the wrong way, the code will
>> be less clear.
>>
>> Paolo
>>
>
>

Hi Paolo,
   This series tries to find a mechanism, which can avoid link with unused
symbols. Assume QObject was replaced with other design, such as QAPI, it
will still call monitor funcions to emit the event, so it will still require
resolving that function in linking of qemu-img.
   Do you have some suggestion for it?

  reply	other threads:[~2013-09-23  7:08 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-12  9:15 [Qemu-devel] [RFC PATCH 0/8] Remove stub mon-protocol-event for block Wenchao Xia
2013-09-12  9:15 ` [Qemu-devel] [RFC PATCH 1/8] block: use type MonitorEvent directly Wenchao Xia
2013-09-23 15:53   ` Eric Blake
2013-09-12  9:15 ` [Qemu-devel] [RFC PATCH 2/8] block: do not include monitor.h in block.c Wenchao Xia
2013-09-23 15:53   ` Eric Blake
2013-09-12  9:15 ` [Qemu-devel] [RFC PATCH 3/8] qapi: move MonitorEvent define Wenchao Xia
2013-09-23 15:55   ` Eric Blake
2013-09-24 14:05     ` Wenchao Xia
2013-09-12  9:15 ` [Qemu-devel] [RFC PATCH 4/8] qapi: rename MonitorEvent to QEvent Wenchao Xia
2013-09-23 15:56   ` Eric Blake
2013-09-12  9:15 ` [Qemu-devel] [RFC PATCH 5/8] block: add a callback layer for common functions Wenchao Xia
2013-09-12  9:15 ` [Qemu-devel] [RFC PATCH 6/8] block: replace monitor_protocol_event() with callback Wenchao Xia
2013-09-12  9:15 ` [Qemu-devel] [RFC PATCH 7/8] block: do not include monitor.h Wenchao Xia
2013-09-12  9:15 ` [Qemu-devel] [RFC PATCH 8/8] stubs: remove mon-protocol-event.o in stub obj Wenchao Xia
2013-09-12  9:31 ` [Qemu-devel] [RFC PATCH 0/8] Remove stub mon-protocol-event for block Paolo Bonzini
2013-09-12 12:08   ` Kevin Wolf
2013-09-12 14:43     ` Paolo Bonzini
2013-09-12 12:44   ` Markus Armbruster
2013-09-16  4:59   ` Wenchao Xia
2013-09-16 10:02     ` Paolo Bonzini
2013-09-17  2:27       ` Wenchao Xia
2013-09-23 19:06         ` Wenchao Xia [this message]
2013-09-23  7:52           ` Paolo Bonzini

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=5240914B.6080301@linux.vnet.ibm.com \
    --to=xiawenc@linux.vnet.ibm.com \
    --cc=anthony@codemonkey.ws \
    --cc=kwolf@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.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).