diff options
| author | Alexey Dobriyan <adobriyan@gmail.com> | 2009-08-28 22:58:07 +0400 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2009-08-31 09:37:22 +1000 | 
| commit | 3b51096f95633e6ab47675984e8e38fc37b09eeb (patch) | |
| tree | bc47fe5890b7d1419943645071b19e45719e5fb5 | |
| parent | 882f0219518196a94cd2772004e87b178467139a (diff) | |
| download | olio-linux-3.10-3b51096f95633e6ab47675984e8e38fc37b09eeb.tar.xz olio-linux-3.10-3b51096f95633e6ab47675984e8e38fc37b09eeb.zip  | |
drm: use proc_create_data()
airlied: fixup race against drm info by filling out
tmp before adding it to proc.
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
| -rw-r--r-- | drivers/gpu/drm/drm_proc.c | 13 | 
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/gpu/drm/drm_proc.c b/drivers/gpu/drm/drm_proc.c index dc967af7a33..d379c4f2892 100644 --- a/drivers/gpu/drm/drm_proc.c +++ b/drivers/gpu/drm/drm_proc.c @@ -110,20 +110,21 @@ int drm_proc_create_files(struct drm_info_list *files, int count,  			ret = -1;  			goto fail;  		} -		ent = create_proc_entry(files[i].name, S_IFREG | S_IRUGO, root); +		tmp->minor = minor; +		tmp->info_ent = &files[i]; +		list_add(&tmp->list, &minor->proc_nodes.list); + +		ent = proc_create_data(files[i].name, S_IRUGO, root, +				       &drm_proc_fops, tmp);  		if (!ent) {  			DRM_ERROR("Cannot create /proc/dri/%s/%s\n",  				  name, files[i].name); +			list_del(&tmp->list);  			kfree(tmp);  			ret = -1;  			goto fail;  		} -		ent->proc_fops = &drm_proc_fops; -		ent->data = tmp; -		tmp->minor = minor; -		tmp->info_ent = &files[i]; -		list_add(&(tmp->list), &(minor->proc_nodes.list));  	}  	return 0;  |