From: Anthony Liguori <aliguori@us.ibm.com>
To: Alexander Graf <agraf@suse.de>
Cc: Alexey Kardashevskiy <aik@ozlabs.ru>,
qemu-ppc@nongnu.org, Paul Mackerras <paulus@samba.org>,
qemu-devel@nongnu.org, Andreas Faerber <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH 08/12] spapr-rtas: use hypercall interface and remove special vty interfaces
Date: Wed, 19 Jun 2013 16:45:40 -0500 [thread overview]
Message-ID: <87zjulg4fv.fsf@codemonkey.ws> (raw)
In-Reply-To: <F77614DE-0B99-4D55-9540-6C1D8601C901@suse.de>
Alexander Graf <agraf@suse.de> writes:
> On 19.06.2013, at 22:40, Anthony Liguori wrote:
>
>> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
>> ---
>> hw/char/spapr_vty.c | 36 ++++++++++++++++++------------------
>> hw/ppc/spapr_rtas.c | 18 ++++++++++--------
>> include/hw/ppc/spapr_vio.h | 2 --
>> 3 files changed, 28 insertions(+), 28 deletions(-)
>>
>> diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c
>> index ecc2bb5..4bac79e 100644
>> --- a/hw/char/spapr_vty.c
>> +++ b/hw/char/spapr_vty.c
>> @@ -63,7 +63,7 @@ static int vty_getchars(VIOsPAPRDevice *sdev, uint8_t *buf, int max)
>> return n;
>> }
>>
>> -void vty_putchars(VIOsPAPRDevice *sdev, uint8_t *buf, int len)
>> +static void vty_putchars(VIOsPAPRDevice *sdev, uint8_t *buf, int len)
>> {
>> VIOsPAPRVTYDevice *dev = VIO_SPAPR_VTY_DEVICE(sdev);
>>
>> @@ -86,6 +86,23 @@ static int spapr_vty_init(VIOsPAPRDevice *sdev)
>> return 0;
>> }
>>
>> +static VIOsPAPRDevice *vty_lookup(sPAPREnvironment *spapr, target_ulong reg)
>> +{
>> + VIOsPAPRDevice *sdev;
>> +
>> + sdev = spapr_vio_find_by_reg(spapr->vio_bus, reg);
>> + if (!sdev && reg == 0) {
>> + /* Hack for kernel early debug, which always specifies reg==0.
>> + * We search all VIO devices, and grab the vty with the lowest
>> + * reg. This attempts to mimic existing PowerVM behaviour
>> + * (early debug does work there, despite having no vty with
>> + * reg==0. */
>> + return spapr_vty_get_default(spapr->vio_bus);
>> + }
>> +
>> + return sdev;
>> +}
>> +
>> /* Forward declaration */
>> static target_ulong h_put_term_char(PowerPCCPU *cpu, sPAPREnvironment *spapr,
>> target_ulong opcode, target_ulong *args)
>> @@ -211,23 +228,6 @@ VIOsPAPRDevice *spapr_vty_get_default(VIOsPAPRBus *bus)
>> return selected;
>> }
>>
>> -VIOsPAPRDevice *vty_lookup(sPAPREnvironment *spapr, target_ulong reg)
>> -{
>> - VIOsPAPRDevice *sdev;
>> -
>> - sdev = spapr_vio_find_by_reg(spapr->vio_bus, reg);
>> - if (!sdev && reg == 0) {
>> - /* Hack for kernel early debug, which always specifies reg==0.
>> - * We search all VIO devices, and grab the vty with the lowest
>> - * reg. This attempts to mimic existing PowerVM behaviour
>> - * (early debug does work there, despite having no vty with
>> - * reg==0. */
>> - return spapr_vty_get_default(spapr->vio_bus);
>> - }
>> -
>> - return sdev;
>> -}
>> -
>> static void spapr_vty_register_types(void)
>> {
>> spapr_register_hypercall(H_PUT_TERM_CHAR, h_put_term_char);
>> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
>> index 5887e04..019aed5 100644
>> --- a/hw/ppc/spapr_rtas.c
>> +++ b/hw/ppc/spapr_rtas.c
>> @@ -44,14 +44,16 @@ static void rtas_display_character(PowerPCCPU *cpu, sPAPREnvironment *spapr,
>> uint32_t nret, target_ulong rets)
>> {
>> uint8_t c = rtas_ld(args, 0);
>> - VIOsPAPRDevice *sdev = vty_lookup(spapr, 0);
>> -
>> - if (!sdev) {
>> - rtas_st(rets, 0, -1);
>> - } else {
>> - vty_putchars(sdev, &c, sizeof(c));
>> - rtas_st(rets, 0, 0);
>> - }
>> + target_ulong hargs[4] = {
>
> This is too small. I believe it works with today's code, but the
> hypercall ABI allows for more registers to be accessed,
Not for this hypercall, but I can introduce spapr_hypercall[0-9] calls
if it makes you feel better about it :-)
> so we should at least pad the array to not run into potential buffer overflows:
>
> The general purpose registers r0 and r3-r12, the CTR and XER registers are volatile along with the condition register fields 0 and 1 plus 5-7.
>
>> + 0, /* reg=0 */
>> + 1, /* len=1 */
>> + (uint64_t)c << 56, /* data */
>
> Ugh. So the interface really is that broken? Oh well ....
It is. There must have been some mighty powerful crack that the lads
that designed this interface had been smoking...
Regards,
Anthony Liguori
>
>
> Alex
>
>> + 0 /* data */
>> + };
>> + target_ulong ret;
>> +
>> + ret = spapr_hypercall(cpu, H_PUT_TERM_CHAR, hargs);
>> + rtas_st(rets, 0, ret);
>> }
>>
>> static void rtas_get_time_of_day(PowerPCCPU *cpu, sPAPREnvironment *spapr,
>> diff --git a/include/hw/ppc/spapr_vio.h b/include/hw/ppc/spapr_vio.h
>> index f98ec0a..817f5ff 100644
>> --- a/include/hw/ppc/spapr_vio.h
>> +++ b/include/hw/ppc/spapr_vio.h
>> @@ -123,8 +123,6 @@ static inline int spapr_vio_dma_set(VIOsPAPRDevice *dev, uint64_t taddr,
>>
>> int spapr_vio_send_crq(VIOsPAPRDevice *dev, uint8_t *crq);
>>
>> -VIOsPAPRDevice *vty_lookup(sPAPREnvironment *spapr, target_ulong reg);
>> -void vty_putchars(VIOsPAPRDevice *sdev, uint8_t *buf, int len);
>> void spapr_vty_create(VIOsPAPRBus *bus, CharDriverState *chardev);
>> void spapr_vlan_create(VIOsPAPRBus *bus, NICInfo *nd);
>> void spapr_vscsi_create(VIOsPAPRBus *bus);
>> --
>> 1.8.0
>>
next prev parent reply other threads:[~2013-06-19 21:45 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-19 20:40 [Qemu-devel] [PATCH 00/12] spapr: add qtest support and refactor vty Anthony Liguori
2013-06-19 20:40 ` [Qemu-devel] [PATCH 01/12] chardev: ringbuf: add optional save parameter to save state Anthony Liguori
2013-06-20 19:49 ` Eric Blake
2013-06-19 20:40 ` [Qemu-devel] [PATCH 02/12] qtest: add spapr hypercall support Anthony Liguori
2013-06-20 15:20 ` Andreas Färber
2013-06-20 15:42 ` Anthony Liguori
2013-06-20 18:43 ` Alexander Graf
2013-06-20 18:58 ` Anthony Liguori
2013-06-20 19:28 ` [Qemu-devel] [Qemu-ppc] " Scott Wood
2013-06-20 21:57 ` [Qemu-devel] " Alexander Graf
2013-06-19 20:40 ` [Qemu-devel] [PATCH 03/12] qtest: return string from QMP commands Anthony Liguori
2013-06-20 15:24 ` Andreas Färber
2013-06-20 15:43 ` Anthony Liguori
2013-06-19 20:40 ` [Qemu-devel] [PATCH 04/12] qtest: add interface to save/restore Anthony Liguori
2013-06-20 15:38 ` Andreas Färber
2013-06-19 20:40 ` [Qemu-devel] [PATCH 05/12] spapr-vty: add qtest test case Anthony Liguori
2013-06-19 21:13 ` Alexander Graf
2013-06-19 21:43 ` Anthony Liguori
2013-06-19 21:47 ` Alexander Graf
2013-06-19 20:40 ` [Qemu-devel] [PATCH 06/12] spapr-vty: add copyright and license Anthony Liguori
2013-06-20 1:45 ` Michael Ellerman
2013-06-20 4:08 ` Alexey Kardashevskiy
2013-06-20 4:43 ` David Gibson
2013-06-20 8:52 ` Paolo Bonzini
2013-06-20 15:47 ` Andreas Färber
2013-06-19 20:40 ` [Qemu-devel] [PATCH 07/12] spapr-rtas: add CPU argument to RTAS calls Anthony Liguori
2013-06-19 21:15 ` Alexander Graf
2013-06-20 15:51 ` Andreas Färber
2013-06-20 16:10 ` Anthony Liguori
2013-06-19 20:40 ` [Qemu-devel] [PATCH 08/12] spapr-rtas: use hypercall interface and remove special vty interfaces Anthony Liguori
2013-06-19 21:24 ` Alexander Graf
2013-06-19 21:45 ` Anthony Liguori [this message]
2013-06-19 21:48 ` Alexander Graf
2013-06-19 20:40 ` [Qemu-devel] [PATCH 09/12] spapr-vio: move special case handling for reg=0 to vio Anthony Liguori
2013-06-19 21:28 ` Alexander Graf
2013-06-19 21:49 ` Anthony Liguori
2013-06-19 21:53 ` Alexander Graf
2013-06-19 23:20 ` Anthony Liguori
2013-06-19 23:07 ` Benjamin Herrenschmidt
2013-06-19 20:40 ` [Qemu-devel] [PATCH 10/12] spapr-vty: refactor the code to improve consistency Anthony Liguori
2013-06-19 21:37 ` Alexander Graf
2013-06-19 20:40 ` [Qemu-devel] [PATCH 11/12] spapr-vio: pass type to spapr_vio_find_by_reg() Anthony Liguori
2013-06-19 21:38 ` Alexander Graf
2013-06-19 21:56 ` Anthony Liguori
2013-06-19 20:40 ` [Qemu-devel] [PATCH 12/12] spapr-vty: remove unfixable FIXME Anthony Liguori
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=87zjulg4fv.fsf@codemonkey.ws \
--to=aliguori@us.ibm.com \
--cc=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=aik@ozlabs.ru \
--cc=paulus@samba.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@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).