aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma-buf/dma-buf-sysfs-stats.c
diff options
context:
space:
mode:
authorHridya Valsaraju <hridya@google.com>2021-07-12 21:07:38 -0700
committerChristian König <christian.koenig@amd.com>2021-07-20 11:06:59 +0200
commitc715def51591a874a9fcfdc9a05d543e8797e697 (patch)
tree393cf502f7578c1e848de6471b50dc23a68d7469 /drivers/dma-buf/dma-buf-sysfs-stats.c
parentdrm/ingenic: Convert to Linux IRQ interfaces (diff)
downloadlinux-dev-c715def51591a874a9fcfdc9a05d543e8797e697.tar.xz
linux-dev-c715def51591a874a9fcfdc9a05d543e8797e697.zip
dma-buf: Delete the DMA-BUF attachment sysfs statistics
The DMA-BUF attachment statistics form a subset of the DMA-BUF sysfs statistics that recently merged to the drm-misc tree. They are not UABI yet since they have not merged to the upstream Linux kernel. Since there has been a reported a performance regression due to the overhead of sysfs directory creation/teardown during dma_buf_attach()/dma_buf_detach(), this patch deletes the DMA-BUF attachment statistics from sysfs. Fixes: bdb8d06dfefd ("dmabuf: Add the capability to expose DMA-BUF stats in sysfs") Signed-off-by: Hridya Valsaraju <hridya@google.com> Reviewed-by: Christian König <christian.koenig@amd.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://patchwork.freedesktop.org/patch/msgid/20210713040742.2680135-1-hridya@google.com Signed-off-by: Christian König <christian.koenig@amd.com>
Diffstat (limited to 'drivers/dma-buf/dma-buf-sysfs-stats.c')
-rw-r--r--drivers/dma-buf/dma-buf-sysfs-stats.c140
1 files changed, 4 insertions, 136 deletions
diff --git a/drivers/dma-buf/dma-buf-sysfs-stats.c b/drivers/dma-buf/dma-buf-sysfs-stats.c
index a2638e84199c..053baadcada9 100644
--- a/drivers/dma-buf/dma-buf-sysfs-stats.c
+++ b/drivers/dma-buf/dma-buf-sysfs-stats.c
@@ -40,14 +40,11 @@
*
* * ``/sys/kernel/dmabuf/buffers/<inode_number>/exporter_name``
* * ``/sys/kernel/dmabuf/buffers/<inode_number>/size``
- * * ``/sys/kernel/dmabuf/buffers/<inode_number>/attachments/<attach_uid>/device``
- * * ``/sys/kernel/dmabuf/buffers/<inode_number>/attachments/<attach_uid>/map_counter``
*
- * The information in the interface can also be used to derive per-exporter and
- * per-device usage statistics. The data from the interface can be gathered
- * on error conditions or other important events to provide a snapshot of
- * DMA-BUF usage. It can also be collected periodically by telemetry to monitor
- * various metrics.
+ * The information in the interface can also be used to derive per-exporter
+ * statistics. The data from the interface can be gathered on error conditions
+ * or other important events to provide a snapshot of DMA-BUF usage.
+ * It can also be collected periodically by telemetry to monitor various metrics.
*
* Detailed documentation about the interface is present in
* Documentation/ABI/testing/sysfs-kernel-dmabuf-buffers.
@@ -121,120 +118,6 @@ static struct kobj_type dma_buf_ktype = {
.default_groups = dma_buf_stats_default_groups,
};
-#define to_dma_buf_attach_entry_from_kobj(x) container_of(x, struct dma_buf_attach_sysfs_entry, kobj)
-
-struct dma_buf_attach_stats_attribute {
- struct attribute attr;
- ssize_t (*show)(struct dma_buf_attach_sysfs_entry *sysfs_entry,
- struct dma_buf_attach_stats_attribute *attr, char *buf);
-};
-#define to_dma_buf_attach_stats_attr(x) container_of(x, struct dma_buf_attach_stats_attribute, attr)
-
-static ssize_t dma_buf_attach_stats_attribute_show(struct kobject *kobj,
- struct attribute *attr,
- char *buf)
-{
- struct dma_buf_attach_stats_attribute *attribute;
- struct dma_buf_attach_sysfs_entry *sysfs_entry;
-
- attribute = to_dma_buf_attach_stats_attr(attr);
- sysfs_entry = to_dma_buf_attach_entry_from_kobj(kobj);
-
- if (!attribute->show)
- return -EIO;
-
- return attribute->show(sysfs_entry, attribute, buf);
-}
-
-static const struct sysfs_ops dma_buf_attach_stats_sysfs_ops = {
- .show = dma_buf_attach_stats_attribute_show,
-};
-
-static ssize_t map_counter_show(struct dma_buf_attach_sysfs_entry *sysfs_entry,
- struct dma_buf_attach_stats_attribute *attr,
- char *buf)
-{
- return sysfs_emit(buf, "%u\n", sysfs_entry->map_counter);
-}
-
-static struct dma_buf_attach_stats_attribute map_counter_attribute =
- __ATTR_RO(map_counter);
-
-static struct attribute *dma_buf_attach_stats_default_attrs[] = {
- &map_counter_attribute.attr,
- NULL,
-};
-ATTRIBUTE_GROUPS(dma_buf_attach_stats_default);
-
-static void dma_buf_attach_sysfs_release(struct kobject *kobj)
-{
- struct dma_buf_attach_sysfs_entry *sysfs_entry;
-
- sysfs_entry = to_dma_buf_attach_entry_from_kobj(kobj);
- kfree(sysfs_entry);
-}
-
-static struct kobj_type dma_buf_attach_ktype = {
- .sysfs_ops = &dma_buf_attach_stats_sysfs_ops,
- .release = dma_buf_attach_sysfs_release,
- .default_groups = dma_buf_attach_stats_default_groups,
-};
-
-void dma_buf_attach_stats_teardown(struct dma_buf_attachment *attach)
-{
- struct dma_buf_attach_sysfs_entry *sysfs_entry;
-
- sysfs_entry = attach->sysfs_entry;
- if (!sysfs_entry)
- return;
-
- sysfs_delete_link(&sysfs_entry->kobj, &attach->dev->kobj, "device");
-
- kobject_del(&sysfs_entry->kobj);
- kobject_put(&sysfs_entry->kobj);
-}
-
-int dma_buf_attach_stats_setup(struct dma_buf_attachment *attach,
- unsigned int uid)
-{
- struct dma_buf_attach_sysfs_entry *sysfs_entry;
- int ret;
- struct dma_buf *dmabuf;
-
- if (!attach)
- return -EINVAL;
-
- dmabuf = attach->dmabuf;
-
- sysfs_entry = kzalloc(sizeof(struct dma_buf_attach_sysfs_entry),
- GFP_KERNEL);
- if (!sysfs_entry)
- return -ENOMEM;
-
- sysfs_entry->kobj.kset = dmabuf->sysfs_entry->attach_stats_kset;
-
- attach->sysfs_entry = sysfs_entry;
-
- ret = kobject_init_and_add(&sysfs_entry->kobj, &dma_buf_attach_ktype,
- NULL, "%u", uid);
- if (ret)
- goto kobj_err;
-
- ret = sysfs_create_link(&sysfs_entry->kobj, &attach->dev->kobj,
- "device");
- if (ret)
- goto link_err;
-
- return 0;
-
-link_err:
- kobject_del(&sysfs_entry->kobj);
-kobj_err:
- kobject_put(&sysfs_entry->kobj);
- attach->sysfs_entry = NULL;
-
- return ret;
-}
void dma_buf_stats_teardown(struct dma_buf *dmabuf)
{
struct dma_buf_sysfs_entry *sysfs_entry;
@@ -243,7 +126,6 @@ void dma_buf_stats_teardown(struct dma_buf *dmabuf)
if (!sysfs_entry)
return;
- kset_unregister(sysfs_entry->attach_stats_kset);
kobject_del(&sysfs_entry->kobj);
kobject_put(&sysfs_entry->kobj);
}
@@ -290,7 +172,6 @@ int dma_buf_stats_setup(struct dma_buf *dmabuf)
{
struct dma_buf_sysfs_entry *sysfs_entry;
int ret;
- struct kset *attach_stats_kset;
if (!dmabuf || !dmabuf->file)
return -EINVAL;
@@ -315,21 +196,8 @@ int dma_buf_stats_setup(struct dma_buf *dmabuf)
if (ret)
goto err_sysfs_dmabuf;
- /* create the directory for attachment stats */
- attach_stats_kset = kset_create_and_add("attachments",
- &dmabuf_sysfs_no_uevent_ops,
- &sysfs_entry->kobj);
- if (!attach_stats_kset) {
- ret = -ENOMEM;
- goto err_sysfs_attach;
- }
-
- sysfs_entry->attach_stats_kset = attach_stats_kset;
-
return 0;
-err_sysfs_attach:
- kobject_del(&sysfs_entry->kobj);
err_sysfs_dmabuf:
kobject_put(&sysfs_entry->kobj);
dmabuf->sysfs_entry = NULL;