diff options
| author | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
|---|---|---|
| committer | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
| commit | 79828b4fa835f73cdaf4bffa48696abdcbea9d02 (patch) | |
| tree | 5e0fa7156acb75ba603022bc807df8f2fedb97a8 /include/linux/blkdev.h | |
| parent | 721b51fcf91898299d96f4b72cb9434cda29dce6 (diff) | |
| parent | 8c1a9d6323abf0fb1e5dad96cf3f1c783505ea5a (diff) | |
Merge remote-tracking branch 'asoc/fix/rt5645' into asoc-fix-rt5645
Diffstat (limited to 'include/linux/blkdev.h')
| -rw-r--r-- | include/linux/blkdev.h | 46 | 
1 files changed, 30 insertions, 16 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index d4068c17d0df..38a5ff772a37 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -213,14 +213,6 @@ typedef int (prep_rq_fn) (struct request_queue *, struct request *);  typedef void (unprep_rq_fn) (struct request_queue *, struct request *);  struct bio_vec; -struct bvec_merge_data { -	struct block_device *bi_bdev; -	sector_t bi_sector; -	unsigned bi_size; -	unsigned long bi_rw; -}; -typedef int (merge_bvec_fn) (struct request_queue *, struct bvec_merge_data *, -			     struct bio_vec *);  typedef void (softirq_done_fn)(struct request *);  typedef int (dma_drain_needed_fn)(struct request *);  typedef int (lld_busy_fn) (struct request_queue *q); @@ -258,6 +250,7 @@ struct blk_queue_tag {  struct queue_limits {  	unsigned long		bounce_pfn;  	unsigned long		seg_boundary_mask; +	unsigned long		virt_boundary_mask;  	unsigned int		max_hw_sectors;  	unsigned int		chunk_sectors; @@ -268,6 +261,7 @@ struct queue_limits {  	unsigned int		io_min;  	unsigned int		io_opt;  	unsigned int		max_discard_sectors; +	unsigned int		max_hw_discard_sectors;  	unsigned int		max_write_same_sectors;  	unsigned int		discard_granularity;  	unsigned int		discard_alignment; @@ -305,7 +299,6 @@ struct request_queue {  	make_request_fn		*make_request_fn;  	prep_rq_fn		*prep_rq_fn;  	unprep_rq_fn		*unprep_rq_fn; -	merge_bvec_fn		*merge_bvec_fn;  	softirq_done_fn		*softirq_done_fn;  	rq_timed_out_fn		*rq_timed_out_fn;  	dma_drain_needed_fn	*dma_drain_needed; @@ -462,6 +455,7 @@ struct request_queue {  	struct blk_mq_tag_set	*tag_set;  	struct list_head	tag_set_list; +	struct bio_set		*bio_split;  };  #define QUEUE_FLAG_QUEUED	1	/* uses generic tag queueing */ @@ -486,7 +480,6 @@ struct request_queue {  #define QUEUE_FLAG_DEAD        19	/* queue tear-down finished */  #define QUEUE_FLAG_INIT_DONE   20	/* queue is initialized */  #define QUEUE_FLAG_NO_SG_MERGE 21	/* don't attempt to merge SG segments*/ -#define QUEUE_FLAG_SG_GAPS     22	/* queue doesn't support SG gaps */  #define QUEUE_FLAG_DEFAULT	((1 << QUEUE_FLAG_IO_STAT) |		\  				 (1 << QUEUE_FLAG_STACKABLE)	|	\ @@ -591,7 +584,7 @@ static inline void queue_flag_clear(unsigned int flag, struct request_queue *q)  #define list_entry_rq(ptr)	list_entry((ptr), struct request, queuelist) -#define rq_data_dir(rq)		(((rq)->cmd_flags & 1) != 0) +#define rq_data_dir(rq)		((int)((rq)->cmd_flags & 1))  /*   * Driver can handle struct request, if it either has an old style @@ -782,6 +775,8 @@ extern void blk_rq_unprep_clone(struct request *rq);  extern int blk_insert_cloned_request(struct request_queue *q,  				     struct request *rq);  extern void blk_delay_queue(struct request_queue *, unsigned long); +extern void blk_queue_split(struct request_queue *, struct bio **, +			    struct bio_set *);  extern void blk_recount_segments(struct request_queue *, struct bio *);  extern int scsi_verify_blk_ioctl(struct block_device *, unsigned int);  extern int scsi_cmd_blk_ioctl(struct block_device *, fmode_t, @@ -986,9 +981,9 @@ extern int blk_queue_dma_drain(struct request_queue *q,  			       void *buf, unsigned int size);  extern void blk_queue_lld_busy(struct request_queue *q, lld_busy_fn *fn);  extern void blk_queue_segment_boundary(struct request_queue *, unsigned long); +extern void blk_queue_virt_boundary(struct request_queue *, unsigned long);  extern void blk_queue_prep_rq(struct request_queue *, prep_rq_fn *pfn);  extern void blk_queue_unprep_rq(struct request_queue *, unprep_rq_fn *ufn); -extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *);  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_softirq_done(struct request_queue *, softirq_done_fn *); @@ -1138,6 +1133,7 @@ extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm);  enum blk_default_limits {  	BLK_MAX_SEGMENTS	= 128,  	BLK_SAFE_MAX_SECTORS	= 255, +	BLK_DEF_MAX_SECTORS	= 2560,  	BLK_MAX_SEGMENT_SIZE	= 65536,  	BLK_SEG_BOUNDARY_MASK	= 0xFFFFFFFFUL,  }; @@ -1154,6 +1150,11 @@ static inline unsigned long queue_segment_boundary(struct request_queue *q)  	return q->limits.seg_boundary_mask;  } +static inline unsigned long queue_virt_boundary(struct request_queue *q) +{ +	return q->limits.virt_boundary_mask; +} +  static inline unsigned int queue_max_sectors(struct request_queue *q)  {  	return q->limits.max_sectors; @@ -1354,6 +1355,19 @@ static inline void put_dev_sector(Sector p)  	page_cache_release(p.v);  } +/* + * Check if adding a bio_vec after bprv with offset would create a gap in + * the SG list. Most drivers don't care about this, but some do. + */ +static inline bool bvec_gap_to_prev(struct request_queue *q, +				struct bio_vec *bprv, unsigned int offset) +{ +	if (!queue_virt_boundary(q)) +		return false; +	return offset || +		((bprv->bv_offset + bprv->bv_len) & queue_virt_boundary(q)); +} +  struct work_struct;  int kblockd_schedule_work(struct work_struct *work);  int kblockd_schedule_delayed_work(struct delayed_work *dwork, unsigned long delay); @@ -1555,8 +1569,8 @@ struct block_device_operations {  	int (*rw_page)(struct block_device *, sector_t, struct page *, int rw);  	int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);  	int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); -	long (*direct_access)(struct block_device *, sector_t, -					void **, unsigned long *pfn, long size); +	long (*direct_access)(struct block_device *, sector_t, void __pmem **, +			unsigned long *pfn);  	unsigned int (*check_events) (struct gendisk *disk,  				      unsigned int clearing);  	/* ->media_changed() is DEPRECATED, use ->check_events() instead */ @@ -1574,8 +1588,8 @@ extern int __blkdev_driver_ioctl(struct block_device *, fmode_t, unsigned int,  extern int bdev_read_page(struct block_device *, sector_t, struct page *);  extern int bdev_write_page(struct block_device *, sector_t, struct page *,  						struct writeback_control *); -extern long bdev_direct_access(struct block_device *, sector_t, void **addr, -						unsigned long *pfn, long size); +extern long bdev_direct_access(struct block_device *, sector_t, +		void __pmem **addr, unsigned long *pfn, long size);  #else /* CONFIG_BLOCK */  struct block_device;  |