All of lore.kernel.org
 help / color / mirror / Atom feed
From: lauraa@codeaurora.org (Laura Abbott)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv4 5/5] arm64: Add atomic pool for non-coherent and CMA allocations.
Date: Mon, 21 Jul 2014 15:00:52 -0700	[thread overview]
Message-ID: <53CD8D94.9060207@codeaurora.org> (raw)
In-Reply-To: <20140704133517.GA9860@ulmo>

On 7/4/2014 6:35 AM, Thierry Reding wrote:
> On Wed, Jul 02, 2014 at 11:03:38AM -0700, Laura Abbott wrote:
> [...]
>> diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
> [...]
>> +static struct gen_pool *atomic_pool;
>> +
>> +#define DEFAULT_DMA_COHERENT_POOL_SIZE  SZ_256K
>> +static size_t atomic_pool_size = DEFAULT_DMA_COHERENT_POOL_SIZE;
> 
> There doesn't seem to be much use for this since it can't be overridden
> via init_dma_coherent_pool_size like on ARM.
> 

There is still the command line option coherent_pool=<size> though

[...]
>> +	if (page) {
>> +		int ret;
>> +
>> +		atomic_pool = gen_pool_create(PAGE_SHIFT, -1);
>> +		if (!atomic_pool)
>> +			goto free_page;
>> +
>> +		addr = dma_common_contiguous_remap(page, atomic_pool_size,
>> +					VM_USERMAP, prot, atomic_pool_init);
>> +
>> +		if (!addr)
>> +			goto destroy_genpool;
>> +
>> +		memset(addr, 0, atomic_pool_size);
>> +		__dma_flush_range(addr, addr + atomic_pool_size);
>> +
>> +		ret = gen_pool_add_virt(atomic_pool, (unsigned long)addr,
>> +					page_to_phys(page),
>> +					atomic_pool_size, -1);
>> +		if (ret)
>> +			goto remove_mapping;
>> +
>> +		gen_pool_set_algo(atomic_pool,
>> +				  gen_pool_first_fit_order_align, NULL);
>> +
>> +		pr_info("DMA: preallocated %zd KiB pool for atomic allocations\n",
> 
> I think this should be "%zu" because atomic_pool_size is a size_t, not a
> ssize_t.
> 

Yes, will fix.

>> +			atomic_pool_size / 1024);
>> +		return 0;
>> +	}
>> +	goto out;
>> +
>> +remove_mapping:
>> +	dma_common_free_remap(addr, atomic_pool_size, VM_USERMAP);
>> +destroy_genpool:
>> +	gen_pool_destroy(atomic_pool);
>> +	atomic_pool == NULL;
> 
> This probably doesn't belong here.
> 

Dastardly typo.

>> +free_page:
>> +	if (!dma_release_from_contiguous(NULL, page, nr_pages))
>> +		__free_pages(page, get_order(atomic_pool_size));
> 
> You use get_order(atomic_pool_size) a lot, perhaps it should be a
> temporary variable?
> 

Yes, three usages is probably enough.

>> +out:
>> +	pr_err("DMA: failed to allocate %zx KiB pool for atomic coherent allocation\n",
>> +		atomic_pool_size / 1024);
> 
> Print in decimal rather than hexadecimal?
> 

I actually prefer hexadecimal but I should at least be consistent between
error and non-error paths.

> Thierry
> 

Thanks,
Laura

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

WARNING: multiple messages have this Message-ID (diff)
From: Laura Abbott <lauraa@codeaurora.org>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: Will Deacon <will.deacon@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	David Riley <davidriley@chromium.org>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Ritesh Harjain <ritesh.harjani@gmail.com>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCHv4 5/5] arm64: Add atomic pool for non-coherent and CMA allocations.
Date: Mon, 21 Jul 2014 15:00:52 -0700	[thread overview]
Message-ID: <53CD8D94.9060207@codeaurora.org> (raw)
In-Reply-To: <20140704133517.GA9860@ulmo>

On 7/4/2014 6:35 AM, Thierry Reding wrote:
> On Wed, Jul 02, 2014 at 11:03:38AM -0700, Laura Abbott wrote:
> [...]
>> diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
> [...]
>> +static struct gen_pool *atomic_pool;
>> +
>> +#define DEFAULT_DMA_COHERENT_POOL_SIZE  SZ_256K
>> +static size_t atomic_pool_size = DEFAULT_DMA_COHERENT_POOL_SIZE;
> 
> There doesn't seem to be much use for this since it can't be overridden
> via init_dma_coherent_pool_size like on ARM.
> 

There is still the command line option coherent_pool=<size> though

