qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: qemu-devel@nongnu.org
Cc: "Mike Day" <ncmike@ncultra.org>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	qemu-ppc@nongnu.org, "Alexander Graf" <agraf@suse.de>,
	"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH] spapr-iommu: extend SPAPR_TCE_TABLE class
Date: Wed, 12 Mar 2014 14:54:51 +1100	[thread overview]
Message-ID: <531FDA8B.5090909@ozlabs.ru> (raw)
In-Reply-To: <52B3AFD1.90008@ozlabs.ru>

On 12/20/2013 01:47 PM, Alexey Kardashevskiy wrote:
> On 12/05/2013 08:39 PM, Alexey Kardashevskiy wrote:
>> On 11/20/2013 04:39 PM, Alexey Kardashevskiy wrote:
>>> This adds a put_tce() callback to the SPAPR TCE TABLE device class.
>>> The new callback allows to have different IOMMU types such as upcoming
>>> VFIO IOMMU and it will be used more by the upcoming Multi-TCE support.
>>>
>>> This reworks the H_PUT_TCE handler to make use of the new put_tce()
>>> callback.
>>
>>
>> Ping?
> 
> 
> Ping?


Ping, anyone, please? This is QOM'fication...


> 
> 
> 
>>
>>>
>>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
>>> ---
>>>  hw/ppc/spapr_iommu.c   | 21 +++++++++++++++++----
>>>  include/hw/ppc/spapr.h | 13 +++++++++++++
>>>  2 files changed, 30 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c
>>> index ef45f4f..0016c13 100644
>>> --- a/hw/ppc/spapr_iommu.c
>>> +++ b/hw/ppc/spapr_iommu.c
>>> @@ -207,7 +207,7 @@ static target_ulong put_tce_emu(sPAPRTCETable *tcet, target_ulong ioba,
>>>      IOMMUTLBEntry entry;
>>>  
>>>      if (ioba >= tcet->window_size) {
>>> -        hcall_dprintf("spapr_vio_put_tce on out-of-bounds IOBA 0x"
>>> +        hcall_dprintf("spapr put_tce_emu on out-of-bounds IOBA 0x"
>>>                        TARGET_FMT_lx "\n", ioba);
>>>          return H_PARAMETER;
>>>      }
>>> @@ -232,12 +232,21 @@ static target_ulong h_put_tce(PowerPCCPU *cpu, sPAPREnvironment *spapr,
>>>      target_ulong tce = args[2];
>>>      target_ulong ret = H_PARAMETER;
>>>      sPAPRTCETable *tcet = spapr_tce_find_by_liobn(liobn);
>>> +    sPAPRTCETableClass *info;
>>> +
>>> +    if (!tcet) {
>>> +        return H_PARAMETER;
>>> +    }
>>> +
>>> +    info = SPAPR_TCE_TABLE_GET_CLASS(tcet);
>>> +    if (!info || !info->put_tce) {
>>> +        return H_PARAMETER;
>>> +    }
>>>  
>>>      ioba &= ~(SPAPR_TCE_PAGE_SIZE - 1);
>>>  
>>> -    if (tcet) {
>>> -        ret = put_tce_emu(tcet, ioba, tce);
>>> -    }
>>> +    ret = info->put_tce(tcet, ioba, tce);
>>> +
>>>      trace_spapr_iommu_put(liobn, ioba, tce, ret);
>>>  
>>>      return ret;
>>> @@ -287,9 +296,12 @@ int spapr_tcet_dma_dt(void *fdt, int node_off, const char *propname,
>>>  static void spapr_tce_table_class_init(ObjectClass *klass, void *data)
>>>  {
>>>      DeviceClass *dc = DEVICE_CLASS(klass);
>>> +    sPAPRTCETableClass *stc = SPAPR_TCE_TABLE_CLASS(klass);
>>> +
>>>      dc->vmsd = &vmstate_spapr_tce_table;
>>>      dc->init = spapr_tce_table_realize;
>>>      dc->reset = spapr_tce_reset;
>>> +    stc->put_tce = put_tce_emu;
>>>  
>>>      QLIST_INIT(&spapr_tce_tables);
>>>  
>>> @@ -302,6 +314,7 @@ static TypeInfo spapr_tce_table_info = {
>>>      .parent = TYPE_DEVICE,
>>>      .instance_size = sizeof(sPAPRTCETable),
>>>      .class_init = spapr_tce_table_class_init,
>>> +    .class_size = sizeof(sPAPRTCETableClass),
>>>      .instance_finalize = spapr_tce_table_finalize,
>>>  };
>>>  
>>> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
>>> index fdaab2d..827cda2 100644
>>> --- a/include/hw/ppc/spapr.h
>>> +++ b/include/hw/ppc/spapr.h
>>> @@ -367,12 +367,25 @@ int spapr_rtas_device_tree_setup(void *fdt, hwaddr rtas_addr,
>>>  
>>>  #define RTAS_ERROR_LOG_MAX      2048
>>>  
>>> +typedef struct sPAPRTCETableClass sPAPRTCETableClass;
>>>  typedef struct sPAPRTCETable sPAPRTCETable;
>>>  
>>>  #define TYPE_SPAPR_TCE_TABLE "spapr-tce-table"
>>>  #define SPAPR_TCE_TABLE(obj) \
>>>      OBJECT_CHECK(sPAPRTCETable, (obj), TYPE_SPAPR_TCE_TABLE)
>>>  
>>> +#define SPAPR_TCE_TABLE_CLASS(klass) \
>>> +     OBJECT_CLASS_CHECK(sPAPRTCETableClass, (klass), TYPE_SPAPR_TCE_TABLE)
>>> +#define SPAPR_TCE_TABLE_GET_CLASS(obj) \
>>> +     OBJECT_GET_CLASS(sPAPRTCETableClass, (obj), TYPE_SPAPR_TCE_TABLE)
>>> +
>>> +struct sPAPRTCETableClass {
>>> +    DeviceClass parent_class;
>>> +
>>> +    target_ulong (*put_tce)(sPAPRTCETable *tcet, target_ulong ioba,
>>> +                            target_ulong tce);
>>> +};
>>> +
>>>  struct sPAPRTCETable {
>>>      DeviceState parent;
>>>      uint32_t liobn;
>>>
>>
>>
> 
> 


-- 
Alexey

  reply	other threads:[~2014-03-12  3:55 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-20  5:39 [Qemu-devel] [PATCH] spapr-iommu: extend SPAPR_TCE_TABLE class Alexey Kardashevskiy
2013-12-05  9:39 ` Alexey Kardashevskiy
2013-12-20  2:47   ` Alexey Kardashevskiy
2014-03-12  3:54     ` Alexey Kardashevskiy [this message]
2014-03-13 18:04 ` [Qemu-devel] " Mike Day
2014-03-13 18:50   ` Andreas Färber
2014-03-13 23:19     ` Alexey Kardashevskiy
2014-03-13 23:59       ` Alexander Graf

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=531FDA8B.5090909@ozlabs.ru \
    --to=aik@ozlabs.ru \
    --cc=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=ncmike@ncultra.org \
    --cc=pbonzini@redhat.com \
    --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).