Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/tile/lib/cpumask.c
10817 views
1
/*
2
* Copyright 2010 Tilera Corporation. All Rights Reserved.
3
*
4
* This program is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU General Public License
6
* as published by the Free Software Foundation, version 2.
7
*
8
* This program is distributed in the hope that it will be useful, but
9
* WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
11
* NON INFRINGEMENT. See the GNU General Public License for
12
* more details.
13
*/
14
15
#include <linux/cpumask.h>
16
#include <linux/ctype.h>
17
#include <linux/errno.h>
18
#include <linux/smp.h>
19
20
/*
21
* Allow cropping out bits beyond the end of the array.
22
* Move to "lib" directory if more clients want to use this routine.
23
*/
24
int bitmap_parselist_crop(const char *bp, unsigned long *maskp, int nmaskbits)
25
{
26
unsigned a, b;
27
28
bitmap_zero(maskp, nmaskbits);
29
do {
30
if (!isdigit(*bp))
31
return -EINVAL;
32
a = simple_strtoul(bp, (char **)&bp, 10);
33
b = a;
34
if (*bp == '-') {
35
bp++;
36
if (!isdigit(*bp))
37
return -EINVAL;
38
b = simple_strtoul(bp, (char **)&bp, 10);
39
}
40
if (!(a <= b))
41
return -EINVAL;
42
if (b >= nmaskbits)
43
b = nmaskbits-1;
44
while (a <= b) {
45
set_bit(a, maskp);
46
a++;
47
}
48
if (*bp == ',')
49
bp++;
50
} while (*bp != '\0' && *bp != '\n');
51
return 0;
52
}
53
54