xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] Change fixed mmio handlers to a variable number
@ 2016-07-15 15:25 Shanker Donthineni
  2016-07-15 15:25 ` [PATCH 1/4] arm/io: Use separate memory allocation for mmio handlers Shanker Donthineni
  2016-07-15 15:32 ` [PATCH 0/4] Change fixed mmio handlers to a variable number Julien Grall
  0 siblings, 2 replies; 4+ messages in thread
From: Shanker Donthineni @ 2016-07-15 15:25 UTC (permalink / raw)
  To: xen-devel
  Cc: Philip Elcan, Julien Grall, Stefano Stabellini,
	Shanker Donthineni, Vikram Sethi

The maximum number of mmio handlers that are allowed is limited to
a macro MAX_IO_HANDLER(16), which is not enough for supporting per CPU
Redistributor regions. We need at least MAX_IO_HANDLER+CONFIG_NR_CPUS
mmio handlers in order to support ACPI based XEN boot.

This patchset uses the dynamic allocation strategy to allocate memory
resource dynamically depends on the number of Redistributor regions
that are described in the APCI MADT table.

Shanker Donthineni (4):
  arm/io: Use separate memory allocation for mmio handlers
  xen: Add generic implementation of binary search
  xen/arm: io: Use binary search for mmio handler lookup
  arm/vgic: Change fixed number of mmio handlers to variable number

 xen/arch/arm/domain.c      | 12 +++++++----
 xen/arch/arm/io.c          | 53 +++++++++++++++++++++++++++++++---------------
 xen/arch/arm/vgic-v2.c     |  3 ++-
 xen/arch/arm/vgic-v3.c     |  5 ++++-
 xen/arch/arm/vgic.c        | 10 +++------
 xen/common/Makefile        |  1 +
 xen/common/bsearch.c       | 51 ++++++++++++++++++++++++++++++++++++++++++++
 xen/include/asm-arm/mmio.h |  7 ++++--
 xen/include/asm-arm/vgic.h |  5 +++--
 xen/include/xen/bsearch.h  |  9 ++++++++
 10 files changed, 122 insertions(+), 34 deletions(-)
 create mode 100644 xen/common/bsearch.c
 create mode 100644 xen/include/xen/bsearch.h

-- 
Qualcomm Datacenter Technologies, Inc. on behalf of the Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.


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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/4] arm/io: Use separate memory allocation for mmio handlers
  2016-07-15 15:25 [PATCH 0/4] Change fixed mmio handlers to a variable number Shanker Donthineni
@ 2016-07-15 15:25 ` Shanker Donthineni
  2016-07-15 15:32 ` [PATCH 0/4] Change fixed mmio handlers to a variable number Julien Grall
  1 sibling, 0 replies; 4+ messages in thread
From: Shanker Donthineni @ 2016-07-15 15:25 UTC (permalink / raw)
  To: xen-devel
  Cc: Philip Elcan, Julien Grall, Stefano Stabellini,
	Shanker Donthineni, Vikram Sethi

The number of mmio handlers are limited to a compile time macro
MAX_IO_HANDLER which is 16. This number is not at all sufficient
to support per CPU distributor regions. Either it needs to be
increased to a bigger number, at least CONFIG_NR_CPUS+16, or
allocate a separate memory for mmio handlers dynamically during
domain build.

This patch uses the dynamic allocation strategy to reduce memory
footprint for 'struct domain' instead of static allocation.

