86 lines · 1.7 KB · Text
RawDownload
#!/bin/bash# SPDX-License-Identifier: GPL-2.0-only# Translate the bits making up a GFP mask# (c) 2009, Mel Gorman <mel@csn.ul.ie>SOURCE=GFPMASK=none # Helper function to report failures and exitdie() {	echo ERROR: $@	if [ "$TMPFILE" != "" ]; then		rm -f $TMPFILE	fi	exit -1} usage() {	echo "usage: gfp-translate [-h] [ --source DIRECTORY ] gfpmask"	exit 0} # Parse command-line argumentswhile [ $# -gt 0 ]; do	case $1 in		--source)			SOURCE=$2			shift 2			;;		-h)			usage			;;		--help)			usage			;;		*)			GFPMASK=$1			shift			;;	esacdone # Guess the kernel source directory if it's not set. Preference is in order of# o current directory# o /usr/src/linuxif [ "$SOURCE" = "" ]; then	if [ -r "/usr/src/linux/Makefile" ]; then		SOURCE=/usr/src/linux	fi	if [ -r "`pwd`/Makefile" ]; then		SOURCE=`pwd`	fifi # Confirm that a source directory existsif [ ! -r "$SOURCE/Makefile" ]; then	die "Could not locate kernel source directory or it is invalid"fi # Confirm that a GFP mask has been specifiedif [ "$GFPMASK" = "none" ]; then	usagefi # Extract GFP flags from the kernel sourceTMPFILE=`mktemp -t gfptranslate-XXXXXX` || exit 1grep -q ___GFP $SOURCE/include/linux/gfp.hif [ $? -eq 0 ]; then	grep "^#define ___GFP" $SOURCE/include/linux/gfp.h | sed -e 's/u$//' | grep -v GFP_BITS > $TMPFILEelse	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/)\//) \//' > $TMPFILEfi # Parse the flagsIFS=""echo Source: $SOURCEecho Parsing: $GFPMASKfor LINE in `cat $TMPFILE`; do	MASK=`echo $LINE | awk '{print $3}'`	if [ $(($GFPMASK&$MASK)) -ne 0 ]; then		echo $LINE	fidone rm -f $TMPFILEexit 0