Subject: linux-next: manual merge of the block tree with the dma-mapping tree

From: Mark Brown <[email-masked]>
Date: Sun, 15 Sep 2019 23:44:07 +0100

Hi all,

Today's linux-next merge of the block tree got a conflict in:

  block/blk-settings.c
  include/linux/blkdev.h

between commit:

  45147fb522bb459e7 ("block: add a helper function to merge the segments")

from the dma-mapping tree and commit:

  68c43f133a754cbf5 ("block: Introduce elevator features")

from the block tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

diff --cc block/blk-settings.c
index c3632fc6d5404,6bd1e3b082d8e..0000000000000
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@@ -833,28 -832,22 +833,44 @@@ void blk_queue_write_cache(struct reque
  }
  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);
 +
+ /**
+  * blk_queue_required_elevator_features - Set a queue required elevator features
+  * @q:		the request queue for the target device
+  * @features:	Required elevator features OR'ed together
+  *
+  * Tell the block layer that for the device controlled through @q, only the
+  * only elevators that can be used are those that implement at least the set of
+  * features specified by @features.
+  */
+ void blk_queue_required_elevator_features(struct request_queue *q,
+ 					  unsigned int features)
+ {
+ 	q->required_elevator_features = features;
+ }
+ EXPORT_SYMBOL_GPL(blk_queue_required_elevator_features);
+ 
  static int __init blk_settings_init(void)
  {
  	blk_max_low_pfn = max_low_pfn - 1;
diff --cc include/linux/blkdev.h
index f6d55e2490dcf,b196124e32408..0000000000000
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@@ -1085,8 -1099,8 +1099,10 @@@ extern void blk_queue_dma_alignment(str
  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_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);
+ extern void blk_queue_required_elevator_features(struct request_queue *q,
+ 						 unsigned int features);
  
  /*
   * Number of physical segments as sent to the device.