[PATCH] dma-buf/sync-file: Defer creation of sync_file->name
Constructing the name takes the majority of the time for allocating a sync_file to wrap a fence, and the name is very rarely used (only via the sync_file status user interface). To reduce the impact on the common path (that of creating sync_file to pass around), defer the construction of the name until it is first used. Signed-off-by: Chris Wilson Cc: Sumit Semwal Cc: Gustavo Padovan --- drivers/dma-buf/sync_file.c | 18 +++--- include/linux/sync_file.h | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c index 2321035f6204..2cccfa834778 100644 --- a/drivers/dma-buf/sync_file.c +++ b/drivers/dma-buf/sync_file.c @@ -82,11 +82,6 @@ struct sync_file *sync_file_create(struct dma_fence *fence) sync_file->fence = dma_fence_get(fence); - snprintf(sync_file->name, sizeof(sync_file->name), "%s-%s%llu-%d", -fence->ops->get_driver_name(fence), -fence->ops->get_timeline_name(fence), fence->context, -fence->seqno); - return sync_file; } EXPORT_SYMBOL(sync_file_create); @@ -268,7 +263,7 @@ static struct sync_file *sync_file_merge(const char *name, struct sync_file *a, goto err; } - strlcpy(sync_file->name, name, sizeof(sync_file->name)); + strlcpy(sync_file->user_name, name, sizeof(sync_file->user_name)); return sync_file; err: @@ -422,7 +417,16 @@ static long sync_file_ioctl_fence_info(struct sync_file *sync_file, } no_fences: - strlcpy(info.name, sync_file->name, sizeof(info.name)); + if (!sync_file->user_name[0]) { + scnprintf(sync_file->user_name, + sizeof(sync_file->user_name), + "%s-%s%llu-%d", + sync_file->fence->ops->get_driver_name(sync_file->fence), + sync_file->fence->ops->get_timeline_name(sync_file->fence), + sync_file->fence->context, + sync_file->fence->seqno); + } + strlcpy(info.name, sync_file->user_name, sizeof(info.name)); info.status = dma_fence_is_signaled(sync_file->fence); info.num_fences = num_fences; diff --git a/include/linux/sync_file.h b/include/linux/sync_file.h index 3e3ab84fc4cd..0cbeff29f510 100644 --- a/include/linux/sync_file.h +++ b/include/linux/sync_file.h @@ -34,7 +34,7 @@ struct sync_file { struct file *file; struct kref kref; - charname[32]; + charuser_name[32]; #ifdef CONFIG_DEBUG_FS struct list_headsync_file_list; #endif -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH] dma-buf/sync-file: Defer creation of sync_file->name
Hi Chris, [auto build test WARNING on linus/master] [also build test WARNING on v4.11 next-20170512] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Chris-Wilson/dma-buf-sync-file-Defer-creation-of-sync_file-name/20170512-193751 reproduce: make htmldocs All warnings (new ones prefixed by >>): WARNING: convert(1) not found, for SVG to PDF conversion install ImageMagick (https://www.imagemagick.org) arch/x86/include/asm/uaccess_32.h:1: warning: no structured comments found include/linux/init.h:1: warning: no structured comments found include/linux/mod_devicetable.h:686: warning: Excess struct/union/enum/typedef member 'ver_major' description in 'fsl_mc_device_id' include/linux/mod_devicetable.h:686: warning: Excess struct/union/enum/typedef member 'ver_minor' description in 'fsl_mc_device_id' kernel/sched/core.c:2088: warning: No description found for parameter 'rf' kernel/sched/core.c:2088: warning: Excess function parameter 'cookie' description in 'try_to_wake_up_local' include/linux/kthread.h:26: warning: Excess function parameter '...' description in 'kthread_create' kernel/sys.c:1: warning: no structured comments found include/linux/device.h:969: warning: No description found for parameter 'dma_ops' drivers/dma-buf/seqno-fence.c:1: warning: no structured comments found >> include/linux/sync_file.h:47: warning: No description found for parameter >> 'user_name' >> include/linux/sync_file.h:47: warning: Excess struct/union/enum/typedef >> member 'name' description in 'sync_file' include/linux/iio/iio.h:597: warning: No description found for parameter 'trig_readonly' include/linux/iio/trigger.h:151: warning: No description found for parameter 'indio_dev' include/linux/iio/trigger.h:151: warning: No description found for parameter 'trig' include/linux/device.h:970: warning: No description found for parameter 'dma_ops' include/linux/usb/gadget.h:230: warning: No description found for parameter 'claimed' include/linux/usb/gadget.h:230: warning: No description found for parameter 'enabled' include/linux/usb/gadget.h:408: warning: No description found for parameter 'quirk_altset_not_supp' include/linux/usb/gadget.h:408: warning: No description found for parameter 'quirk_stall_not_supp' include/linux/usb/gadget.h:408: warning: No description found for parameter 'quirk_zlp_not_supp' include/drm/drm_drv.h:524: warning: No description found for parameter 'set_busid' include/drm/drm_drv.h:524: warning: No description found for parameter 'irq_handler' include/drm/drm_drv.h:524: warning: No description found for parameter 'irq_preinstall' include/drm/drm_drv.h:524: warning: No description found for parameter 'irq_postinstall' include/drm/drm_drv.h:524: warning: No description found for parameter 'irq_uninstall' include/drm/drm_drv.h:524: warning: No description found for parameter 'debugfs_init' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_open_object' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_close_object' include/drm/drm_drv.h:524: warning: No description found for parameter 'prime_handle_to_fd' include/drm/drm_drv.h:524: warning: No description found for parameter 'prime_fd_to_handle' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_prime_export' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_prime_import' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_prime_pin' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_prime_unpin' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_prime_res_obj' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_prime_get_sg_table' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_prime_import_sg_table' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_prime_vmap' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_prime_vunmap' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_prime_mmap' include/drm/drm_drv.h:524: warning: No description found for parameter 'gem_vm_ops' include/drm/drm_drv.h:524: warning: No description found for parameter 'major' include/drm/drm_drv.h:524: warning: No description found for parameter 'minor' include/drm/drm_drv.h:524: warning: No description found for parameter 'patchlevel' include/drm/drm_drv.h:524: warning: No description found for parameter 'name' include/drm/drm_drv.h:524: warning: No description found for parameter 'desc' include/drm/drm_drv.h:524: warning: No description found for parameter 'date' include/drm/drm_drv.h:524: warning: No desc
Re: [PATCH] dma-buf/sync-file: Defer creation of sync_file->name
Hi Chris, Thanks for the patch! 2017-05-12 Chris Wilson : > Constructing the name takes the majority of the time for allocating a > sync_file to wrap a fence, and the name is very rarely used (only via > the sync_file status user interface). To reduce the impact on the common > path (that of creating sync_file to pass around), defer the construction > of the name until it is first used. > > Signed-off-by: Chris Wilson > Cc: Sumit Semwal > Cc: Gustavo Padovan > --- > drivers/dma-buf/sync_file.c | 18 +++--- > include/linux/sync_file.h | 2 +- > 2 files changed, 12 insertions(+), 8 deletions(-) > > diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c > index 2321035f6204..2cccfa834778 100644 > --- a/drivers/dma-buf/sync_file.c > +++ b/drivers/dma-buf/sync_file.c > @@ -82,11 +82,6 @@ struct sync_file *sync_file_create(struct dma_fence *fence) > > sync_file->fence = dma_fence_get(fence); > > - snprintf(sync_file->name, sizeof(sync_file->name), "%s-%s%llu-%d", > - fence->ops->get_driver_name(fence), > - fence->ops->get_timeline_name(fence), fence->context, > - fence->seqno); > - > return sync_file; > } > EXPORT_SYMBOL(sync_file_create); > @@ -268,7 +263,7 @@ static struct sync_file *sync_file_merge(const char > *name, struct sync_file *a, > goto err; > } > > - strlcpy(sync_file->name, name, sizeof(sync_file->name)); > + strlcpy(sync_file->user_name, name, sizeof(sync_file->user_name)); > return sync_file; > > err: > @@ -422,7 +417,16 @@ static long sync_file_ioctl_fence_info(struct sync_file > *sync_file, > } > > no_fences: > - strlcpy(info.name, sync_file->name, sizeof(info.name)); > + if (!sync_file->user_name[0]) { > + scnprintf(sync_file->user_name, > + sizeof(sync_file->user_name), > + "%s-%s%llu-%d", > + > sync_file->fence->ops->get_driver_name(sync_file->fence), > + > sync_file->fence->ops->get_timeline_name(sync_file->fence), > + sync_file->fence->context, > + sync_file->fence->seqno); > + } > + strlcpy(info.name, sync_file->user_name, sizeof(info.name)); > info.status = dma_fence_is_signaled(sync_file->fence); > info.num_fences = num_fences; > > diff --git a/include/linux/sync_file.h b/include/linux/sync_file.h > index 3e3ab84fc4cd..0cbeff29f510 100644 > --- a/include/linux/sync_file.h > +++ b/include/linux/sync_file.h > @@ -34,7 +34,7 @@ > struct sync_file { > struct file *file; > struct kref kref; > - charname[32]; > + charuser_name[32]; Looks good to me, but please re-spin it fixing the issue reported by the test bot then I can apply it. Gustavo ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH] dma-buf/sync-file: Defer creation of sync_file->name
Hi Chris, [auto build test ERROR on linus/master] [also build test ERROR on v4.12-rc1 next-20170516] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Chris-Wilson/dma-buf-sync-file-Defer-creation-of-sync_file-name/20170512-193751 config: x86_64-rhel (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): drivers//dma-buf/sync_debug.c: In function 'sync_print_sync_file': >> drivers//dma-buf/sync_debug.c:137:53: error: 'struct sync_file' has no >> member named 'name' seq_printf(s, "[%p] %s: %s\n", sync_file, sync_file->name, ^~ vim +137 drivers//dma-buf/sync_debug.c 0f0d8406 drivers/staging/android/sync_debug.c Maarten Lankhorst 2014-07-01 131 d7fdb0ae drivers/staging/android/sync_debug.c Gustavo Padovan 2016-01-21 132 static void sync_print_sync_file(struct seq_file *s, d7fdb0ae drivers/staging/android/sync_debug.c Gustavo Padovan 2016-01-21 133 struct sync_file *sync_file) 0f0d8406 drivers/staging/android/sync_debug.c Maarten Lankhorst 2014-07-01 134 { 0f0d8406 drivers/staging/android/sync_debug.c Maarten Lankhorst 2014-07-01 135 int i; 0f0d8406 drivers/staging/android/sync_debug.c Maarten Lankhorst 2014-07-01 136 d7fdb0ae drivers/staging/android/sync_debug.c Gustavo Padovan 2016-01-21 @137 seq_printf(s, "[%p] %s: %s\n", sync_file, sync_file->name, d6c99f4b drivers/dma-buf/sync_debug.c Chris Wilson 2017-01-04 138 sync_status_str(dma_fence_get_status(sync_file->fence))); 0f0d8406 drivers/staging/android/sync_debug.c Maarten Lankhorst 2014-07-01 139 f54d1867 drivers/dma-buf/sync_debug.c Chris Wilson 2016-10-25 140 if (dma_fence_is_array(sync_file->fence)) { :: The code at line 137 was first introduced by commit :: d7fdb0ae9d115fa14ff3a5382c8a62de41c7786a staging/android: rename sync_fence to sync_file :: TO: Gustavo Padovan :: CC: Greg Kroah-Hartman --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: application/gzip ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel