[media] media: Add 64--32 bit compat ioctl handler
Provide an ioctl handler for 32-bit binaries on 64-bit systems. Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Tested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
		
					parent
					
						
							
								cab3e1ffbe
							
						
					
				
			
			
				commit
				
					
						c6c1d50b51
					
				
			
		
					 2 changed files with 29 additions and 3 deletions
				
			
		|  | @ -116,19 +116,41 @@ static unsigned int media_poll(struct file *filp, | ||||||
| 	return mdev->fops->poll(filp, poll); | 	return mdev->fops->poll(filp, poll); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static long media_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | static long | ||||||
|  | __media_ioctl(struct file *filp, unsigned int cmd, unsigned long arg, | ||||||
|  | 	      long (*ioctl_func)(struct file *filp, unsigned int cmd, | ||||||
|  | 				 unsigned long arg)) | ||||||
| { | { | ||||||
| 	struct media_devnode *mdev = media_devnode_data(filp); | 	struct media_devnode *mdev = media_devnode_data(filp); | ||||||
| 
 | 
 | ||||||
| 	if (!mdev->fops->ioctl) | 	if (!ioctl_func) | ||||||
| 		return -ENOTTY; | 		return -ENOTTY; | ||||||
| 
 | 
 | ||||||
| 	if (!media_devnode_is_registered(mdev)) | 	if (!media_devnode_is_registered(mdev)) | ||||||
| 		return -EIO; | 		return -EIO; | ||||||
| 
 | 
 | ||||||
| 	return mdev->fops->ioctl(filp, cmd, arg); | 	return ioctl_func(filp, cmd, arg); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static long media_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | ||||||
|  | { | ||||||
|  | 	struct media_devnode *mdev = media_devnode_data(filp); | ||||||
|  | 
 | ||||||
|  | 	return __media_ioctl(filp, cmd, arg, mdev->fops->ioctl); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #ifdef CONFIG_COMPAT | ||||||
|  | 
 | ||||||
|  | static long media_compat_ioctl(struct file *filp, unsigned int cmd, | ||||||
|  | 			       unsigned long arg) | ||||||
|  | { | ||||||
|  | 	struct media_devnode *mdev = media_devnode_data(filp); | ||||||
|  | 
 | ||||||
|  | 	return __media_ioctl(filp, cmd, arg, mdev->fops->compat_ioctl); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif /* CONFIG_COMPAT */ | ||||||
|  | 
 | ||||||
| /* Override for the open function */ | /* Override for the open function */ | ||||||
| static int media_open(struct inode *inode, struct file *filp) | static int media_open(struct inode *inode, struct file *filp) | ||||||
| { | { | ||||||
|  | @ -188,6 +210,9 @@ static const struct file_operations media_devnode_fops = { | ||||||
| 	.write = media_write, | 	.write = media_write, | ||||||
| 	.open = media_open, | 	.open = media_open, | ||||||
| 	.unlocked_ioctl = media_ioctl, | 	.unlocked_ioctl = media_ioctl, | ||||||
|  | #ifdef CONFIG_COMPAT | ||||||
|  | 	.compat_ioctl = media_compat_ioctl, | ||||||
|  | #endif /* CONFIG_COMPAT */ | ||||||
| 	.release = media_release, | 	.release = media_release, | ||||||
| 	.poll = media_poll, | 	.poll = media_poll, | ||||||
| 	.llseek = no_llseek, | 	.llseek = no_llseek, | ||||||
|  |  | ||||||
|  | @ -46,6 +46,7 @@ struct media_file_operations { | ||||||
| 	ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); | 	ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); | ||||||
| 	unsigned int (*poll) (struct file *, struct poll_table_struct *); | 	unsigned int (*poll) (struct file *, struct poll_table_struct *); | ||||||
| 	long (*ioctl) (struct file *, unsigned int, unsigned long); | 	long (*ioctl) (struct file *, unsigned int, unsigned long); | ||||||
|  | 	long (*compat_ioctl) (struct file *, unsigned int, unsigned long); | ||||||
| 	int (*open) (struct file *); | 	int (*open) (struct file *); | ||||||
| 	int (*release) (struct file *); | 	int (*release) (struct file *); | ||||||
| }; | }; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Sakari Ailus
				Sakari Ailus