[patch] string.h speedup, cld-2.3.30-A1

Ingo Molnar (mingo@chiara.csoma.elte.hu)
Sat, 27 Nov 1999 16:23:38 +0100 (CET)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--79888902-209572901-943716218=:2960
Content-Type: TEXT/PLAIN; charset=US-ASCII

x86 GCC and string.h generates lots of 'cld' instructions for string /
memory copies. My 2.3.30-pre2 kernel contains 973 cld instructions, often
in hot paths. Most of these cld's are unnecessery, and just add a 6 cycle
overhead and pollute the icache. This is a problem which has been long
known, but not addressed due to various subtle dangers related to the
change.

'cld' is used so frequently on x86 CPUs because untrusted code is free to
do a 'std' to change the direction of memory/string copies. This flag is
subtle because it only affects string/memory copies, and can lead to
security problems (and has lead to at least one exploit in the distant
past) which go unnoticed during normal use. (normal code doesnt set std
explicitly before calling the kernel)

but all Linux entry and 'untrusted exit' points already do a 'cld', so the
change would be safe, conceptually.

To be 100% safe, i tried to find an 'indirect' way to ensure that no
entry/exit point go unnoticed, and the key is segment registers. Whenever
we change to another protection domain, we must expect '%ds' and '%es' to
get changed by untrusted code. So the 'cld change' can be validated by
checking all places that store/restore %ds. If any such place is missed
then it's unsafe already, because untrusted code can change %ds and trick
the kernel into either crashing or writing to the wrong area.

x86 places that save/restore %ds are easy to find (rgrep -rl '%ds' .):

./include/asm-i386/hw_irq.h
./drivers/char/nvram.c
./drivers/scsi/in2000.h
./arch/i386/boot/bootsect.S
./arch/i386/boot/setup.S
./arch/i386/boot/compressed/head.S
./arch/i386/boot/video.S
./arch/i386/kernel/entry.S
./arch/i386/kernel/head.S
./arch/i386/kernel/process.c
./arch/i386/kernel/trampoline.S
./arch/i386/kernel/apm.c
./arch/i386/kernel/pci-pc.c
./arch/i386/kernel/apm.c.orig

a few of these are trivially not to be protected (boot code does a final
cld, reboot code never returns), the remaining ones are:

./include/asm-i386/hw_irq.h
./arch/i386/kernel/entry.S
./arch/i386/kernel/apm.c
./arch/i386/kernel/pci-pc.c

pci-pc.c is the part dealing with PCI BIOS callbacks, apm.c is calling the
APM BIOS, entry.S has our main entry points (syscalls, traps, faults).
hw_irq.h has the macros for IRQ entry points. All these entry/exit points
are sufficiently protected by a 'cld' after applying my patch. pci-pc.c
had to be fixed to do a cld after calling the BIOS.

string.h's only function which does an 'std' (memmove) has to have a
matching 'cld'.

future exit/entry points will have to do a 'cld' when returning from
untrusted domains, just like they have to restore segment registers.

a the same kernel after applying the attached patch contains 284 'cld's
and is 4k smaller. (the 4k savings are not an error, they are due to
alignment gains, the 600 clds themselves caused a 4k kernel code bloat)

much of the remaining 284 cld's is still unjustified, because '*a = *b;'
type of structure copies are inlined by GCC. (GCC generates a cld because
user-space has to be prepared to be interrupted by uncooperative signal
handlers and the like). So i added a cpy(x,y) macro which copies one
structure into another via memcpy. We may not want to do it this way
though, if it's too ugly. I have not found any way to prevent GCC from
using it's own memcpy function in the structure copy case.

the patch works just fine here, and i'm reasonably sure that no entry/exit
point is missing. (i ran testcode for some time which does 'std' and 'cld'
and thus tests the IRQ handler entry code and the syscall entry code. No
problems whatsoever, as expected.)

-- mingo

--79888902-209572901-943716218=:2960
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="cld-2.3.30-A1"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.9911271623380.2960@chiara.csoma.elte.hu>
Content-Description:
Content-Disposition: attachment; filename="cld-2.3.30-A1"

