[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [RFC PATCH 00/19] xen/arm: Add ITS support



On Fri, Mar 13, 2015 at 3:43 PM, Julien Grall <julien.grall@xxxxxxxxxx> wrote:
> Hi Vijay,
>
> On 13/03/2015 04:48, Vijay Kilari wrote:
>>
>> The changes that I envisage for supporting Multiple ITS is
>>    - Generate as many number of ITS dt nodes for Dom0 that host DT
>> contains.
>>    - For DomU always generate only one ITS node
>>    - vITS will register MMIO handlers for all physical ITS of Dom0, but
>> vITS will only have
>>      one VITS structure per domain. The limitation with this approach
>> is that all vITS requests are
>>      serialized even though there are more than one physical ITS. But
>> this approach makes
>>      implementation simple.
>
>
> Each vITS will have his own command queue... How do you plan to handle it
> with only a single structure?

Yes, I agree with single structure we could not maintain two commad queues

>
> Can you provide an idea what the structure will look like?

Below is the sample structures with description. I will send patch series

struct cid_mapping
{
    /* Number of collections mapped */
    uint8_t nr_cid;
    /* XXX: assume one collection id per vcpu. can set to MAX_VCPUS? */
    /* Virtual collection id */
    uint8_t vcid[32];
    /* Physical collection id */
    uint8_t pcid[32];
    /* Virtual target address of this collection id */
    uint64_t vta[32];
};

struct its_node;

/* Per domain per physical ITS, virtual ITS struct */
struct vgic_its
{
   spinlock_t lock;
   /* Emulation of BASER */
   paddr_t baser[8];
   /* Command queue base */
   paddr_t cmd_base;
   /* Command queue write pointer */
   paddr_t cmd_write;
   /* Command queue write saved pointer */
   paddr_t cmd_write_save;
   /* Command queue read pointer */
   paddr_t cmd_read;
   /* Command queue size */
   unsigned long cmd_qsize;
   /* ITS mmio physical base */
   paddr_t phys_base;
   /* ITS mmio physical size */
   unsigned long phys_size;
   /* gicr ctrl register */
   uint32_t ctrl;
   /* Virtual to Physical Collection id mapping */
   struct cid_mapping cid_map;
};

struct vgic_lpi_conf
{
   /* LPI propbase */
   paddr_t propbase;
   /* percpu pendbase */
   paddr_t pendbase[MAX_VIRT_CPUS];
   /* Virtual LPI property table */
   void * prop_page;
};

/* ITS device structure */
struct vits_device
{
    struct list_head entry;
    /* Virtual ITS node */
    struct vgic_its *vits;
    /* ITS physical node */
    struct its_node *its;
    /* Collection assigned */
    struct its_collection *collection;
    /* Device id */
    uint32_t  dev_id;
    /* ITT address */
    paddr_t itt_addr;
    /* ITT size */
    unsigned long itt_size;
    /* LPIs assigned to device */
    struct list_head hwirq_list;
};

asm-arm/domain.h


struct vgic_its *vits;
struct vgic_lpi_conf *lpi_conf;
struct vits_device {
    spinlock_t lock;
    struct list_head dev_List;
} vits_devs;

Regards
Vijay

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.