2017-12-27 12:55:14 -06:00
|
|
|
|
2009-11-23 14:53:09 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-10-17 12:21:23 -07:00
|
|
|
|
2016-06-15 08:32:18 -05:00
|
|
|
|
2021-08-11 10:51:01 +02:00
|
|
|
|
2014-11-14 18:05:35 +01:00
|
|
|
|
2009-11-23 20:07:01 -07:00
|
|
|
|
2009-11-24 03:26:58 -07:00
|
|
|
|
2013-08-28 21:18:32 +01:00
|
|
|
|
2015-12-05 16:13:53 -08:00
|
|
|
|
2009-11-23 14:53:09 -07:00
|
|
|
|
|
|
|
|
|
2014-02-28 14:42:47 +01:00
|
|
|
|
2010-02-14 07:13:47 -07:00
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
2014-04-02 15:10:14 -05:00
|
|
|
|
2014-04-02 16:56:48 -05:00
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
2014-11-14 18:05:35 +01:00
|
|
|
|
2019-08-23 14:24:51 +08:00
|
|
|
|
2025-05-09 00:46:27 -07:00
|
|
|
|
2010-02-01 21:34:14 -07:00
|
|
|
|
ARM: prom.h: Fix build error by removing unneeded header file
Fix the following build error:
CC [M] fs/udf/balloc.o
In file included from /home/fabio/next/linux-next/arch/arm/include/asm/prom.h:16,
from include/linux/of.h:140,
from include/asm-generic/gpio.h:7,
from arch/arm/plat-mxc/include/mach/irqs.h:14,
from /home/fabio/next/linux-next/arch/arm/include/asm/irq.h:4,
from /home/fabio/next/linux-next/arch/arm/include/asm/hardirq.h:6,
from include/linux/hardirq.h:7,
from include/linux/highmem.h:8,
from include/linux/pagemap.h:10,
from include/linux/buffer_head.h:13,
from fs/udf/udfdecl.h:11,
from fs/udf/balloc.c:22:
/home/fabio/next/linux-next/arch/arm/include/asm/setup.h:146: error: redefinition of 'struct tag'
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
[grant.likely: fix build failure on drivers/of/fdt.c]
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
2012-01-02 14:19:03 -02:00
|
|
|
|
2010-02-14 07:13:47 -07:00
|
|
|
|
|
|
|
|
|
2017-04-25 17:09:54 -07:00
|
|
|
|
|
|
|
|
|
2024-02-16 17:05:51 -08:00
|
|
|
|
|
|
|
|
|
2024-09-05 08:47:38 +09:00
|
|
|
|
2024-02-16 17:05:51 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-15 10:03:35 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-05-14 13:40:52 -07:00
|
|
|
|
2014-07-15 10:03:35 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-08-30 11:20:20 -05:00
|
|
|
|
2014-07-15 10:03:35 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-03-11 12:13:03 -06:00
|
|
|
|
2017-09-28 19:20:32 -05:00
|
|
|
|
2026-04-03 13:59:47 +08:00
|
|
|
|
2017-09-28 19:20:32 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-08-29 13:30:35 +01:00
|
|
|
|
2009-11-23 20:07:00 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-08-29 13:30:35 +01:00
|
|
|
|
|
|
|
|
|
2009-11-23 20:07:00 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-10-03 16:28:27 +01:00
|
|
|
|
2009-11-23 20:07:00 -07:00
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-06-15 08:32:18 -05:00
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-06-15 08:32:18 -05:00
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-06-04 00:18:09 +09:00
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
2017-06-01 18:01:47 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
2009-11-23 20:07:00 -07:00
|
|
|
|
2014-04-02 15:10:14 -05:00
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
2009-11-23 20:07:00 -07:00
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
|
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
2014-04-02 15:10:14 -05:00
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
2009-11-23 20:07:00 -07:00
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
2009-11-23 20:07:00 -07:00
|
|
|
|
2014-10-03 16:28:27 +01:00
|
|
|
|
2012-11-14 22:37:12 +00:00
|
|
|
|
2013-12-13 20:08:59 +02:00
|
|
|
|
2012-11-14 22:37:12 +00:00
|
|
|
|
2017-06-01 18:01:47 -05:00
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
2012-11-14 22:37:12 +00:00
|
|
|
|
2009-11-23 20:07:00 -07:00
|
|
|
|
|
|
|
|
|
2014-11-28 16:03:33 +00:00
|
|
|
|
|
|
|
|
|
2009-11-23 20:07:00 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
2014-10-03 16:28:27 +01:00
|
|
|
|
2009-11-23 20:07:00 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-02 15:10:14 -05:00
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
2022-08-01 12:05:06 +00:00
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
2016-05-03 23:22:49 +10:00
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
2021-03-25 10:47:12 -06:00
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
2016-05-03 23:22:49 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
2016-06-09 15:50:49 +10:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:47 +10:00
|
|
|
|
2016-06-09 15:50:49 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
2016-05-11 13:36:57 -04:00
|
|
|
|
2016-06-09 15:50:49 +10:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
2016-06-09 15:50:49 +10:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
2022-08-13 23:34:16 +03:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
2014-04-02 15:10:14 -05:00
|
|
|
|
2017-10-03 11:07:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
|
|
|
|
|
2016-05-11 13:36:57 -04:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
2016-05-11 13:36:57 -04:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-06-15 08:32:18 -05:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
|
|
|
|
|
2014-04-02 15:10:14 -05:00
|
|
|
|
2014-11-28 16:03:33 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
|
|
|
|
|
2014-11-28 16:03:33 +00:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
2009-11-23 20:07:00 -07:00
|
|
|
|
2009-11-23 20:07:01 -07:00
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:50 +10:00
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-10-13 00:41:29 -07:00
|
|
|
|
2016-05-03 23:22:51 +10:00
|
|
|
|
2021-03-26 13:26:06 -06:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-03-25 10:47:12 -06:00
|
|
|
|
2016-05-03 23:22:51 +10:00
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
2017-04-25 17:09:54 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
2014-04-02 15:10:14 -05:00
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:51 +10:00
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-01 22:48:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
2014-04-01 22:48:01 -05:00
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
2016-05-03 23:22:51 +10:00
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:50 +10:00
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
2016-05-03 23:22:51 +10:00
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
2016-05-03 23:22:48 +10:00
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
|
|
|
|
|
2013-08-29 13:30:35 +01:00
|
|
|
|
2017-05-17 17:29:09 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-08-29 13:30:35 +01:00
|
|
|
|
2013-08-12 13:06:53 +02:00
|
|
|
|
2013-08-29 13:30:35 +01:00
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
|
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
|
|
|
|
|
2013-08-29 13:30:35 +01:00
|
|
|
|
2019-10-18 11:18:33 +08:00
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
2021-04-04 22:28:45 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-07-19 00:01:12 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
2016-05-03 23:22:51 +10:00
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-05 16:13:53 -08:00
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:50 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-03 23:22:51 +10:00
|
|
|
|
2021-03-25 10:47:12 -06:00
|
|
|
|
2016-05-03 23:22:51 +10:00
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
2016-05-03 23:22:51 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
2016-05-03 23:22:51 +10:00
|
|
|
|
|
|
|
|
|
2015-12-05 16:13:53 -08:00
|
|
|
|
2016-07-19 00:01:12 +02:00
|
|
|
|
|
|
|
|
|
2015-12-05 16:13:53 -08:00
|
|
|
|
2016-05-03 23:22:51 +10:00
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:02 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-05-14 13:40:53 -07:00
|
|
|
|
2024-10-23 18:14:26 +01:00
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-14 18:05:35 +01:00
|
|
|
|
|
|
|
|
|
2021-08-11 10:51:01 +02:00
|
|
|
|
2021-08-25 11:40:40 +02:00
|
|
|
|
2021-08-11 10:51:01 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-25 11:40:40 +02:00
|
|
|
|
2021-08-11 10:51:01 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-02-28 14:42:47 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-01 22:46:48 -05:00
|
|
|
|
2025-01-09 21:27:04 +08:00
|
|
|
|
2014-04-01 22:46:48 -05:00
|
|
|
|
|
|
|
|
|
2014-03-13 16:36:36 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-04-24 12:38:46 +01:00
|
|
|
|
2025-12-05 09:59:34 +08:00
|
|
|
|
2023-04-24 12:38:46 +01:00
|
|
|
|
2014-04-01 22:46:48 -05:00
|
|
|
|
|
|
|
|
|
2025-01-09 21:27:04 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-01 22:46:48 -05:00
|
|
|
|
|
|
|
|
|
2022-07-22 18:53:31 -07:00
|
|
|
|
2014-04-01 22:46:48 -05:00
|
|
|
|
2014-02-28 14:42:47 +01:00
|
|
|
|
|
|
|
|
|
2015-06-01 13:40:31 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-07-22 18:53:31 -07:00
|
|
|
|
|
|
|
|
|
2015-06-01 13:40:31 +02:00
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-02 15:10:14 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
2016-11-23 10:40:07 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
2014-04-02 15:10:14 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-04-19 05:12:18 +10:00
|
|
|
|
|
|
|
|
|
2021-03-18 10:40:33 +00:00
|
|
|
|
2017-04-19 05:12:18 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-07 20:03:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-05-14 13:40:52 -07:00
|
|
|
|
2016-04-07 20:03:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-03-18 10:40:33 +00:00
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-02 15:10:14 -05:00
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
|
|
|
|
|
2021-03-18 10:40:33 +00:00
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-01 23:49:03 -05:00
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
2014-04-02 15:10:14 -05:00
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
|
|
|
|
|
2025-11-15 21:47:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-06-15 11:03:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-03-25 10:47:12 -06:00
|
|
|
|
2019-06-15 11:03:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-03 13:59:47 +08:00
|
|
|
|
2019-06-15 11:03:43 +08:00
|
|
|
|
|
|
|
|
|
2026-04-03 13:59:47 +08:00
|
|
|
|
2019-06-15 11:03:43 +08:00
|
|
|
|
2026-04-03 13:59:47 +08:00
|
|
|
|
2019-06-15 11:03:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-11-18 15:55:01 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-03-18 10:40:33 +00:00
|
|
|
|
2010-10-30 11:49:09 -04:00
|
|
|
|
|
|
|
|
|
2019-05-14 13:40:52 -07:00
|
|
|
|
2010-10-30 11:49:09 -04:00
|
|
|
|
2019-06-15 11:03:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-10-30 11:49:09 -04:00
|
|
|
|
|
|
|
|
|
2021-03-18 10:40:33 +00:00
|
|
|
|
|
|
|
|
|
2017-04-19 05:12:18 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-08-27 21:41:56 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-03 13:59:47 +08:00
|
|
|
|
2013-08-27 21:41:56 -05:00
|
|
|
|
2026-04-03 13:59:47 +08:00
|
|
|
|
|
|
|
|
|
2013-08-27 21:41:56 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-03 13:59:47 +08:00
|
|
|
|
2013-08-27 21:41:56 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-03 13:59:47 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-08-27 21:41:56 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-02-16 13:52:33 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-03-24 16:54:21 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 14:54:30 -08:00
|
|
|
|
2023-03-24 16:54:21 +01:00
|
|
|
|
|
|
|
|
|
2018-11-05 14:54:30 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-02-16 13:52:33 +01:00
|
|
|
|
|
|
|
|
|
2009-11-24 03:26:58 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-08-30 17:06:53 -05:00
|
|
|
|
2009-11-24 03:26:58 -07:00
|
|
|
|
2013-07-01 14:20:35 -04:00
|
|
|
|
2014-04-01 23:49:03 -05:00
|
|
|
|
|
|
|
|
|
2009-11-24 03:26:58 -07:00
|
|
|
|
2021-08-11 10:51:03 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-11-24 03:26:58 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-01-30 01:31:21 -07:00
|
|
|
|
|
|
|
|
|
2013-07-01 14:20:35 -04:00
|
|
|
|
2009-11-24 03:26:58 -07:00
|
|
|
|
2010-01-30 01:31:21 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-07-01 14:20:35 -04:00
|
|
|
|
of/fdt: Don't calculate initrd size from DT if start > end
If the properties 'linux,initrd-start' and 'linux,initrd-end' of
the chosen node populated from the bootloader, eg. U-Boot, are so that
start > end, then the phys_initrd_size calculated from end - start is
negative that subsequently gets converted to a high positive value for
being unsigned long long. Then, the memory region with the (invalid)
size is added to the bootmem and attempted being paged in paging_init()
that results in the kernel fault.
For example, on the FVP ARM64 system I'm running, the U-Boot populates
the 'linux,initrd-start' with 8800_0000 and 'linux,initrd-end' with 0.
The phys_initrd_size calculated is then ffff_ffff_7800_0000
(= 0 - 8800_0000 = -8800_0000 + ULLONG_MAX + 1). paging_init() then
attempts to map the address 8800_0000 + ffff_ffff_7800_0000 and oops'es
as below.
It should be stressed, it is generally a fault of the bootloader's with
the kernel relying on it, however we should not allow the bootloader's
misconfiguration to lead to the kernel oops. Not only the kernel should be
bullet proof against it but also finding the root cause of the paging
fault spanning over the bootloader, DT, and kernel may happen is not so
easy.
Unable to handle kernel paging request at virtual address fffffffefe43c000
Mem abort info:
ESR = 0x96000007
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
Data abort info:
ISV = 0, ISS = 0x00000007
CM = 0, WnR = 0
swapper pgtable: 4k pages, 39-bit VAs, pgdp=0000000080e3d000
[fffffffefe43c000] pgd=0000000080de9003, pud=0000000080de9003
Unable to handle kernel paging request at virtual address ffffff8000de9f90
Mem abort info:
ESR = 0x96000005
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
Data abort info:
ISV = 0, ISS = 0x00000005
CM = 0, WnR = 0
swapper pgtable: 4k pages, 39-bit VAs, pgdp=0000000080e3d000
[ffffff8000de9f90] pgd=0000000000000000, pud=0000000000000000
Internal error: Oops: 96000005 [#1] PREEMPT SMP
Modules linked in:
CPU: 0 PID: 0 Comm: swapper Not tainted 5.4.51-yocto-standard #1
Hardware name: FVP Base (DT)
pstate: 60000085 (nZCv daIf -PAN -UAO)
pc : show_pte+0x12c/0x1b4
lr : show_pte+0x100/0x1b4
sp : ffffffc010ce3b30
x29: ffffffc010ce3b30 x28: ffffffc010ceed80
x27: fffffffefe43c000 x26: fffffffefe43a028
x25: 0000000080bf0000 x24: 0000000000000025
x23: ffffffc010b8d000 x22: ffffffc010e3d000
x23: ffffffc010b8d000 x22: ffffffc010e3d000
x21: 0000000080de9000 x20: ffffff7f80000f90
x19: fffffffefe43c000 x18: 0000000000000030
x17: 0000000000001400 x16: 0000000000001c00
x15: ffffffc010cef1b8 x14: ffffffffffffffff
x13: ffffffc010df1f40 x12: ffffffc010df1b70
x11: ffffffc010ce3b30 x10: ffffffc010ce3b30
x9 : 00000000ffffffc8 x8 : 0000000000000000
x7 : 000000000000000f x6 : ffffffc010df16e8
x5 : 0000000000000000 x4 : 0000000000000000
x3 : 00000000ffffffff x2 : 0000000000000000
x1 : 0000008080000000 x0 : ffffffc010af1d68
Call trace:
show_pte+0x12c/0x1b4
die_kernel_fault+0x54/0x78
__do_kernel_fault+0x11c/0x128
do_translation_fault+0x58/0xac
do_mem_abort+0x50/0xb0
el1_da+0x1c/0x90
__create_pgd_mapping+0x348/0x598
paging_init+0x3f0/0x70d0
setup_arch+0x2c0/0x5d4
start_kernel+0x94/0x49c
Code: 92748eb5 900052a0 9135a000 cb010294 (f8756a96)
Signed-off-by: Marek Bykowski <marek.bykowski@gmail.com>
Link: https://lore.kernel.org/r/20220909023358.76881-1-marek.bykowski@gmail.com
Signed-off-by: Rob Herring <robh@kernel.org>
2022-09-09 02:33:57 +00:00
|
|
|
|
|
|
|
|
|
2009-11-24 03:26:58 -07:00
|
|
|
|
2016-02-16 13:52:33 +01:00
|
|
|
|
2018-11-05 14:54:28 -08:00
|
|
|
|
|
|
|
|
|
2013-08-30 17:06:53 -05:00
|
|
|
|
2021-06-16 11:27:45 +02:00
|
|
|
|
2009-11-24 03:26:58 -07:00
|
|
|
|
|
|
|
|
|
2021-08-11 10:51:01 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-15 21:47:47 +08:00
|
|
|
|
|
|
|
|
|
2021-08-11 10:51:01 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-02-25 14:03:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-12-14 12:01:56 +08:00
|
|
|
|
2021-08-11 10:51:02 +02:00
|
|
|
|
2022-05-06 19:44:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-06-29 17:47:45 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-05-06 19:44:00 +08:00
|
|
|
|
2026-06-29 17:47:45 +08:00
|
|
|
|
2022-05-06 19:44:00 +08:00
|
|
|
|
2021-08-11 10:51:02 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
efi: apply memblock cap after memblock_add()
On arm64, during kdump kernel saves vmcore, it runs into the following bug:
...
[ 15.148919] usercopy: Kernel memory exposure attempt detected from SLUB object 'kmem_cache_node' (offset 0, size 4096)!
[ 15.159707] ------------[ cut here ]------------
[ 15.164311] kernel BUG at mm/usercopy.c:99!
[ 15.168482] Internal error: Oops - BUG: 0 [#1] SMP
[ 15.173261] Modules linked in: xfs libcrc32c crct10dif_ce ghash_ce sha2_ce sha256_arm64 sha1_ce sbsa_gwdt ast i2c_algo_bit drm_vram_helper drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops cec drm_ttm_helper ttm drm nvme nvme_core xgene_hwmon i2c_designware_platform i2c_designware_core dm_mirror dm_region_hash dm_log dm_mod overlay squashfs zstd_decompress loop
[ 15.206186] CPU: 0 PID: 542 Comm: cp Not tainted 5.16.0-rc4 #1
[ 15.212006] Hardware name: GIGABYTE R272-P30-JG/MP32-AR0-JG, BIOS F12 (SCP: 1.5.20210426) 05/13/2021
[ 15.221125] pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 15.228073] pc : usercopy_abort+0x9c/0xa0
[ 15.232074] lr : usercopy_abort+0x9c/0xa0
[ 15.236070] sp : ffff8000121abba0
[ 15.239371] x29: ffff8000121abbb0 x28: 0000000000003000 x27: 0000000000000000
[ 15.246494] x26: 0000000080000400 x25: 0000ffff885c7000 x24: 0000000000000000
[ 15.253617] x23: 000007ff80400000 x22: ffff07ff80401000 x21: 0000000000000001
[ 15.260739] x20: 0000000000001000 x19: ffff07ff80400000 x18: ffffffffffffffff
[ 15.267861] x17: 656a626f2042554c x16: 53206d6f72662064 x15: 6574636574656420
[ 15.274983] x14: 74706d6574746120 x13: 2129363930342065 x12: 7a6973202c302074
[ 15.282105] x11: ffffc8b041d1b148 x10: 00000000ffff8000 x9 : ffffc8b04012812c
[ 15.289228] x8 : 00000000ffff7fff x7 : ffffc8b041d1b148 x6 : 0000000000000000
[ 15.296349] x5 : 0000000000000000 x4 : 0000000000007fff x3 : 0000000000000000
[ 15.303471] x2 : 0000000000000000 x1 : ffff07ff8c064800 x0 : 000000000000006b
[ 15.310593] Call trace:
[ 15.313027] usercopy_abort+0x9c/0xa0
[ 15.316677] __check_heap_object+0xd4/0xf0
[ 15.320762] __check_object_size.part.0+0x160/0x1e0
[ 15.325628] __check_object_size+0x2c/0x40
[ 15.329711] copy_oldmem_page+0x7c/0x140
[ 15.333623] read_from_oldmem.part.0+0xfc/0x1c0
[ 15.338142] __read_vmcore.constprop.0+0x23c/0x350
[ 15.342920] read_vmcore+0x28/0x34
[ 15.346309] proc_reg_read+0xb4/0xf0
[ 15.349871] vfs_read+0xb8/0x1f0
[ 15.353088] ksys_read+0x74/0x100
[ 15.356390] __arm64_sys_read+0x28/0x34
...
This bug introduced by commit b261dba2fdb2 ("arm64: kdump: Remove custom
linux,usable-memory-range handling"), which moves
memblock_cap_memory_range() to fdt, but it breaches the rules that
memblock_cap_memory_range() should come after memblock_add() etc as said
in commit e888fa7bb882 ("memblock: Check memory add/cap ordering").
As a consequence, the virtual address set up by copy_oldmem_page() does
not bail out from the test of virt_addr_valid() in check_heap_object(),
and finally hits the BUG_ON().
Since memblock allocator has no idea about when the memblock is fully
populated, while efi_init() is aware, so tackling this issue by calling the
interface early_init_dt_check_for_usable_mem_range() exposed by of/fdt.
Fixes: b261dba2fdb2 ("arm64: kdump: Remove custom linux,usable-memory-range handling")
Signed-off-by: Pingfan Liu <kernelfans@gmail.com>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Zhen Lei <thunder.leizhen@huawei.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Frank Rowand <frowand.list@gmail.com>
Cc: Ard Biesheuvel <ardb@kernel.org>
Cc: Nick Terrell <terrelln@fb.com>
Cc: linux-arm-kernel@lists.infradead.org
To: devicetree@vger.kernel.org
To: linux-efi@vger.kernel.org
Acked-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Rob Herring <robh@kernel.org>
Link: https://lore.kernel.org/r/20211215021348.8766-1-kernelfans@gmail.com
2021-12-15 10:13:48 +08:00
|
|
|
|
2021-08-11 10:51:02 +02:00
|
|
|
|
2022-05-06 19:44:00 +08:00
|
|
|
|
2025-11-15 21:47:48 +08:00
|
|
|
|
2022-05-06 19:44:00 +08:00
|
|
|
|
2025-11-15 21:47:48 +08:00
|
|
|
|
2021-12-14 12:01:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-11 10:51:02 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-15 21:47:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-11 10:51:02 +02:00
|
|
|
|
|
|
|
|
|
2025-11-15 21:47:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-11 10:51:02 +02:00
|
|
|
|
2022-05-06 19:44:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-12-14 12:01:56 +08:00
|
|
|
|
2022-05-06 19:44:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-11 10:51:02 +02:00
|
|
|
|
|
|
|
|
|
2025-05-09 00:46:27 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-15 21:47:49 +08:00
|
|
|
|
|
|
|
|
|
2025-05-09 00:46:27 -07:00
|
|
|
|
|
|
|
|
|
2025-11-15 21:47:49 +08:00
|
|
|
|
|
|
|
|
|
2025-05-09 00:46:27 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
|
|
|
|
|
2016-09-27 23:54:12 +03:00
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
|
|
|
|
|
2016-01-16 15:23:42 -08:00
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
2020-11-23 11:23:13 +01:00
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
2022-06-28 14:07:05 +02:00
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-03 11:55:29 +08:00
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
2026-04-03 11:55:29 +08:00
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-16 15:23:42 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-01-16 15:23:48 -08:00
|
|
|
|
2015-10-10 01:29:30 -07:00
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
2016-01-16 15:23:48 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
2020-11-23 11:23:13 +01:00
|
|
|
|
2016-01-16 15:23:39 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
|
|
|
|
|
2022-06-28 14:07:05 +02:00
|
|
|
|
|
|
|
|
|
2019-09-10 07:58:33 +02:00
|
|
|
|
2014-03-27 08:07:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-03-18 10:40:33 +00:00
|
|
|
|
2009-11-24 03:27:10 -07:00
|
|
|
|
|
|
|
|
|
2021-11-18 12:12:11 -06:00
|
|
|
|
2009-11-24 03:27:10 -07:00
|
|
|
|
2014-04-01 23:49:03 -05:00
|
|
|
|
2021-11-18 12:12:11 -06:00
|
|
|
|
|
|
|
|
|
2009-11-24 03:27:10 -07:00
|
|
|
|
2021-11-18 12:12:11 -06:00
|
|
|
|
|
|
|
|
|
2009-11-24 03:27:10 -07:00
|
|
|
|
2010-01-30 01:45:26 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-11-24 03:27:10 -07:00
|
|
|
|
2024-11-06 11:10:27 -06:00
|
|
|
|
2010-01-30 01:45:26 -07:00
|
|
|
|
2009-11-24 03:27:10 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-06 11:10:27 -06:00
|
|
|
|
2010-01-30 01:45:26 -07:00
|
|
|
|
2009-11-24 03:27:10 -07:00
|
|
|
|
|
|
|
|
|
2021-11-18 12:12:11 -06:00
|
|
|
|
2009-11-24 03:27:10 -07:00
|
|
|
|
|
|
|
|
|
2014-04-01 23:49:03 -05:00
|
|
|
|
2009-11-24 03:37:56 -07:00
|
|
|
|
2014-04-01 23:49:03 -05:00
|
|
|
|
2009-11-24 03:37:56 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-03-18 10:40:33 +00:00
|
|
|
|
2017-06-20 16:46:28 -07:00
|
|
|
|
2010-02-01 21:34:14 -07:00
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
2010-02-01 21:34:14 -07:00
|
|
|
|
2022-12-23 12:27:47 +01:00
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
2010-02-01 21:34:14 -07:00
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
2026-04-03 13:59:47 +08:00
|
|
|
|
|
|
|
|
|
2025-11-15 21:47:50 +08:00
|
|
|
|
|
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
2010-02-01 21:34:14 -07:00
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
|
|
|
|
|
2016-12-12 16:43:02 -08:00
|
|
|
|
|
|
|
|
|
of/fdt: Ignore disabled memory nodes
When we boot a machine using a devicetree, the generic DT code goes
through all nodes with a 'device_type = "memory"' property, and collects
all memory banks mentioned there. However it does not check for the
status property, so any nodes which are explicitly "disabled" will still
be added as a memblock.
This ends up badly for QEMU, when booting with secure firmware on
arm/arm64 machines, because QEMU adds a node describing secure-only
memory:
===================
secram@e000000 {
secure-status = "okay";
status = "disabled";
reg = <0x00 0xe000000 0x00 0x1000000>;
device_type = "memory";
};
===================
The kernel will eventually use that memory block (which is located below
the main DRAM bank), but accesses to that will be answered with an
SError:
===================
[ 0.000000] Internal error: synchronous external abort: 96000050 [#1] PREEMPT SMP
[ 0.000000] Modules linked in:
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 5.18.0-rc6-00014-g10c8acb8b679 #524
[ 0.000000] Hardware name: linux,dummy-virt (DT)
[ 0.000000] pstate: 200000c5 (nzCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 0.000000] pc : new_slab+0x190/0x340
[ 0.000000] lr : new_slab+0x184/0x340
[ 0.000000] sp : ffff80000a4b3d10
....
==================
The actual crash location and call stack will be somewhat random, and
depend on the specific allocation of that physical memory range.
As the DT spec[1] explicitly mentions standard properties, add a simple
check to skip over disabled memory nodes, so that we only use memory
that is meant for non-secure code to use.
That fixes booting a QEMU arm64 VM with EL3 enabled ("secure=on"), when
not using UEFI. In this case the QEMU generated DT will be handed on
to the kernel, which will see the secram node.
This issue is reproducible when using TF-A together with U-Boot as
firmware, then booting with the "booti" command.
When using U-Boot as an UEFI provider, the code there [2] explicitly
filters for disabled nodes when generating the UEFI memory map, so we
are safe.
EDK/2 only reads the first bank of the first DT memory node [3] to learn
about memory, so we got lucky there.
[1] https://github.com/devicetree-org/devicetree-specification/blob/main/source/chapter3-devicenodes.rst#memory-node (after the table)
[2] https://source.denx.de/u-boot/u-boot/-/blob/master/lib/fdtdec.c#L1061-1063
[3] https://github.com/tianocore/edk2/blob/master/ArmVirtPkg/PrePi/FdtParser.c
Reported-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Rob Herring <robh@kernel.org>
Link: https://lore.kernel.org/r/20220517101410.3493781-1-andre.przywara@arm.com
2022-05-17 11:14:10 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-15 21:47:50 +08:00
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
2025-11-15 21:47:50 +08:00
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-15 21:47:50 +08:00
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
|
|
|
|
|
2025-11-15 21:47:50 +08:00
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
|
|
|
|
|
2025-11-15 21:47:50 +08:00
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-12-23 12:27:47 +01:00
|
|
|
|
|
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-02-01 21:34:14 -07:00
|
|
|
|
2022-12-23 12:27:47 +01:00
|
|
|
|
2010-02-01 21:34:14 -07:00
|
|
|
|
|
|
|
|
|
2021-11-18 12:12:10 -06:00
|
|
|
|
2009-12-10 23:42:21 -07:00
|
|
|
|
2021-11-18 12:12:10 -06:00
|
|
|
|
2014-04-01 23:49:03 -05:00
|
|
|
|
2019-08-23 14:24:51 +08:00
|
|
|
|
2021-11-18 12:12:10 -06:00
|
|
|
|
2009-12-10 23:42:21 -07:00
|
|
|
|
2021-11-18 12:12:10 -06:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-03 12:00:32 -06:00
|
|
|
|
|
|
|
|
|
2009-12-10 23:42:21 -07:00
|
|
|
|
2021-12-14 12:01:56 +08:00
|
|
|
|
|
|
|
|
|
2009-12-10 23:42:21 -07:00
|
|
|
|
2021-08-11 10:51:01 +02:00
|
|
|
|
2026-02-25 14:03:46 +08:00
|
|
|
|
2009-12-10 23:42:21 -07:00
|
|
|
|
2023-01-03 12:00:32 -06:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-30 22:57:33 -03:00
|
|
|
|
2009-12-10 23:42:21 -07:00
|
|
|
|
|
|
|
|
|
2022-08-18 23:00:53 +02:00
|
|
|
|
2009-12-10 23:42:21 -07:00
|
|
|
|
2023-01-03 12:00:32 -06:00
|
|
|
|
2023-01-03 12:00:31 -06:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-11-18 12:12:10 -06:00
|
|
|
|
2009-12-10 23:42:21 -07:00
|
|
|
|
|
|
|
|
|
2016-02-16 13:52:32 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-18 10:34:41 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-07 17:45:43 -07:00
|
|
|
|
2013-09-24 22:20:01 -05:00
|
|
|
|
|
|
|
|
|
2016-02-16 13:52:32 +01:00
|
|
|
|
2014-08-20 17:10:31 +02:00
|
|
|
|
2018-10-26 15:04:48 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-08-20 17:10:31 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-09-24 22:20:01 -05:00
|
|
|
|
2014-06-19 20:13:38 -07:00
|
|
|
|
2015-08-18 10:34:41 +01:00
|
|
|
|
2019-10-18 11:18:33 +08:00
|
|
|
|
|
|
|
|
|
2014-07-07 17:45:43 -07:00
|
|
|
|
|
|
|
|
|
2014-06-19 20:13:38 -07:00
|
|
|
|
2015-08-18 10:34:41 +01:00
|
|
|
|
2019-10-18 11:18:33 +08:00
|
|
|
|
|
|
|
|
|
2015-08-18 10:34:41 +01:00
|
|
|
|
2014-06-19 20:13:38 -07:00
|
|
|
|
|
|
|
|
|
2013-09-24 22:20:01 -05:00
|
|
|
|
2019-10-18 11:18:33 +08:00
|
|
|
|
|
|
|
|
|
2013-09-24 22:20:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-10-18 11:18:33 +08:00
|
|
|
|
|
|
|
|
|
2013-09-24 22:20:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-01-05 15:32:33 -06:00
|
|
|
|
|
|
|
|
|
2025-01-02 15:25:28 +08:00
|
|
|
|
2018-01-05 15:32:33 -06:00
|
|
|
|
|
|
|
|
|
2024-10-23 18:14:26 +01:00
|
|
|
|
2013-08-26 09:47:40 -05:00
|
|
|
|
2024-10-23 18:14:26 +01:00
|
|
|
|
2013-08-26 09:47:40 -05:00
|
|
|
|
|
|
|
|
|
2014-10-29 12:15:00 -06:00
|
|
|
|
2024-10-23 18:14:26 +01:00
|
|
|
|
2014-10-29 12:15:00 -06:00
|
|
|
|
|
|
|
|
|
2013-08-26 09:47:40 -05:00
|
|
|
|
2024-10-23 18:14:26 +01:00
|
|
|
|
|
|
|
|
|
2019-08-27 18:33:53 +08:00
|
|
|
|
|
|
|
|
|
2018-08-29 17:20:46 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-15 10:03:34 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-11-18 12:12:10 -06:00
|
|
|
|
2018-11-10 02:53:17 +02:00
|
|
|
|
2013-08-26 09:47:40 -05:00
|
|
|
|
2021-11-18 12:12:10 -06:00
|
|
|
|
|
|
|
|
|
2018-11-10 02:53:17 +02:00
|
|
|
|
2013-08-26 09:47:40 -05:00
|
|
|
|
|
|
|
|
|
2021-12-15 09:01:02 -06:00
|
|
|
|
2021-08-11 10:51:02 +02:00
|
|
|
|
|
|
|
|
|
2021-12-14 12:01:56 +08:00
|
|
|
|
2025-05-09 00:46:27 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-15 10:03:34 -07:00
|
|
|
|
2013-08-26 09:47:40 -05:00
|
|
|
|
2024-10-23 18:14:26 +01:00
|
|
|
|
2014-07-15 10:03:34 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-23 18:14:26 +01:00
|
|
|
|
2014-07-15 10:03:34 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-08-26 09:47:40 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-02-16 17:05:50 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-11-23 20:07:01 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-02-16 17:05:51 -08:00
|
|
|
|
|
|
|
|
|
of: reserved_mem: Restructure how the reserved memory regions are processed
Reserved memory regions defined in the devicetree can be broken up into
two groups:
i) Statically-placed reserved memory regions
i.e. regions defined with a static start address and size using the
"reg" property.
ii) Dynamically-placed reserved memory regions.
i.e. regions defined by specifying an address range where they can be
placed in memory using the "alloc_ranges" and "size" properties.
These regions are processed and set aside at boot time.
This is done in two stages as seen below:
Stage 1:
At this stage, fdt_scan_reserved_mem() scans through the child nodes of
the reserved_memory node using the flattened devicetree and does the
following:
1) If the node represents a statically-placed reserved memory region,
i.e. if it is defined using the "reg" property:
- Call memblock_reserve() or memblock_mark_nomap() as needed.
- Add the information for that region into the reserved_mem array
using fdt_reserved_mem_save_node().
i.e. fdt_reserved_mem_save_node(node, name, base, size).
2) If the node represents a dynamically-placed reserved memory region,
i.e. if it is defined using "alloc-ranges" and "size" properties:
- Add the information for that region to the reserved_mem array with
the starting address and size set to 0.
i.e. fdt_reserved_mem_save_node(node, name, 0, 0).
Note: This region is saved to the array with a starting address of 0
because a starting address is not yet allocated for it.
Stage 2:
After iterating through all the reserved memory nodes and storing their
relevant information in the reserved_mem array,fdt_init_reserved_mem() is
called and does the following:
1) For statically-placed reserved memory regions:
- Call the region specific init function using
__reserved_mem_init_node().
2) For dynamically-placed reserved memory regions:
- Call __reserved_mem_alloc_size() which is used to allocate memory
for each of these regions, and mark them as nomap if they have the
nomap property specified in the DT.
- Call the region specific init function.
The current size of the resvered_mem array is 64 as is defined by
MAX_RESERVED_REGIONS. This means that there is a limitation of 64 for
how many reserved memory regions can be specified on a system.
As systems continue to grow more and more complex, the number of
reserved memory regions needed are also growing and are starting to hit
this 64 count limit, hence the need to make the reserved_mem array
dynamically sized (i.e. dynamically allocating memory for the
reserved_mem array using membock_alloc_*).
On architectures such as arm64, memory allocated using memblock is
writable only after the page tables have been setup. This means that if
the reserved_mem array is going to be dynamically allocated, it needs to
happen after the page tables have been setup, not before.
Since the reserved memory regions are currently being processed and
added to the array before the page tables are setup, there is a need to
change the order in which some of the processing is done to allow for
the reserved_mem array to be dynamically sized.
It is possible to process the statically-placed reserved memory regions
without needing to store them in the reserved_mem array until after the
page tables have been setup because all the information stored in the
array is readily available in the devicetree and can be referenced at
any time.
Dynamically-placed reserved memory regions on the other hand get
assigned a start address only at runtime, and hence need a place to be
stored once they are allocated since there is no other referrence to the
start address for these regions.
Hence this patch changes the processing order of the reserved memory
regions in the following ways:
Step 1:
fdt_scan_reserved_mem() scans through the child nodes of
the reserved_memory node using the flattened devicetree and does the
following:
1) If the node represents a statically-placed reserved memory region,
i.e. if it is defined using the "reg" property:
- Call memblock_reserve() or memblock_mark_nomap() as needed.
2) If the node represents a dynamically-placed reserved memory region,
i.e. if it is defined using "alloc-ranges" and "size" properties:
- Call __reserved_mem_alloc_size() which will:
i) Allocate memory for the reserved region and call
memblock_mark_nomap() as needed.
ii) Call the region specific initialization function using
fdt_init_reserved_mem_node().
iii) Save the region information in the reserved_mem array using
fdt_reserved_mem_save_node().
Step 2:
1) This stage of the reserved memory processing is now only used to add
the statically-placed reserved memory regions into the reserved_mem
array using fdt_scan_reserved_mem_reg_nodes(), as well as call their
region specific initialization functions.
2) This step has also been moved to be after the page tables are
setup. Moving this will allow us to replace the reserved_mem
array with a dynamically sized array before storing the rest of
these regions.
Signed-off-by: Oreoluwa Babatunde <quic_obabatun@quicinc.com>
Link: https://lore.kernel.org/r/20241008220624.551309-2-quic_obabatun@quicinc.com
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
2024-10-08 15:06:23 -07:00
|
|
|
|
2026-03-25 10:00:22 +01:00
|
|
|
|
of: reserved_mem: Restructure how the reserved memory regions are processed
Reserved memory regions defined in the devicetree can be broken up into
two groups:
i) Statically-placed reserved memory regions
i.e. regions defined with a static start address and size using the
"reg" property.
ii) Dynamically-placed reserved memory regions.
i.e. regions defined by specifying an address range where they can be
placed in memory using the "alloc_ranges" and "size" properties.
These regions are processed and set aside at boot time.
This is done in two stages as seen below:
Stage 1:
At this stage, fdt_scan_reserved_mem() scans through the child nodes of
the reserved_memory node using the flattened devicetree and does the
following:
1) If the node represents a statically-placed reserved memory region,
i.e. if it is defined using the "reg" property:
- Call memblock_reserve() or memblock_mark_nomap() as needed.
- Add the information for that region into the reserved_mem array
using fdt_reserved_mem_save_node().
i.e. fdt_reserved_mem_save_node(node, name, base, size).
2) If the node represents a dynamically-placed reserved memory region,
i.e. if it is defined using "alloc-ranges" and "size" properties:
- Add the information for that region to the reserved_mem array with
the starting address and size set to 0.
i.e. fdt_reserved_mem_save_node(node, name, 0, 0).
Note: This region is saved to the array with a starting address of 0
because a starting address is not yet allocated for it.
Stage 2:
After iterating through all the reserved memory nodes and storing their
relevant information in the reserved_mem array,fdt_init_reserved_mem() is
called and does the following:
1) For statically-placed reserved memory regions:
- Call the region specific init function using
__reserved_mem_init_node().
2) For dynamically-placed reserved memory regions:
- Call __reserved_mem_alloc_size() which is used to allocate memory
for each of these regions, and mark them as nomap if they have the
nomap property specified in the DT.
- Call the region specific init function.
The current size of the resvered_mem array is 64 as is defined by
MAX_RESERVED_REGIONS. This means that there is a limitation of 64 for
how many reserved memory regions can be specified on a system.
As systems continue to grow more and more complex, the number of
reserved memory regions needed are also growing and are starting to hit
this 64 count limit, hence the need to make the reserved_mem array
dynamically sized (i.e. dynamically allocating memory for the
reserved_mem array using membock_alloc_*).
On architectures such as arm64, memory allocated using memblock is
writable only after the page tables have been setup. This means that if
the reserved_mem array is going to be dynamically allocated, it needs to
happen after the page tables have been setup, not before.
Since the reserved memory regions are currently being processed and
added to the array before the page tables are setup, there is a need to
change the order in which some of the processing is done to allow for
the reserved_mem array to be dynamically sized.
It is possible to process the statically-placed reserved memory regions
without needing to store them in the reserved_mem array until after the
page tables have been setup because all the information stored in the
array is readily available in the devicetree and can be referenced at
any time.
Dynamically-placed reserved memory regions on the other hand get
assigned a start address only at runtime, and hence need a place to be
stored once they are allocated since there is no other referrence to the
start address for these regions.
Hence this patch changes the processing order of the reserved memory
regions in the following ways:
Step 1:
fdt_scan_reserved_mem() scans through the child nodes of
the reserved_memory node using the flattened devicetree and does the
following:
1) If the node represents a statically-placed reserved memory region,
i.e. if it is defined using the "reg" property:
- Call memblock_reserve() or memblock_mark_nomap() as needed.
2) If the node represents a dynamically-placed reserved memory region,
i.e. if it is defined using "alloc-ranges" and "size" properties:
- Call __reserved_mem_alloc_size() which will:
i) Allocate memory for the reserved region and call
memblock_mark_nomap() as needed.
ii) Call the region specific initialization function using
fdt_init_reserved_mem_node().
iii) Save the region information in the reserved_mem array using
fdt_reserved_mem_save_node().
Step 2:
1) This stage of the reserved memory processing is now only used to add
the statically-placed reserved memory regions into the reserved_mem
array using fdt_scan_reserved_mem_reg_nodes(), as well as call their
region specific initialization functions.
2) This step has also been moved to be after the page tables are
setup. Moving this will allow us to replace the reserved_mem
array with a dynamically sized array before storing the rest of
these regions.
Signed-off-by: Oreoluwa Babatunde <quic_obabatun@quicinc.com>
Link: https://lore.kernel.org/r/20241008220624.551309-2-quic_obabatun@quicinc.com
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
2024-10-08 15:06:23 -07:00
|
|
|
|
2025-01-05 17:27:41 +00:00
|
|
|
|
2024-02-16 17:05:51 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-07-19 00:01:12 +02:00
|
|
|
|
2009-11-23 20:07:01 -07:00
|
|
|
|
2013-05-30 05:38:08 -04:00
|
|
|
|
2011-08-15 15:28:14 +08:00
|
|
|
|
2017-04-25 17:09:54 -07:00
|
|
|
|
|
|
|
|
|
2009-11-23 20:07:01 -07:00
|
|
|
|
2010-11-18 15:54:56 -08:00
|
|
|
|
2013-08-26 11:22:45 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-02-16 17:05:50 -08:00
|
|
|
|
|
|
|
|
|
2013-11-21 13:44:14 +00:00
|
|
|
|
2013-08-26 11:22:45 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-14 18:05:35 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-22 13:14:00 +01:00
|
|
|
|
2014-11-14 18:05:35 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-06-15 08:32:18 -05:00
|
|
|
|
2014-11-14 18:05:35 +01:00
|
|
|
|
|
|
|
|
|
2024-11-22 13:14:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-14 18:05:35 +01:00
|
|
|
|
|
|
|
|
|
2014-04-02 16:56:48 -05:00
|
|
|
|
|
|
|
|
|
2010-11-18 15:54:56 -08:00
|
|
|
|