All of lore.kernel.org
 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 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.