linux/scripts/gfp-translate
<<
>>
Prefs
   1#!/bin/bash
   2# Translate the bits making up a GFP mask
   3# (c) 2009, Mel Gorman <mel@csn.ul.ie>
   4# Licensed under the terms of the GNU GPL License version 2
   5SOURCE=
   6GFPMASK=none
   7
   8# Helper function to report failures and exit
   9die() {
  10        echo ERROR: $@
  11        if [ "$TMPFILE" != "" ]; then
  12                rm -f $TMPFILE
  13        fi
  14        exit -1
  15}
  16
  17usage() {
  18        echo "usage: gfp-translate [-h] [ --source DIRECTORY ] gfpmask"
  19        exit 0
  20}
  21
  22# Parse command-line arguments
  23while [ $# -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
  40done
  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
  45if [ "$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
  52fi
  53
  54# Confirm that a source directory exists
  55if [ ! -r "$SOURCE/Makefile" ]; then
  56        die "Could not locate kernel source directory or it is invalid"
  57fi
  58
  59# Confirm that a GFP mask has been specified
  60if [ "$GFPMASK" = "none" ]; then
  61        usage
  62fi
  63
  64# Extract GFP flags from the kernel source
  65TMPFILE=`mktemp -t gfptranslate-XXXXXX` || exit 1
  66grep -q ___GFP $SOURCE/include/linux/gfp.h
  67if [ $? -eq 0 ]; then
  68        grep "^#define ___GFP" $SOURCE/include/linux/gfp.h | sed -e 's/u$//' | grep -v GFP_BITS > $TMPFILE
  69else
  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
  71fi
  72
  73# Parse the flags
  74IFS="
  75"
  76echo Source: $SOURCE
  77echo Parsing: $GFPMASK
  78for LINE in `cat $TMPFILE`; do
  79        MASK=`echo $LINE | awk '{print $3}'`
  80        if [ $(($GFPMASK&$MASK)) -ne 0 ]; then
  81                echo $LINE
  82        fi
  83done
  84
  85rm -f $TMPFILE
  86exit 0
  87