Lines Matching refs:t
670 static bool blk_stack_atomic_writes_tail(struct queue_limits *t, in blk_stack_atomic_writes_tail() argument
674 if (t->atomic_write_hw_boundary != b->atomic_write_hw_boundary) in blk_stack_atomic_writes_tail()
678 if (t->atomic_write_hw_unit_min > b->atomic_write_hw_unit_max) in blk_stack_atomic_writes_tail()
682 if (t->atomic_write_hw_unit_max < b->atomic_write_hw_unit_min) in blk_stack_atomic_writes_tail()
685 t->atomic_write_hw_max = min(t->atomic_write_hw_max, in blk_stack_atomic_writes_tail()
687 t->atomic_write_hw_unit_min = max(t->atomic_write_hw_unit_min, in blk_stack_atomic_writes_tail()
689 t->atomic_write_hw_unit_max = min(t->atomic_write_hw_unit_max, in blk_stack_atomic_writes_tail()
694 static void blk_stack_atomic_writes_chunk_sectors(struct queue_limits *t) in blk_stack_atomic_writes_chunk_sectors() argument
698 if (!t->chunk_sectors) in blk_stack_atomic_writes_chunk_sectors()
706 if (check_shl_overflow(t->chunk_sectors, SECTOR_SHIFT, &chunk_bytes)) in blk_stack_atomic_writes_chunk_sectors()
707 chunk_bytes = t->chunk_sectors; in blk_stack_atomic_writes_chunk_sectors()
719 t->atomic_write_hw_unit_max = min(t->atomic_write_hw_unit_max, in blk_stack_atomic_writes_chunk_sectors()
722 t->atomic_write_hw_unit_min = min(t->atomic_write_hw_unit_min, in blk_stack_atomic_writes_chunk_sectors()
723 t->atomic_write_hw_unit_max); in blk_stack_atomic_writes_chunk_sectors()
724 t->atomic_write_hw_max = min(t->atomic_write_hw_max, chunk_bytes); in blk_stack_atomic_writes_chunk_sectors()
728 static bool blk_stack_atomic_writes_head(struct queue_limits *t, in blk_stack_atomic_writes_head() argument
731 if (!blk_valid_atomic_writes_boundary(t->chunk_sectors, in blk_stack_atomic_writes_head()
735 t->atomic_write_hw_unit_max = b->atomic_write_hw_unit_max; in blk_stack_atomic_writes_head()
736 t->atomic_write_hw_unit_min = b->atomic_write_hw_unit_min; in blk_stack_atomic_writes_head()
737 t->atomic_write_hw_max = b->atomic_write_hw_max; in blk_stack_atomic_writes_head()
738 t->atomic_write_hw_boundary = b->atomic_write_hw_boundary; in blk_stack_atomic_writes_head()
742 static void blk_stack_atomic_writes_limits(struct queue_limits *t, in blk_stack_atomic_writes_limits() argument
755 if (t->atomic_write_hw_max == UINT_MAX) { in blk_stack_atomic_writes_limits()
756 if (!blk_stack_atomic_writes_head(t, b)) in blk_stack_atomic_writes_limits()
759 if (!blk_stack_atomic_writes_tail(t, b)) in blk_stack_atomic_writes_limits()
762 blk_stack_atomic_writes_chunk_sectors(t); in blk_stack_atomic_writes_limits()
766 t->atomic_write_hw_max = 0; in blk_stack_atomic_writes_limits()
767 t->atomic_write_hw_unit_max = 0; in blk_stack_atomic_writes_limits()
768 t->atomic_write_hw_unit_min = 0; in blk_stack_atomic_writes_limits()
769 t->atomic_write_hw_boundary = 0; in blk_stack_atomic_writes_limits()
793 int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, in blk_stack_limits() argument
799 t->features |= (b->features & BLK_FEAT_INHERIT_MASK); in blk_stack_limits()
808 t->features &= ~BLK_FEAT_NOWAIT; in blk_stack_limits()
810 t->features &= ~BLK_FEAT_POLL; in blk_stack_limits()
812 t->flags |= (b->flags & BLK_FLAG_MISALIGNED); in blk_stack_limits()
814 t->max_sectors = min_not_zero(t->max_sectors, b->max_sectors); in blk_stack_limits()
815 t->max_user_sectors = min_not_zero(t->max_user_sectors, in blk_stack_limits()
817 t->max_hw_sectors = min_not_zero(t->max_hw_sectors, b->max_hw_sectors); in blk_stack_limits()
818 t->max_dev_sectors = min_not_zero(t->max_dev_sectors, b->max_dev_sectors); in blk_stack_limits()
819 t->max_write_zeroes_sectors = min(t->max_write_zeroes_sectors, in blk_stack_limits()
821 t->max_user_wzeroes_unmap_sectors = in blk_stack_limits()
822 min(t->max_user_wzeroes_unmap_sectors, in blk_stack_limits()
824 t->max_hw_wzeroes_unmap_sectors = in blk_stack_limits()
825 min(t->max_hw_wzeroes_unmap_sectors, in blk_stack_limits()
828 t->max_hw_zone_append_sectors = min(t->max_hw_zone_append_sectors, in blk_stack_limits()
831 t->seg_boundary_mask = min_not_zero(t->seg_boundary_mask, in blk_stack_limits()
833 t->virt_boundary_mask = min_not_zero(t->virt_boundary_mask, in blk_stack_limits()
836 t->max_segments = min_not_zero(t->max_segments, b->max_segments); in blk_stack_limits()
837 t->max_discard_segments = min_not_zero(t->max_discard_segments, in blk_stack_limits()
839 t->max_integrity_segments = min_not_zero(t->max_integrity_segments, in blk_stack_limits()
842 t->max_segment_size = min_not_zero(t->max_segment_size, in blk_stack_limits()
850 if (t->alignment_offset != alignment) { in blk_stack_limits()
852 top = max(t->physical_block_size, t->io_min) in blk_stack_limits()
853 + t->alignment_offset; in blk_stack_limits()
858 t->flags |= BLK_FLAG_MISALIGNED; in blk_stack_limits()
863 t->logical_block_size = max(t->logical_block_size, in blk_stack_limits()
866 t->physical_block_size = max(t->physical_block_size, in blk_stack_limits()
869 t->io_min = max(t->io_min, b->io_min); in blk_stack_limits()
870 t->io_opt = lcm_not_zero(t->io_opt, b->io_opt); in blk_stack_limits()
871 t->dma_alignment = max(t->dma_alignment, b->dma_alignment); in blk_stack_limits()
875 t->chunk_sectors = gcd(t->chunk_sectors, b->chunk_sectors); in blk_stack_limits()
878 if (t->physical_block_size & (t->logical_block_size - 1)) { in blk_stack_limits()
879 t->physical_block_size = t->logical_block_size; in blk_stack_limits()
880 t->flags |= BLK_FLAG_MISALIGNED; in blk_stack_limits()
885 if (t->io_min & (t->physical_block_size - 1)) { in blk_stack_limits()
886 t->io_min = t->physical_block_size; in blk_stack_limits()
887 t->flags |= BLK_FLAG_MISALIGNED; in blk_stack_limits()
892 if (t->io_opt & (t->physical_block_size - 1)) { in blk_stack_limits()
893 t->io_opt = 0; in blk_stack_limits()
894 t->flags |= BLK_FLAG_MISALIGNED; in blk_stack_limits()
899 if (t->chunk_sectors % (t->physical_block_size >> SECTOR_SHIFT)) { in blk_stack_limits()
900 t->chunk_sectors = 0; in blk_stack_limits()
901 t->flags |= BLK_FLAG_MISALIGNED; in blk_stack_limits()
906 t->alignment_offset = lcm_not_zero(t->alignment_offset, alignment) in blk_stack_limits()
907 % max(t->physical_block_size, t->io_min); in blk_stack_limits()
910 if (t->alignment_offset & (t->logical_block_size - 1)) { in blk_stack_limits()
911 t->flags |= BLK_FLAG_MISALIGNED; in blk_stack_limits()
915 t->max_sectors = blk_round_down_sectors(t->max_sectors, t->logical_block_size); in blk_stack_limits()
916 t->max_hw_sectors = blk_round_down_sectors(t->max_hw_sectors, t->logical_block_size); in blk_stack_limits()
917 t->max_dev_sectors = blk_round_down_sectors(t->max_dev_sectors, t->logical_block_size); in blk_stack_limits()
923 t->max_discard_sectors = min_not_zero(t->max_discard_sectors, in blk_stack_limits()
925 t->max_hw_discard_sectors = min_not_zero(t->max_hw_discard_sectors, in blk_stack_limits()
927 t->discard_granularity = max(t->discard_granularity, in blk_stack_limits()
929 t->discard_alignment = lcm_not_zero(t->discard_alignment, alignment) % in blk_stack_limits()
930 t->discard_granularity; in blk_stack_limits()
932 t->max_secure_erase_sectors = min_not_zero(t->max_secure_erase_sectors, in blk_stack_limits()
934 t->zone_write_granularity = max(t->zone_write_granularity, in blk_stack_limits()
936 if (!(t->features & BLK_FEAT_ZONED)) { in blk_stack_limits()
937 t->zone_write_granularity = 0; in blk_stack_limits()
938 t->max_zone_append_sectors = 0; in blk_stack_limits()
940 blk_stack_atomic_writes_limits(t, b, start); in blk_stack_limits()
961 void queue_limits_stack_bdev(struct queue_limits *t, struct block_device *bdev, in queue_limits_stack_bdev() argument
964 if (blk_stack_limits(t, bdev_limits(bdev), in queue_limits_stack_bdev()
985 bool queue_limits_stack_integrity(struct queue_limits *t, in queue_limits_stack_integrity() argument
988 struct blk_integrity *ti = &t->integrity; in queue_limits_stack_integrity()