|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |