X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=drivers%2Fgpu%2Farm%2Fmidgard%2Fmali_kbase_mem_profile_debugfs.c;h=092da9a96ea56b37f68673079108deb6efe298ca;hb=3054c50dd886faa349ca38c9ad8c2162f9706d5a;hp=b7d709e8696d7c2ad465df71941b61cf9d70c87b;hpb=f07d7eb59119a4e72372fa60a2198f20f5302f95;p=firefly-linux-kernel-4.4.55.git diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs.c b/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs.c old mode 100755 new mode 100644 index b7d709e8696d..092da9a96ea5 --- a/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs.c +++ b/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs.c @@ -1,6 +1,6 @@ /* * - * (C) COPYRIGHT ARM Limited. All rights reserved. + * (C) COPYRIGHT 2012-2016 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -15,23 +15,10 @@ -#include +#include #ifdef CONFIG_DEBUG_FS -/* mam_profile file name max length 22 based on format _\0 */ -#define KBASEP_DEBUGFS_FNAME_SIZE_MAX (10+1+10+1) - -void kbasep_mem_profile_debugfs_insert(struct kbase_context *kctx, char *data, - size_t size) -{ - spin_lock(&kctx->mem_profile_lock); - kfree(kctx->mem_profile_data); - kctx->mem_profile_data = data; - kctx->mem_profile_size = size; - spin_unlock(&kctx->mem_profile_lock); -} - /** Show callback for the @c mem_profile debugfs file. * * This function is called to get the contents of the @c mem_profile debugfs @@ -40,19 +27,19 @@ void kbasep_mem_profile_debugfs_insert(struct kbase_context *kctx, char *data, * @param sfile The debugfs entry * @param data Data associated with the entry * - * @return 0 if successfully prints data in debugfs entry file - * -1 if it encountered an error + * @return 0 if it successfully prints data in debugfs entry file, non-zero otherwise */ static int kbasep_mem_profile_seq_show(struct seq_file *sfile, void *data) { struct kbase_context *kctx = sfile->private; - KBASE_DEBUG_ASSERT(kctx != NULL); + mutex_lock(&kctx->mem_profile_lock); - spin_lock(&kctx->mem_profile_lock); seq_write(sfile, kctx->mem_profile_data, kctx->mem_profile_size); + seq_putc(sfile, '\n'); - spin_unlock(&kctx->mem_profile_lock); + + mutex_unlock(&kctx->mem_profile_lock); return 0; } @@ -60,7 +47,7 @@ static int kbasep_mem_profile_seq_show(struct seq_file *sfile, void *data) /* * File operations related to debugfs entry for mem_profile */ -STATIC int kbasep_mem_profile_debugfs_open(struct inode *in, struct file *file) +static int kbasep_mem_profile_debugfs_open(struct inode *in, struct file *file) { return single_open(file, kbasep_mem_profile_seq_show, in->i_private); } @@ -72,66 +59,61 @@ static const struct file_operations kbasep_mem_profile_debugfs_fops = { .release = single_release, }; -mali_error kbasep_mem_profile_debugfs_add(struct kbase_context *kctx) +int kbasep_mem_profile_debugfs_insert(struct kbase_context *kctx, char *data, + size_t size) { - char name[KBASEP_DEBUGFS_FNAME_SIZE_MAX]; + int err = 0; + + mutex_lock(&kctx->mem_profile_lock); - KBASE_DEBUG_ASSERT(kctx != NULL); + dev_dbg(kctx->kbdev->dev, "initialised: %d", + kbase_ctx_flag(kctx, KCTX_MEM_PROFILE_INITIALIZED)); - spin_lock_init(&kctx->mem_profile_lock); + if (!kbase_ctx_flag(kctx, KCTX_MEM_PROFILE_INITIALIZED)) { + if (!debugfs_create_file("mem_profile", S_IRUGO, + kctx->kctx_dentry, kctx, + &kbasep_mem_profile_debugfs_fops)) { + err = -EAGAIN; + } else { + kbase_ctx_flag_set(kctx, + KCTX_MEM_PROFILE_INITIALIZED); + } + } - scnprintf(name, KBASEP_DEBUGFS_FNAME_SIZE_MAX, "%d_%d", kctx->pid, - kctx->id); + if (kbase_ctx_flag(kctx, KCTX_MEM_PROFILE_INITIALIZED)) { + kfree(kctx->mem_profile_data); + kctx->mem_profile_data = data; + kctx->mem_profile_size = size; + } - kctx->mem_dentry = debugfs_create_file(name, S_IRUGO, - kctx->kbdev->memory_profile_directory, - kctx, &kbasep_mem_profile_debugfs_fops); - if (IS_ERR(kctx->mem_dentry)) - goto error_out; + dev_dbg(kctx->kbdev->dev, "returning: %d, initialised: %d", + err, kbase_ctx_flag(kctx, KCTX_MEM_PROFILE_INITIALIZED)); - return MALI_ERROR_NONE; + mutex_unlock(&kctx->mem_profile_lock); -error_out: - return MALI_ERROR_FUNCTION_FAILED; + return err; } void kbasep_mem_profile_debugfs_remove(struct kbase_context *kctx) { - KBASE_DEBUG_ASSERT(kctx != NULL); + mutex_lock(&kctx->mem_profile_lock); + + dev_dbg(kctx->kbdev->dev, "initialised: %d", + kbase_ctx_flag(kctx, KCTX_MEM_PROFILE_INITIALIZED)); - spin_lock(&kctx->mem_profile_lock); kfree(kctx->mem_profile_data); kctx->mem_profile_data = NULL; - spin_unlock(&kctx->mem_profile_lock); + kctx->mem_profile_size = 0; - if (IS_ERR(kctx->mem_dentry)) - return; - debugfs_remove(kctx->mem_dentry); + mutex_unlock(&kctx->mem_profile_lock); } #else /* CONFIG_DEBUG_FS */ -/** - * @brief Stub function for when debugfs is disabled - */ -mali_error kbasep_mem_profile_debugfs_add(struct kbase_context *ctx) -{ - return MALI_ERROR_NONE; -} - -/** - * @brief Stub function for when debugfs is disabled - */ -void kbasep_mem_profile_debugfs_remove(struct kbase_context *ctx) -{ -} - -/** - * @brief Stub function for when debugfs is disabled - */ -void kbasep_mem_profile_debugfs_insert(struct kbase_context *kctx, char *data, - size_t size) +int kbasep_mem_profile_debugfs_insert(struct kbase_context *kctx, char *data, + size_t size) { kfree(data); + return 0; } #endif /* CONFIG_DEBUG_FS */