[...]
>> +	if (page) {
>> +		int ret;
>> +
>> +		atomic_pool = gen_pool_create(PAGE_SHIFT, -1);
>> +		if (!atomic_pool)
>> +			goto free_page;
>> +
>> +		addr = dma_common_contiguous_remap(page, atomic_pool_size,
>> +					VM_USERMAP, prot, atomic_pool_init);
>> +
>> +		if (!addr)
>> +			goto destroy_genpool;
>> +
>> +		memset(addr, 0, atomic_pool_size);
>> +		__dma_flush_range(addr, addr + atomic_pool_size);
>> +
>> +		ret = gen_pool_add_virt(atomic_pool, (unsigned long)addr,
>> +					page_to_phys(page),
>> +					atomic_pool_size, -1);
>> +		if (ret)
>> +			goto remove_mapping;
>> +
>> +		gen_pool_set_algo(atomic_pool,
>> +				  gen_pool_first_fit_order_align, NULL);
>> +
>> +		pr_info("DMA: preallocated %zd KiB pool for atomic allocations\n",
> 
> I think this should be "%zu" because atomic_pool_size is a size_t, not a
> ssize_t.
> 

Yes, will fix.

>> +			atomic_pool_size / 1024);
>> +		return 0;
>> +	}
>> +	goto out;
>> +
>> +remove_mapping:
>> +	dma_common_free_remap(addr, atomic_pool_size, VM_USERMAP);
>> +destroy_genpool:
>> +	gen_pool_destroy(atomic_pool);
>> +	atomic_pool == NULL;
> 
> This probably doesn't belong here.
> 

Dastardly typo.

>> +free_page:
>> +	if (!dma_release_from_contiguous(NULL, page, nr_pages))
>> +		__free_pages(page, get_order(atomic_pool_size));
> 
> You use get_order(atomic_pool_size) a lot, perhaps it should be a
> temporary variable?
> 

Yes, three usages is probably enough.

>> +out:
>> +	pr_err("DMA: failed to allocate %zx KiB pool for atomic coherent allocation\n",
>> +		atomic_pool_size / 1024);
> 
> Print in decimal rather than hexadecimal?
> 

I actually prefer hexadecimal but I should at least be consistent between
error and non-error paths.

> Thierry
> 

Thanks,
Laura

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Laura Abbott <lauraa@codeaurora.org>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: Will Deacon <will.deacon@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	David Riley <davidriley@chromium.org>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Ritesh Harjain <ritesh.harjani@gmail.com>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCHv4 5/5] arm64: Add atomic pool for non-coherent and CMA allocations.
Date: Mon, 21 Jul 2014 15:00:52 -0700	[thread overview]
Message-ID: <53CD8D94.9060207@codeaurora.org> (raw)
In-Reply-To: <20140704133517.GA9860@ulmo>

On 7/4/2014 6:35 AM, Thierry Reding wrote:
> On Wed, Jul 02, 2014 at 11:03:38AM -0700, Laura Abbott wrote:
> [...]
>> diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
> [...]
>> +static struct gen_pool *atomic_pool;
>> +
>> +#define DEFAULT_DMA_COHERENT_POOL_SIZE  SZ_256K
>> +static size_t atomic_pool_size = DEFAULT_DMA_COHERENT_POOL_SIZE;
> 
> There doesn't seem to be much use for this since it can't be overridden
> via init_dma_coherent_pool_size like on ARM.
> 

There is still the command line option coherent_pool=<size> though

[...]
>> +	if (page) {
>> +		int ret;
>> +
>> +		atomic_pool = gen_pool_create(PAGE_SHIFT, -1);
>> +		if (!atomic_pool)
>> +			goto free_page;
>> +
>> +		addr = dma_common_contiguous_remap(page, atomic_pool_size,
>> +					VM_USERMAP, prot, atomic_pool_init);
>> +
>> +		if (!addr)
>> +			goto destroy_genpool;
>> +
>> +		memset(addr, 0, atomic_pool_size);
>> +		__dma_flush_range(addr, addr + atomic_pool_size);
>> +
>> +		ret = gen_pool_add_virt(atomic_pool, (unsigned long)addr,
>> +					page_to_phys(page),
>> +					atomic_pool_size, -1);
>> +		if (ret)
>> +			goto remove_mapping;
>> +
>> +		gen_pool_set_algo(atomic_pool,
>> +				  gen_pool_first_fit_order_align, NULL);
>> +
>> +		pr_info("DMA: preallocated %zd KiB pool for atomic allocations\n",
> 
> I think this should be "%zu" because atomic_pool_size is a size_t, not a
> ssize_t.
> 

Yes, will fix.

>> +			atomic_pool_size / 1024);
>> +		return 0;
>> +	}
>> +	goto out;
>> +
>> +remove_mapping:
>> +	dma_common_free_remap(addr, atomic_pool_size, VM_USERMAP);
>> +destroy_genpool:
>> +	gen_pool_destroy(atomic_pool);
>> +	atomic_pool == NULL;
> 
> This probably doesn't belong here.
> 

Dastardly typo.

>> +free_page:
>> +	if (!dma_release_from_contiguous(NULL, page, nr_pages))
>> +		__free_pages(page, get_order(atomic_pool_size));
> 
> You use get_order(atomic_pool_size) a lot, perhaps it should be a
> temporary variable?
> 

Yes, three usages is probably enough.

>> +out:
>> +	pr_err("DMA: failed to allocate %zx KiB pool for atomic coherent allocation\n",
>> +		atomic_pool_size / 1024);
> 
> Print in decimal rather than hexadecimal?
> 

I actually prefer hexadecimal but I should at least be consistent between
error and non-error paths.

> Thierry
> 

Thanks,
Laura

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

  reply	other threads:[~2014-07-21 22:00 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-02 18:03 [PATCHv4 0/5] DMA Atomic pool for arm64 Laura Abbott
2014-07-02 18:03 ` Laura Abbott
2014-07-02 18:03 ` Laura Abbott
2014-07-02 18:03 ` [PATCHv4 1/5] lib/genalloc.c: Add power aligned algorithm Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-03 18:10   ` Will Deacon
2014-07-03 18:10     ` Will Deacon
2014-07-03 18:10     ` Will Deacon
2014-07-09 22:35     ` Olof Johansson
2014-07-09 22:35       ` Olof Johansson
2014-07-09 22:35       ` Olof Johansson
2014-07-02 18:03 ` [PATCHv4 2/5] lib/genalloc.c: Add genpool range check function Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-03 18:14   ` Will Deacon
2014-07-03 18:14     ` Will Deacon
2014-07-03 18:14     ` Will Deacon
2014-07-09 22:33   ` Olof Johansson
2014-07-09 22:33     ` Olof Johansson
2014-07-09 22:33     ` Olof Johansson
2014-07-21 19:51     ` Laura Abbott
2014-07-21 19:51       ` Laura Abbott
2014-07-21 19:51       ` Laura Abbott
2014-07-22 15:50       ` Catalin Marinas
2014-07-22 15:50         ` Catalin Marinas
2014-07-22 15:50         ` Catalin Marinas
2014-07-02 18:03 ` [PATCHv4 3/5] common: dma-mapping: Introduce common remapping functions Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-09 22:46   ` Olof Johansson
2014-07-09 22:46     ` Olof Johansson
2014-07-09 22:46     ` Olof Johansson
2014-07-18 14:13     ` Catalin Marinas
2014-07-18 14:13       ` Catalin Marinas
2014-07-18 14:13       ` Catalin Marinas
2014-07-18 13:53   ` Catalin Marinas
2014-07-18 13:53     ` Catalin Marinas
2014-07-18 13:53     ` Catalin Marinas
2014-07-21 19:33     ` Laura Abbott
2014-07-21 19:33       ` Laura Abbott
2014-07-21 19:33       ` Laura Abbott
2014-07-22 16:04       ` Catalin Marinas
2014-07-22 16:04         ` Catalin Marinas
2014-07-22 16:04         ` Catalin Marinas
2014-07-02 18:03 ` [PATCHv4 4/5] arm: use genalloc for the atomic pool Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-04 13:42   ` Thierry Reding
2014-07-04 13:42     ` Thierry Reding
2014-07-21 21:22     ` Laura Abbott
2014-07-21 21:22       ` Laura Abbott
2014-07-21 21:22       ` Laura Abbott
2014-07-02 18:03 ` [PATCHv4 5/5] arm64: Add atomic pool for non-coherent and CMA allocations Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-04 13:35   ` Thierry Reding
2014-07-04 13:35     ` Thierry Reding
2014-07-21 22:00     ` Laura Abbott [this message]
2014-07-21 22:00       ` Laura Abbott
2014-07-21 22:00       ` Laura Abbott
2014-07-18 13:43   ` Catalin Marinas
2014-07-18 13:43     ` Catalin Marinas
2014-07-18 13:43     ` Catalin Marinas
2014-07-21 22:36     ` Laura Abbott
2014-07-21 22:36       ` Laura Abbott
2014-07-21 22:36       ` Laura Abbott
2014-07-22 15:56       ` Catalin Marinas
2014-07-22 15:56         ` Catalin Marinas
2014-07-22 15:56         ` Catalin Marinas
2014-07-22 18:06   ` Arnd Bergmann
2014-07-22 18:06     ` Arnd Bergmann
2014-07-22 18:06     ` Arnd Bergmann
2014-07-22 21:03     ` Catalin Marinas
2014-07-22 21:03       ` Catalin Marinas
2014-07-22 21:03       ` Catalin Marinas
2014-07-22 23:51       ` Laura Abbott
2014-07-22 23:51         ` Laura Abbott
2014-07-22 23:51         ` Laura Abbott
2014-07-23 11:12       ` Arnd Bergmann
2014-07-23 11:12         ` Arnd Bergmann
2014-07-23 11:12         ` Arnd Bergmann
  -- strict thread matches above, loose matches on Subject: below --
2014-07-23  1:35 [PATCHv4 0/5] Atomic pool for arm64 Laura Abbott
2014-07-23  1:35 ` [PATCHv4 5/5] arm64: Add atomic pool for non-coherent and CMA allocations Laura Abbott
2014-07-23  1:35   ` Laura Abbott
2014-07-23  1:35   ` Laura Abbott

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53CD8D94.9060207@codeaurora.org \
    --to=lauraa@codeaurora.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.