linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] irqchip/gicv3-its: ITS table size should not be smaller than PSZ
@ 2015-04-16  5:30 Minghuan Lian
  2015-04-21 10:19 ` Thomas Gleixner
  0 siblings, 1 reply; 2+ messages in thread
From: Minghuan Lian @ 2015-04-16  5:30 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-arm-kernel, Zang Roy-R61911, Hu Mingkai-B21284,
	Yoder Stuart-B08248, Thomas Gleixner, Jason Cooper, Marc Zyngier,
	Minghuan Lian

The default page size of ITS table has been changed to 64KB,
but for some platforms the real size of allocated memory which
calculated by DEVBITS of register GITS_TYPER may be smaller than
default size. In this case, the allocation size must be increased
to the default size, otherwise, the wrong page number will cause
kernel hang.

Signed-off-by: Minghuan Lian <Minghuan.Lian@freescale.com>
---
v2-v1:
Increase allocation size instead of decreasing PSZ

 drivers/irqchip/irq-gic-v3-its.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 9687f8a..19ab86d 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -828,7 +828,8 @@ static int its_alloc_tables(struct its_node *its)
 			u64 typer = readq_relaxed(its->base + GITS_TYPER);
 			u32 ids = GITS_TYPER_DEVBITS(typer);
 
-			order = get_order((1UL << ids) * entry_size);
+			order = max(get_order((1UL << ids) * entry_size),
+				    order);
 			if (order >= MAX_ORDER) {
 				order = MAX_ORDER - 1;
 				pr_warn("%s: Device Table too large, reduce its page order to %u\n",
-- 
1.9.1


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

* Re: [PATCH v2] irqchip/gicv3-its: ITS table size should not be smaller than PSZ
  2015-04-16  5:30 [PATCH v2] irqchip/gicv3-its: ITS table size should not be smaller than PSZ Minghuan Lian
@ 2015-04-21 10:19 ` Thomas Gleixner
  0 siblings, 0 replies; 2+ messages in thread
From: Thomas Gleixner @ 2015-04-21 10:19 UTC (permalink / raw)
  To: Minghuan Lian
  Cc: linux-kernel, linux-arm-kernel, Zang Roy-R61911,
	Hu Mingkai-B21284, Yoder Stuart-B08248, Jason Cooper,
	Marc Zyngier

On Thu, 16 Apr 2015, Minghuan Lian wrote:

> The default page size of ITS table has been changed to 64KB,
> but for some platforms the real size of allocated memory which
> calculated by DEVBITS of register GITS_TYPER may be smaller than
> default size. In this case, the allocation size must be increased
> to the default size, otherwise, the wrong page number will cause
> kernel hang.

This changelog fails to explain WHY the kernel hangs if the allocated
table is smaller than the default
 
> Signed-off-by: Minghuan Lian <Minghuan.Lian@freescale.com>
> ---
> v2-v1:
> Increase allocation size instead of decreasing PSZ
> 
>  drivers/irqchip/irq-gic-v3-its.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
> index 9687f8a..19ab86d 100644
> --- a/drivers/irqchip/irq-gic-v3-its.c
> +++ b/drivers/irqchip/irq-gic-v3-its.c
> @@ -828,7 +828,8 @@ static int its_alloc_tables(struct its_node *its)
>  			u64 typer = readq_relaxed(its->base + GITS_TYPER);
>  			u32 ids = GITS_TYPER_DEVBITS(typer);
>  
> -			order = get_order((1UL << ids) * entry_size);
> +			order = max(get_order((1UL << ids) * entry_size),
> +				    order);

Lacks a comment explaining WHY we do that max() here.

Thanks,

	tglx

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

end of thread, other threads:[~2015-04-21 10:19 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-16  5:30 [PATCH v2] irqchip/gicv3-its: ITS table size should not be smaller than PSZ Minghuan Lian
2015-04-21 10:19 ` Thomas Gleixner

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