LS0tIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvc3RyaW5nLmgub3JpZwlTYXQg
Tm92IDI3IDA1OjQ0OjEyIDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2FzbS1p
Mzg2L3N0cmluZy5oCVNhdCBOb3YgMjcgMDY6MjY6MTcgMTk5OQ0KQEAgLTMy
LDcgKzMyLDYgQEANCiB7DQogaW50IGQwLCBkMSwgZDI7DQogX19hc21fXyBf
X3ZvbGF0aWxlX18oDQotCSJjbGRcbiINCiAJIjE6XHRsb2RzYlxuXHQiDQog
CSJzdG9zYlxuXHQiDQogCSJ0ZXN0YiAlJWFsLCUlYWxcblx0Ig0KQEAgLTQ3
LDcgKzQ2LDYgQEANCiB7DQogaW50IGQwLCBkMSwgZDIsIGQzOw0KIF9fYXNt
X18gX192b2xhdGlsZV9fKA0KLQkiY2xkXG4iDQogCSIxOlx0ZGVjbCAlMlxu
XHQiDQogCSJqcyAyZlxuXHQiDQogCSJsb2RzYlxuXHQiDQpAQCAtNjcsNyAr
NjUsNiBAQA0KIHsNCiBpbnQgZDAsIGQxLCBkMiwgZDM7DQogX19hc21fXyBf
X3ZvbGF0aWxlX18oDQotCSJjbGRcblx0Ig0KIAkicmVwbmVcblx0Ig0KIAki
c2Nhc2Jcblx0Ig0KIAkiZGVjbCAlMVxuIg0KQEAgLTg1LDcgKzgyLDYgQEAN
CiB7DQogaW50IGQwLCBkMSwgZDIsIGQzOw0KIF9fYXNtX18gX192b2xhdGls
ZV9fKA0KLQkiY2xkXG5cdCINCiAJInJlcG5lXG5cdCINCiAJInNjYXNiXG5c
dCINCiAJImRlY2wgJTFcblx0Ig0KQEAgLTExMCw3ICsxMDYsNiBAQA0KIGlu
dCBkMCwgZDE7DQogcmVnaXN0ZXIgaW50IF9fcmVzOw0KIF9fYXNtX18gX192
b2xhdGlsZV9fKA0KLQkiY2xkXG4iDQogCSIxOlx0bG9kc2Jcblx0Ig0KIAki
c2Nhc2Jcblx0Ig0KIAkiam5lIDJmXG5cdCINCkBAIC0xMzIsNyArMTI3LDYg
QEANCiByZWdpc3RlciBpbnQgX19yZXM7DQogaW50IGQwLCBkMSwgZDI7DQog
X19hc21fXyBfX3ZvbGF0aWxlX18oDQotCSJjbGRcbiINCiAJIjE6XHRkZWNs
ICUzXG5cdCINCiAJImpzIDJmXG5cdCINCiAJImxvZHNiXG5cdCINCkBAIC0x
NTYsNyArMTUwLDYgQEANCiBpbnQgZDA7DQogcmVnaXN0ZXIgY2hhciAqIF9f
cmVzOw0KIF9fYXNtX18gX192b2xhdGlsZV9fKA0KLQkiY2xkXG5cdCINCiAJ
Im1vdmIgJSVhbCwlJWFoXG4iDQogCSIxOlx0bG9kc2Jcblx0Ig0KIAkiY21w
YiAlJWFoLCUlYWxcblx0Ig0KQEAgLTE3Niw3ICsxNjksNiBAQA0KIGludCBk
MCwgZDE7DQogcmVnaXN0ZXIgY2hhciAqIF9fcmVzOw0KIF9fYXNtX18gX192
b2xhdGlsZV9fKA0KLQkiY2xkXG5cdCINCiAJIm1vdmIgJSVhbCwlJWFoXG4i
DQogCSIxOlx0bG9kc2Jcblx0Ig0KIAkiY21wYiAlJWFoLCUlYWxcblx0Ig0K
QEAgLTE5NCw3ICsxODYsNiBAQA0KIGludCBkMDsNCiByZWdpc3RlciBpbnQg
X19yZXM7DQogX19hc21fXyBfX3ZvbGF0aWxlX18oDQotCSJjbGRcblx0Ig0K
IAkicmVwbmVcblx0Ig0KIAkic2Nhc2Jcblx0Ig0KIAkibm90bCAlMFxuXHQi
DQpAQCAtMjA3LDcgKzE5OCw2IEBADQogew0KIGludCBkMCwgZDEsIGQyOw0K
IF9fYXNtX18gX192b2xhdGlsZV9fKA0KLQkiY2xkXG5cdCINCiAJInJlcCA7
IG1vdnNsXG5cdCINCiAJInRlc3RiICQyLCViNFxuXHQiDQogCSJqZSAxZlxu
XHQiDQpAQCAtMjczLDcgKzI2Myw2IEBADQogCX0NCiAjZGVmaW5lIENPTU1P
Tih4KSBcDQogX19hc21fXyBfX3ZvbGF0aWxlX18oIFwNCi0JImNsZFxuXHQi
IFwNCiAJInJlcCA7IG1vdnNsIiBcDQogCXggXA0KIAk6ICI9JmMiIChkMCks
ICI9JkQiIChkMSksICI9JlMiIChkMikgXA0KQEAgLTM0MywxMyArMzMyLDE0
IEBADQogDQogI2VuZGlmDQogDQorI2RlZmluZSBjcHkoeCx5KSBtZW1jcHko
eCwgeSwgc2l6ZW9mKCooeCkpKQ0KKw0KICNkZWZpbmUgX19IQVZFX0FSQ0hf
TUVNTU9WRQ0KIGV4dGVybiBpbmxpbmUgdm9pZCAqIG1lbW1vdmUodm9pZCAq
IGRlc3QsY29uc3Qgdm9pZCAqIHNyYywgc2l6ZV90IG4pDQogew0KIGludCBk
MCwgZDEsIGQyOw0KIGlmIChkZXN0PHNyYykNCiBfX2FzbV9fIF9fdm9sYXRp
bGVfXygNCi0JImNsZFxuXHQiDQogCSJyZXBcblx0Ig0KIAkibW92c2IiDQog
CTogIj0mYyIgKGQwKSwgIj0mUyIgKGQxKSwgIj0mRCIgKGQyKQ0KQEAgLTM3
OSw3ICszNjksNiBAQA0KIGlmICghY291bnQpDQogCXJldHVybiBOVUxMOw0K
IF9fYXNtX18gX192b2xhdGlsZV9fKA0KLQkiY2xkXG5cdCINCiAJInJlcG5l
XG5cdCINCiAJInNjYXNiXG5cdCINCiAJImplIDFmXG5cdCINCkBAIC0zOTMs
NyArMzgyLDYgQEANCiB7DQogaW50IGQwLCBkMTsNCiBfX2FzbV9fIF9fdm9s
YXRpbGVfXygNCi0JImNsZFxuXHQiDQogCSJyZXBcblx0Ig0KIAkic3Rvc2Ii
DQogCTogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKQ0KQEAgLTQxNCw3ICs0MDIs
NiBAQA0KIHsNCiBpbnQgZDAsIGQxOw0KIF9fYXNtX18gX192b2xhdGlsZV9f
KA0KLQkiY2xkXG5cdCINCiAJInJlcCA7IHN0b3NsXG5cdCINCiAJInRlc3Ri
ICQyLCViM1xuXHQiDQogCSJqZSAxZlxuXHQiDQpAQCAtNDc1LDcgKzQ2Miw3
IEBADQogCQkJcmV0dXJuIHM7DQogCX0NCiAjZGVmaW5lIENPTU1PTih4KSBc
DQotX19hc21fXyAgX192b2xhdGlsZV9fKCJjbGRcblx0IiBcDQorX19hc21f
XyAgX192b2xhdGlsZV9fKCBcDQogCSJyZXAgOyBzdG9zbCIgXA0KIAl4IFwN
CiAJOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpIFwNCkBAIC01MTgsOCArNTA1
LDcgQEANCiB7DQogCWlmICghc2l6ZSkNCiAJCXJldHVybiBhZGRyOw0KLQlf
X2FzbV9fKCJjbGQNCi0JCXJlcG56OyBzY2FzYg0KKwlfX2FzbV9fKCJyZXBu
ejsgc2Nhc2INCiAJCWpueiAxZg0KIAkJZGVjICUlZWRpDQogMToJCSINCi0t
LSBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3N0cmluZy00ODYuaC5vcmlnCVNh
dCBOb3YgMjcgMDU6NDU6NTMgMTk5OQ0KKysrIGxpbnV4L2luY2x1ZGUvYXNt
LWkzODYvc3RyaW5nLTQ4Ni5oCVNhdCBOb3YgMjcgMDU6NTg6MDUgMTk5OQ0K
QEAgLTE4Nyw3ICsxODcsNiBAQA0KIGludAlkMCwgZDE7DQogcmVnaXN0ZXIg
Y2hhciAqIF9fcmVzOw0KIF9fYXNtX18gX192b2xhdGlsZV9fKA0KLQkiY2xk
XG5cdCINCiAJIm1vdmIgJSVhbCwlJWFoXG4iDQogCSIxOlx0bG9kc2Jcblx0
Ig0KIAkiY21wYiAlJWFoLCUlYWxcblx0Ig0KQEAgLTIwNiw3ICsyMDUsNiBA
QA0KIGludAlkMCwgZDE7DQogcmVnaXN0ZXIgY2hhciAqIF9fcmVzOw0KIF9f
YXNtX18gX192b2xhdGlsZV9fKA0KLQkiY2xkXG5cdCINCiAJIm1vdmwgJTYs
JSVlZGlcblx0Ig0KIAkicmVwbmVcblx0Ig0KIAkic2Nhc2Jcblx0Ig0KQEAg
LTIzNCw3ICsyMzIsNiBAQA0KIGludAlkMCwgZDE7DQogcmVnaXN0ZXIgY2hh
ciAqIF9fcmVzOw0KIF9fYXNtX18gX192b2xhdGlsZV9fKA0KLQkiY2xkXG5c
dCINCiAJIm1vdmwgJTYsJSVlZGlcblx0Ig0KIAkicmVwbmVcblx0Ig0KIAki
c2Nhc2Jcblx0Ig0KQEAgLTI2Myw3ICsyNjAsNiBAQA0KIGludAlkMCwgZDE7
DQogcmVnaXN0ZXIgY2hhciAqIF9fcmVzOw0KIF9fYXNtX18gX192b2xhdGls
ZV9fKA0KLQkiY2xkXG5cdCINCiAJIm1vdmwgJTYsJSVlZGlcblx0Ig0KIAki
cmVwbmVcblx0Ig0KIAkic2Nhc2Jcblx0Ig0KQEAgLTI5Niw3ICsyOTIsNiBA
QA0KIGludAlkMCwgZDE7DQogcmVnaXN0ZXIgY2hhciAqIF9fcmVzOw0KIF9f
YXNtX18gX192b2xhdGlsZV9fKA0KLQkiY2xkXG5cdCIgXA0KIAkibW92bCAl
NiwlJWVkaVxuXHQiDQogCSJyZXBuZVxuXHQiDQogCSJzY2FzYlxuXHQiDQpA
QCAtMzc4LDcgKzM3Myw2IEBADQogCSIxOlx0eG9ybCAlMCwlMFxuXHQiDQog
CSJtb3ZsICQtMSwlJWVjeFxuXHQiDQogCSJ4b3JsICUlZWF4LCUlZWF4XG5c
dCINCi0JImNsZFxuXHQiDQogCSJtb3ZsICU0LCUlZWRpXG5cdCINCiAJInJl
cG5lXG5cdCINCiAJInNjYXNiXG5cdCINCkBAIC00NzQsNyArNDY4LDYgQEAN
CiBpbnQJZDAsIGQxLCBkMjsNCiByZWdpc3RlciB2b2lkICp0bXAgPSAodm9p
ZCAqKXRvOw0KIF9fYXNtX18gX192b2xhdGlsZV9fICgNCi0JImNsZFxuXHQi
DQogCSJzaHJsICQxLCUlZWN4XG5cdCINCiAJImpuYyAxZlxuXHQiDQogCSJt
b3ZzYlxuIg0KQEAgLTU1NCw3ICs1NDcsNiBAQA0KIHJlZ2lzdGVyIHZvaWQg
KnRtcCA9ICh2b2lkICopZGVzdDsNCiBpZiAoZGVzdDxzcmMpDQogX19hc21f
XyBfX3ZvbGF0aWxlX18gKA0KLQkiY2xkXG5cdCINCiAJInJlcFxuXHQiDQog
CSJtb3ZzYiINCiAJOiI9JmMiIChkMCksICI9JlMiIChkMSksICI9JkQiIChk
MikNCkBAIC01NzcsNyArNTY5LDYgQEANCiBpbnQJZDAsIGQxLCBkMjsNCiBy
ZWdpc3RlciBpbnQgX19yZXM7DQogX19hc21fXyBfX3ZvbGF0aWxlX18oDQot
CSJjbGRcblx0Ig0KIAkicmVwZVxuXHQiDQogCSJjbXBzYlxuXHQiDQogCSJq
ZSAxZlxuXHQiDQpAQCAtNTk3LDcgKzU4OCw2IEBADQogaWYgKCFjb3VudCkN
CiAJcmV0dXJuIE5VTEw7DQogX19hc21fXyBfX3ZvbGF0aWxlX18oDQotCSJj
bGRcblx0Ig0KIAkicmVwbmVcblx0Ig0KIAkic2Nhc2Jcblx0Ig0KIAkiamUg
MWZcblx0Ig0KQEAgLTc1Myw4ICs3NDMsNyBAQA0KIHsNCiAJaWYgKCFzaXpl
KQ0KIAkJcmV0dXJuIGFkZHI7DQotCV9fYXNtX18oImNsZA0KLQkJcmVwbno7
IHNjYXNiDQorCV9fYXNtX18oInJlcG56OyBzY2FzYg0KIAkJam56IDFmDQog
CQlkZWMgJSVlZGkNCiAxOgkJIg0KLS0tIGxpbnV4L2luY2x1ZGUvYXNtLWkz
ODYvaW8uaC5vcmlnCVNhdCBOb3YgMjcgMDU6NDY6NDMgMTk5OQ0KKysrIGxp
bnV4L2luY2x1ZGUvYXNtLWkzODYvaW8uaAlTYXQgTm92IDI3IDA2OjI2OjI3
IDE5OTkNCkBAIC03MSwxMiArNzEsMTIgQEANCiANCiAjZGVmaW5lIF9fSU5T
KHMpIFwNCiBleHRlcm4gaW5saW5lIHZvaWQgaW5zIyNzKHVuc2lnbmVkIHNo
b3J0IHBvcnQsIHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSBc
DQoteyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNsZCA7IHJlcCA7IGlucyIg
I3MgXA0KK3sgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyZXAgOyBpbnMiICNz
IFwNCiA6ICI9RCIgKGFkZHIpLCAiPWMiIChjb3VudCkgOiAiZCIgKHBvcnQp
LCIwIiAoYWRkciksIjEiIChjb3VudCkpOyB9DQogDQogI2RlZmluZSBfX09V
VFMocykgXA0KIGV4dGVybiBpbmxpbmUgdm9pZCBvdXRzIyNzKHVuc2lnbmVk
IHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25n
IGNvdW50KSBcDQoteyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNsZCA7IHJl
cCA7IG91dHMiICNzIFwNCit7IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVw
IDsgb3V0cyIgI3MgXA0KIDogIj1TIiAoYWRkciksICI9YyIgKGNvdW50KSA6
ICJkIiAocG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0NCiANCiAj
ZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIGNoYXINCi0tLSBsaW51eC9p
bmNsdWRlL2FzbS1pMzg2L2JpdG9wcy5oLm9yaWcJU2F0IE5vdiAyNyAwNTo0
Njo1NSAxOTk5DQorKysgbGludXgvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMu
aAlTYXQgTm92IDI3IDA1OjQ3OjA5IDE5OTkNCkBAIC0xMzIsOCArMTMyLDcg
QEANCiANCiAJaWYgKCFzaXplKQ0KIAkJcmV0dXJuIDA7DQotCV9fYXNtX18o
ImNsZFxuXHQiDQotCQkibW92bCAkLTEsJSVlYXhcblx0Ig0KKwlfX2FzbV9f
KCJtb3ZsICQtMSwlJWVheFxuXHQiDQogCQkieG9ybCAlJWVkeCwlJWVkeFxu
XHQiDQogCQkicmVwZTsgc2Nhc2xcblx0Ig0KIAkJImplIDFmXG5cdCINCi0t
LSBsaW51eC9hcmNoL2kzODYva2VybmVsL2FwbS5jLm9yaWcJU2F0IE5vdiAy
NyAwNTo0Nzo0OSAxOTk5DQorKysgbGludXgvYXJjaC9pMzg2L2tlcm5lbC9h
cG0uYwlTYXQgTm92IDI3IDA1OjUyOjU4IDE5OTkNCkBAIC0zODAsNyArMzgw
LDcgQEANCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oQVBNX0RPX1pFUk9fU0VH
Uw0KIAkJInB1c2hsICUlZWRpXG5cdCINCiAJCSJwdXNobCAlJWVicFxuXHQi
DQotCQkibGNhbGwgJSVjczoiIFNZTUJPTF9OQU1FX1NUUihhcG1fYmlvc19l
bnRyeSkgIlxuXHQiDQorCQkibGNhbGwgJSVjczoiIFNZTUJPTF9OQU1FX1NU
UihhcG1fYmlvc19lbnRyeSkgIjsgY2xkXG5cdCINCiAJCSJzZXRjICUlYWxc
blx0Ig0KIAkJInBvcGwgJSVlYnBcblx0Ig0KIAkJInBvcGwgJSVlZGlcblx0
Ig0KQEAgLTQxMyw3ICs0MTMsNyBAQA0KIAkJX19hc21fXyBfX3ZvbGF0aWxl
X18oQVBNX0RPX1pFUk9fU0VHUw0KIAkJCSJwdXNobCAlJWVkaVxuXHQiDQog
CQkJInB1c2hsICUlZWJwXG5cdCINCi0JCQkibGNhbGwgJSVjczoiIFNZTUJP
TF9OQU1FX1NUUihhcG1fYmlvc19lbnRyeSkgIlxuXHQiDQorCQkJImxjYWxs
ICUlY3M6IiBTWU1CT0xfTkFNRV9TVFIoYXBtX2Jpb3NfZW50cnkpImNsZDtc
blx0Ig0KIAkJCSJzZXRjICUlYmxcblx0Ig0KIAkJCSJwb3BsICUlZWJwXG5c
dCINCiAJCQkicG9wbCAlJWVkaVxuXHQiDQotLS0gbGludXgvYXJjaC9pMzg2
L2tlcm5lbC9wY2ktcGMuYy5vcmlnCVNhdCBOb3YgMjcgMDU6NDk6NTMgMTk5
OQ0KKysrIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvcGNpLXBjLmMJU2F0IE5v
diAyNyAwNTo1MTo0NCAxOTk5DQpAQCAtMzQyLDcgKzM0Miw3IEBADQogCXVu
c2lnbmVkIGxvbmcgZmxhZ3M7DQogDQogCV9fc2F2ZV9mbGFncyhmbGFncyk7
IF9fY2xpKCk7DQotCV9fYXNtX18oImxjYWxsICglJWVkaSkiDQorCV9fYXNt
X18oImxjYWxsICglJWVkaSk7IGNsZCINCiAJCTogIj1hIiAocmV0dXJuX2Nv
ZGUpLA0KIAkJICAiPWIiIChhZGRyZXNzKSwNCiAJCSAgIj1jIiAobGVuZ3Ro
KSwNCkBAIC0zODMsNyArMzgzLDcgQEANCiANCiAJCV9fc2F2ZV9mbGFncyhm
bGFncyk7IF9fY2xpKCk7DQogCQlfX2FzbV9fKA0KLQkJCSJsY2FsbCAoJSVl
ZGkpXG5cdCINCisJCQkibGNhbGwgKCUlZWRpKTsgY2xkXG5cdCINCiAJCQki
amMgMWZcblx0Ig0KIAkJCSJ4b3IgJSVhaCwgJSVhaFxuIg0KIAkJCSIxOiIN
CkBAIC00MjcsNyArNDI3LDcgQEANCiAJdW5zaWduZWQgc2hvcnQgYng7DQog
CXVuc2lnbmVkIHNob3J0IHJldDsNCiANCi0JX19hc21fXygibGNhbGwgKCUl
ZWRpKVxuXHQiDQorCV9fYXNtX18oImxjYWxsICglJWVkaSk7IGNsZFxuXHQi
DQogCQkiamMgMWZcblx0Ig0KIAkJInhvciAlJWFoLCAlJWFoXG4iDQogCQki
MToiDQpAQCAtNDQ4LDcgKzQ0OCw3IEBADQogCXVuc2lnbmVkIGxvbmcgcmV0
Ow0KIAl1bnNpZ25lZCBsb25nIGJ4ID0gKGRldi0+YnVzLT5udW1iZXIgPDwg
OCkgfCBkZXYtPmRldmZuOw0KIA0KLQlfX2FzbV9fKCJsY2FsbCAoJSVlc2kp
XG5cdCINCisJX19hc21fXygibGNhbGwgKCUlZXNpKTsgY2xkXG5cdCINCiAJ
CSJqYyAxZlxuXHQiDQogCQkieG9yICUlYWgsICUlYWhcbiINCiAJCSIxOiIN
CkBAIC00NjYsNyArNDY2LDcgQEANCiAJdW5zaWduZWQgbG9uZyByZXQ7DQog
CXVuc2lnbmVkIGxvbmcgYnggPSAoZGV2LT5idXMtPm51bWJlciA8PCA4KSB8
IGRldi0+ZGV2Zm47DQogDQotCV9fYXNtX18oImxjYWxsICglJWVzaSlcblx0
Ig0KKwlfX2FzbV9fKCJsY2FsbCAoJSVlc2kpOyBjbGRcblx0Ig0KIAkJImpj
IDFmXG5cdCINCiAJCSJ4b3IgJSVhaCwgJSVhaFxuIg0KIAkJIjE6Ig0KQEAg
LTQ4NCw3ICs0ODQsNyBAQA0KIAl1bnNpZ25lZCBsb25nIHJldDsNCiAJdW5z
aWduZWQgbG9uZyBieCA9IChkZXYtPmJ1cy0+bnVtYmVyIDw8IDgpIHwgZGV2
LT5kZXZmbjsNCiANCi0JX19hc21fXygibGNhbGwgKCUlZXNpKVxuXHQiDQor
CV9fYXNtX18oImxjYWxsICglJWVzaSk7IGNsZFxuXHQiDQogCQkiamMgMWZc
blx0Ig0KIAkJInhvciAlJWFoLCAlJWFoXG4iDQogCQkiMToiDQpAQCAtNTAy
LDcgKzUwMiw3IEBADQogCXVuc2lnbmVkIGxvbmcgcmV0Ow0KIAl1bnNpZ25l
ZCBsb25nIGJ4ID0gKGRldi0+YnVzLT5udW1iZXIgPDwgOCkgfCBkZXYtPmRl
dmZuOw0KIA0KLQlfX2FzbV9fKCJsY2FsbCAoJSVlc2kpXG5cdCINCisJX19h
c21fXygibGNhbGwgKCUlZXNpKTsgY2xkXG5cdCINCiAJCSJqYyAxZlxuXHQi
DQogCQkieG9yICUlYWgsICUlYWhcbiINCiAJCSIxOiINCkBAIC01MjAsNyAr
NTIwLDcgQEANCiAJdW5zaWduZWQgbG9uZyByZXQ7DQogCXVuc2lnbmVkIGxv
bmcgYnggPSAoZGV2LT5idXMtPm51bWJlciA8PCA4KSB8IGRldi0+ZGV2Zm47
DQogDQotCV9fYXNtX18oImxjYWxsICglJWVzaSlcblx0Ig0KKwlfX2FzbV9f
KCJsY2FsbCAoJSVlc2kpOyBjbGRcblx0Ig0KIAkJImpjIDFmXG5cdCINCiAJ
CSJ4b3IgJSVhaCwgJSVhaFxuIg0KIAkJIjE6Ig0KQEAgLTUzOCw3ICs1Mzgs
NyBAQA0KIAl1bnNpZ25lZCBsb25nIHJldDsNCiAJdW5zaWduZWQgbG9uZyBi
eCA9IChkZXYtPmJ1cy0+bnVtYmVyIDw8IDgpIHwgZGV2LT5kZXZmbjsNCiAN
Ci0JX19hc21fXygibGNhbGwgKCUlZXNpKVxuXHQiDQorCV9fYXNtX18oImxj
YWxsICglJWVzaSk7IGNsZFxuXHQiDQogCQkiamMgMWZcblx0Ig0KIAkJInhv
ciAlJWFoLCAlJWFoXG4iDQogCQkiMToiDQpAQCAtNzAyLDcgKzcwMiw3IEBA
DQogCV9fYXNtX18oInB1c2ggJSVlc1xuXHQiDQogCQkicHVzaCAlJWRzXG5c
dCINCiAJCSJwb3AgICUlZXNcblx0Ig0KLQkJImxjYWxsICglJWVzaSlcblx0
Ig0KKwkJImxjYWxsICglJWVzaSk7IGNsZFxuXHQiDQogCQkicG9wICUlZXNc
blx0Ig0KIAkJImpjIDFmXG5cdCINCiAJCSJ4b3IgJSVhaCwgJSVhaFxuIg0K
LS0tIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jLm9yaWcJU2F0
IE5vdiAyNyAwNjowMDoxMiAxOTk5DQorKysgbGludXgvYXJjaC9pMzg2L2tl
cm5lbC9wcm9jZXNzLmMJU2F0IE5vdiAyNyAwNjoyNjoyNSAxOTk5DQpAQCAt
NDYyLDcgKzQ2Miw3IEBADQogCXN0cnVjdCBwdF9yZWdzICogY2hpbGRyZWdz
Ow0KIA0KIAljaGlsZHJlZ3MgPSAoKHN0cnVjdCBwdF9yZWdzICopIChUSFJF
QURfU0laRSArICh1bnNpZ25lZCBsb25nKSBwKSkgLSAxOw0KLQkqY2hpbGRy
ZWdzID0gKnJlZ3M7DQorCWNweShjaGlsZHJlZ3MsIHJlZ3MpOw0KIAljaGls
ZHJlZ3MtPmVheCA9IDA7DQogCWNoaWxkcmVncy0+ZXNwID0gZXNwOw0KIA0K
QEAgLTQ3NSw3ICs0NzUsNyBAQA0KIAlzYXZlc2VnbWVudChncyxwLT50aHJl
YWQuZ3MpOw0KIA0KIAl1bmxhenlfZnB1KGN1cnJlbnQpOw0KLQlwLT50aHJl
YWQuaTM4NyA9IGN1cnJlbnQtPnRocmVhZC5pMzg3Ow0KKwljcHkoJnAtPnRo
cmVhZC5pMzg3LCAmY3VycmVudC0+dGhyZWFkLmkzODcpOw0KIA0KIAlyZXR1
cm4gMDsNCiB9DQo=
--79888902-209572901-943716218=:2960--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/