mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 02:59:34 +00:00 
			
		
		
		
	 e080706190
			
		
	
	
		e080706190
		
	
	
	
	
		
			
			Signed-off-by: Christoph Hellwig <hch@lst.de> Cc: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef __LINUX_UIO_H
 | |
| #define __LINUX_UIO_H
 | |
| 
 | |
| #include <linux/compiler.h>
 | |
| #include <linux/types.h>
 | |
| 
 | |
| /*
 | |
|  *	Berkeley style UIO structures	-	Alan Cox 1994.
 | |
|  *
 | |
|  *		This program is free software; you can redistribute it and/or
 | |
|  *		modify it under the terms of the GNU General Public License
 | |
|  *		as published by the Free Software Foundation; either version
 | |
|  *		2 of the License, or (at your option) any later version.
 | |
|  */
 | |
| 
 | |
| struct iovec
 | |
| {
 | |
| 	void __user *iov_base;	/* BSD uses caddr_t (1003.1g requires void *) */
 | |
| 	__kernel_size_t iov_len; /* Must be size_t (1003.1g) */
 | |
| };
 | |
| 
 | |
| #ifdef __KERNEL__
 | |
| 
 | |
| struct kvec {
 | |
| 	void *iov_base; /* and that should *never* hold a userland pointer */
 | |
| 	size_t iov_len;
 | |
| };
 | |
| 
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  *	UIO_MAXIOV shall be at least 16 1003.1g (5.4.1.1)
 | |
|  */
 | |
|  
 | |
| #define UIO_FASTIOV	8
 | |
| #define UIO_MAXIOV	1024
 | |
| 
 | |
| /*
 | |
|  * Total number of bytes covered by an iovec.
 | |
|  *
 | |
|  * NOTE that it is not safe to use this function until all the iovec's
 | |
|  * segment lengths have been validated.  Because the individual lengths can
 | |
|  * overflow a size_t when added together.
 | |
|  */
 | |
| static inline size_t iov_length(const struct iovec *iov, unsigned long nr_segs)
 | |
| {
 | |
| 	unsigned long seg;
 | |
| 	size_t ret = 0;
 | |
| 
 | |
| 	for (seg = 0; seg < nr_segs; seg++)
 | |
| 		ret += iov[seg].iov_len;
 | |
| 	return ret;
 | |
| }
 | |
| 
 | |
| unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to);
 | |
| 
 | |
| #endif
 |