Hi Linus,
The major changes for 3.17 already went via Greg-KH's tree this time
as well; this is a small pull request for dma-buf - all documentation
related.
Could you please pull?
The following changes since commit f1bd473f95e02bc382d4dae94d7f82e2a455e05d:
Merge branch 'sec-v3.17-rc2' of
git://git.kernel.org/pub/scm/linux/kernel/git/sergeh/linux-security
(2014-08-27 17:32:37 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/sumits/dma-buf.git
tags/for-3.17-rc3
for you to fetch changes up to 1f58d9465c568eb47cab939bbc4f30ae51863295:
dma-buf/fence: Fix one more kerneldoc warning (2014-08-28 11:59:38 +0530)
----------------------------------------------------------------
Small dma-buf pull request for 3.17-rc3
----------------------------------------------------------------
Gioh Kim (1):
Documentation/dma-buf-sharing.txt: update API descriptions
Thierry Reding (2):
dma-buf/fence: Fix a kerneldoc warning
dma-buf/fence: Fix one more kerneldoc warning
Documentation/dma-buf-sharing.txt | 14 ++++++++------
drivers/dma-buf/fence.c | 2 +-
include/linux/seqno-fence.h | 1 +
3 files changed, 10 insertions(+), 7 deletions(-)
Hello,
Russell King recently noticed that limiting default CMA region only to
low memory on ARM architecture causes serious memory management issues
with machines having a lot of memory (which is mainly available as high
memory). More information can be found the following thread:
http://thread.gmane.org/gmane.linux.ports.arm.kernel/348441/
Those two patches removes this limit letting kernel to put default CMA
region into high memory when this is possible (there is enough high
memory available and architecture specific DMA limit fits).
This should solve strange OOM issues on systems with lots of RAM
(i.e. >1GiB) and large (>256M) CMA area.
Best regards
Marek Szyprowski
Samsung R&D Institute Poland
Marek Szyprowski (2):
mm: cma: adjust address limit to avoid hitting low/high memory
boundary
ARM: mm: don't limit default CMA region only to low memory
arch/arm/mm/init.c | 2 +-
mm/cma.c | 21 +++++++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
--
1.9.2
Hello,
This is one more respin of the patches which add support for creating
reserved memory regions defined in device tree. The last attempt
(http://lists.linaro.org/pipermail/linaro-mm-sig/2014-February/003738.html)
ended in merging only half of the code, so right now we have complete
documentation merged and only basic code, which implements a half of it
is written in the documentation. Although the merged patches allow to
reserve memory, there is no way of using it for devices and drivers.
This situation makes CMA rather useless, as the main architecture (ARM),
which used it, has been converted from board-file based system
initialization to device tree. Thus there is no place to use direct
calls to dma_declare_contiguous() and some new solution, which bases on
device tree, is urgently needed.
This patch series fixes this issue. It provides two, already widely
discussed and already present in the kernel, drivers for reserved
memory: first based on DMA-coherent allocator, second using Contiguous
Memory Allocator. The first one nicely implements typical 'carved out'
reserved memory way of allocating contiguous buffers in a kernel-style
way. The memory is used exclusively by devices assigned to the given
memory region. The second one allows to reuse reserved memory for
movable kernel pages (like disk buffers, anonymous memory) and migrates
it out when device to allocates contiguous memory buffer. Both driver
provides memory buffers via standard dma-mapping API.
The patches have been rebased on top of latest CMA and mm changes merged
to akmp kernel tree.
To define a 64MiB CMA region following node is needed:
multimedia_reserved: multimedia_mem_region {
compatible = "shared-dma-pool";
reusable;
size = <0x4000000>;
alignment = <0x400000>;
};
Similarly, one can define 64MiB region with DMA coherent memory:
multimedia_reserved: multimedia_mem_region {
compatible = "shared-dma-pool";
no-map;
size = <0x4000000>;
alignment = <0x400000>;
};
Then the defined region can be assigned to devices:
scaler: scaler@12500000 {
memory-region = <&multimedia_reserved>;
/* ... */
};
codec: codec@12600000 {
memory-region = <&multimedia_reserved>;
/* ... */
};
Best regards
Marek Szyprowski
Samsung R&D Institute Poland
Changes since v1:
(http://www.spinics.net/lists/arm-kernel/msg343702.html)
- fixed possible memory leak in case of reserved memory allocation failure
(thanks to Joonsoo Kim)
Changes since the version posted in '[PATCH v6 00/11] reserved-memory
regions/CMA in devicetree, again' thread
http://lists.linaro.org/pipermail/linaro-mm-sig/2014-February/003738.html:
- rebased on top of '[PATCH v3 -next 0/9] CMA: generalize CMA reserved
area management code' patch series on v3.16-rc3
- improved dma-coherent driver, now it correctly handles assigning more
than one device to the given memory region
Patch summary:
Marek Szyprowski (4):
drivers: of: add automated assignment of reserved regions to client
devices
drivers: of: initialize and assign reserved memory to newly created
devices
drivers: dma-coherent: add initialization from device tree
drivers: dma-contiguous: add initialization from device tree
drivers/base/dma-coherent.c | 40 +++++++++++++++++++++++
drivers/base/dma-contiguous.c | 60 +++++++++++++++++++++++++++++++++++
drivers/of/of_reserved_mem.c | 70 +++++++++++++++++++++++++++++++++++++++++
drivers/of/platform.c | 7 +++++
include/linux/cma.h | 3 ++
include/linux/of_reserved_mem.h | 7 +++++
mm/cma.c | 62 +++++++++++++++++++++++++++++-------
7 files changed, 238 insertions(+), 11 deletions(-)
--
1.9.2
Hello David,
I have tested the 6 patches send on mailing list since you merge the sti driver.
I haven't seen issue with those patches except for the missing
dependency on Kconfig
where I have change "depends on" to "select".
You can found the patches in this directory:
git://git.linaro.org/people/benjamin.gaignard/kernel.git
on drm-3.17-rc2-sti-fixes branch.
Regards,
Benjamin
Jingoo Han (1):
drm: sti: Add missing dependency on RESET_CONTROLLER
Kiran Padwal (1):
drm: sti: Make of_device_id array const
Wei Yongjun (4):
drm: sti: tvout: fix return value check in sti_tvout_probe()
drm: sti: hdmi: fix return value check in sti_hdmi_probe()
drm: sti: hda: fix return value check in sti_hda_probe()
drm: sti: Fix return value check in sti_drm_platform_probe()
drivers/gpu/drm/sti/Kconfig | 1 +
drivers/gpu/drm/sti/sti_drm_drv.c | 4 ++--
drivers/gpu/drm/sti/sti_hda.c | 10 +++++-----
drivers/gpu/drm/sti/sti_hdmi.c | 10 +++++-----
drivers/gpu/drm/sti/sti_tvout.c | 6 +++---
5 files changed, 16 insertions(+), 15 deletions(-)
--
1.9.1
Hello,
This is another approach to finish support for reserved memory regions
defined in device tree. Previous attempts
(http://lists.linaro.org/pipermail/linaro-mm-sig/2014-February/003738.html
and https://lkml.org/lkml/2014/7/14/108) ended in merging parts of the
code and documentation. Merged patches allow to reserve memory, but
there is still no reserved memory drivers nor any code that actually
uses reserved memory regions.
The final conclusion from the above mentioned threads is that there is
no automated reserved memory initialization. All drivers that want to
use reserved memory, should initialize it on their own.
This patch series provides two driver for reserved memory regions (one
based on CMA and one based on dma_coherent allocator). The main
improvement comparing to the previous version is removal of automated
reserved memory for every device and support for named memory regions.
Support for more than one reserved memory region can be considered as a
separate DMA address space, so support for more than one region per
device has been implemented the same way as support for separate IO/DMA
address spaces in my Exynos IOMMU dma-mapping proposal:
http://thread.gmane.org/gmane.linux.kernel.samsung-soc/36079
Best regards
Marek Szyprowski
Samsung R&D Institute Poland
Changes since '[PATCH v2 RESEND 0/4] CMA & device tree, once again' version:
(https://lkml.org/lkml/2014/7/14/108)
- added return error value to of_reserved_mem_device_init()
- added support for named memory regions (so more than one region can be
defined per device)
- added usage example - converted custom reserved memory code used by
s5p-mfc driver to the generic reserved memory handling code
Patch summary:
Marek Szyprowski (7):
drivers: of: add return value to of_reserved_mem_device_init
drivers: of: add support for named memory regions
drivers: dma-coherent: add initialization from device tree
drivers: dma-contiguous: add initialization from device tree
media: s5p-mfc: replace custom reserved memory init code with generic
one
ARM: Exynos: convert MFC to generic reserved memory bindings
ARM: DTS: exynos4412-odroid*: enable MFC device
.../devicetree/bindings/media/s5p-mfc.txt | 16 +--
.../bindings/reserved-memory/reserved-memory.txt | 6 +-
arch/arm/boot/dts/exynos4210-origen.dts | 22 +++-
arch/arm/boot/dts/exynos4210-smdkv310.dts | 22 +++-
arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 24 ++++
arch/arm/boot/dts/exynos4412-origen.dts | 22 +++-
arch/arm/boot/dts/exynos4412-smdk4412.dts | 22 +++-
arch/arm/boot/dts/exynos5250-arndale.dts | 22 +++-
arch/arm/boot/dts/exynos5250-smdk5250.dts | 22 +++-
arch/arm/boot/dts/exynos5420-arndale-octa.dts | 22 +++-
arch/arm/boot/dts/exynos5420-smdk5420.dts | 22 +++-
arch/arm/mach-exynos/exynos.c | 18 ---
arch/arm/mach-exynos/mfc.h | 16 ---
arch/arm/plat-samsung/Kconfig | 5 -
arch/arm/plat-samsung/Makefile | 1 -
arch/arm/plat-samsung/s5p-dev-mfc.c | 94 --------------
drivers/base/dma-coherent.c | 138 ++++++++++++++++++---
drivers/base/dma-contiguous.c | 71 +++++++++++
drivers/media/platform/s5p-mfc/s5p_mfc.c | 102 ++++++---------
drivers/of/of_reserved_mem.c | 102 ++++++++++-----
include/linux/cma.h | 3 +
include/linux/of_reserved_mem.h | 9 +-
mm/cma.c | 62 +++++++--
23 files changed, 552 insertions(+), 291 deletions(-)
delete mode 100644 arch/arm/mach-exynos/mfc.h
delete mode 100644 arch/arm/plat-samsung/s5p-dev-mfc.c
--
1.9.2
Hi Randy,
~ typing on a mobile device, kindly excuse any typos
On Aug 17, 2014 2:45 AM, "Randy Dunlap" <rdunlap(a)infradead.org> wrote:
>
> From: Randy Dunlap <rdunlap(a)infradead.org>
>
> Fix kernel-doc warning, missing parameter description:
>
> Warning(..//include/linux/seqno-fence.h:99): No description found for
parameter 'cond'
Thanks for your patch; this is already fixed by Thierry Reading's patch and
is queued in for-next. [1]
>
> Signed-off-by: Randy Dunlap <rdunlap(a)infradead.org>
> Cc: Rob Clark <robdclark(a)gmail.com>
> Cc: Maarten Lankhorst <maarten.lankhorst(a)canonical.com>
> ---
> include/linux/seqno-fence.h | 1 +
> 1 file changed, 1 insertion(+)
>
> Index: lnx-317-rc1/include/linux/seqno-fence.h
> ===================================================================
> --- lnx-317-rc1.orig/include/linux/seqno-fence.h
> +++ lnx-317-rc1/include/linux/seqno-fence.h
> @@ -62,6 +62,7 @@ to_seqno_fence(struct fence *fence)
> * @context: the execution context this fence is a part of
> * @seqno_ofs: the offset within @sync_buf
> * @seqno: the sequence # to signal on
> + * @cond: the fence condition to check
> * @ops: the fence_ops for operations on this seqno fence
> *
> * This function initializes a struct seqno_fence with passed parameters,
Best regards,
Sumit.
[1]: https://lkml.org/lkml/2014/8/8/191
From: Thierry Reding <treding(a)nvidia.com>
The seqno_fence_init() function's cond argument isn't described in the
kerneldoc comment. Fix that to silence a warning when building DocBook
documentation.
Signed-off-by: Thierry Reding <treding(a)nvidia.com>
---
include/linux/seqno-fence.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/linux/seqno-fence.h b/include/linux/seqno-fence.h
index 3d6003de4b0d..a1ba6a5ccdd6 100644
--- a/include/linux/seqno-fence.h
+++ b/include/linux/seqno-fence.h
@@ -62,6 +62,7 @@ to_seqno_fence(struct fence *fence)
* @context: the execution context this fence is a part of
* @seqno_ofs: the offset within @sync_buf
* @seqno: the sequence # to signal on
+ * @cond: fence wait condition
* @ops: the fence_ops for operations on this seqno fence
*
* This function initializes a struct seqno_fence with passed parameters,
--
2.0.4
From: Thierry Reding <treding(a)nvidia.com>
kerneldoc doesn't know how to parse variables, so don't let it try.
Signed-off-by: Thierry Reding <treding(a)nvidia.com>
---
drivers/dma-buf/fence.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/dma-buf/fence.c b/drivers/dma-buf/fence.c
index 4222cb2aa96a..7bb9d65d9a2c 100644
--- a/drivers/dma-buf/fence.c
+++ b/drivers/dma-buf/fence.c
@@ -29,7 +29,7 @@
EXPORT_TRACEPOINT_SYMBOL(fence_annotate_wait_on);
EXPORT_TRACEPOINT_SYMBOL(fence_emit);
-/**
+/*
* fence context counter: each execution context should have its own
* fence context, this allows checking if fences belong to the same
* context or not. One device can have multiple separate contexts,
--
2.0.4
Dear Joonsoo,
I tried your changes which are present at the below link.
https://github.com/JoonsooKim/linux/tree/cma-fix-up-v3.0-next-20140625
But unfortunately for me it did not help much.
After running various apps that uses ION nonmovable memory, it fails to allocate memory after some time. When I see the pagetypeinfo shows lots of CMA pages available and non-movable were very less and thus nonmovable allocation were failing.
However I noticed the failure was little delayed.
Also I noticed that the CMA utilized and the CMA free is not matching with total CMA size.
In my system RAM is 256MB and CMA configured is 56MB.
And free memory was hanging around 30-40MB during failure.
Am I missing something?
My kernel version is 3.10 and I applied the changes manually.
If there are other sets of patches that needs to be applied, please let me know.
Note, I did not apply the ALLOC_CMA removal patches.
Now I am experimenting more and will share if I have any findings.
Thank you!
Pintu
Sent from Samsung Mobile
-------- Original message --------
From: Joonsoo Kim <iamjoonsoo.kim(a)lge.com>
Date: 29/07/2014 5:06 PM (GMT+09:00)
To: 'pintu_agarwal' <pintu_agarwal(a)yahoo.com>,linux-mm@kvack.org,linux-arm-kernel@lists.infradead.org,linaro-mm-sig@lists.linaro.org,ritesh.list@gmail.com
Cc: pintu.k@outlook.com,pintu.k@samsung.com,vishu_1385@yahoo.com,m.szyprowski@samsung.com,mina86@mina86.com,ngupta@vflare.org,iqbalblr@gmail.com
Subject: RE: [linux-3.10.17] Could not allocate memory from free CMA areas
From: pintu_agarwal [mailto:pintu_agarwal@yahoo.com]
Sent: Friday, July 25, 2014 12:15 AM
To: PINTU KUMAR; linux-mm(a)kvack.org; linux-arm-kernel(a)lists.infradead.org; linaro-mm-sig(a)lists.linaro.org; iamjoonsoo.kim(a)lge.com; ritesh.list(a)gmail.com
Cc: pintu.k(a)outlook.com; pintu.k(a)samsung.com; vishu_1385(a)yahoo.com; m.szyprowski(a)samsung.com; mina86(a)mina86.com; ngupta(a)vflare.org; iqbalblr(a)gmail.com
Subject: RE: [linux-3.10.17] Could not allocate memory from free CMA areas
Dear joonsoo kim,
> I have your patches for: Aggressively allocate memory from cma ....
> We are facing almost similar problem here.
> If any of your patches still working for you please let us know here.
> I would like to try those approach.
Hello,
I stopped to implement it, because there are other bugs on CMA related codes.
Although aggressively allocate... doesn't have bugs itself, it enlarges
existing freepage counting bugs significantly so I'm first trying to fix
those bugs. See the below link.
https://lkml.org/lkml/2014/7/4/79
I will restart to implement aggressively... after fixing these bugs.
If you have interest on next version of aggressively allocate..., see the
following link.
https://github.com/JoonsooKim/linux/tree/cma-fix-up-v3.0-next-20140625
Thanks.