Merge tag 'dma-mapping-5.20-2022-08-06' of git://git.infradead.org/users/hch/dma...
[linux-2.6-microblaze.git] / block / blk-sysfs.c
index 9b905e9..e1f009a 100644 (file)
@@ -274,6 +274,11 @@ static ssize_t queue_virt_boundary_mask_show(struct request_queue *q, char *page
        return queue_var_show(q->limits.virt_boundary_mask, page);
 }
 
+static ssize_t queue_dma_alignment_show(struct request_queue *q, char *page)
+{
+       return queue_var_show(queue_dma_alignment(q), page);
+}
+
 #define QUEUE_SYSFS_BIT_FNS(name, flag, neg)                           \
 static ssize_t                                                         \
 queue_##name##_show(struct request_queue *q, char *page)               \
@@ -320,17 +325,17 @@ static ssize_t queue_zoned_show(struct request_queue *q, char *page)
 
 static ssize_t queue_nr_zones_show(struct request_queue *q, char *page)
 {
-       return queue_var_show(blk_queue_nr_zones(q), page);
+       return queue_var_show(disk_nr_zones(q->disk), page);
 }
 
 static ssize_t queue_max_open_zones_show(struct request_queue *q, char *page)
 {
-       return queue_var_show(queue_max_open_zones(q), page);
+       return queue_var_show(bdev_max_open_zones(q->disk->part0), page);
 }
 
 static ssize_t queue_max_active_zones_show(struct request_queue *q, char *page)
 {
-       return queue_var_show(queue_max_active_zones(q), page);
+       return queue_var_show(bdev_max_active_zones(q->disk->part0), page);
 }
 
 static ssize_t queue_nomerges_show(struct request_queue *q, char *page)
@@ -606,6 +611,7 @@ QUEUE_RO_ENTRY(queue_dax, "dax");
 QUEUE_RW_ENTRY(queue_io_timeout, "io_timeout");
 QUEUE_RW_ENTRY(queue_wb_lat, "wbt_lat_usec");
 QUEUE_RO_ENTRY(queue_virt_boundary_mask, "virt_boundary_mask");
+QUEUE_RO_ENTRY(queue_dma_alignment, "dma_alignment");
 
 #ifdef CONFIG_BLK_DEV_THROTTLING_LOW
 QUEUE_RW_ENTRY(blk_throtl_sample_time, "throttle_sample_time");
@@ -667,6 +673,7 @@ static struct attribute *queue_attrs[] = {
        &blk_throtl_sample_time_entry.attr,
 #endif
        &queue_virt_boundary_mask_entry.attr,
+       &queue_dma_alignment_entry.attr,
        NULL,
 };
 
@@ -748,11 +755,6 @@ static void blk_free_queue_rcu(struct rcu_head *rcu_head)
  * decremented with blk_put_queue(). Once the refcount reaches 0 this function
  * is called.
  *
- * For drivers that have a request_queue on a gendisk and added with
- * __device_add_disk() the refcount to request_queue will reach 0 with
- * the last put_disk() called by the driver. For drivers which don't use
- * __device_add_disk() this happens with blk_cleanup_queue().
- *
  * Drivers exist which depend on the release of the request_queue to be
  * synchronous, it should not be deferred.
  *
@@ -774,17 +776,13 @@ static void blk_release_queue(struct kobject *kobj)
        blk_free_queue_stats(q->stats);
        kfree(q->poll_stat);
 
-       blk_queue_free_zone_bitmaps(q);
-
        if (queue_is_mq(q))
                blk_mq_release(q);
 
-       bioset_exit(&q->bio_split);
-
        if (blk_queue_has_srcu(q))
                cleanup_srcu_struct(q->srcu);
 
-       ida_simple_remove(&blk_queue_ida, q->id);
+       ida_free(&blk_queue_ida, q->id);
        call_rcu(&q->rcu_head, blk_free_queue_rcu);
 }
 
@@ -793,7 +791,13 @@ static const struct sysfs_ops queue_sysfs_ops = {
        .store  = queue_attr_store,
 };
 
+static const struct attribute_group *blk_queue_attr_groups[] = {
+       &queue_attr_group,
+       NULL
+};
+
 struct kobj_type blk_queue_ktype = {
+       .default_groups = blk_queue_attr_groups,
        .sysfs_ops      = &queue_sysfs_ops,
        .release        = blk_release_queue,
 };
@@ -804,32 +808,17 @@ struct kobj_type blk_queue_ktype = {
  */
 int blk_register_queue(struct gendisk *disk)
 {
-       int ret;
-       struct device *dev = disk_to_dev(disk);
        struct request_queue *q = disk->queue;
-
-       ret = blk_trace_init_sysfs(dev);
-       if (ret)
-               return ret;
+       int ret;
 
        mutex_lock(&q->sysfs_dir_lock);
 
-       ret = kobject_add(&q->kobj, kobject_get(&dev->kobj), "%s", "queue");
-       if (ret < 0) {
-               blk_trace_remove_sysfs(dev);
-               goto unlock;
-       }
-
-       ret = sysfs_create_group(&q->kobj, &queue_attr_group);
-       if (ret) {
-               blk_trace_remove_sysfs(dev);
-               kobject_del(&q->kobj);
-               kobject_put(&dev->kobj);
+       ret = kobject_add(&q->kobj, &disk_to_dev(disk)->kobj, "queue");
+       if (ret < 0)
                goto unlock;
-       }
 
        if (queue_is_mq(q))
-               __blk_mq_register_dev(dev, q);
+               blk_mq_sysfs_register(disk);
        mutex_lock(&q->sysfs_lock);
 
        mutex_lock(&q->debugfs_mutex);
@@ -839,7 +828,7 @@ int blk_register_queue(struct gendisk *disk)
                blk_mq_debugfs_register(q);
        mutex_unlock(&q->debugfs_mutex);
 
-       ret = disk_register_independent_access_ranges(disk, NULL);
+       ret = disk_register_independent_access_ranges(disk);
        if (ret)
                goto put_dev;
 
@@ -888,8 +877,6 @@ put_dev:
        mutex_unlock(&q->sysfs_lock);
        mutex_unlock(&q->sysfs_dir_lock);
        kobject_del(&q->kobj);
-       blk_trace_remove_sysfs(dev);
-       kobject_put(&dev->kobj);
 
        return ret;
 }
@@ -927,9 +914,8 @@ void blk_unregister_queue(struct gendisk *disk)
         * structures that can be modified through sysfs.
         */
        if (queue_is_mq(q))
-               blk_mq_unregister_dev(disk_to_dev(disk), q);
+               blk_mq_sysfs_unregister(disk);
        blk_crypto_sysfs_unregister(q);
-       blk_trace_remove_sysfs(disk_to_dev(disk));
 
        mutex_lock(&q->sysfs_lock);
        elv_unregister_queue(q);
@@ -948,6 +934,4 @@ void blk_unregister_queue(struct gendisk *disk)
        q->sched_debugfs_dir = NULL;
        q->rqos_debugfs_dir = NULL;
        mutex_unlock(&q->debugfs_mutex);
-
-       kobject_put(&disk_to_dev(disk)->kobj);
 }