public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Rob Landley <rob@landley.net>
To: Embedded Linux mailing list <linux-embedded@vger.kernel.org>
Cc: linux-kernel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	"H. Peter Anvin" <hpa@zytor.com>, Sam Ravnborg <sam@ravnborg.org>
Subject: [PATCH 1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh
Date: Fri, 2 Jan 2009 02:13:30 -0600	[thread overview]
Message-ID: <200901020213.30658.rob@landley.net> (raw)
In-Reply-To: <200901020207.30359.rob@landley.net>

From: Rob Landley <rob@landley.net>
Replace kernel/timeconst.pl with kernel/timeconst.sh.  The new shell scriptis much simpler, about 1/4 the size, and runs on Red Hat 9 from 2003.
Peter Anvin added this perl to 2.6.25.  Before that, the kernel had neverrequired perl to build.
Signed-off-by: Rob Landley <rob@landley.net>---
 kernel/Makefile     |    4  kernel/timeconst.pl |  378 ------------------------------------------ kernel/timeconst.sh |   91 ++++++++++ 3 files changed, 93 insertions(+), 380 deletions(-)
diff -r d0c7611dcfd6 kernel/Makefile--- a/kernel/Makefile	Tue Dec 30 17:48:25 2008 -0800+++ b/kernel/Makefile	Fri Jan 02 00:10:44 2009 -0600@@ -115,7 +115,7 @@ $(obj)/time.o: $(obj)/timeconst.h  quiet_cmd_timeconst  = TIMEC   $@-      cmd_timeconst  = $(PERL) $< $(CONFIG_HZ) > $@+      cmd_timeconst  = $(CONFIG_SHELL) $< $(CONFIG_HZ) > $@ targets += timeconst.h-$(obj)/timeconst.h: $(src)/timeconst.pl FORCE+$(obj)/timeconst.h: $(src)/timeconst.sh FORCE 	$(call if_changed,timeconst)--- /dev/null	1969-12-31 00:00:00.000000000 -0600+++ hg/kernel/timeconst.sh	2009-01-01 23:53:17.000000000 -0600@@ -0,0 +1,91 @@+#!/bin/bash++if [ $# -ne 1 ]+then+	echo "Usage: timeconst.sh HZ"+	exit 1+fi++HZ=$1++# Sanity test: even the shell in Red Hat 9 (circa 2003) supported 64 bit math.++[ $((1<<32)) -lt 0 ] && exit 1++# Output start of header file++cat << EOF+/* Automatically generated by kernel/timeconst.sh */+/* Conversion constants for HZ == $HZ */++#ifndef KERNEL_TIMECONST_H+#define KERNEL_TIMECONST_H++#include <linux/param.h>+#include <linux/types.h>++#if HZ != $HZ+#error "kernel/timeconst.h has the wrong HZ value!"+#endif++EOF++# For both Miliseconds and Microseconds++for i in "MSEC 1000" "USEC 1000000"+do+	NAME=$(echo $i | awk '{print $1}')+	PERIOD=$(echo $i | awk '{print $2}')++	# Find greatest common denominator (using Euclid's algorithm)++	A=$HZ+	B=$PERIOD++	while [ $B -ne 0 ]+	do+		C=$(($A%$B))+		A=$B+		B=$C+	done++	GCD=$A++	# Do this for each direction (HZ_TO_PERIOD and PERIOD_TO_HZ)++	for DIRECTION in 0 1+	do+		if [ $DIRECTION -eq 0 ]+		then+			CONVERT="HZ_TO_${NAME}"+			FROM=$HZ+			TO=$PERIOD+		else+			CONVERT="${NAME}_TO_HZ"+			FROM=$PERIOD+			TO=$HZ+		fi++		# How many shift bits give 32 bits of significant data?++		SHIFT=0+		while [ $(( (($TO<<$SHIFT)+$FROM-1)/$FROM )) -lt $((1<<31)) ]+		do+			SHIFT=$(( $SHIFT+1 ))+		done++		MUL32=$(( (($TO<<$SHIFT)+$FROM-1)/$FROM ))+		MUL32=$(printf %x $MUL32)+		echo "#define ${CONVERT}_MUL32	U64_C(0x$MUL32)"+		ADJ32=$(($FROM/$GCD))+		ADJ32=$(( (($ADJ32-1)<<$SHIFT)/$ADJ32 ))+		ADJ32=$(printf %x $ADJ32)+		echo "#define ${CONVERT}_ADJ32	U64_C(0x$ADJ32)"+		echo "#define ${CONVERT}_SHR32	$SHIFT"+		echo "#define ${CONVERT}_NUM		U64_C($(($TO/$GCD)))"+		echo "#define ${CONVERT}_DEN		U64_C($(($FROM/$GCD)))"+	done+done++echo+echo "#endif /* KERNEL_TIMECHONST_H */"--- hg/kernel/timeconst.pl	2008-11-22 19:09:13.000000000 -0600+++ /dev/null	1969-12-31 00:00:00.000000000 -0600@@ -1,378 +0,0 @@-#!/usr/bin/perl-# ------------------------------------------------------------------------#-#   Copyright 2007-2008 rPath, Inc. - All Rights Reserved-#-#   This file is part of the Linux kernel, and is made available under-#   the terms of the GNU General Public License version 2 or (at your-#   option) any later version; incorporated herein by reference.-#-# ------------------------------------------------------------------------#--#-# Usage: timeconst.pl HZ > timeconst.h-#--# Precomputed values for systems without Math::BigInt-# Generated by:-# timeconst.pl --can 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 1200-%canned_values = (-	24 => [-		'0xa6aaaaab','0x2aaaaaa',26,-		125,3,-		'0xc49ba5e4','0x1fbe76c8b4',37,-		3,125,-		'0xa2c2aaab','0xaaaa',16,-		125000,3,-		'0xc9539b89','0x7fffbce4217d',47,-		3,125000,-	], 32 => [-		'0xfa000000','0x6000000',27,-		125,4,-		'0x83126e98','0xfdf3b645a',36,-		4,125,-		'0xf4240000','0x0',17,-		31250,1,-		'0x8637bd06','0x3fff79c842fa',46,-		1,31250,-	], 48 => [-		'0xa6aaaaab','0x6aaaaaa',27,-		125,6,-		'0xc49ba5e4','0xfdf3b645a',36,-		6,125,-		'0xa2c2aaab','0x15555',17,-		62500,3,-		'0xc9539b89','0x3fffbce4217d',46,-		3,62500,-	], 64 => [-		'0xfa000000','0xe000000',28,-		125,8,-		'0x83126e98','0x7ef9db22d',35,-		8,125,-		'0xf4240000','0x0',18,-		15625,1,-		'0x8637bd06','0x1fff79c842fa',45,-		1,15625,-	], 100 => [-		'0xa0000000','0x0',28,-		10,1,-		'0xcccccccd','0x733333333',35,-		1,10,-		'0x9c400000','0x0',18,-		10000,1,-		'0xd1b71759','0x1fff2e48e8a7',45,-		1,10000,-	], 122 => [-		'0x8325c53f','0xfbcda3a',28,-		500,61,-		'0xf9db22d1','0x7fbe76c8b',35,-		61,500,-		'0x8012e2a0','0x3ef36',18,-		500000,61,-		'0xffda4053','0x1ffffbce4217',45,-		61,500000,-	], 128 => [-		'0xfa000000','0x1e000000',29,-		125,16,-		'0x83126e98','0x3f7ced916',34,-		16,125,-		'0xf4240000','0x40000',19,-		15625,2,-		'0x8637bd06','0xfffbce4217d',44,-		2,15625,-	], 200 => [-		'0xa0000000','0x0',29,-		5,1,-		'0xcccccccd','0x333333333',34,-		1,5,-		'0x9c400000','0x0',19,-		5000,1,-		'0xd1b71759','0xfff2e48e8a7',44,-		1,5000,-	], 250 => [-		'0x80000000','0x0',29,-		4,1,-		'0x80000000','0x180000000',33,-		1,4,-		'0xfa000000','0x0',20,-		4000,1,-		'0x83126e98','0x7ff7ced9168',43,-		1,4000,-	], 256 => [-		'0xfa000000','0x3e000000',30,-		125,32,-		'0x83126e98','0x1fbe76c8b',33,-		32,125,-		'0xf4240000','0xc0000',20,-		15625,4,-		'0x8637bd06','0x7ffde7210be',43,-		4,15625,-	], 300 => [-		'0xd5555556','0x2aaaaaaa',30,-		10,3,-		'0x9999999a','0x1cccccccc',33,-		3,10,-		'0xd0555556','0xaaaaa',20,-		10000,3,-		'0x9d495183','0x7ffcb923a29',43,-		3,10000,-	], 512 => [-		'0xfa000000','0x7e000000',31,-		125,64,-		'0x83126e98','0xfdf3b645',32,-		64,125,-		'0xf4240000','0x1c0000',21,-		15625,8,-		'0x8637bd06','0x3ffef39085f',42,-		8,15625,-	], 1000 => [-		'0x80000000','0x0',31,-		1,1,-		'0x80000000','0x0',31,-		1,1,-		'0xfa000000','0x0',22,-		1000,1,-		'0x83126e98','0x1ff7ced9168',41,-		1,1000,-	], 1024 => [-		'0xfa000000','0xfe000000',32,-		125,128,-		'0x83126e98','0x7ef9db22',31,-		128,125,-		'0xf4240000','0x3c0000',22,-		15625,16,-		'0x8637bd06','0x1fff79c842f',41,-		16,15625,-	], 1200 => [-		'0xd5555556','0xd5555555',32,-		5,6,-		'0x9999999a','0x66666666',31,-		6,5,-		'0xd0555556','0x2aaaaa',22,-		2500,3,-		'0x9d495183','0x1ffcb923a29',41,-		3,2500,-	]-);--$has_bigint = eval 'use Math::BigInt qw(bgcd); 1;';--sub bint($)-{-	my($x) = @_;-	return Math::BigInt->new($x);-}--#-# Constants for division by reciprocal multiplication.-# (bits, numerator, denominator)-#-sub fmul($$$)-{-	my ($b,$n,$d) = @_;--	$n = bint($n);-	$d = bint($d);--	return scalar (($n << $b)+$d-bint(1))/$d;-}--sub fadj($$$)-{-	my($b,$n,$d) = @_;--	$n = bint($n);-	$d = bint($d);--	$d = $d/bgcd($n, $d);-	return scalar (($d-bint(1)) << $b)/$d;-}--sub fmuls($$$) {-	my($b,$n,$d) = @_;-	my($s,$m);-	my($thres) = bint(1) << ($b-1);--	$n = bint($n);-	$d = bint($d);--	for ($s = 0; 1; $s++) {-		$m = fmul($s,$n,$d);-		return $s if ($m >= $thres);-	}-	return 0;-}--# Generate a hex value if the result fits in 64 bits;-# otherwise skip.-sub bignum_hex($) {-	my($x) = @_;-	my $s = $x->as_hex();--	return (length($s) > 18) ? undef : $s;-}--# Provides mul, adj, and shr factors for a specific-# (bit, time, hz) combination-sub muladj($$$) {-	my($b, $t, $hz) = @_;-	my $s = fmuls($b, $t, $hz);-	my $m = fmul($s, $t, $hz);-	my $a = fadj($s, $t, $hz);-	return (bignum_hex($m), bignum_hex($a), $s);-}--# Provides numerator, denominator values-sub numden($$) {-	my($n, $d) = @_;-	my $g = bgcd($n, $d);-	return ($n/$g, $d/$g);-}--# All values for a specific (time, hz) combo-sub conversions($$) {-	my ($t, $hz) = @_;-	my @val = ();--	# HZ_TO_xx-	push(@val, muladj(32, $t, $hz));-	push(@val, numden($t, $hz));--	# xx_TO_HZ-	push(@val, muladj(32, $hz, $t));-	push(@val, numden($hz, $t));--	return @val;-}--sub compute_values($) {-	my($hz) = @_;-	my @val = ();-	my $s, $m, $a, $g;--	if (!$has_bigint) {-		die "$0: HZ == $hz not canned and ".-		    "Math::BigInt not available\n";-	}--	# MSEC conversions-	push(@val, conversions(1000, $hz));--	# USEC conversions-	push(@val, conversions(1000000, $hz));--	return @val;-}--sub outputval($$)-{-	my($name, $val) = @_;-	my $csuf;--	if (defined($val)) {-	    if ($name !~ /SHR/) {-		$val = "U64_C($val)";-	    }-	    printf "#define %-23s %s\n", $name.$csuf, $val.$csuf;-	}-}--sub output($@)-{-	my($hz, @val) = @_;-	my $pfx, $bit, $suf, $s, $m, $a;--	print "/* Automatically generated by kernel/timeconst.pl */\n";-	print "/* Conversion constants for HZ == $hz */\n";-	print "\n";-	print "#ifndef KERNEL_TIMECONST_H\n";-	print "#define KERNEL_TIMECONST_H\n";-	print "\n";--	print "#include <linux/param.h>\n";-	print "#include <linux/types.h>\n";--	print "\n";-	print "#if HZ != $hz\n";-	print "#error \"kernel/timeconst.h has the wrong HZ value!\"\n";-	print "#endif\n";-	print "\n";--	foreach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ',-		      'HZ_TO_USEC','USEC_TO_HZ') {-		foreach $bit (32) {-			foreach $suf ('MUL', 'ADJ', 'SHR') {-				outputval("${pfx}_$suf$bit", shift(@val));-			}-		}-		foreach $suf ('NUM', 'DEN') {-			outputval("${pfx}_$suf", shift(@val));-		}-	}--	print "\n";-	print "#endif /* KERNEL_TIMECONST_H */\n";-}--# Pretty-print Perl values-sub perlvals(@) {-	my $v;-	my @l = ();--	foreach $v (@_) {-		if (!defined($v)) {-			push(@l, 'undef');-		} elsif ($v =~ /^0x/) {-			push(@l, "\'".$v."\'");-		} else {-			push(@l, $v.'');-		}-	}-	return join(',', @l);-}--($hz) = @ARGV;--# Use this to generate the %canned_values structure-if ($hz eq '--can') {-	shift(@ARGV);-	@hzlist = sort {$a <=> $b} (@ARGV);--	print "# Precomputed values for systems without Math::BigInt\n";-	print "# Generated by:\n";-	print "# timeconst.pl --can ", join(' ', @hzlist), "\n";-	print "\%canned_values = (\n";-	my $pf = "\t";-	foreach $hz (@hzlist) {-		my @values = compute_values($hz);-		print "$pf$hz => [\n";-		while (scalar(@values)) {-			my $bit;-			foreach $bit (32) {-				my $m = shift(@values);-				my $a = shift(@values);-				my $s = shift(@values);-				print "\t\t", perlvals($m,$a,$s), ",\n";-			}-			my $n = shift(@values);-			my $d = shift(@values);-			print "\t\t", perlvals($n,$d), ",\n";-		}-		print "\t]";-		$pf = ', ';-	}-	print "\n);\n";-} else {-	$hz += 0;			# Force to number-	if ($hz < 1) {-		die "Usage: $0 HZ\n";-	}--	@val = @{$canned_values{$hz}};-	if (!defined(@val)) {-		@val = compute_values($hz);-	}-	output($hz, @val);-}-exit 0;\0ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

  reply	other threads:[~2009-01-02  8:13 UTC|newest]

Thread overview: 135+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-02  8:07 PATCH [0/3]: Simplify the kernel build by removing perl Rob Landley
2009-01-02  8:13 ` Rob Landley [this message]
2009-01-02  9:04   ` [PATCH 1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh Sam Ravnborg
2009-01-02 12:00     ` Rob Landley
2009-01-02 19:33       ` H. Peter Anvin
2009-01-04  1:32         ` Rob Landley
2009-01-04  1:35           ` H. Peter Anvin
2009-01-04 12:07           ` Alan Cox
2009-01-04 18:36             ` H. Peter Anvin
2009-01-04 19:03             ` Rob Landley
2009-01-04 20:39               ` H. Peter Anvin
2009-01-05  0:59                 ` Rob Landley
2009-01-03  6:28       ` Harvey Harrison
2009-01-03 12:28   ` Ingo Oeser
2009-01-04  1:36     ` Rob Landley
2009-01-04  5:07       ` Valdis.Kletnieks
2009-01-04  6:43         ` Rob Landley
2009-01-04 22:13           ` Jamie Lokier
2009-01-05  0:15             ` Bernd Petrovitsch
2009-01-05  2:23               ` Jamie Lokier
2009-01-05 10:46                 ` Bernd Petrovitsch
2009-01-05 15:01                   ` Jamie Lokier
2009-01-05 16:18                     ` Bernd Petrovitsch
2009-01-06  0:06                     ` Rob Landley
2009-01-05 21:07                   ` Rob Landley
2009-01-05  4:50               ` Rob Landley
2009-01-05 12:29                 ` Bernd Petrovitsch
2009-01-04 21:51         ` Alejandro Mery
2009-01-04  7:15       ` Michal Jaegermann
2009-01-05  0:41   ` Ray Lee
2009-01-05  5:08     ` Rob Landley
2009-01-02  8:14 ` [PATCH 2/3]: Remove perl from make headers_install Rob Landley
2009-01-02  9:09   ` Sam Ravnborg
2009-01-02  8:15 ` [PATCH 3/3]: Convert mkcapflags.pl to mkcapflags.sh Rob Landley
2009-01-02  9:12   ` Sam Ravnborg
2009-01-02  9:26 ` PATCH [0/3]: Simplify the kernel build by removing perl Arkadiusz Miskiewicz
2009-01-02  9:49   ` Christoph Hellwig
2009-01-02 10:16     ` Alejandro Mery
2009-01-02 10:30       ` Mark Miller
2009-01-02 11:18         ` Matt Keenan
2009-01-02 10:41       ` Måns Rullgård
2009-01-15 12:59         ` Pádraig Brady
2009-01-15 18:52           ` Jamie Lokier
2009-01-15 19:45             ` Måns Rullgård
2009-01-02 11:15       ` Rob Landley
2009-01-02 11:44         ` Sam Ravnborg
2009-01-02 12:56     ` Rob Landley
2009-01-02 14:04       ` Theodore Tso
2009-01-03  3:22         ` Jamie Lokier
2009-01-04  2:23         ` Rob Landley
2009-01-02 10:02   ` Mark Miller
2009-01-02 10:03     ` Mark Miller
2009-01-02 11:13   ` Rob Landley
2009-01-02 16:04     ` Matthieu CASTET
2009-01-03 19:46       ` Rob Landley
2009-01-03 20:10         ` Sam Ravnborg
2009-01-03 20:50           ` H. Peter Anvin
2009-01-04  1:47             ` Rob Landley
2009-01-04  1:45           ` Rob Landley
2009-01-04  8:09             ` Sam Ravnborg
2009-01-04 20:19               ` Rob Landley
2009-01-04  0:44         ` Robert Hancock
2009-01-04  1:39           ` David Brownell
2009-01-04  3:05           ` Rob Landley
2009-01-04  1:32       ` Rob Landley
2009-01-02  9:50 ` Paul Mundt
2009-01-02 10:32   ` Mark Miller
2009-01-02 10:57     ` Paul Mundt
2009-01-02 12:11       ` Mark Miller
2009-01-02 12:44   ` Rob Landley
2009-01-02 17:25   ` Wookey
2009-01-02 18:01     ` Sam Ravnborg
2009-01-02 19:27       ` H. Peter Anvin
2009-01-04  1:35         ` Rob Landley
2009-01-03 19:48       ` Rob Landley
2009-01-03 14:59   ` Wolfgang Denk
2009-01-03 22:54 ` Leon Woestenberg
2009-01-03 23:03   ` H. Peter Anvin
2009-01-04  0:37     ` Leon Woestenberg
2009-01-04  2:53       ` Rob Landley
2009-01-04  3:38         ` Markus Heidelberg
2009-01-04  4:57           ` Rob Landley
2009-01-04  2:06     ` Rob Landley
2009-01-04  2:14       ` H. Peter Anvin
2009-01-04  6:29         ` Rob Landley
2009-01-15 14:32           ` Pádraig Brady
2009-01-04  2:36       ` Jamie Lokier
2009-01-04  2:39         ` H. Peter Anvin
2009-01-04  2:43           ` H. Peter Anvin
2009-01-04  3:06       ` Paul Mundt
2009-01-04 10:23         ` Leon Woestenberg
2009-01-08 13:29           ` Mike Frysinger
2009-01-11 12:45           ` Bernd Petrovitsch
2009-01-12  3:36             ` Mark A. Miller
2009-01-12  5:11               ` H. Peter Anvin
2009-01-12  5:23                 ` Mark A. Miller
2009-01-12  8:20               ` Paul Mundt
2009-01-12  9:18                 ` Mark A. Miller
2009-01-12  9:41                   ` Paul Mundt
2009-01-12 10:03                     ` Mark A. Miller
2009-01-12 10:34                       ` Paul Mundt
2009-01-12 17:56                     ` Rob Landley
2009-01-12 18:04                       ` Alan Cox
2009-01-12  8:27               ` Peter Korsgaard
2009-01-12 17:45                 ` Rob Landley
     [not found]             ` <31014a580901111928u586e2246uccf370ff941c8a01@mail.gmail.com>
2009-01-12  5:35               ` Sam Ravnborg
2009-01-12  5:50                 ` Mark A. Miller
2009-01-12 10:18                   ` Sam Ravnborg
2009-01-12 10:22                     ` Mark A. Miller
2009-01-12 10:38                     ` Paul Mundt
2009-01-14  2:51                       ` Jamie Lokier
2009-01-16  6:11                         ` Rob Landley
2009-01-16 14:54                           ` Valdis.Kletnieks
2009-01-16 21:54                             ` Rob Landley
2009-01-17  9:51                               ` Jamie Lokier
2009-01-18  1:44                                 ` Rob Landley
2009-01-04 16:22         ` Vladimir Dronnikov
2009-01-04  1:24 ` PATCH [0/3]: Simplify the kernel build by removing perl v2 Rob Landley
2009-01-04  1:27   ` PATCH [1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh (v2) Rob Landley
2009-01-04  2:48     ` David Vrabel
2009-01-04 20:21       ` Rob Landley
2009-01-04  1:28   ` PATCH [2/3]: Remove perl from make headers_install Rob Landley
2009-01-04  1:29   ` PATCH [3/3]: Convert kernel/cpu/mkcapflags.pl to kernel/cpu/mkcapflags.sh Rob Landley
  -- strict thread matches above, loose matches on Subject: below --
2009-09-19  1:25 [PATCH 0/3] Perl removal patches for 2.6.31 Rob Landley
2009-09-19  1:33 ` [PATCH 1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh Rob Landley
2009-12-08  9:17 [PATCH 0/3] clean out Perl from build system Rob Landley
2009-12-08  9:19 ` [PATCH 1/3] Replace kernel/timeconst.pl with kernel/timeconst.sh Rob Landley
2009-12-09 15:45   ` Michal Marek
2009-12-09 23:40     ` Rob Landley
2009-12-09 23:45       ` H. Peter Anvin
2009-12-10  1:50         ` Rob Landley
2009-12-10  1:53           ` H. Peter Anvin
2009-12-10 13:52       ` Michal Marek
2009-12-10 23:16         ` Rob Landley
2009-12-11 15:31           ` Michal Marek
2009-12-11 19:13             ` H. Peter Anvin
2009-12-12  0:49               ` Rob Landley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200901020213.30658.rob@landley.net \
    --to=rob@landley.net \
    --cc=akpm@linux-foundation.org \
    --cc=hpa@zytor.com \
    --cc=linux-embedded@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sam@ravnborg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox