uio: Cleanup irq handling.
Change the value of UIO_IRQ_NONE -2 to 0. 0 is well defined in the rest of the kernel as the value to indicate an irq has not been assigned. Update the calls to request_irq and free_irq to only ignore UIO_IRQ_NONE and UIO_IRQ_CUSTOM allowing the rest of the kernel's possible irq numbers to be used. Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Hans J. Koch <hjk@linutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
		
					parent
					
						
							
								70a9156bad
							
						
					
				
			
			
				commit
				
					
						6427a7655a
					
				
			
		
					 2 changed files with 8 additions and 8 deletions
				
			
		|  | @ -512,7 +512,7 @@ static unsigned int uio_poll(struct file *filep, poll_table *wait) | ||||||
| 	struct uio_listener *listener = filep->private_data; | 	struct uio_listener *listener = filep->private_data; | ||||||
| 	struct uio_device *idev = listener->dev; | 	struct uio_device *idev = listener->dev; | ||||||
| 
 | 
 | ||||||
| 	if (idev->info->irq == UIO_IRQ_NONE) | 	if (!idev->info->irq) | ||||||
| 		return -EIO; | 		return -EIO; | ||||||
| 
 | 
 | ||||||
| 	poll_wait(filep, &idev->wait, wait); | 	poll_wait(filep, &idev->wait, wait); | ||||||
|  | @ -530,7 +530,7 @@ static ssize_t uio_read(struct file *filep, char __user *buf, | ||||||
| 	ssize_t retval; | 	ssize_t retval; | ||||||
| 	s32 event_count; | 	s32 event_count; | ||||||
| 
 | 
 | ||||||
| 	if (idev->info->irq == UIO_IRQ_NONE) | 	if (!idev->info->irq) | ||||||
| 		return -EIO; | 		return -EIO; | ||||||
| 
 | 
 | ||||||
| 	if (count != sizeof(s32)) | 	if (count != sizeof(s32)) | ||||||
|  | @ -578,7 +578,7 @@ static ssize_t uio_write(struct file *filep, const char __user *buf, | ||||||
| 	ssize_t retval; | 	ssize_t retval; | ||||||
| 	s32 irq_on; | 	s32 irq_on; | ||||||
| 
 | 
 | ||||||
| 	if (idev->info->irq == UIO_IRQ_NONE) | 	if (!idev->info->irq) | ||||||
| 		return -EIO; | 		return -EIO; | ||||||
| 
 | 
 | ||||||
| 	if (count != sizeof(s32)) | 	if (count != sizeof(s32)) | ||||||
|  | @ -825,9 +825,9 @@ int __uio_register_device(struct module *owner, | ||||||
| 
 | 
 | ||||||
| 	info->uio_dev = idev; | 	info->uio_dev = idev; | ||||||
| 
 | 
 | ||||||
| 	if (idev->info->irq >= 0) { | 	if (info->irq && (info->irq != UIO_IRQ_CUSTOM)) { | ||||||
| 		ret = request_irq(idev->info->irq, uio_interrupt, | 		ret = request_irq(info->irq, uio_interrupt, | ||||||
| 				  idev->info->irq_flags, idev->info->name, idev); | 				  info->irq_flags, info->name, idev); | ||||||
| 		if (ret) | 		if (ret) | ||||||
| 			goto err_request_irq; | 			goto err_request_irq; | ||||||
| 	} | 	} | ||||||
|  | @ -863,7 +863,7 @@ void uio_unregister_device(struct uio_info *info) | ||||||
| 
 | 
 | ||||||
| 	uio_free_minor(idev); | 	uio_free_minor(idev); | ||||||
| 
 | 
 | ||||||
| 	if (info->irq >= 0) | 	if (info->irq && (info->irq != UIO_IRQ_CUSTOM)) | ||||||
| 		free_irq(info->irq, idev); | 		free_irq(info->irq, idev); | ||||||
| 
 | 
 | ||||||
| 	uio_dev_del_attributes(idev); | 	uio_dev_del_attributes(idev); | ||||||
|  |  | ||||||
|  | @ -108,7 +108,7 @@ extern void uio_event_notify(struct uio_info *info); | ||||||
| 
 | 
 | ||||||
| /* defines for uio_info->irq */ | /* defines for uio_info->irq */ | ||||||
| #define UIO_IRQ_CUSTOM	-1 | #define UIO_IRQ_CUSTOM	-1 | ||||||
| #define UIO_IRQ_NONE	-2 | #define UIO_IRQ_NONE	0 | ||||||
| 
 | 
 | ||||||
| /* defines for uio_mem->memtype */ | /* defines for uio_mem->memtype */ | ||||||
| #define UIO_MEM_NONE	0 | #define UIO_MEM_NONE	0 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Eric W. Biederman
				Eric W. Biederman