| 
									
										
										
										
											2010-05-28 23:09:12 -04:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright 2010 Tilera Corporation. All Rights Reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *   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, version 2. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *   This program is distributed in the hope that it will be useful, but | 
					
						
							|  |  |  |  *   WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  *   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or | 
					
						
							|  |  |  |  *   NON INFRINGEMENT.  See the GNU General Public License for | 
					
						
							|  |  |  |  *   more details. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/cpumask.h>
 | 
					
						
							|  |  |  | #include <linux/ctype.h>
 | 
					
						
							|  |  |  | #include <linux/errno.h>
 | 
					
						
							| 
									
										
										
										
											2010-06-25 17:04:17 -04:00
										 |  |  | #include <linux/smp.h>
 | 
					
						
							| 
									
										
										
										
											2013-02-01 15:06:06 -05:00
										 |  |  | #include <linux/export.h>
 | 
					
						
							| 
									
										
										
										
											2010-05-28 23:09:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Allow cropping out bits beyond the end of the array. | 
					
						
							|  |  |  |  * Move to "lib" directory if more clients want to use this routine. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | int bitmap_parselist_crop(const char *bp, unsigned long *maskp, int nmaskbits) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	unsigned a, b; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	bitmap_zero(maskp, nmaskbits); | 
					
						
							|  |  |  | 	do { | 
					
						
							|  |  |  | 		if (!isdigit(*bp)) | 
					
						
							|  |  |  | 			return -EINVAL; | 
					
						
							|  |  |  | 		a = simple_strtoul(bp, (char **)&bp, 10); | 
					
						
							|  |  |  | 		b = a; | 
					
						
							|  |  |  | 		if (*bp == '-') { | 
					
						
							|  |  |  | 			bp++; | 
					
						
							|  |  |  | 			if (!isdigit(*bp)) | 
					
						
							|  |  |  | 				return -EINVAL; | 
					
						
							|  |  |  | 			b = simple_strtoul(bp, (char **)&bp, 10); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (!(a <= b)) | 
					
						
							|  |  |  | 			return -EINVAL; | 
					
						
							|  |  |  | 		if (b >= nmaskbits) | 
					
						
							|  |  |  | 			b = nmaskbits-1; | 
					
						
							|  |  |  | 		while (a <= b) { | 
					
						
							|  |  |  | 			set_bit(a, maskp); | 
					
						
							|  |  |  | 			a++; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (*bp == ',') | 
					
						
							|  |  |  | 			bp++; | 
					
						
							|  |  |  | 	} while (*bp != '\0' && *bp != '\n'); | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2013-02-01 15:06:06 -05:00
										 |  |  | EXPORT_SYMBOL(bitmap_parselist_crop); |