All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: peter.crosthwaite@xilinx.com, qemu-devel@nongnu.org, afaerber@suse.de
Subject: Re: [Qemu-devel] [PATCH 0/4] qom: Replace "automatic arrayification"
Date: Fri, 14 Nov 2014 15:21:38 +0100	[thread overview]
Message-ID: <87a93t3lsd.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <5464C29D.6090706@redhat.com> (Paolo Bonzini's message of "Thu, 13 Nov 2014 15:39:25 +0100")

Paolo Bonzini <pbonzini@redhat.com> writes:

> On 13/11/2014 15:34, Markus Armbruster wrote:
>> -    ... "bla" ...
>> +    char *name = object_gen_new_property_name(obj, "bla");
>> +    ... name ...
>> +    g_free(name);
>> 
>> Not quite as mechanical, in particular finding the obj to pass to
>> object_gen_new_property_name().
>> 
>> Correct?
>
> Yes (except that the obj is just qdev_get_machine()).

Ah, of course.

Let me summarize.  "Automatic arrayification" currently has two kinds of
users: qdev properties and memory regions.

qdev properties can easily use object_gen_new_property_name() instead,
as shown in PATCH 3/4.

So can memory regions [PATCH 2/4], but only because we clumsily arrayify
all of them, by appending "[*]" in memory_region_init().

Some day, we may want to arrayify only the ones that actually need it,
by appending "[*]" right to their names instead of appending it behind
the scenes to all memory region names.

This would involve touching the untouchables: non-qdevified devices.
But the changes should be limited to string literals.

With my series, you'd have to graft in object_gen_new_property_name()
and the matching g_free() instead.  You called that "just too ugly".

Here's how to avoid it, and confine the ugliness to
memory_region_init():

Change memory_region_init() from

        char *escaped_name = memory_region_escape_name(name);
        char *propname = object_gen_new_property_name(owner, escaped_name);
        object_property_add_child(owner, propname, OBJECT(mr), &error_abort);
        object_unref(OBJECT(mr));
        g_free(propname);
        g_free(escaped_name);

to something like

        if (name ends with "[*]") {
            stem = g_strndup(name, strlen(name) -3);
            escaped = memory_region_escape_name(stem);
            propname = object_gen_new_property_name(owner, escaped_name);
            g_free(escaped);
            g_free(stem);
        else
            propname = memory_region_escape_name(name);
        object_property_add_child(owner, propname, OBJECT(mr), &error_abort);
        object_unref(OBJECT(mr));
        g_free(propname);

and append "[*]" to the names of regions that need "arrayification".

That way, the bad magic is limited to just memory_region_init() rather
than all of QOM, and it's needed "only" as long as the problem with
non-qdevified users remains.

>> [*] What we want to do is drag them along until the Second Coming, when
>> Jesus will set everything right, which naturally includes qdevifying all
>> the old crap nobody wants to touch.
>
> Or maybe not.  Look at the bottom:
> https://upload.wikimedia.org/wikipedia/commons/a/a5/Michelangelo%2C_Giudizio_Universale_02.jpg

Oww!  Well played, sir!

  reply	other threads:[~2014-11-14 14:21 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-12 17:08 [Qemu-devel] [PATCH 0/4] qom: Replace "automatic arrayification" Markus Armbruster
2014-11-12 17:08 ` [Qemu-devel] [PATCH 1/4] qom: New object_gen_new_property_name() Markus Armbruster
2014-11-12 17:08 ` [Qemu-devel] [PATCH 2/4] memory: Use object_gen_new_property_name() instead of "arrayification" Markus Armbruster
2014-11-12 17:08 ` [Qemu-devel] [PATCH 3/4] qdev: " Markus Armbruster
2014-11-12 17:08 ` [Qemu-devel] [PATCH 4/4] Revert "qom: Add automatic arrayification to object_property_add()" Markus Armbruster
2014-11-12 17:14   ` Andreas Färber
2014-11-12 22:25     ` Paolo Bonzini
2014-11-12 22:47       ` Peter Maydell
2014-11-13 10:05         ` Paolo Bonzini
2014-11-13 10:50           ` Peter Maydell
2014-11-12 17:13 ` [Qemu-devel] [PATCH 0/4] qom: Replace "automatic arrayification" Paolo Bonzini
2014-11-13  8:08   ` Markus Armbruster
2014-11-13 10:08     ` Paolo Bonzini
2014-11-13 14:34       ` Markus Armbruster
2014-11-13 14:39         ` Paolo Bonzini
2014-11-14 14:21           ` Markus Armbruster [this message]
2014-11-14 14:25             ` Paolo Bonzini
2014-11-14 15:10               ` Markus Armbruster

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=87a93t3lsd.fsf@blackfin.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=afaerber@suse.de \
    --cc=pbonzini@redhat.com \
    --cc=peter.crosthwaite@xilinx.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.