All of lore.kernel.org
 help / color / mirror / Atom feed
From: adharmap@codeaurora.org (Abhijeet Dharmapurikar)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC 0/2] fix dma_map_sg not to do barriers for each buffer
Date: Wed, 10 Feb 2010 15:28:17 -0800	[thread overview]
Message-ID: <4B734111.6070206@codeaurora.org> (raw)
In-Reply-To: <20100210212156.GB30854@n2100.arm.linux.org.uk>

Russell King - ARM Linux wrote:
> On Wed, Feb 10, 2010 at 12:37:28PM -0800, adharmap at codeaurora.org wrote:
>> From: Abhijeet Dharmapurikar <adharmap@quicinc.com>
>>
>> Please refer to the post here
>> http://lkml.org/lkml/2010/1/4/347
>>
>> These changes are to introduce barrierless dma_map_area and dma_unmap_area and
>> use them to map the buffers in the scatterlist. For the last buffer, call
>> the normal dma_map_area(aka with barriers) effectively executing the barrier
>> at the end of the operation.
> 
> What if we make dma_map_area and dma_unmap_area both be barrier-less,
> and instead have a separate dma_barrier method - eg, something like the
> attached?
> 
> This might allow for better I-cache usage by not having to duplicate the
> DMA cache coherence functions.

Agree, thanks for pointing this and for the patch.


> 
> @@ -369,6 +372,7 @@ static inline dma_addr_t dma_map_page(struct device *dev, struct page *page,
>  	BUG_ON(!valid_dma_direction(dir));
>  
>  	__dma_page_cpu_to_dev(page, offset, size, dir);
> +	__dma_barrier(dir);
>  
>  	return page_to_dma(dev, page) + offset;
>  }

dma_map_page is going to execute the barrier here.


>  /**
>   * dma_map_sg - map a set of SG buffers for streaming mode DMA
>   * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
> @@ -537,6 +544,9 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
>  		if (dma_mapping_error(dev, s->dma_address))
>  			goto bad_mapping;
>  	}
> +
> +	__dma_barrier(dir);
> +
>  	return nents;

This would call the barrier in addition to the ones executed by 
dma_map_page.

We would need to call __dma_page_cpu_to_dev instead of dma_map_page and 
do the barrier before returning.

WARNING: multiple messages have this Message-ID (diff)
From: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: linux-arm-msm@vger.kernel.org,
	Abhijeet Dharmapurikar <adharmap@quicinc.com>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Catalin Marinas <catalin.marinas@arm.com>
Subject: Re: [RFC 0/2] fix dma_map_sg not to do barriers for each buffer
Date: Wed, 10 Feb 2010 15:28:17 -0800	[thread overview]
Message-ID: <4B734111.6070206@codeaurora.org> (raw)
In-Reply-To: <20100210212156.GB30854@n2100.arm.linux.org.uk>

Russell King - ARM Linux wrote:
> On Wed, Feb 10, 2010 at 12:37:28PM -0800, adharmap@codeaurora.org wrote:
>> From: Abhijeet Dharmapurikar <adharmap@quicinc.com>
>>
>> Please refer to the post here
>> http://lkml.org/lkml/2010/1/4/347
>>
>> These changes are to introduce barrierless dma_map_area and dma_unmap_area and
>> use them to map the buffers in the scatterlist. For the last buffer, call
>> the normal dma_map_area(aka with barriers) effectively executing the barrier
>> at the end of the operation.
> 
> What if we make dma_map_area and dma_unmap_area both be barrier-less,
> and instead have a separate dma_barrier method - eg, something like the
> attached?
> 
> This might allow for better I-cache usage by not having to duplicate the
> DMA cache coherence functions.

Agree, thanks for pointing this and for the patch.


> 
> @@ -369,6 +372,7 @@ static inline dma_addr_t dma_map_page(struct device *dev, struct page *page,
>  	BUG_ON(!valid_dma_direction(dir));
>  
>  	__dma_page_cpu_to_dev(page, offset, size, dir);
> +	__dma_barrier(dir);
>  
>  	return page_to_dma(dev, page) + offset;
>  }

dma_map_page is going to execute the barrier here.


>  /**
>   * dma_map_sg - map a set of SG buffers for streaming mode DMA
>   * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
> @@ -537,6 +544,9 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
>  		if (dma_mapping_error(dev, s->dma_address))
>  			goto bad_mapping;
>  	}
> +
> +	__dma_barrier(dir);
> +
>  	return nents;

This would call the barrier in addition to the ones executed by 
dma_map_page.

We would need to call __dma_page_cpu_to_dev instead of dma_map_page and 
do the barrier before returning.

  reply	other threads:[~2010-02-10 23:28 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-10 20:37 [RFC 0/2] fix dma_map_sg not to do barriers for each buffer adharmap at codeaurora.org
2010-02-10 20:37 ` adharmap
2010-02-10 20:37 ` [PATCH 1/2] dma: define barrierless versions of map and unmap area adharmap at codeaurora.org
2010-02-10 20:37   ` adharmap
2010-02-10 20:37 ` [PATCH 2/2] dma: fix scatter-gather api to use barrierless map/unmap functions adharmap at codeaurora.org
2010-02-10 20:37   ` adharmap
2010-02-10 21:21 ` [RFC 0/2] fix dma_map_sg not to do barriers for each buffer Russell King - ARM Linux
2010-02-10 21:21   ` Russell King - ARM Linux
2010-02-10 23:28   ` Abhijeet Dharmapurikar [this message]
2010-02-10 23:28     ` Abhijeet Dharmapurikar
2010-02-10 23:57     ` Russell King - ARM Linux
2010-02-10 23:57       ` Russell King - ARM Linux
2010-02-11 21:36       ` Abhijeet Dharmapurikar
2010-02-11 21:36         ` Abhijeet Dharmapurikar
2010-02-11 10:45   ` Catalin Marinas
2010-02-11 10:45     ` Catalin Marinas
2010-02-11 10:53     ` Catalin Marinas
2010-02-11 10:53       ` Catalin Marinas
2010-02-11 11:01       ` Russell King - ARM Linux
2010-02-11 11:01         ` Russell King - ARM Linux
2010-02-11 11:03         ` Catalin Marinas
2010-02-11 11:03           ` Catalin Marinas
2010-02-11 10:56     ` Russell King - ARM Linux
2010-02-11 10:56       ` Russell King - ARM Linux
2010-02-11 19:13       ` Abhijeet Dharmapurikar
2010-02-11 19:13         ` Abhijeet Dharmapurikar
2010-02-10 21:27 ` Randy Dunlap
2010-02-10 21:27   ` Randy Dunlap
2010-02-10 22:40   ` Russell King - ARM Linux
2010-02-10 22:40     ` Russell King - ARM Linux
2010-02-10 23:10     ` Abhijeet Dharmapurikar
2010-02-10 23:10       ` Abhijeet Dharmapurikar
2010-02-11  0:39   ` FUJITA Tomonori
2010-02-11  0:39     ` FUJITA Tomonori
2010-02-11  0:41     ` Randy Dunlap
2010-02-11  0:41       ` Randy Dunlap

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=4B734111.6070206@codeaurora.org \
    --to=adharmap@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.