Signed-off-by: Shanker Donthineni <shankerd@codeaurora.org>
Acked-by: Julien Grall <julien.grall@arm.com>
---
 xen/arch/arm/domain.c      |  6 ++++--
 xen/arch/arm/io.c          | 13 +++++++++++--
 xen/include/asm-arm/mmio.h |  7 +++++--
 3 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index 61fc08e..0170cee 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -546,7 +546,7 @@ void vcpu_destroy(struct vcpu *v)
 int arch_domain_create(struct domain *d, unsigned int domcr_flags,
                        struct xen_arch_domainconfig *config)
 {
-    int rc;
+    int rc, count;
 
     d->arch.relmem = RELMEM_not_started;
 
@@ -569,7 +569,8 @@ int arch_domain_create(struct domain *d, unsigned int domcr_flags,
     share_xen_page_with_guest(
         virt_to_page(d->shared_info), d, XENSHARE_writable);
 
-    if ( (rc = domain_io_init(d)) != 0 )
+    count = MAX_IO_HANDLER;
+    if ( (rc = domain_io_init(d, count)) != 0 )
         goto fail;
 
     if ( (rc = p2m_alloc_table(d)) != 0 )
@@ -663,6 +664,7 @@ void arch_domain_destroy(struct domain *d)
     free_xenheap_pages(d->arch.efi_acpi_table,
                        get_order_from_bytes(d->arch.efi_acpi_len));
 #endif
+    domain_io_free(d);
 }
 
 void arch_domain_shutdown(struct domain *d)
diff --git a/xen/arch/arm/io.c b/xen/arch/arm/io.c
index 5a96836..40330f0 100644
--- a/xen/arch/arm/io.c
+++ b/xen/arch/arm/io.c
@@ -118,7 +118,7 @@ void register_mmio_handler(struct domain *d,
     struct vmmio *vmmio = &d->arch.vmmio;
     struct mmio_handler *handler;
 
-    BUG_ON(vmmio->num_entries >= MAX_IO_HANDLER);
+    BUG_ON(vmmio->num_entries >= vmmio->max_num_entries);
 
     write_lock(&vmmio->lock);
 
@@ -134,14 +134,23 @@ void register_mmio_handler(struct domain *d,
     write_unlock(&vmmio->lock);
 }
 
-int domain_io_init(struct domain *d)
+int domain_io_init(struct domain *d, int max_count)
 {
     rwlock_init(&d->arch.vmmio.lock);
     d->arch.vmmio.num_entries = 0;
+    d->arch.vmmio.max_num_entries = max_count;
+    d->arch.vmmio.handlers = xzalloc_array(struct mmio_handler, max_count);
+    if ( !d->arch.vmmio.handlers )
+        return -ENOMEM;
 
     return 0;
 }
 
+void domain_io_free(struct domain *d)
+{
+    xfree(d->arch.vmmio.handlers);
+}
+
 /*
  * Local variables:
  * mode: C
diff --git a/xen/include/asm-arm/mmio.h b/xen/include/asm-arm/mmio.h
index 32f10f2..c620eed 100644
--- a/xen/include/asm-arm/mmio.h
+++ b/xen/include/asm-arm/mmio.h
@@ -52,15 +52,18 @@ struct mmio_handler {
 
 struct vmmio {
     int num_entries;
+    int max_num_entries;
     rwlock_t lock;
-    struct mmio_handler handlers[MAX_IO_HANDLER];
+    struct mmio_handler *handlers;
 };
 
 extern int handle_mmio(mmio_info_t *info);
 void register_mmio_handler(struct domain *d,
                            const struct mmio_handler_ops *ops,
                            paddr_t addr, paddr_t size, void *priv);
-int domain_io_init(struct domain *d);
+int domain_io_init(struct domain *d, int max_count);
+void domain_io_free(struct domain *d);
+
 
 #endif  /* __ASM_ARM_MMIO_H__ */
 
-- 
Qualcomm Datacenter Technologies, Inc. on behalf of the Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.


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

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/4] Change fixed mmio handlers to a variable number
  2016-07-15 15:25 [PATCH 0/4] Change fixed mmio handlers to a variable number Shanker Donthineni
  2016-07-15 15:25 ` [PATCH 1/4] arm/io: Use separate memory allocation for mmio handlers Shanker Donthineni
@ 2016-07-15 15:32 ` Julien Grall
  2016-07-15 15:48   ` Shanker Donthineni
  1 sibling, 1 reply; 4+ messages in thread
From: Julien Grall @ 2016-07-15 15:32 UTC (permalink / raw)
  To: Shanker Donthineni, xen-devel
  Cc: Philip Elcan, Stefano Stabellini, Vikram Sethi

Hi Shanker,

It looks like this series is not threaded. I looked to the headers, and 
some patch miss the In-Reply-To/References header or they are wrong.

Please try to thread the series, it is much easier to find the 
associated patch.

Regards,

On 15/07/16 16:25, Shanker Donthineni wrote:
> The maximum number of mmio handlers that are allowed is limited to
> a macro MAX_IO_HANDLER(16), which is not enough for supporting per CPU
> Redistributor regions. We need at least MAX_IO_HANDLER+CONFIG_NR_CPUS
> mmio handlers in order to support ACPI based XEN boot.
>
> This patchset uses the dynamic allocation strategy to allocate memory
> resource dynamically depends on the number of Redistributor regions
> that are described in the APCI MADT table.
>
> Shanker Donthineni (4):
>    arm/io: Use separate memory allocation for mmio handlers
>    xen: Add generic implementation of binary search
>    xen/arm: io: Use binary search for mmio handler lookup
>    arm/vgic: Change fixed number of mmio handlers to variable number
>
>   xen/arch/arm/domain.c      | 12 +++++++----
>   xen/arch/arm/io.c          | 53 +++++++++++++++++++++++++++++++---------------
>   xen/arch/arm/vgic-v2.c     |  3 ++-
>   xen/arch/arm/vgic-v3.c     |  5 ++++-
>   xen/arch/arm/vgic.c        | 10 +++------
>   xen/common/Makefile        |  1 +
>   xen/common/bsearch.c       | 51 ++++++++++++++++++++++++++++++++++++++++++++
>   xen/include/asm-arm/mmio.h |  7 ++++--
>   xen/include/asm-arm/vgic.h |  5 +++--
>   xen/include/xen/bsearch.h  |  9 ++++++++
>   10 files changed, 122 insertions(+), 34 deletions(-)
>   create mode 100644 xen/common/bsearch.c
>   create mode 100644 xen/include/xen/bsearch.h
>

-- 
Julien Grall

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/4] Change fixed mmio handlers to a variable number
  2016-07-15 15:32 ` [PATCH 0/4] Change fixed mmio handlers to a variable number Julien Grall
@ 2016-07-15 15:48   ` Shanker Donthineni
  0 siblings, 0 replies; 4+ messages in thread
From: Shanker Donthineni @ 2016-07-15 15:48 UTC (permalink / raw)
  To: Julien Grall, xen-devel; +Cc: Philip Elcan, Stefano Stabellini, Vikram Sethi

Hi Julien,
On 07/15/2016 10:32 AM, Julien Grall wrote:
> Hi Shanker,
>
> It looks like this series is not threaded. I looked to the headers, 
> and some patch miss the In-Reply-To/References header or they are wrong.
>
> Please try to thread the series, it is much easier to find the 
> associated patch.
>
Sorry for asking more things, I am still leaning the XEN upstream 
guidelines.  Please guide me how do I fix the issue 'thread the series' 
that you are talking.

-- 
Shanker Donthineni
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.


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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-07-15 15:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-15 15:25 [PATCH 0/4] Change fixed mmio handlers to a variable number Shanker Donthineni
2016-07-15 15:25 ` [PATCH 1/4] arm/io: Use separate memory allocation for mmio handlers Shanker Donthineni
2016-07-15 15:32 ` [PATCH 0/4] Change fixed mmio handlers to a variable number Julien Grall
2016-07-15 15:48   ` Shanker Donthineni

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).