]>
Commit | Line | Data |
---|---|---|
608e8e66 MG |
1 | #!/bin/bash |
2 | # Translate the bits making up a GFP mask | |
3 | # (c) 2009, Mel Gorman <[email protected]> | |
4 | # Licensed under the terms of the GNU GPL License version 2 | |
5 | SOURCE= | |
6 | GFPMASK=none | |
7 | ||
8 | # Helper function to report failures and exit | |
9 | die() { | |
10 | echo ERROR: $@ | |
11 | if [ "$TMPFILE" != "" ]; then | |
12 | rm -f $TMPFILE | |
13 | fi | |
14 | exit -1 | |
15 | } | |
16 | ||
17 | usage() { | |
18 | echo "usage: gfp-translate [-h] [ --source DIRECTORY ] gfpmask" | |
19 | exit 0 | |
20 | } | |
21 | ||
3ad2f3fb | 22 | # Parse command-line arguments |
608e8e66 MG |
23 | while [ $# -gt 0 ]; do |
24 | case $1 in | |
25 | --source) | |
26 | SOURCE=$2 | |
27 | shift 2 | |
28 | ;; | |
29 | -h) | |
30 | usage | |
31 | ;; | |
32 | --help) | |
33 | usage | |
34 | ;; | |
35 | *) | |
36 | GFPMASK=$1 | |
37 | shift | |
38 | ;; | |
39 | esac | |
40 | done | |
41 | ||
42 | # Guess the kernel source directory if it's not set. Preference is in order of | |
43 | # o current directory | |
44 | # o /usr/src/linux | |
45 | if [ "$SOURCE" = "" ]; then | |
46 | if [ -r "/usr/src/linux/Makefile" ]; then | |
47 | SOURCE=/usr/src/linux | |
48 | fi | |
49 | if [ -r "`pwd`/Makefile" ]; then | |
50 | SOURCE=`pwd` | |
51 | fi | |
52 | fi | |
53 | ||
54 | # Confirm that a source directory exists | |
55 | if [ ! -r "$SOURCE/Makefile" ]; then | |
56 | die "Could not locate kernel source directory or it is invalid" | |
57 | fi | |
58 | ||
59 | # Confirm that a GFP mask has been specified | |
60 | if [ "$GFPMASK" = "none" ]; then | |
61 | usage | |
62 | fi | |
63 | ||
64 | # Extract GFP flags from the kernel source | |
65 | TMPFILE=`mktemp -t gfptranslate-XXXXXX` || exit 1 | |
27af0384 MG |
66 | grep -q ___GFP $SOURCE/include/linux/gfp.h |
67 | if [ $? -eq 0 ]; then | |
68 | grep "^#define ___GFP" $SOURCE/include/linux/gfp.h | sed -e 's/u$//' | grep -v GFP_BITS > $TMPFILE | |
69 | else | |
70 | grep "^#define __GFP" $SOURCE/include/linux/gfp.h | sed -e 's/(__force gfp_t)//' | sed -e 's/u)/)/' | grep -v GFP_BITS | sed -e 's/)\//) \//' > $TMPFILE | |
71 | fi | |
608e8e66 MG |
72 | |
73 | # Parse the flags | |
74 | IFS=" | |
75 | " | |
76 | echo Source: $SOURCE | |
77 | echo Parsing: $GFPMASK | |
78 | for LINE in `cat $TMPFILE`; do | |
79 | MASK=`echo $LINE | awk '{print $3}'` | |
80 | if [ $(($GFPMASK&$MASK)) -ne 0 ]; then | |
81 | echo $LINE | |
82 | fi | |
83 | done | |
84 | ||
85 | rm -f $TMPFILE | |
86 | exit 0 |