block: add a helper function to merge the segments
This patch adds a helper function whether a queue can merge the segments by the DMA MAP layer (e.g. via IOMMU). Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Simon Horman <horms+renesas@verge.net.au Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
db91427b65
commit
45147fb522
|
@ -12,6 +12,7 @@
|
||||||
#include <linux/lcm.h>
|
#include <linux/lcm.h>
|
||||||
#include <linux/jiffies.h>
|
#include <linux/jiffies.h>
|
||||||
#include <linux/gfp.h>
|
#include <linux/gfp.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
#include "blk.h"
|
#include "blk.h"
|
||||||
#include "blk-wbt.h"
|
#include "blk-wbt.h"
|
||||||
|
@ -832,6 +833,28 @@ void blk_queue_write_cache(struct request_queue *q, bool wc, bool fua)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(blk_queue_write_cache);
|
EXPORT_SYMBOL_GPL(blk_queue_write_cache);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* blk_queue_can_use_dma_map_merging - configure queue for merging segments.
|
||||||
|
* @q: the request queue for the device
|
||||||
|
* @dev: the device pointer for dma
|
||||||
|
*
|
||||||
|
* Tell the block layer about merging the segments by dma map of @q.
|
||||||
|
*/
|
||||||
|
bool blk_queue_can_use_dma_map_merging(struct request_queue *q,
|
||||||
|
struct device *dev)
|
||||||
|
{
|
||||||
|
unsigned long boundary = dma_get_merge_boundary(dev);
|
||||||
|
|
||||||
|
if (!boundary)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* No need to update max_segment_size. see blk_queue_virt_boundary() */
|
||||||
|
blk_queue_virt_boundary(q, boundary);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(blk_queue_can_use_dma_map_merging);
|
||||||
|
|
||||||
static int __init blk_settings_init(void)
|
static int __init blk_settings_init(void)
|
||||||
{
|
{
|
||||||
blk_max_low_pfn = max_low_pfn - 1;
|
blk_max_low_pfn = max_low_pfn - 1;
|
||||||
|
|
|
@ -1085,6 +1085,8 @@ extern void blk_queue_dma_alignment(struct request_queue *, int);
|
||||||
extern void blk_queue_update_dma_alignment(struct request_queue *, int);
|
extern void blk_queue_update_dma_alignment(struct request_queue *, int);
|
||||||
extern void blk_queue_rq_timeout(struct request_queue *, unsigned int);
|
extern void blk_queue_rq_timeout(struct request_queue *, unsigned int);
|
||||||
extern void blk_queue_write_cache(struct request_queue *q, bool enabled, bool fua);
|
extern void blk_queue_write_cache(struct request_queue *q, bool enabled, bool fua);
|
||||||
|
extern bool blk_queue_can_use_dma_map_merging(struct request_queue *q,
|
||||||
|
struct device *dev);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Number of physical segments as sent to the device.
|
* Number of physical segments as sent to the device.
|
||||||
|
|
Loading…
Reference in New Issue