~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to arch/tile/lib/cpumask.c

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
}