Compare commits
487 Commits
Author | SHA1 | Date |
---|---|---|
Josh Boyer | e0b1d41f1c | |
Dave Jones | a3dd486e63 | |
Justin M. Forbes | 5325d16e0a | |
Josh Boyer | e158c0561c | |
Josh Boyer | 6195c49a1d | |
Josh Boyer | c12415061c | |
Josh Boyer | c4ae440dda | |
Josh Boyer | d44d05a51b | |
Josh Boyer | cae88327ab | |
Josh Boyer | c51ab15fea | |
Josh Boyer | 87db8bc3ed | |
Josh Boyer | 551dcfff50 | |
Justin M. Forbes | 6ba6704e2f | |
Josh Boyer | 61d473f098 | |
Josh Boyer | 78f006e1f1 | |
Josh Boyer | 211b22ddaf | |
Josh Boyer | 826eb77610 | |
Josh Boyer | 0263651479 | |
Josh Boyer | 68a134c100 | |
Josh Boyer | ca7a4a0081 | |
Josh Boyer | 909219a1e9 | |
Josh Boyer | 7703a1b33f | |
Josh Boyer | 27ddac64c7 | |
Josh Boyer | 0aacb42399 | |
Josh Boyer | 31066dd569 | |
Josh Boyer | c9be30821b | |
Justin M. Forbes | e7887c8a48 | |
Josh Boyer | d94c6eb95a | |
Josh Boyer | df9f4ec79e | |
Justin M. Forbes | 7a2a907f6d | |
Justin M. Forbes | 02c38dbef5 | |
Justin M. Forbes | 123d75be63 | |
Justin M. Forbes | 594eaa3550 | |
Justin M. Forbes | f1948ae3be | |
Justin M. Forbes | 7557f2eb45 | |
Josh Boyer | 81f7c502c4 | |
Josh Boyer | 3c9b3f75ac | |
Justin M. Forbes | 631b8185a4 | |
Justin M. Forbes | 029dfd4352 | |
Josh Boyer | fe92d94d16 | |
Josh Boyer | bf00e68627 | |
Josh Boyer | d080f2b085 | |
Josh Boyer | 70df2cf648 | |
Josh Boyer | 74226869f0 | |
Josh Boyer | de79bf517f | |
Josh Boyer | bdfb624a67 | |
Josh Boyer | dec491e2b4 | |
Dave Jones | d7f29cc809 | |
Dave Jones | 2620ccc11d | |
Dave Jones | 9a52f7de03 | |
Dave Jones | 51afabf346 | |
Dave Jones | f692e37cf5 | |
Dave Jones | 6bedaf46ce | |
Dave Jones | 985716fccd | |
Dave Jones | e23703485a | |
Josh Boyer | 10aac2362f | |
Dave Jones | 9e634cfc4b | |
Josh Boyer | 5b27c793de | |
Josh Boyer | 197b729727 | |
Josh Boyer | d456ca0684 | |
Josh Boyer | 751c8f124b | |
Josh Boyer | b750218819 | |
Justin M. Forbes | e0bf103272 | |
Justin M. Forbes | ecc0fbceb4 | |
Justin M. Forbes | 66065a295f | |
Justin M. Forbes | cc9d306d06 | |
Josh Boyer | d1e5565689 | |
Dave Jones | 5613df668e | |
Josh Boyer | 4750a280ed | |
Josh Boyer | 9f67b6884b | |
Josh Boyer | 4277cc49ac | |
Josh Boyer | 0e04e7c476 | |
Josh Boyer | 83ce91e6c2 | |
Josh Boyer | 9358096eaf | |
Josh Boyer | 28a83dc698 | |
Josh Boyer | b24ad922a5 | |
Justin M. Forbes | a9a4422683 | |
Josh Boyer | 3c82288578 | |
Justin M. Forbes | 6cc1c4a89f | |
Josh Boyer | e8239bd251 | |
Josh Boyer | 5dd559875a | |
Josh Boyer | 84bcf579de | |
Josh Boyer | 4ce79607e9 | |
Josh Boyer | 523e29cf0b | |
John W. Linville | 727632ebef | |
Josh Boyer | 2f6d12ef4a | |
Dave Jones | 079eb63f01 | |
Josh Boyer | 7d971d55eb | |
Josh Boyer | cec1aca5a9 | |
John W. Linville | def7f17730 | |
Justin M. Forbes | 1b3fae83d0 | |
Josh Boyer | 2da3bb764c | |
Josh Boyer | 8a1178d184 | |
Josh Boyer | d82b14bfca | |
Josh Boyer | 783e7aa493 | |
Justin M. Forbes | 06bcea703a | |
Josh Boyer | fd269b5b6a | |
Justin M. Forbes | 8b4ddbe29f | |
Justin M. Forbes | 14735d3577 | |
Josh Boyer | c701cb2c67 | |
Dave Jones | 474849beb1 | |
Josh Boyer | d0d0771165 | |
Josh Boyer | 0cb34a0046 | |
Mauro Carvalho Chehab | 8ae7ce1b01 | |
Josh Boyer | 11891dbd24 | |
Justin M. Forbes | 60baf10f8c | |
Josh Boyer | d1a2aa668f | |
Josh Boyer | 5a13292239 | |
Justin M. Forbes | 9011ea4427 | |
Josh Boyer | 2db8c9ffc3 | |
Justin M. Forbes | eefa8b0319 | |
Mauro Carvalho Chehab | 79b001249a | |
Mauro Carvalho Chehab | 33a9dbb6ec | |
Josh Boyer | eee168ca53 | |
Josh Boyer | 269237b49f | |
Justin M. Forbes | e4ef364737 | |
Justin M. Forbes | f6138cc863 | |
Justin M. Forbes | 28303e222e | |
Josh Boyer | aef7a0c111 | |
Dave Jones | cebff535ca | |
Justin M. Forbes | 573d368770 | |
Josh Boyer | 14ad4ec584 | |
Josh Boyer | ebeee9684c | |
Peter Hutterer | 5fa38a7138 | |
Josh Boyer | d102db4672 | |
Josh Boyer | aa313d9123 | |
Josh Boyer | 7439674e98 | |
Justin M. Forbes | 92b55943d6 | |
Justin M. Forbes | 081d2dbff0 | |
Josh Boyer | 0ccb487a2b | |
Josh Boyer | 65b484ac04 | |
Mauro Carvalho Chehab | 185d60abac | |
Josh Boyer | 084e405734 | |
Josh Boyer | 9e205a991d | |
Josh Boyer | 91cd870834 | |
Josh Boyer | e01885614b | |
Josh Boyer | 28b13140ec | |
Josh Boyer | a253de9cd3 | |
Josh Boyer | 7dbe0a1257 | |
Mauro Carvalho Chehab | 69cea03fff | |
Mauro Carvalho Chehab | d34127e9d6 | |
Mauro Carvalho Chehab | 15d159a887 | |
Josh Boyer | 727bb89cc2 | |
Mauro Carvalho Chehab | d925593ef2 | |
Mauro Carvalho Chehab | 5876403f19 | |
Dave Jones | 489a5d6586 | |
Josh Boyer | 0273af1816 | |
Josh Boyer | a3556f93fb | |
Josh Boyer | 06a33d04e6 | |
Josh Boyer | 75c0de8eed | |
Josh Boyer | 85f4f40f5c | |
Josh Boyer | d12aed4d96 | |
Josh Boyer | 0b62210816 | |
Dave Jones | 72ef31e7d8 | |
Dave Jones | 57711b475d | |
Dave Jones | 0dc1678dba | |
Dave Jones | b6cb947f14 | |
Dave Jones | d15571e206 | |
Josh Boyer | 1c2671dad3 | |
Josh Boyer | 7b5b29761d | |
Josh Boyer | d08bf805ac | |
Josh Boyer | e17bbff200 | |
Josh Boyer | 381fffb100 | |
Josh Boyer | 44e6a69b2a | |
Josh Boyer | 964eeef941 | |
Dave Jones | cb6adeaa2b | |
Josh Boyer | 890cdcf1b4 | |
Josh Boyer | 5d30d9525a | |
Dave Jones | 4721953b8b | |
Josh Boyer | e9dfffad72 | |
Josh Boyer | 8bc44875e2 | |
Josh Boyer | 85be624b7a | |
Josh Boyer | 70a06342d8 | |
Josh Boyer | bfafc479d5 | |
Josh Boyer | d8b686023e | |
Justin M. Forbes | ea76f538e8 | |
Josh Boyer | c91e32221e | |
Josh Boyer | 12b6d38c8a | |
Justin M. Forbes | 6adca049b2 | |
Josh Boyer | 953a16a7c0 | |
Dave Jones | 13fb067e91 | |
Dave Jones | 6924a689b5 | |
Josh Boyer | db01769147 | |
Josh Boyer | 3bdc12b849 | |
Josh Boyer | e323d4f829 | |
Josh Boyer | ef4cf365c1 | |
Josh Boyer | e4894874e4 | |
Dave Jones | d08db1bba4 | |
Josh Boyer | b93bd50055 | |
Josh Boyer | 58338b4b82 | |
Dave Jones | 0d90f6ff37 | |
Josh Boyer | c07883e8e8 | |
Josh Boyer | 51a4affbb9 | |
Dave Jones | 903b4ae829 | |
Justin M. Forbes | 6611af355f | |
Adam Jackson | 3525238463 | |
Dave Jones | 9b8bd9b67b | |
Dave Jones | 77583d026d | |
Josh Boyer | bb1d90cb35 | |
Josh Boyer | f9a06c1afb | |
Justin M. Forbes | 8a8688b231 | |
Josh Boyer | e14b40bbbd | |
Josh Boyer | 9fbab19312 | |
John W. Linville | 88b9de105c | |
Dave Jones | 15609ef4c4 | |
Dave Jones | 2919d1eb00 | |
Dave Jones | b0afc0c7f3 | |
Dave Jones | b995bdd158 | |
Dave Jones | f1ec5c04e8 | |
Dave Jones | 98a4640c2d | |
Dave Jones | 90fada3350 | |
Josh Boyer | 973c2685b2 | |
Josh Boyer | 9a37463424 | |
Dave Jones | 05f7286fe5 | |
John W. Linville | bbd9ebecee | |
Josh Boyer | 59b9e67990 | |
Dave Jones | e16649a5ae | |
Josh Boyer | 88335999c7 | |
Josh Boyer | 7c061194a0 | |
Josh Boyer | 2165bab1eb | |
Josh Boyer | 5c09f39068 | |
Josh Boyer | a19409b9cc | |
John W. Linville | 5edcb3f1d2 | |
Dave Jones | 69d2ad30b8 | |
Dave Jones | 1e38741de6 | |
Dave Jones | 337ebb66d9 | |
Dave Jones | 0f78fbf073 | |
Josh Boyer | 1ed3146ef8 | |
John W. Linville | 3ad4b3ec23 | |
Dave Jones | 6d8eefbb61 | |
Josh Boyer | ef90ec9278 | |
John W. Linville | 6f8f5cde65 | |
John W. Linville | d35a7646d0 | |
John W. Linville | cfb68d5e1c | |
Dave Jones | 2fd5228fc7 | |
Dave Jones | ec7325df62 | |
John W. Linville | 3296402d48 | |
Dave Jones | 2f9ac97623 | |
John W. Linville | 8377903fd0 | |
John W. Linville | a43c59fbee | |
John W. Linville | 2cad290c45 | |
John W. Linville | ecbaf08007 | |
Josh Boyer | 8d85deadf7 | |
Josh Boyer | 95885cbd27 | |
Josh Boyer | 8f7167dc29 | |
John W. Linville | 6d0a652dcd | |
Josh Boyer | fb68683a8f | |
John W. Linville | 8879a2cf41 | |
Josh Boyer | bb1165406c | |
Josh Boyer | b652ddfbcb | |
Josh Boyer | 9353f32ca8 | |
Josh Boyer | 08d7191c40 | |
Josh Boyer | e4e2bcb507 | |
Josh Boyer | 7f50a05c33 | |
Dave Jones | f027dafaed | |
Josh Boyer | 030861b341 | |
Josh Boyer | e520b1ec1d | |
Dave Jones | 1045154ecf | |
John W. Linville | 9f353831c7 | |
Josh Boyer | 70bec5f650 | |
Josh Boyer | 872d2983fc | |
Josh Boyer | e9822a3383 | |
Josh Boyer | 4a39227a15 | |
Josh Boyer | feea98915e | |
Josh Boyer | 51e3e67b67 | |
John W. Linville | 853134cbcd | |
Josh Boyer | dff5d86265 | |
Josh Boyer | 7c77270a54 | |
Josh Boyer | b23da04d3e | |
Josh Boyer | 76da9b0851 | |
Josh Boyer | 8c9ba0738b | |
Josh Boyer | 7829934f47 | |
John W. Linville | bd6ef13e8a | |
Josh Boyer | 61eda14a10 | |
Josh Boyer | 94fe9fa312 | |
Josh Boyer | 343c19468f | |
Josh Boyer | 2aece3db38 | |
Josh Boyer | 19c6b8e073 | |
John W. Linville | be48fc0c69 | |
Josh Boyer | e0bcc4d228 | |
Dave Jones | 8f76b141c9 | |
Dave Jones | 94ce6750fb | |
Neil Horman | 114a35487e | |
Dave Jones | c7ebc6df23 | |
Josh Boyer | a8b9f76748 | |
Josh Boyer | 987f996218 | |
John W. Linville | 13eb970aa7 | |
Dave Jones | 534bbc8050 | |
Josh Boyer | 7749b4d14a | |
Josh Boyer | 5dc9ec6f00 | |
Dave Jones | 2205c1a917 | |
John W. Linville | cd152b3a6c | |
Dave Jones | 2da15d9521 | |
Dennis Gilmore | 4ca5087fa3 | |
Dennis Gilmore | 7330c5a5b6 | |
Dennis Gilmore | b105242376 | |
John W. Linville | 2e7bab3822 | |
Dave Jones | e1481910fd | |
John W. Linville | 02606c8511 | |
Dave Jones | dd40e894db | |
Dave Jones | c419e42152 | |
John W. Linville | 98c21d3e9c | |
Dave Jones | e091c2ac6e | |
Josh Boyer | 40d1402b49 | |
Josh Boyer | e3f2c2aa95 | |
Josh Boyer | b769afb634 | |
Kyle McMartin | e3dc5c9709 | |
Kyle McMartin | 62a0dcc847 | |
Dave Jones | 117c274f5d | |
Ben Skeggs | 9d2d81fc04 | |
Josh Boyer | 5356296344 | |
Dave Jones | 6a7c0501a4 | |
Dave Jones | 386df52ea2 | |
Josh Boyer | c63c5b8281 | |
Josh Boyer | 002cf4b181 | |
Josh Boyer | 3a228cfea4 | |
Josh Boyer | 260881f05b | |
Josh Boyer | e501d10166 | |
Chuck Ebbert | 4398b86860 | |
Chuck Ebbert | cafbe33b92 | |
Ben Skeggs | 5a7d4b130b | |
Chuck Ebbert | 8ed136869a | |
Chuck Ebbert | 4553808497 | |
Josh Boyer | 54e4e60a8b | |
Josh Boyer | ac24e81de8 | |
Dave Jones | acb2fd5ebe | |
Josh Boyer | 820b81af20 | |
Josh Boyer | caf149f8ee | |
Josh Boyer | 67de50b811 | |
Josh Boyer | a6a5351a6f | |
Josh Boyer | da334a5ce3 | |
Josh Boyer | b151c2bd4c | |
Chuck Ebbert | 6d28fee6c9 | |
Chuck Ebbert | 81538f6e84 | |
Ben Skeggs | 708ec89f8a | |
Chuck Ebbert | a54c47b488 | |
Chuck Ebbert | ab31f808d5 | |
Chuck Ebbert | 9de42b3c88 | |
Josh Boyer | fd1443c8c7 | |
Chuck Ebbert | 3b1a645f8a | |
Chuck Ebbert | 75c0588eda | |
John W. Linville | cc0eb00182 | |
Dave Jones | f0fb214f6a | |
Dave Jones | 917075f21e | |
Josh Boyer | 058b0767d6 | |
Josh Boyer | 5046e8a201 | |
Josh Boyer | aeb6369d31 | |
Josh Boyer | 9dce7b4f50 | |
Josh Boyer | 68b031c163 | |
Chuck Ebbert | 4220aaf744 | |
Chuck Ebbert | 955d50cbe0 | |
Josh Boyer | a596f94913 | |
John W. Linville | a20eace265 | |
Chuck Ebbert | 1e1645a527 | |
Chuck Ebbert | e52a782db9 | |
Chuck Ebbert | dabe57bb09 | |
John W. Linville | f8e6300ee7 | |
Neil Horman | 5f42e49c37 | |
Josh Boyer | 1241398782 | |
Dave Jones | 5c5ddd23f6 | |
Josh Boyer | 3468b5e931 | |
Josh Boyer | 36bb2cebdc | |
Josh Boyer | 3be61a8c60 | |
Josh Boyer | 436da03d79 | |
Josh Boyer | 18db0fc8c6 | |
Dave Jones | 58cf40bfda | |
Dave Jones | 29b2acac72 | |
Josh Boyer | 1d898c7c86 | |
Josh Boyer | 3ee6d6d1f9 | |
Josh Boyer | f746a4af91 | |
Josh Boyer | 4cce38ece8 | |
Dennis Gilmore | 06041ed4c0 | |
Josh Boyer | 367ea3a699 | |
Josh Boyer | 0e7a717305 | |
Josh Boyer | 4b0fbfcf05 | |
Josh Boyer | 0cc31ee8bf | |
Josh Boyer | 1ffed8724f | |
Chuck Ebbert | 0a5023fe92 | |
Chuck Ebbert | ffd02941c7 | |
Chuck Ebbert | 138bbe4bb3 | |
Dave Jones | 5bbdbe628c | |
Dave Jones | 65525f70c4 | |
Ben Skeggs | bb076be590 | |
Chuck Ebbert | 5cfb71ce9c | |
Chuck Ebbert | 4933c2453d | |
Chuck Ebbert | f73c1196be | |
Josh Boyer | c8515a48d8 | |
Josh Boyer | 9258f325b1 | |
Josh Boyer | b6ba0deffa | |
Adam Jackson | 91087d1d01 | |
Josh Boyer | a2975f8e0c | |
Josh Boyer | b4e869a895 | |
Josh Boyer | dfb88fb9b4 | |
Dave Jones | 885bf3a7eb | |
Chuck Ebbert | cf2d0ce177 | |
Chuck Ebbert | c5c0d51eb5 | |
Chuck Ebbert | de575f564b | |
Josh Boyer | 63a6d1a55d | |
Chuck Ebbert | bfd16e3858 | |
Josh Boyer | 94601c03ce | |
Dave Jones | 478ea8fd22 | |
Dennis Gilmore | 89003bbc99 | |
Josh Boyer | 804ae40f5c | |
Josh Boyer | 5ec1187f2a | |
Dave Jones | 36cbf57390 | |
Bastien Nocera | 1340c63c42 | |
Ben Skeggs | b6064a6490 | |
Josh Boyer | 10328f76dc | |
Josh Boyer | 9d984d002a | |
Josh Boyer | 34c20229d7 | |
Josh Boyer | 9d940d046e | |
Neil Horman | dc3e1e56ab | |
Josh Boyer | 203a23e9e4 | |
Josh Boyer | 5e909ef60b | |
Josh Boyer | b226a238b4 | |
Adam Jackson | 35fd65a181 | |
Josh Boyer | 224f377cbf | |
Josh Boyer | f0c9ab6275 | |
Josh Boyer | 512ca00d34 | |
Chuck Ebbert | 9a1d0419ef | |
Chuck Ebbert | cf1d9f1e39 | |
Josh Boyer | b8b5e6ba50 | |
Dave Jones | 29656445be | |
Dave Jones | 9cabd45dbb | |
Dave Jones | 787b0f02c4 | |
Josh Boyer | 3e5e72ab2b | |
Josh Boyer | 650d9cd05e | |
Josh Boyer | c73810ba63 | |
Dave Jones | 1423389e50 | |
Dave Jones | 4746078140 | |
Dave Jones | 4998b415c8 | |
Dave Jones | d284599697 | |
Dave Jones | ad3c6818fc | |
Dave Jones | 42df3844c7 | |
Dave Jones | 0b7ee5c023 | |
Dave Jones | 6c65eeebda | |
Dave Jones | 43981af01a | |
Dave Jones | c1f2ddc01e | |
Dave Jones | af75d59664 | |
Dave Jones | 61dbaf7ef7 | |
Josh Boyer | d1ab8a1bfd | |
Josh Boyer | 1be8cbc361 | |
Josh Boyer | 7885dbca86 | |
Dave Jones | 46d0c5fee1 | |
Josh Boyer | 5d1d642bab | |
Josh Boyer | 348da18a20 | |
Josh Boyer | edd19fe2d2 | |
Josh Boyer | 1c2cec9cfb | |
Josh Boyer | 3774ce3c1d | |
Josh Boyer | e9094d47cd | |
Josh Boyer | 1c2e433fec | |
Dave Jones | 686a194811 | |
Dennis Gilmore | cb6a4e1b97 | |
Dennis Gilmore | 2fe4ccdc75 | |
Dennis Gilmore | d5210424c1 | |
Dennis Gilmore | 68bd044f8a | |
Dennis Gilmore | a051e56cfe | |
Dennis Gilmore | 8e25ffdc6e | |
Dennis Gilmore | e8d576e5d4 | |
Dennis Gilmore | f8effed74e | |
Josh Boyer | 9765980dfc | |
Dave Jones | 0ffe7fc9b0 | |
Josh Boyer | 52149c3ebb | |
Josh Boyer | 716ab00b8c | |
Josh Boyer | bba41d6786 | |
Josh Boyer | ed165f2540 | |
Dave Jones | 268afcecae | |
Josh Boyer | a9bf2facb1 | |
Dave Jones | 14afc06f78 | |
Dave Jones | a39077043a | |
Josh Boyer | c307f0b0e7 | |
Josh Boyer | bca2221f92 | |
Dave Jones | 702278a733 | |
Josh Boyer | 5bc7ff510a | |
Josh Boyer | 6f3e186bc7 | |
Dave Jones | 9efe707d77 | |
John W. Linville | 0df6e18dc6 | |
Josh Boyer | b91dd47839 | |
Josh Boyer | 0c6a0c8d9d | |
Dave Jones | e0ce6b691c | |
Josh Boyer | ec0811cedb | |
Josh Boyer | a145ed9864 | |
Dave Jones | 12fe727f0d | |
Dave Jones | 73a609865c | |
Josh Boyer | 7cec0fdc37 | |
Dave Jones | e4df40cdf2 | |
Dave Jones | 44f60ec5e2 |
|
@ -1,5 +1,6 @@
|
|||
linux-*.tar.bz2
|
||||
patch-*.bz2
|
||||
clog
|
||||
*.xz
|
||||
*.bz2
|
||||
*.rpm
|
||||
*.orig
|
||||
kernel-[23].*/
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
From 690b1ad9d2032d6f2565d44f6564590d47835ae8 Mon Sep 17 00:00:00 2001
|
||||
From: Zhang Rui <rui.zhang@intel.com>
|
||||
Date: Thu, 29 Nov 2012 01:30:43 +0800
|
||||
Subject: [PATCH 1/2] ACPI sony-laptop: do proper memcpy for ACPI_TYPE_INTEGER
|
||||
acpi_object
|
||||
|
||||
the return value of __call_snc_method can either be
|
||||
an ACPI_TYPE_BUFFER object or a ACPI_TYPE_INTEGER object.
|
||||
do proper memcpy for ACPI_TYPE_INTEGER object.
|
||||
|
||||
https://bugzilla.kernel.org/show_bug.cgi?id=50111
|
||||
|
||||
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
|
||||
---
|
||||
drivers/platform/x86/sony-laptop.c | 11 +++++------
|
||||
1 file changed, 5 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
|
||||
index daaddec..92e0da2 100644
|
||||
--- a/drivers/platform/x86/sony-laptop.c
|
||||
+++ b/drivers/platform/x86/sony-laptop.c
|
||||
@@ -792,20 +792,19 @@ static int sony_nc_buffer_call(acpi_handle handle, char *name, u64 *value,
|
||||
if (!object)
|
||||
return -EINVAL;
|
||||
|
||||
- if (object->type == ACPI_TYPE_BUFFER)
|
||||
+ if (object->type == ACPI_TYPE_BUFFER) {
|
||||
len = MIN(buflen, object->buffer.length);
|
||||
-
|
||||
- else if (object->type == ACPI_TYPE_INTEGER)
|
||||
+ memcpy(buffer, object->buffer.pointer, len);
|
||||
+ } else if (object->type == ACPI_TYPE_INTEGER) {
|
||||
len = MIN(buflen, sizeof(object->integer.value));
|
||||
-
|
||||
- else {
|
||||
+ memcpy(buffer, (void *)&object->integer.value, len);
|
||||
+ } else {
|
||||
pr_warn("Invalid acpi_object: expected 0x%x got 0x%x\n",
|
||||
ACPI_TYPE_BUFFER, object->type);
|
||||
kfree(object);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- memcpy(buffer, object->buffer.pointer, len);
|
||||
kfree(object);
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
From 50b61634cf8d09f9ef334919b859735d381cbe39 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Fri, 28 Sep 2012 23:21:09 -0400
|
||||
Subject: [PATCH 01/13] ext4: ext4_inode_info diet
|
||||
|
||||
Generic inode has unused i_private pointer which may be used as cur_aio_dio
|
||||
storage.
|
||||
|
||||
TODO: If cur_aio_dio will be passed as an argument to get_block_t this allow
|
||||
to have concurent AIO_DIO requests.
|
||||
|
||||
Reviewed-by: Zheng Liu <wenqing.lz@taobao.com>
|
||||
Reviewed-by: Jan Kara <jack@suse.cz>
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
(cherry picked from commit f45ee3a1ea438af96e4fd2c0b16d195e67ef235f)
|
||||
---
|
||||
fs/ext4/ext4.h | 12 ++++++++++--
|
||||
fs/ext4/extents.c | 4 ++--
|
||||
fs/ext4/inode.c | 6 +++---
|
||||
fs/ext4/super.c | 1 -
|
||||
4 files changed, 15 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
|
||||
index c3411d4..80afc8f 100644
|
||||
--- a/fs/ext4/ext4.h
|
||||
+++ b/fs/ext4/ext4.h
|
||||
@@ -912,8 +912,6 @@ struct ext4_inode_info {
|
||||
struct list_head i_completed_io_list;
|
||||
spinlock_t i_completed_io_lock;
|
||||
atomic_t i_ioend_count; /* Number of outstanding io_end structs */
|
||||
- /* current io_end structure for async DIO write*/
|
||||
- ext4_io_end_t *cur_aio_dio;
|
||||
atomic_t i_aiodio_unwritten; /* Nr. of inflight conversions pending */
|
||||
|
||||
spinlock_t i_block_reservation_lock;
|
||||
@@ -1332,6 +1330,16 @@ static inline void ext4_set_io_unwritten_flag(struct inode *inode,
|
||||
}
|
||||
}
|
||||
|
||||
+static inline ext4_io_end_t *ext4_inode_aio(struct inode *inode)
|
||||
+{
|
||||
+ return inode->i_private;
|
||||
+}
|
||||
+
|
||||
+static inline void ext4_inode_aio_set(struct inode *inode, ext4_io_end_t *io)
|
||||
+{
|
||||
+ inode->i_private = io;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Inode dynamic state flags
|
||||
*/
|
||||
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
|
||||
index aabbb3f..51fbef1 100644
|
||||
--- a/fs/ext4/extents.c
|
||||
+++ b/fs/ext4/extents.c
|
||||
@@ -3600,7 +3600,7 @@ ext4_ext_handle_uninitialized_extents(handle_t *handle, struct inode *inode,
|
||||
{
|
||||
int ret = 0;
|
||||
int err = 0;
|
||||
- ext4_io_end_t *io = EXT4_I(inode)->cur_aio_dio;
|
||||
+ ext4_io_end_t *io = ext4_inode_aio(inode);
|
||||
|
||||
ext_debug("ext4_ext_handle_uninitialized_extents: inode %lu, logical "
|
||||
"block %llu, max_blocks %u, flags %x, allocated %u\n",
|
||||
@@ -3858,7 +3858,7 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode,
|
||||
unsigned int allocated = 0, offset = 0;
|
||||
unsigned int allocated_clusters = 0;
|
||||
struct ext4_allocation_request ar;
|
||||
- ext4_io_end_t *io = EXT4_I(inode)->cur_aio_dio;
|
||||
+ ext4_io_end_t *io = ext4_inode_aio(inode);
|
||||
ext4_lblk_t cluster_offset;
|
||||
|
||||
ext_debug("blocks %u/%u requested for inode %lu\n",
|
||||
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
|
||||
index dff171c..acadd2b 100644
|
||||
--- a/fs/ext4/inode.c
|
||||
+++ b/fs/ext4/inode.c
|
||||
@@ -3054,7 +3054,7 @@ static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb,
|
||||
* hook to the iocb.
|
||||
*/
|
||||
iocb->private = NULL;
|
||||
- EXT4_I(inode)->cur_aio_dio = NULL;
|
||||
+ ext4_inode_aio_set(inode, NULL);
|
||||
if (!is_sync_kiocb(iocb)) {
|
||||
ext4_io_end_t *io_end =
|
||||
ext4_init_io_end(inode, GFP_NOFS);
|
||||
@@ -3071,7 +3071,7 @@ static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb,
|
||||
* is a unwritten extents needs to be converted
|
||||
* when IO is completed.
|
||||
*/
|
||||
- EXT4_I(inode)->cur_aio_dio = iocb->private;
|
||||
+ ext4_inode_aio_set(inode, io_end);
|
||||
}
|
||||
|
||||
if (overwrite)
|
||||
@@ -3091,7 +3091,7 @@ static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb,
|
||||
NULL,
|
||||
DIO_LOCKING);
|
||||
if (iocb->private)
|
||||
- EXT4_I(inode)->cur_aio_dio = NULL;
|
||||
+ ext4_inode_aio_set(inode, NULL);
|
||||
/*
|
||||
* The io_end structure takes a reference to the inode,
|
||||
* that structure needs to be destroyed and the
|
||||
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
|
||||
index c6e0cb3..270e58f 100644
|
||||
--- a/fs/ext4/super.c
|
||||
+++ b/fs/ext4/super.c
|
||||
@@ -956,7 +956,6 @@ static struct inode *ext4_alloc_inode(struct super_block *sb)
|
||||
ei->jinode = NULL;
|
||||
INIT_LIST_HEAD(&ei->i_completed_io_list);
|
||||
spin_lock_init(&ei->i_completed_io_lock);
|
||||
- ei->cur_aio_dio = NULL;
|
||||
ei->i_sync_tid = 0;
|
||||
ei->i_datasync_tid = 0;
|
||||
atomic_set(&ei->i_ioend_count, 0);
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
From 027d1aa67e32c2c80851105c6d962f3db46eb476 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Fri, 28 Sep 2012 23:24:52 -0400
|
||||
Subject: [PATCH 02/13] ext4: give i_aiodio_unwritten a more appropriate name
|
||||
|
||||
AIO/DIO prefix is wrong because it account unwritten extents which
|
||||
also may be scheduled from buffered write endio
|
||||
|
||||
Reviewed-by: Jan Kara <jack@suse.cz>
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
(cherry picked from commit e27f41e1b789e60e7d8cc9c81fd93ca49ef31f13)
|
||||
---
|
||||
fs/ext4/ext4.h | 4 ++--
|
||||
fs/ext4/file.c | 6 +++---
|
||||
fs/ext4/page-io.c | 2 +-
|
||||
fs/ext4/super.c | 2 +-
|
||||
4 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
|
||||
index 80afc8f..28dfd9b 100644
|
||||
--- a/fs/ext4/ext4.h
|
||||
+++ b/fs/ext4/ext4.h
|
||||
@@ -912,7 +912,7 @@ struct ext4_inode_info {
|
||||
struct list_head i_completed_io_list;
|
||||
spinlock_t i_completed_io_lock;
|
||||
atomic_t i_ioend_count; /* Number of outstanding io_end structs */
|
||||
- atomic_t i_aiodio_unwritten; /* Nr. of inflight conversions pending */
|
||||
+ atomic_t i_unwritten; /* Nr. of inflight conversions pending */
|
||||
|
||||
spinlock_t i_block_reservation_lock;
|
||||
|
||||
@@ -1326,7 +1326,7 @@ static inline void ext4_set_io_unwritten_flag(struct inode *inode,
|
||||
{
|
||||
if (!(io_end->flag & EXT4_IO_END_UNWRITTEN)) {
|
||||
io_end->flag |= EXT4_IO_END_UNWRITTEN;
|
||||
- atomic_inc(&EXT4_I(inode)->i_aiodio_unwritten);
|
||||
+ atomic_inc(&EXT4_I(inode)->i_unwritten);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
|
||||
index 3b0e3bd..39335bd 100644
|
||||
--- a/fs/ext4/file.c
|
||||
+++ b/fs/ext4/file.c
|
||||
@@ -55,11 +55,11 @@ static int ext4_release_file(struct inode *inode, struct file *filp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void ext4_aiodio_wait(struct inode *inode)
|
||||
+static void ext4_unwritten_wait(struct inode *inode)
|
||||
{
|
||||
wait_queue_head_t *wq = ext4_ioend_wq(inode);
|
||||
|
||||
- wait_event(*wq, (atomic_read(&EXT4_I(inode)->i_aiodio_unwritten) == 0));
|
||||
+ wait_event(*wq, (atomic_read(&EXT4_I(inode)->i_unwritten) == 0));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -116,7 +116,7 @@ ext4_file_dio_write(struct kiocb *iocb, const struct iovec *iov,
|
||||
"performance will be poor.",
|
||||
inode->i_ino, current->comm);
|
||||
mutex_lock(ext4_aio_mutex(inode));
|
||||
- ext4_aiodio_wait(inode);
|
||||
+ ext4_unwritten_wait(inode);
|
||||
}
|
||||
|
||||
BUG_ON(iocb->ki_pos != pos);
|
||||
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
|
||||
index dcdeef1..de77e31 100644
|
||||
--- a/fs/ext4/page-io.c
|
||||
+++ b/fs/ext4/page-io.c
|
||||
@@ -113,7 +113,7 @@ int ext4_end_io_nolock(ext4_io_end_t *io)
|
||||
if (io->flag & EXT4_IO_END_DIRECT)
|
||||
inode_dio_done(inode);
|
||||
/* Wake up anyone waiting on unwritten extent conversion */
|
||||
- if (atomic_dec_and_test(&EXT4_I(inode)->i_aiodio_unwritten))
|
||||
+ if (atomic_dec_and_test(&EXT4_I(inode)->i_unwritten))
|
||||
wake_up_all(ext4_ioend_wq(io->inode));
|
||||
return ret;
|
||||
}
|
||||
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
|
||||
index 270e58f..1b6b425 100644
|
||||
--- a/fs/ext4/super.c
|
||||
+++ b/fs/ext4/super.c
|
||||
@@ -959,7 +959,7 @@ static struct inode *ext4_alloc_inode(struct super_block *sb)
|
||||
ei->i_sync_tid = 0;
|
||||
ei->i_datasync_tid = 0;
|
||||
atomic_set(&ei->i_ioend_count, 0);
|
||||
- atomic_set(&ei->i_aiodio_unwritten, 0);
|
||||
+ atomic_set(&ei->i_unwritten, 0);
|
||||
|
||||
return &ei->vfs_inode;
|
||||
}
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,112 @@
|
|||
From 6a0e905bb7320571ed5fdd2d5efa3d642630b4f7 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Fri, 28 Sep 2012 23:36:25 -0400
|
||||
Subject: [PATCH 03/13] ext4: fix unwritten counter leakage
|
||||
|
||||
ext4_set_io_unwritten_flag() will increment i_unwritten counter, so
|
||||
once we mark end_io with EXT4_END_IO_UNWRITTEN we have to revert it back
|
||||
on error path.
|
||||
|
||||
- add missed error checks to prevent counter leakage
|
||||
- ext4_end_io_nolock() will clear EXT4_END_IO_UNWRITTEN flag to signal
|
||||
that conversion finished.
|
||||
- add BUG_ON to ext4_free_end_io() to prevent similar leakage in future.
|
||||
|
||||
Visible effect of this bug is that unaligned aio_stress may deadlock
|
||||
|
||||
Reviewed-by: Jan Kara <jack@suse.cz>
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
(cherry picked from commit 82e54229118785badffb4ef5ba4803df25fe007f)
|
||||
---
|
||||
fs/ext4/extents.c | 21 ++++++++++++++-------
|
||||
fs/ext4/page-io.c | 6 +++++-
|
||||
2 files changed, 19 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
|
||||
index 51fbef1..e04eb4f 100644
|
||||
--- a/fs/ext4/extents.c
|
||||
+++ b/fs/ext4/extents.c
|
||||
@@ -3615,6 +3615,8 @@ ext4_ext_handle_uninitialized_extents(handle_t *handle, struct inode *inode,
|
||||
if ((flags & EXT4_GET_BLOCKS_PRE_IO)) {
|
||||
ret = ext4_split_unwritten_extents(handle, inode, map,
|
||||
path, flags);
|
||||
+ if (ret <= 0)
|
||||
+ goto out;
|
||||
/*
|
||||
* Flag the inode(non aio case) or end_io struct (aio case)
|
||||
* that this IO needs to conversion to written when IO is
|
||||
@@ -3860,6 +3862,7 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode,
|
||||
struct ext4_allocation_request ar;
|
||||
ext4_io_end_t *io = ext4_inode_aio(inode);
|
||||
ext4_lblk_t cluster_offset;
|
||||
+ int set_unwritten = 0;
|
||||
|
||||
ext_debug("blocks %u/%u requested for inode %lu\n",
|
||||
map->m_lblk, map->m_len, inode->i_ino);
|
||||
@@ -4082,13 +4085,8 @@ got_allocated_blocks:
|
||||
* For non asycn direct IO case, flag the inode state
|
||||
* that we need to perform conversion when IO is done.
|
||||
*/
|
||||
- if ((flags & EXT4_GET_BLOCKS_PRE_IO)) {
|
||||
- if (io)
|
||||
- ext4_set_io_unwritten_flag(inode, io);
|
||||
- else
|
||||
- ext4_set_inode_state(inode,
|
||||
- EXT4_STATE_DIO_UNWRITTEN);
|
||||
- }
|
||||
+ if ((flags & EXT4_GET_BLOCKS_PRE_IO))
|
||||
+ set_unwritten = 1;
|
||||
if (ext4_should_dioread_nolock(inode))
|
||||
map->m_flags |= EXT4_MAP_UNINIT;
|
||||
}
|
||||
@@ -4100,6 +4098,15 @@ got_allocated_blocks:
|
||||
if (!err)
|
||||
err = ext4_ext_insert_extent(handle, inode, path,
|
||||
&newex, flags);
|
||||
+
|
||||
+ if (!err && set_unwritten) {
|
||||
+ if (io)
|
||||
+ ext4_set_io_unwritten_flag(inode, io);
|
||||
+ else
|
||||
+ ext4_set_inode_state(inode,
|
||||
+ EXT4_STATE_DIO_UNWRITTEN);
|
||||
+ }
|
||||
+
|
||||
if (err && free_on_err) {
|
||||
int fb_flags = flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE ?
|
||||
EXT4_FREE_BLOCKS_NO_QUOT_UPDATE : 0;
|
||||
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
|
||||
index de77e31..9970022 100644
|
||||
--- a/fs/ext4/page-io.c
|
||||
+++ b/fs/ext4/page-io.c
|
||||
@@ -71,6 +71,8 @@ void ext4_free_io_end(ext4_io_end_t *io)
|
||||
int i;
|
||||
|
||||
BUG_ON(!io);
|
||||
+ BUG_ON(io->flag & EXT4_IO_END_UNWRITTEN);
|
||||
+
|
||||
if (io->page)
|
||||
put_page(io->page);
|
||||
for (i = 0; i < io->num_io_pages; i++)
|
||||
@@ -94,6 +96,8 @@ int ext4_end_io_nolock(ext4_io_end_t *io)
|
||||
ssize_t size = io->size;
|
||||
int ret = 0;
|
||||
|
||||
+ BUG_ON(!(io->flag & EXT4_IO_END_UNWRITTEN));
|
||||
+
|
||||
ext4_debug("ext4_end_io_nolock: io 0x%p from inode %lu,list->next 0x%p,"
|
||||
"list->prev 0x%p\n",
|
||||
io, inode->i_ino, io->list.next, io->list.prev);
|
||||
@@ -106,7 +110,7 @@ int ext4_end_io_nolock(ext4_io_end_t *io)
|
||||
"(inode %lu, offset %llu, size %zd, error %d)",
|
||||
inode->i_ino, offset, size, ret);
|
||||
}
|
||||
-
|
||||
+ io->flag &= ~EXT4_IO_END_UNWRITTEN;
|
||||
if (io->iocb)
|
||||
aio_complete(io->iocb, io->result, 0);
|
||||
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,520 @@
|
|||
From e23394806df0768ed2dac87484590d2f3a730d55 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Sat, 29 Sep 2012 00:14:55 -0400
|
||||
Subject: [PATCH 04/13] ext4: completed_io locking cleanup
|
||||
|
||||
Current unwritten extent conversion state-machine is very fuzzy.
|
||||
- For unknown reason it performs conversion under i_mutex. What for?
|
||||
My diagnosis:
|
||||
We already protect extent tree with i_data_sem, truncate and punch_hole
|
||||
should wait for DIO, so the only data we have to protect is end_io->flags
|
||||
modification, but only flush_completed_IO and end_io_work modified this
|
||||
flags and we can serialize them via i_completed_io_lock.
|
||||
|
||||
Currently all these games with mutex_trylock result in the following deadlock
|
||||
truncate: kworker:
|
||||
ext4_setattr ext4_end_io_work
|
||||
mutex_lock(i_mutex)
|
||||
inode_dio_wait(inode) ->BLOCK
|
||||
DEADLOCK<- mutex_trylock()
|
||||
inode_dio_done()
|
||||
#TEST_CASE1_BEGIN
|
||||
MNT=/mnt_scrach
|
||||
unlink $MNT/file
|
||||
fallocate -l $((1024*1024*1024)) $MNT/file
|
||||
aio-stress -I 100000 -O -s 100m -n -t 1 -c 10 -o 2 -o 3 $MNT/file
|
||||
sleep 2
|
||||
truncate -s 0 $MNT/file
|
||||
#TEST_CASE1_END
|
||||
|
||||
Or use 286's xfstests https://github.com/dmonakhov/xfstests/blob/devel/286
|
||||
|
||||
This patch makes state machine simple and clean:
|
||||
|
||||
(1) xxx_end_io schedule final extent conversion simply by calling
|
||||
ext4_add_complete_io(), which append it to ei->i_completed_io_list
|
||||
NOTE1: because of (2A) work should be queued only if
|
||||
->i_completed_io_list was empty, otherwise the work is scheduled already.
|
||||
|
||||
(2) ext4_flush_completed_IO is responsible for handling all pending
|
||||
end_io from ei->i_completed_io_list
|
||||
Flushing sequence consists of following stages:
|
||||
A) LOCKED: Atomically drain completed_io_list to local_list
|
||||
B) Perform extents conversion
|
||||
C) LOCKED: move converted io's to to_free list for final deletion
|
||||
This logic depends on context which we was called from.
|
||||
D) Final end_io context destruction
|
||||
NOTE1: i_mutex is no longer required because end_io->flags modification
|
||||
is protected by ei->ext4_complete_io_lock
|
||||
|
||||
Full list of changes:
|
||||
- Move all completion end_io related routines to page-io.c in order to improve
|
||||
logic locality
|
||||
- Move open coded logic from various xx_end_xx routines to ext4_add_complete_io()
|
||||
- remove EXT4_IO_END_FSYNC
|
||||
- Improve SMP scalability by removing useless i_mutex which does not
|
||||
protect io->flags anymore.
|
||||
- Reduce lock contention on i_completed_io_lock by optimizing list walk.
|
||||
- Rename ext4_end_io_nolock to end4_end_io and make it static
|
||||
- Check flush completion status to ext4_ext_punch_hole(). Because it is
|
||||
not good idea to punch blocks from corrupted inode.
|
||||
|
||||
Changes since V3 (in request to Jan's comments):
|
||||
Fall back to active flush_completed_IO() approach in order to prevent
|
||||
performance issues with nolocked DIO reads.
|
||||
Changes since V2:
|
||||
Fix use-after-free caused by race truncate vs end_io_work
|
||||
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
(cherry picked from commit 28a535f9a0df060569dcc786e5bc2e1de43d7dc7)
|
||||
---
|
||||
fs/ext4/ext4.h | 3 +-
|
||||
fs/ext4/extents.c | 4 +-
|
||||
fs/ext4/fsync.c | 81 -------------------------
|
||||
fs/ext4/indirect.c | 6 +-
|
||||
fs/ext4/inode.c | 25 +-------
|
||||
fs/ext4/page-io.c | 171 +++++++++++++++++++++++++++++++++++------------------
|
||||
6 files changed, 121 insertions(+), 169 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
|
||||
index 28dfd9b..7687d15 100644
|
||||
--- a/fs/ext4/ext4.h
|
||||
+++ b/fs/ext4/ext4.h
|
||||
@@ -186,7 +186,6 @@ struct mpage_da_data {
|
||||
#define EXT4_IO_END_ERROR 0x0002
|
||||
#define EXT4_IO_END_QUEUED 0x0004
|
||||
#define EXT4_IO_END_DIRECT 0x0008
|
||||
-#define EXT4_IO_END_IN_FSYNC 0x0010
|
||||
|
||||
struct ext4_io_page {
|
||||
struct page *p_page;
|
||||
@@ -2408,11 +2407,11 @@ extern int ext4_move_extents(struct file *o_filp, struct file *d_filp,
|
||||
|
||||
/* page-io.c */
|
||||
extern int __init ext4_init_pageio(void);
|
||||
+extern void ext4_add_complete_io(ext4_io_end_t *io_end);
|
||||
extern void ext4_exit_pageio(void);
|
||||
extern void ext4_ioend_wait(struct inode *);
|
||||
extern void ext4_free_io_end(ext4_io_end_t *io);
|
||||
extern ext4_io_end_t *ext4_init_io_end(struct inode *inode, gfp_t flags);
|
||||
-extern int ext4_end_io_nolock(ext4_io_end_t *io);
|
||||
extern void ext4_io_submit(struct ext4_io_submit *io);
|
||||
extern int ext4_bio_write_page(struct ext4_io_submit *io,
|
||||
struct page *page,
|
||||
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
|
||||
index e04eb4f..1fbf2ff 100644
|
||||
--- a/fs/ext4/extents.c
|
||||
+++ b/fs/ext4/extents.c
|
||||
@@ -4815,7 +4815,9 @@ int ext4_ext_punch_hole(struct file *file, loff_t offset, loff_t length)
|
||||
}
|
||||
|
||||
/* finish any pending end_io work */
|
||||
- ext4_flush_completed_IO(inode);
|
||||
+ err = ext4_flush_completed_IO(inode);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
|
||||
credits = ext4_writepage_trans_blocks(inode);
|
||||
handle = ext4_journal_start(inode, credits);
|
||||
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
|
||||
index 2a1dcea..520b058 100644
|
||||
--- a/fs/ext4/fsync.c
|
||||
+++ b/fs/ext4/fsync.c
|
||||
@@ -34,87 +34,6 @@
|
||||
|
||||
#include <trace/events/ext4.h>
|
||||
|
||||
-static void dump_completed_IO(struct inode * inode)
|
||||
-{
|
||||
-#ifdef EXT4FS_DEBUG
|
||||
- struct list_head *cur, *before, *after;
|
||||
- ext4_io_end_t *io, *io0, *io1;
|
||||
- unsigned long flags;
|
||||
-
|
||||
- if (list_empty(&EXT4_I(inode)->i_completed_io_list)){
|
||||
- ext4_debug("inode %lu completed_io list is empty\n", inode->i_ino);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- ext4_debug("Dump inode %lu completed_io list \n", inode->i_ino);
|
||||
- spin_lock_irqsave(&EXT4_I(inode)->i_completed_io_lock, flags);
|
||||
- list_for_each_entry(io, &EXT4_I(inode)->i_completed_io_list, list){
|
||||
- cur = &io->list;
|
||||
- before = cur->prev;
|
||||
- io0 = container_of(before, ext4_io_end_t, list);
|
||||
- after = cur->next;
|
||||
- io1 = container_of(after, ext4_io_end_t, list);
|
||||
-
|
||||
- ext4_debug("io 0x%p from inode %lu,prev 0x%p,next 0x%p\n",
|
||||
- io, inode->i_ino, io0, io1);
|
||||
- }
|
||||
- spin_unlock_irqrestore(&EXT4_I(inode)->i_completed_io_lock, flags);
|
||||
-#endif
|
||||
-}
|
||||
-
|
||||
-/*
|
||||
- * This function is called from ext4_sync_file().
|
||||
- *
|
||||
- * When IO is completed, the work to convert unwritten extents to
|
||||
- * written is queued on workqueue but may not get immediately
|
||||
- * scheduled. When fsync is called, we need to ensure the
|
||||
- * conversion is complete before fsync returns.
|
||||
- * The inode keeps track of a list of pending/completed IO that
|
||||
- * might needs to do the conversion. This function walks through
|
||||
- * the list and convert the related unwritten extents for completed IO
|
||||
- * to written.
|
||||
- * The function return the number of pending IOs on success.
|
||||
- */
|
||||
-int ext4_flush_completed_IO(struct inode *inode)
|
||||
-{
|
||||
- ext4_io_end_t *io;
|
||||
- struct ext4_inode_info *ei = EXT4_I(inode);
|
||||
- unsigned long flags;
|
||||
- int ret = 0;
|
||||
- int ret2 = 0;
|
||||
-
|
||||
- dump_completed_IO(inode);
|
||||
- spin_lock_irqsave(&ei->i_completed_io_lock, flags);
|
||||
- while (!list_empty(&ei->i_completed_io_list)){
|
||||
- io = list_entry(ei->i_completed_io_list.next,
|
||||
- ext4_io_end_t, list);
|
||||
- list_del_init(&io->list);
|
||||
- io->flag |= EXT4_IO_END_IN_FSYNC;
|
||||
- /*
|
||||
- * Calling ext4_end_io_nolock() to convert completed
|
||||
- * IO to written.
|
||||
- *
|
||||
- * When ext4_sync_file() is called, run_queue() may already
|
||||
- * about to flush the work corresponding to this io structure.
|
||||
- * It will be upset if it founds the io structure related
|
||||
- * to the work-to-be schedule is freed.
|
||||
- *
|
||||
- * Thus we need to keep the io structure still valid here after
|
||||
- * conversion finished. The io structure has a flag to
|
||||
- * avoid double converting from both fsync and background work
|
||||
- * queue work.
|
||||
- */
|
||||
- spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
|
||||
- ret = ext4_end_io_nolock(io);
|
||||
- if (ret < 0)
|
||||
- ret2 = ret;
|
||||
- spin_lock_irqsave(&ei->i_completed_io_lock, flags);
|
||||
- io->flag &= ~EXT4_IO_END_IN_FSYNC;
|
||||
- }
|
||||
- spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
|
||||
- return (ret2 < 0) ? ret2 : 0;
|
||||
-}
|
||||
-
|
||||
/*
|
||||
* If we're not journaling and this is a just-created file, we have to
|
||||
* sync our parent directory (if it was freshly created) since
|
||||
diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c
|
||||
index 830e1b2..61f13e5 100644
|
||||
--- a/fs/ext4/indirect.c
|
||||
+++ b/fs/ext4/indirect.c
|
||||
@@ -807,11 +807,9 @@ ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb,
|
||||
|
||||
retry:
|
||||
if (rw == READ && ext4_should_dioread_nolock(inode)) {
|
||||
- if (unlikely(!list_empty(&ei->i_completed_io_list))) {
|
||||
- mutex_lock(&inode->i_mutex);
|
||||
+ if (unlikely(!list_empty(&ei->i_completed_io_list)))
|
||||
ext4_flush_completed_IO(inode);
|
||||
- mutex_unlock(&inode->i_mutex);
|
||||
- }
|
||||
+
|
||||
ret = __blockdev_direct_IO(rw, iocb, inode,
|
||||
inode->i_sb->s_bdev, iov,
|
||||
offset, nr_segs,
|
||||
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
|
||||
index acadd2b..dd3fd23 100644
|
||||
--- a/fs/ext4/inode.c
|
||||
+++ b/fs/ext4/inode.c
|
||||
@@ -2879,9 +2879,6 @@ static void ext4_end_io_dio(struct kiocb *iocb, loff_t offset,
|
||||
{
|
||||
struct inode *inode = iocb->ki_filp->f_path.dentry->d_inode;
|
||||
ext4_io_end_t *io_end = iocb->private;
|
||||
- struct workqueue_struct *wq;
|
||||
- unsigned long flags;
|
||||
- struct ext4_inode_info *ei;
|
||||
|
||||
/* if not async direct IO or dio with 0 bytes write, just return */
|
||||
if (!io_end || !size)
|
||||
@@ -2910,24 +2907,14 @@ out:
|
||||
io_end->iocb = iocb;
|
||||
io_end->result = ret;
|
||||
}
|
||||
- wq = EXT4_SB(io_end->inode->i_sb)->dio_unwritten_wq;
|
||||
-
|
||||
- /* Add the io_end to per-inode completed aio dio list*/
|
||||
- ei = EXT4_I(io_end->inode);
|
||||
- spin_lock_irqsave(&ei->i_completed_io_lock, flags);
|
||||
- list_add_tail(&io_end->list, &ei->i_completed_io_list);
|
||||
- spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
|
||||
|
||||
- /* queue the work to convert unwritten extents to written */
|
||||
- queue_work(wq, &io_end->work);
|
||||
+ ext4_add_complete_io(io_end);
|
||||
}
|
||||
|
||||
static void ext4_end_io_buffer_write(struct buffer_head *bh, int uptodate)
|
||||
{
|
||||
ext4_io_end_t *io_end = bh->b_private;
|
||||
- struct workqueue_struct *wq;
|
||||
struct inode *inode;
|
||||
- unsigned long flags;
|
||||
|
||||
if (!test_clear_buffer_uninit(bh) || !io_end)
|
||||
goto out;
|
||||
@@ -2946,15 +2933,7 @@ static void ext4_end_io_buffer_write(struct buffer_head *bh, int uptodate)
|
||||
*/
|
||||
inode = io_end->inode;
|
||||
ext4_set_io_unwritten_flag(inode, io_end);
|
||||
-
|
||||
- /* Add the io_end to per-inode completed io list*/
|
||||
- spin_lock_irqsave(&EXT4_I(inode)->i_completed_io_lock, flags);
|
||||
- list_add_tail(&io_end->list, &EXT4_I(inode)->i_completed_io_list);
|
||||
- spin_unlock_irqrestore(&EXT4_I(inode)->i_completed_io_lock, flags);
|
||||
-
|
||||
- wq = EXT4_SB(inode->i_sb)->dio_unwritten_wq;
|
||||
- /* queue the work to convert unwritten extents to written */
|
||||
- queue_work(wq, &io_end->work);
|
||||
+ ext4_add_complete_io(io_end);
|
||||
out:
|
||||
bh->b_private = NULL;
|
||||
bh->b_end_io = NULL;
|
||||
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
|
||||
index 9970022..5b24c40 100644
|
||||
--- a/fs/ext4/page-io.c
|
||||
+++ b/fs/ext4/page-io.c
|
||||
@@ -71,6 +71,7 @@ void ext4_free_io_end(ext4_io_end_t *io)
|
||||
int i;
|
||||
|
||||
BUG_ON(!io);
|
||||
+ BUG_ON(!list_empty(&io->list));
|
||||
BUG_ON(io->flag & EXT4_IO_END_UNWRITTEN);
|
||||
|
||||
if (io->page)
|
||||
@@ -83,21 +84,14 @@ void ext4_free_io_end(ext4_io_end_t *io)
|
||||
kmem_cache_free(io_end_cachep, io);
|
||||
}
|
||||
|
||||
-/*
|
||||
- * check a range of space and convert unwritten extents to written.
|
||||
- *
|
||||
- * Called with inode->i_mutex; we depend on this when we manipulate
|
||||
- * io->flag, since we could otherwise race with ext4_flush_completed_IO()
|
||||
- */
|
||||
-int ext4_end_io_nolock(ext4_io_end_t *io)
|
||||
+/* check a range of space and convert unwritten extents to written. */
|
||||
+static int ext4_end_io(ext4_io_end_t *io)
|
||||
{
|
||||
struct inode *inode = io->inode;
|
||||
loff_t offset = io->offset;
|
||||
ssize_t size = io->size;
|
||||
int ret = 0;
|
||||
|
||||
- BUG_ON(!(io->flag & EXT4_IO_END_UNWRITTEN));
|
||||
-
|
||||
ext4_debug("ext4_end_io_nolock: io 0x%p from inode %lu,list->next 0x%p,"
|
||||
"list->prev 0x%p\n",
|
||||
io, inode->i_ino, io->list.next, io->list.prev);
|
||||
@@ -110,7 +104,6 @@ int ext4_end_io_nolock(ext4_io_end_t *io)
|
||||
"(inode %lu, offset %llu, size %zd, error %d)",
|
||||
inode->i_ino, offset, size, ret);
|
||||
}
|
||||
- io->flag &= ~EXT4_IO_END_UNWRITTEN;
|
||||
if (io->iocb)
|
||||
aio_complete(io->iocb, io->result, 0);
|
||||
|
||||
@@ -122,51 +115,122 @@ int ext4_end_io_nolock(ext4_io_end_t *io)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-/*
|
||||
- * work on completed aio dio IO, to convert unwritten extents to extents
|
||||
- */
|
||||
-static void ext4_end_io_work(struct work_struct *work)
|
||||
+static void dump_completed_IO(struct inode *inode)
|
||||
+{
|
||||
+#ifdef EXT4FS_DEBUG
|
||||
+ struct list_head *cur, *before, *after;
|
||||
+ ext4_io_end_t *io, *io0, *io1;
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ if (list_empty(&EXT4_I(inode)->i_completed_io_list)) {
|
||||
+ ext4_debug("inode %lu completed_io list is empty\n",
|
||||
+ inode->i_ino);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ ext4_debug("Dump inode %lu completed_io list\n", inode->i_ino);
|
||||
+ list_for_each_entry(io, &EXT4_I(inode)->i_completed_io_list, list) {
|
||||
+ cur = &io->list;
|
||||
+ before = cur->prev;
|
||||
+ io0 = container_of(before, ext4_io_end_t, list);
|
||||
+ after = cur->next;
|
||||
+ io1 = container_of(after, ext4_io_end_t, list);
|
||||
+
|
||||
+ ext4_debug("io 0x%p from inode %lu,prev 0x%p,next 0x%p\n",
|
||||
+ io, inode->i_ino, io0, io1);
|
||||
+ }
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+/* Add the io_end to per-inode completed end_io list. */
|
||||
+void ext4_add_complete_io(ext4_io_end_t *io_end)
|
||||
{
|
||||
- ext4_io_end_t *io = container_of(work, ext4_io_end_t, work);
|
||||
- struct inode *inode = io->inode;
|
||||
- struct ext4_inode_info *ei = EXT4_I(inode);
|
||||
- unsigned long flags;
|
||||
+ struct ext4_inode_info *ei = EXT4_I(io_end->inode);
|
||||
+ struct workqueue_struct *wq;
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ BUG_ON(!(io_end->flag & EXT4_IO_END_UNWRITTEN));
|
||||
+ wq = EXT4_SB(io_end->inode->i_sb)->dio_unwritten_wq;
|
||||
|
||||
spin_lock_irqsave(&ei->i_completed_io_lock, flags);
|
||||
- if (io->flag & EXT4_IO_END_IN_FSYNC)
|
||||
- goto requeue;
|
||||
- if (list_empty(&io->list)) {
|
||||
- spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
|
||||
- goto free;
|
||||
+ if (list_empty(&ei->i_completed_io_list)) {
|
||||
+ io_end->flag |= EXT4_IO_END_QUEUED;
|
||||
+ queue_work(wq, &io_end->work);
|
||||
}
|
||||
+ list_add_tail(&io_end->list, &ei->i_completed_io_list);
|
||||
+ spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
|
||||
+}
|
||||
|
||||
- if (!mutex_trylock(&inode->i_mutex)) {
|
||||
- bool was_queued;
|
||||
-requeue:
|
||||
- was_queued = !!(io->flag & EXT4_IO_END_QUEUED);
|
||||
- io->flag |= EXT4_IO_END_QUEUED;
|
||||
- spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
|
||||
- /*
|
||||
- * Requeue the work instead of waiting so that the work
|
||||
- * items queued after this can be processed.
|
||||
- */
|
||||
- queue_work(EXT4_SB(inode->i_sb)->dio_unwritten_wq, &io->work);
|
||||
- /*
|
||||
- * To prevent the ext4-dio-unwritten thread from keeping
|
||||
- * requeueing end_io requests and occupying cpu for too long,
|
||||
- * yield the cpu if it sees an end_io request that has already
|
||||
- * been requeued.
|
||||
- */
|
||||
- if (was_queued)
|
||||
- yield();
|
||||
- return;
|
||||
+static int ext4_do_flush_completed_IO(struct inode *inode,
|
||||
+ ext4_io_end_t *work_io)
|
||||
+{
|
||||
+ ext4_io_end_t *io;
|
||||
+ struct list_head unwritten, complete, to_free;
|
||||
+ unsigned long flags;
|
||||
+ struct ext4_inode_info *ei = EXT4_I(inode);
|
||||
+ int err, ret = 0;
|
||||
+
|
||||
+ INIT_LIST_HEAD(&complete);
|
||||
+ INIT_LIST_HEAD(&to_free);
|
||||
+
|
||||
+ spin_lock_irqsave(&ei->i_completed_io_lock, flags);
|
||||
+ dump_completed_IO(inode);
|
||||
+ list_replace_init(&ei->i_completed_io_list, &unwritten);
|
||||
+ spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
|
||||
+
|
||||
+ while (!list_empty(&unwritten)) {
|
||||
+ io = list_entry(unwritten.next, ext4_io_end_t, list);
|
||||
+ BUG_ON(!(io->flag & EXT4_IO_END_UNWRITTEN));
|
||||
+ list_del_init(&io->list);
|
||||
+
|
||||
+ err = ext4_end_io(io);
|
||||
+ if (unlikely(!ret && err))
|
||||
+ ret = err;
|
||||
+
|
||||
+ list_add_tail(&io->list, &complete);
|
||||
+ }
|
||||
+ /* It is important to update all flags for all end_io in one shot w/o
|
||||
+ * dropping the lock.*/
|
||||
+ spin_lock_irqsave(&ei->i_completed_io_lock, flags);
|
||||
+ while (!list_empty(&complete)) {
|
||||
+ io = list_entry(complete.next, ext4_io_end_t, list);
|
||||
+ io->flag &= ~EXT4_IO_END_UNWRITTEN;
|
||||
+ /* end_io context can not be destroyed now because it still
|
||||
+ * used by queued worker. Worker thread will destroy it later */
|
||||
+ if (io->flag & EXT4_IO_END_QUEUED)
|
||||
+ list_del_init(&io->list);
|
||||
+ else
|
||||
+ list_move(&io->list, &to_free);
|
||||
+ }
|
||||
+ /* If we are called from worker context, it is time to clear queued
|
||||
+ * flag, and destroy it's end_io if it was converted already */
|
||||
+ if (work_io) {
|
||||
+ work_io->flag &= ~EXT4_IO_END_QUEUED;
|
||||
+ if (!(work_io->flag & EXT4_IO_END_UNWRITTEN))
|
||||
+ list_add_tail(&work_io->list, &to_free);
|
||||
}
|
||||
- list_del_init(&io->list);
|
||||
spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
|
||||
- (void) ext4_end_io_nolock(io);
|
||||
- mutex_unlock(&inode->i_mutex);
|
||||
-free:
|
||||
- ext4_free_io_end(io);
|
||||
+
|
||||
+ while (!list_empty(&to_free)) {
|
||||
+ io = list_entry(to_free.next, ext4_io_end_t, list);
|
||||
+ list_del_init(&io->list);
|
||||
+ ext4_free_io_end(io);
|
||||
+ }
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * work on completed aio dio IO, to convert unwritten extents to extents
|
||||
+ */
|
||||
+static void ext4_end_io_work(struct work_struct *work)
|
||||
+{
|
||||
+ ext4_io_end_t *io = container_of(work, ext4_io_end_t, work);
|
||||
+ ext4_do_flush_completed_IO(io->inode, io);
|
||||
+}
|
||||
+
|
||||
+int ext4_flush_completed_IO(struct inode *inode)
|
||||
+{
|
||||
+ return ext4_do_flush_completed_IO(inode, NULL);
|
||||
}
|
||||
|
||||
ext4_io_end_t *ext4_init_io_end(struct inode *inode, gfp_t flags)
|
||||
@@ -199,9 +263,7 @@ static void buffer_io_error(struct buffer_head *bh)
|
||||
static void ext4_end_bio(struct bio *bio, int error)
|
||||
{
|
||||
ext4_io_end_t *io_end = bio->bi_private;
|
||||
- struct workqueue_struct *wq;
|
||||
struct inode *inode;
|
||||
- unsigned long flags;
|
||||
int i;
|
||||
sector_t bi_sector = bio->bi_sector;
|
||||
|
||||
@@ -259,14 +321,7 @@ static void ext4_end_bio(struct bio *bio, int error)
|
||||
return;
|
||||
}
|
||||
|
||||
- /* Add the io_end to per-inode completed io list*/
|
||||
- spin_lock_irqsave(&EXT4_I(inode)->i_completed_io_lock, flags);
|
||||
- list_add_tail(&io_end->list, &EXT4_I(inode)->i_completed_io_list);
|
||||
- spin_unlock_irqrestore(&EXT4_I(inode)->i_completed_io_lock, flags);
|
||||
-
|
||||
- wq = EXT4_SB(inode->i_sb)->dio_unwritten_wq;
|
||||
- /* queue the work to convert unwritten extents to written */
|
||||
- queue_work(wq, &io_end->work);
|
||||
+ ext4_add_complete_io(io_end);
|
||||
}
|
||||
|
||||
void ext4_io_submit(struct ext4_io_submit *io)
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
From 994f567b2e99c82913a279ff438269c771b68a4b Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Sat, 29 Sep 2012 00:41:21 -0400
|
||||
Subject: [PATCH 05/13] ext4: serialize dio nonlocked reads with defrag
|
||||
workers
|
||||
|
||||
Inode's block defrag and ext4_change_inode_journal_flag() may
|
||||
affect nonlocked DIO reads result, so proper synchronization
|
||||
required.
|
||||
|
||||
- Add missed inode_dio_wait() calls where appropriate
|
||||
- Check inode state under extra i_dio_count reference.
|
||||
|
||||
Reviewed-by: Jan Kara <jack@suse.cz>
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
(cherry picked from commit 17335dcc471199717839b2fa3492ca36f70f1168)
|
||||
|
||||
Conflicts:
|
||||
fs/ext4/move_extent.c
|
||||
---
|
||||
fs/ext4/ext4.h | 17 +++++++++++++++++
|
||||
fs/ext4/indirect.c | 14 ++++++++++++++
|
||||
fs/ext4/inode.c | 5 +++++
|
||||
fs/ext4/move_extent.c | 8 ++++++++
|
||||
4 files changed, 44 insertions(+)
|
||||
|
||||
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
|
||||
index 7687d15..3e740e9 100644
|
||||
--- a/fs/ext4/ext4.h
|
||||
+++ b/fs/ext4/ext4.h
|
||||
@@ -1352,6 +1352,8 @@ enum {
|
||||
EXT4_STATE_DIO_UNWRITTEN, /* need convert on dio done*/
|
||||
EXT4_STATE_NEWENTRY, /* File just added to dir */
|
||||
EXT4_STATE_DELALLOC_RESERVED, /* blks already reserved for delalloc */
|
||||
+ EXT4_STATE_DIOREAD_LOCK, /* Disable support for dio read
|
||||
+ nolocking */
|
||||
};
|
||||
|
||||
#define EXT4_INODE_BIT_FNS(name, field, offset) \
|
||||
@@ -2459,6 +2461,21 @@ static inline void set_bitmap_uptodate(struct buffer_head *bh)
|
||||
set_bit(BH_BITMAP_UPTODATE, &(bh)->b_state);
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Disable DIO read nolock optimization, so new dioreaders will be forced
|
||||
+ * to grab i_mutex
|
||||
+ */
|
||||
+static inline void ext4_inode_block_unlocked_dio(struct inode *inode)
|
||||
+{
|
||||
+ ext4_set_inode_state(inode, EXT4_STATE_DIOREAD_LOCK);
|
||||
+ smp_mb();
|
||||
+}
|
||||
+static inline void ext4_inode_resume_unlocked_dio(struct inode *inode)
|
||||
+{
|
||||
+ smp_mb();
|
||||
+ ext4_clear_inode_state(inode, EXT4_STATE_DIOREAD_LOCK);
|
||||
+}
|
||||
+
|
||||
#define in_range(b, first, len) ((b) >= (first) && (b) <= (first) + (len) - 1)
|
||||
|
||||
/* For ioend & aio unwritten conversion wait queues */
|
||||
diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c
|
||||
index 61f13e5..8d849da 100644
|
||||
--- a/fs/ext4/indirect.c
|
||||
+++ b/fs/ext4/indirect.c
|
||||
@@ -810,11 +810,25 @@ retry:
|
||||
if (unlikely(!list_empty(&ei->i_completed_io_list)))
|
||||
ext4_flush_completed_IO(inode);
|
||||
|
||||
+ /*
|
||||
+ * Nolock dioread optimization may be dynamically disabled
|
||||
+ * via ext4_inode_block_unlocked_dio(). Check inode's state
|
||||
+ * while holding extra i_dio_count ref.
|
||||
+ */
|
||||
+ atomic_inc(&inode->i_dio_count);
|
||||
+ smp_mb();
|
||||
+ if (unlikely(ext4_test_inode_state(inode,
|
||||
+ EXT4_STATE_DIOREAD_LOCK))) {
|
||||
+ inode_dio_done(inode);
|
||||
+ goto locked;
|
||||
+ }
|
||||
ret = __blockdev_direct_IO(rw, iocb, inode,
|
||||
inode->i_sb->s_bdev, iov,
|
||||
offset, nr_segs,
|
||||
ext4_get_block, NULL, NULL, 0);
|
||||
+ inode_dio_done(inode);
|
||||
} else {
|
||||
+locked:
|
||||
ret = blockdev_direct_IO(rw, iocb, inode, iov,
|
||||
offset, nr_segs, ext4_get_block);
|
||||
|
||||
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
|
||||
index dd3fd23..2bd7526 100644
|
||||
--- a/fs/ext4/inode.c
|
||||
+++ b/fs/ext4/inode.c
|
||||
@@ -4706,6 +4706,10 @@ int ext4_change_inode_journal_flag(struct inode *inode, int val)
|
||||
return err;
|
||||
}
|
||||
|
||||
+ /* Wait for all existing dio workers */
|
||||
+ ext4_inode_block_unlocked_dio(inode);
|
||||
+ inode_dio_wait(inode);
|
||||
+
|
||||
jbd2_journal_lock_updates(journal);
|
||||
|
||||
/*
|
||||
@@ -4725,6 +4729,7 @@ int ext4_change_inode_journal_flag(struct inode *inode, int val)
|
||||
ext4_set_aops(inode);
|
||||
|
||||
jbd2_journal_unlock_updates(journal);
|
||||
+ ext4_inode_resume_unlocked_dio(inode);
|
||||
|
||||
/* Finally we can mark the inode as dirty. */
|
||||
|
||||
diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c
|
||||
index c5826c6..fd1e32e 100644
|
||||
--- a/fs/ext4/move_extent.c
|
||||
+++ b/fs/ext4/move_extent.c
|
||||
@@ -1214,6 +1214,12 @@ ext4_move_extents(struct file *o_filp, struct file *d_filp,
|
||||
/* Protect orig and donor inodes against a truncate */
|
||||
mext_inode_double_lock(orig_inode, donor_inode);
|
||||
|
||||
+ /* Wait for all existing dio workers */
|
||||
+ ext4_inode_block_unlocked_dio(orig_inode);
|
||||
+ ext4_inode_block_unlocked_dio(donor_inode);
|
||||
+ inode_dio_wait(orig_inode);
|
||||
+ inode_dio_wait(donor_inode);
|
||||
+
|
||||
/* Protect extent tree against block allocations via delalloc */
|
||||
double_down_write_data_sem(orig_inode, donor_inode);
|
||||
/* Check the filesystem environment whether move_extent can be done */
|
||||
@@ -1413,6 +1419,8 @@ out:
|
||||
kfree(holecheck_path);
|
||||
}
|
||||
double_up_write_data_sem(orig_inode, donor_inode);
|
||||
+ ext4_inode_resume_unlocked_dio(orig_inode);
|
||||
+ ext4_inode_resume_unlocked_dio(donor_inode);
|
||||
mext_inode_double_unlock(orig_inode, donor_inode);
|
||||
|
||||
return ret;
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
From 4c4679fc02744ec3955e88faf5e8b6844fa8cbd3 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Sat, 29 Sep 2012 00:55:23 -0400
|
||||
Subject: [PATCH 06/13] ext4: serialize unlocked dio reads with truncate
|
||||
|
||||
Current serialization will works only for DIO which holds
|
||||
i_mutex, but nonlocked DIO following race is possible:
|
||||
|
||||
dio_nolock_read_task truncate_task
|
||||
->ext4_setattr()
|
||||
->inode_dio_wait()
|
||||
->ext4_ext_direct_IO
|
||||
->ext4_ind_direct_IO
|
||||
->__blockdev_direct_IO
|
||||
->ext4_get_block
|
||||
->truncate_setsize()
|
||||
->ext4_truncate()
|
||||
#alloc truncated blocks
|
||||
#to other inode
|
||||
->submit_io()
|
||||
#INFORMATION LEAK
|
||||
|
||||
In order to serialize with unlocked DIO reads we have to
|
||||
rearrange wait sequence
|
||||
1) update i_size first
|
||||
2) if i_size about to be reduced wait for outstanding DIO requests
|
||||
3) and only after that truncate inode blocks
|
||||
|
||||
Reviewed-by: Jan Kara <jack@suse.cz>
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
(cherry picked from commit 1c9114f9c0f10f58dd7e568a7152025af47b27e5)
|
||||
---
|
||||
fs/ext4/inode.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
|
||||
index 2bd7526..b84322d 100644
|
||||
--- a/fs/ext4/inode.c
|
||||
+++ b/fs/ext4/inode.c
|
||||
@@ -4277,7 +4277,6 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
}
|
||||
|
||||
if (attr->ia_valid & ATTR_SIZE) {
|
||||
- inode_dio_wait(inode);
|
||||
|
||||
if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) {
|
||||
struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
|
||||
@@ -4326,8 +4325,12 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
}
|
||||
|
||||
if (attr->ia_valid & ATTR_SIZE) {
|
||||
- if (attr->ia_size != i_size_read(inode))
|
||||
+ if (attr->ia_size != i_size_read(inode)) {
|
||||
truncate_setsize(inode, attr->ia_size);
|
||||
+ /* Inode size will be reduced, wait for dio in flight */
|
||||
+ if (orphan)
|
||||
+ inode_dio_wait(inode);
|
||||
+ }
|
||||
ext4_truncate(inode);
|
||||
}
|
||||
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
From ab7b8a329e12369d58e5fa59ba2e2c90370f12ef Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Sat, 29 Sep 2012 00:56:15 -0400
|
||||
Subject: [PATCH 07/13] ext4: endless truncate due to nonlocked dio readers
|
||||
|
||||
If we have enough aggressive DIO readers, truncate and other dio
|
||||
waiters will wait forever inside inode_dio_wait(). It is reasonable
|
||||
to disable nonlock DIO read optimization during truncate.
|
||||
|
||||
Reviewed-by: Jan Kara <jack@suse.cz>
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
(cherry picked from commit 1b65007e9870e0021397b548e8cd6bbc584f9152)
|
||||
---
|
||||
fs/ext4/inode.c | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
|
||||
index b84322d..3b03dd6 100644
|
||||
--- a/fs/ext4/inode.c
|
||||
+++ b/fs/ext4/inode.c
|
||||
@@ -4327,9 +4327,14 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
if (attr->ia_valid & ATTR_SIZE) {
|
||||
if (attr->ia_size != i_size_read(inode)) {
|
||||
truncate_setsize(inode, attr->ia_size);
|
||||
- /* Inode size will be reduced, wait for dio in flight */
|
||||
- if (orphan)
|
||||
+ /* Inode size will be reduced, wait for dio in flight.
|
||||
+ * Temporarily disable dioread_nolock to prevent
|
||||
+ * livelock. */
|
||||
+ if (orphan) {
|
||||
+ ext4_inode_block_unlocked_dio(inode);
|
||||
inode_dio_wait(inode);
|
||||
+ ext4_inode_resume_unlocked_dio(inode);
|
||||
+ }
|
||||
}
|
||||
ext4_truncate(inode);
|
||||
}
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
From 69e4026a2d104ffcf1b935bc889f8abcbfbb29ec Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Sat, 29 Sep 2012 00:58:26 -0400
|
||||
Subject: [PATCH 08/13] ext4: serialize truncate with owerwrite DIO workers
|
||||
|
||||
Jan Kara have spotted interesting issue:
|
||||
There are potential data corruption issue with direct IO overwrites
|
||||
racing with truncate:
|
||||
Like:
|
||||
dio write truncate_task
|
||||
->ext4_ext_direct_IO
|
||||
->overwrite == 1
|
||||
->down_read(&EXT4_I(inode)->i_data_sem);
|
||||
->mutex_unlock(&inode->i_mutex);
|
||||
->ext4_setattr()
|
||||
->inode_dio_wait()
|
||||
->truncate_setsize()
|
||||
->ext4_truncate()
|
||||
->down_write(&EXT4_I(inode)->i_data_sem);
|
||||
->__blockdev_direct_IO
|
||||
->ext4_get_block
|
||||
->submit_io()
|
||||
->up_read(&EXT4_I(inode)->i_data_sem);
|
||||
# truncate data blocks, allocate them to
|
||||
# other inode - bad stuff happens because
|
||||
# dio is still in flight.
|
||||
|
||||
In order to serialize with truncate dio worker should grab extra i_dio_count
|
||||
reference before drop i_mutex.
|
||||
|
||||
Reviewed-by: Jan Kara <jack@suse.cz>
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
(cherry picked from commit 1f555cfa29e8f787d675e8390f88ce517a37271a)
|
||||
---
|
||||
fs/ext4/inode.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
|
||||
index 3b03dd6..484a327 100644
|
||||
--- a/fs/ext4/inode.c
|
||||
+++ b/fs/ext4/inode.c
|
||||
@@ -3008,6 +3008,7 @@ static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb,
|
||||
overwrite = *((int *)iocb->private);
|
||||
|
||||
if (overwrite) {
|
||||
+ atomic_inc(&inode->i_dio_count);
|
||||
down_read(&EXT4_I(inode)->i_data_sem);
|
||||
mutex_unlock(&inode->i_mutex);
|
||||
}
|
||||
@@ -3105,6 +3106,7 @@ static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb,
|
||||
retake_lock:
|
||||
/* take i_mutex locking again if we do a ovewrite dio */
|
||||
if (overwrite) {
|
||||
+ inode_dio_done(inode);
|
||||
up_read(&EXT4_I(inode)->i_data_sem);
|
||||
mutex_lock(&inode->i_mutex);
|
||||
}
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,125 @@
|
|||
From 71a6398a4b59ddcf920dfb68872b5a771c606e3a Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Sun, 30 Sep 2012 23:03:42 -0400
|
||||
Subject: [PATCH 09/13] ext4: punch_hole should wait for DIO writers
|
||||
|
||||
punch_hole is the place where we have to wait for all existing writers
|
||||
(writeback, aio, dio), but currently we simply flush pended end_io request
|
||||
which is not sufficient. Other issue is that punch_hole performed w/o i_mutex
|
||||
held which obviously result in dangerous data corruption due to
|
||||
write-after-free.
|
||||
|
||||
This patch performs following changes:
|
||||
- Guard punch_hole with i_mutex
|
||||
- Recheck inode flags under i_mutex
|
||||
- Block all new dio readers in order to prevent information leak caused by
|
||||
read-after-free pattern.
|
||||
- punch_hole now wait for all writers in flight
|
||||
NOTE: XXX write-after-free race is still possible because new dirty pages
|
||||
may appear due to mmap(), and currently there is no easy way to stop
|
||||
writeback while punch_hole is in progress.
|
||||
|
||||
[ Fixed error return from ext4_ext_punch_hole() to make sure that we
|
||||
release i_mutex before returning EPERM or ETXTBUSY -- Ted ]
|
||||
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
(cherry picked from commit 02d262dffcf4c74e5c4612ee736bdb94f18ed5b9)
|
||||
---
|
||||
fs/ext4/extents.c | 53 ++++++++++++++++++++++++++++++++++++-----------------
|
||||
1 file changed, 36 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
|
||||
index 1fbf2ff..202eb4d 100644
|
||||
--- a/fs/ext4/extents.c
|
||||
+++ b/fs/ext4/extents.c
|
||||
@@ -4776,9 +4776,32 @@ int ext4_ext_punch_hole(struct file *file, loff_t offset, loff_t length)
|
||||
loff_t first_page_offset, last_page_offset;
|
||||
int credits, err = 0;
|
||||
|
||||
+ /*
|
||||
+ * Write out all dirty pages to avoid race conditions
|
||||
+ * Then release them.
|
||||
+ */
|
||||
+ if (mapping->nrpages && mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
|
||||
+ err = filemap_write_and_wait_range(mapping,
|
||||
+ offset, offset + length - 1);
|
||||
+
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ mutex_lock(&inode->i_mutex);
|
||||
+ /* It's not possible punch hole on append only file */
|
||||
+ if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) {
|
||||
+ err = -EPERM;
|
||||
+ goto out_mutex;
|
||||
+ }
|
||||
+ if (IS_SWAPFILE(inode)) {
|
||||
+ err = -ETXTBSY;
|
||||
+ goto out_mutex;
|
||||
+ }
|
||||
+
|
||||
/* No need to punch hole beyond i_size */
|
||||
if (offset >= inode->i_size)
|
||||
- return 0;
|
||||
+ goto out_mutex;
|
||||
|
||||
/*
|
||||
* If the hole extends beyond i_size, set the hole
|
||||
@@ -4796,33 +4819,25 @@ int ext4_ext_punch_hole(struct file *file, loff_t offset, loff_t length)
|
||||
first_page_offset = first_page << PAGE_CACHE_SHIFT;
|
||||
last_page_offset = last_page << PAGE_CACHE_SHIFT;
|
||||
|
||||
- /*
|
||||
- * Write out all dirty pages to avoid race conditions
|
||||
- * Then release them.
|
||||
- */
|
||||
- if (mapping->nrpages && mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
|
||||
- err = filemap_write_and_wait_range(mapping,
|
||||
- offset, offset + length - 1);
|
||||
-
|
||||
- if (err)
|
||||
- return err;
|
||||
- }
|
||||
-
|
||||
/* Now release the pages */
|
||||
if (last_page_offset > first_page_offset) {
|
||||
truncate_pagecache_range(inode, first_page_offset,
|
||||
last_page_offset - 1);
|
||||
}
|
||||
|
||||
- /* finish any pending end_io work */
|
||||
+ /* Wait all existing dio workers, newcomers will block on i_mutex */
|
||||
+ ext4_inode_block_unlocked_dio(inode);
|
||||
+ inode_dio_wait(inode);
|
||||
err = ext4_flush_completed_IO(inode);
|
||||
if (err)
|
||||
- return err;
|
||||
+ goto out_dio;
|
||||
|
||||
credits = ext4_writepage_trans_blocks(inode);
|
||||
handle = ext4_journal_start(inode, credits);
|
||||
- if (IS_ERR(handle))
|
||||
- return PTR_ERR(handle);
|
||||
+ if (IS_ERR(handle)) {
|
||||
+ err = PTR_ERR(handle);
|
||||
+ goto out_dio;
|
||||
+ }
|
||||
|
||||
err = ext4_orphan_add(handle, inode);
|
||||
if (err)
|
||||
@@ -4916,6 +4931,10 @@ out:
|
||||
inode->i_mtime = inode->i_ctime = ext4_current_time(inode);
|
||||
ext4_mark_inode_dirty(handle, inode);
|
||||
ext4_journal_stop(handle);
|
||||
+out_dio:
|
||||
+ ext4_inode_resume_unlocked_dio(inode);
|
||||
+out_mutex:
|
||||
+ mutex_unlock(&inode->i_mutex);
|
||||
return err;
|
||||
}
|
||||
int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
From 66d08dd92b82dabfd64853aa4edde1547fdf9ef7 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Sun, 30 Sep 2012 23:03:50 -0400
|
||||
Subject: [PATCH 10/13] ext4: fix ext_remove_space for punch_hole case
|
||||
|
||||
Inode is allowed to have empty leaf only if it this is blockless inode.
|
||||
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
(cherry picked from commit 6f2080e64487b9963f9c6ff8a252e1abce98f2d4)
|
||||
---
|
||||
fs/ext4/extents.c | 16 +++++++++-------
|
||||
1 file changed, 9 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
|
||||
index 202eb4d..b1c92c0 100644
|
||||
--- a/fs/ext4/extents.c
|
||||
+++ b/fs/ext4/extents.c
|
||||
@@ -2572,7 +2572,7 @@ static int ext4_ext_remove_space(struct inode *inode, ext4_lblk_t start,
|
||||
struct ext4_ext_path *path = NULL;
|
||||
ext4_fsblk_t partial_cluster = 0;
|
||||
handle_t *handle;
|
||||
- int i = 0, err;
|
||||
+ int i = 0, err = 0;
|
||||
|
||||
ext_debug("truncate since %u to %u\n", start, end);
|
||||
|
||||
@@ -2604,12 +2604,16 @@ again:
|
||||
return PTR_ERR(path);
|
||||
}
|
||||
depth = ext_depth(inode);
|
||||
+ /* Leaf not may not exist only if inode has no blocks at all */
|
||||
ex = path[depth].p_ext;
|
||||
if (!ex) {
|
||||
- ext4_ext_drop_refs(path);
|
||||
- kfree(path);
|
||||
- path = NULL;
|
||||
- goto cont;
|
||||
+ if (depth) {
|
||||
+ EXT4_ERROR_INODE(inode,
|
||||
+ "path[%d].p_hdr == NULL",
|
||||
+ depth);
|
||||
+ err = -EIO;
|
||||
+ }
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
ee_block = le32_to_cpu(ex->ee_block);
|
||||
@@ -2641,8 +2645,6 @@ again:
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
-cont:
|
||||
-
|
||||
/*
|
||||
* We start scanning from right side, freeing all the blocks
|
||||
* after i_size and walking into the tree depth-wise.
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,176 @@
|
|||
From ca6d3910cbf8854f3f3b9846391f669733899101 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Fri, 5 Oct 2012 11:31:55 -0400
|
||||
Subject: [PATCH 11/13] ext4: fix ext4_flush_completed_IO wait semantics
|
||||
|
||||
BUG #1) All places where we call ext4_flush_completed_IO are broken
|
||||
because buffered io and DIO/AIO goes through three stages
|
||||
1) submitted io,
|
||||
2) completed io (in i_completed_io_list) conversion pended
|
||||
3) finished io (conversion done)
|
||||
And by calling ext4_flush_completed_IO we will flush only
|
||||
requests which were in (2) stage, which is wrong because:
|
||||
1) punch_hole and truncate _must_ wait for all outstanding unwritten io
|
||||
regardless to it's state.
|
||||
2) fsync and nolock_dio_read should also wait because there is
|
||||
a time window between end_page_writeback() and ext4_add_complete_io()
|
||||
As result integrity fsync is broken in case of buffered write
|
||||
to fallocated region:
|
||||
fsync blkdev_completion
|
||||
->filemap_write_and_wait_range
|
||||
->ext4_end_bio
|
||||
->end_page_writeback
|
||||
<-- filemap_write_and_wait_range return
|
||||
->ext4_flush_completed_IO
|
||||
sees empty i_completed_io_list but pended
|
||||
conversion still exist
|
||||
->ext4_add_complete_io
|
||||
|
||||
BUG #2) Race window becomes wider due to the 'ext4: completed_io
|
||||
locking cleanup V4' patch series
|
||||
|
||||
This patch make following changes:
|
||||
1) ext4_flush_completed_io() now first try to flush completed io and when
|
||||
wait for any outstanding unwritten io via ext4_unwritten_wait()
|
||||
2) Rename function to more appropriate name.
|
||||
3) Assert that all callers of ext4_flush_unwritten_io should hold i_mutex to
|
||||
prevent endless wait
|
||||
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
Reviewed-by: Jan Kara <jack@suse.cz>
|
||||
(cherry picked from commit c278531d39f3158bfee93dc67da0b77e09776de2)
|
||||
---
|
||||
fs/ext4/ext4.h | 3 ++-
|
||||
fs/ext4/extents.c | 6 +++---
|
||||
fs/ext4/file.c | 2 +-
|
||||
fs/ext4/fsync.c | 2 +-
|
||||
fs/ext4/indirect.c | 8 +++++---
|
||||
fs/ext4/page-io.c | 11 +++++++----
|
||||
6 files changed, 19 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
|
||||
index 3e740e9..7f13292 100644
|
||||
--- a/fs/ext4/ext4.h
|
||||
+++ b/fs/ext4/ext4.h
|
||||
@@ -1941,7 +1941,7 @@ extern void ext4_htree_free_dir_info(struct dir_private_info *p);
|
||||
|
||||
/* fsync.c */
|
||||
extern int ext4_sync_file(struct file *, loff_t, loff_t, int);
|
||||
-extern int ext4_flush_completed_IO(struct inode *);
|
||||
+extern int ext4_flush_unwritten_io(struct inode *);
|
||||
|
||||
/* hash.c */
|
||||
extern int ext4fs_dirhash(const char *name, int len, struct
|
||||
@@ -2361,6 +2361,7 @@ extern const struct file_operations ext4_dir_operations;
|
||||
extern const struct inode_operations ext4_file_inode_operations;
|
||||
extern const struct file_operations ext4_file_operations;
|
||||
extern loff_t ext4_llseek(struct file *file, loff_t offset, int origin);
|
||||
+extern void ext4_unwritten_wait(struct inode *inode);
|
||||
|
||||
/* namei.c */
|
||||
extern const struct inode_operations ext4_dir_inode_operations;
|
||||
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
|
||||
index b1c92c0..37f46eb 100644
|
||||
--- a/fs/ext4/extents.c
|
||||
+++ b/fs/ext4/extents.c
|
||||
@@ -4250,7 +4250,7 @@ void ext4_ext_truncate(struct inode *inode)
|
||||
* finish any pending end_io work so we won't run the risk of
|
||||
* converting any truncated blocks to initialized later
|
||||
*/
|
||||
- ext4_flush_completed_IO(inode);
|
||||
+ ext4_flush_unwritten_io(inode);
|
||||
|
||||
/*
|
||||
* probably first extent we're gonna free will be last in block
|
||||
@@ -4829,10 +4829,10 @@ int ext4_ext_punch_hole(struct file *file, loff_t offset, loff_t length)
|
||||
|
||||
/* Wait all existing dio workers, newcomers will block on i_mutex */
|
||||
ext4_inode_block_unlocked_dio(inode);
|
||||
- inode_dio_wait(inode);
|
||||
- err = ext4_flush_completed_IO(inode);
|
||||
+ err = ext4_flush_unwritten_io(inode);
|
||||
if (err)
|
||||
goto out_dio;
|
||||
+ inode_dio_wait(inode);
|
||||
|
||||
credits = ext4_writepage_trans_blocks(inode);
|
||||
handle = ext4_journal_start(inode, credits);
|
||||
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
|
||||
index 39335bd..ca6f07a 100644
|
||||
--- a/fs/ext4/file.c
|
||||
+++ b/fs/ext4/file.c
|
||||
@@ -55,7 +55,7 @@ static int ext4_release_file(struct inode *inode, struct file *filp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void ext4_unwritten_wait(struct inode *inode)
|
||||
+void ext4_unwritten_wait(struct inode *inode)
|
||||
{
|
||||
wait_queue_head_t *wq = ext4_ioend_wq(inode);
|
||||
|
||||
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
|
||||
index 520b058..76051c6 100644
|
||||
--- a/fs/ext4/fsync.c
|
||||
+++ b/fs/ext4/fsync.c
|
||||
@@ -138,7 +138,7 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
||||
if (inode->i_sb->s_flags & MS_RDONLY)
|
||||
goto out;
|
||||
|
||||
- ret = ext4_flush_completed_IO(inode);
|
||||
+ ret = ext4_flush_unwritten_io(inode);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c
|
||||
index 8d849da..792e388 100644
|
||||
--- a/fs/ext4/indirect.c
|
||||
+++ b/fs/ext4/indirect.c
|
||||
@@ -807,9 +807,11 @@ ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb,
|
||||
|
||||
retry:
|
||||
if (rw == READ && ext4_should_dioread_nolock(inode)) {
|
||||
- if (unlikely(!list_empty(&ei->i_completed_io_list)))
|
||||
- ext4_flush_completed_IO(inode);
|
||||
-
|
||||
+ if (unlikely(atomic_read(&EXT4_I(inode)->i_unwritten))) {
|
||||
+ mutex_lock(&inode->i_mutex);
|
||||
+ ext4_flush_unwritten_io(inode);
|
||||
+ mutex_unlock(&inode->i_mutex);
|
||||
+ }
|
||||
/*
|
||||
* Nolock dioread optimization may be dynamically disabled
|
||||
* via ext4_inode_block_unlocked_dio(). Check inode's state
|
||||
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
|
||||
index 5b24c40..68e896e 100644
|
||||
--- a/fs/ext4/page-io.c
|
||||
+++ b/fs/ext4/page-io.c
|
||||
@@ -189,8 +189,6 @@ static int ext4_do_flush_completed_IO(struct inode *inode,
|
||||
|
||||
list_add_tail(&io->list, &complete);
|
||||
}
|
||||
- /* It is important to update all flags for all end_io in one shot w/o
|
||||
- * dropping the lock.*/
|
||||
spin_lock_irqsave(&ei->i_completed_io_lock, flags);
|
||||
while (!list_empty(&complete)) {
|
||||
io = list_entry(complete.next, ext4_io_end_t, list);
|
||||
@@ -228,9 +226,14 @@ static void ext4_end_io_work(struct work_struct *work)
|
||||
ext4_do_flush_completed_IO(io->inode, io);
|
||||
}
|
||||
|
||||
-int ext4_flush_completed_IO(struct inode *inode)
|
||||
+int ext4_flush_unwritten_io(struct inode *inode)
|
||||
{
|
||||
- return ext4_do_flush_completed_IO(inode, NULL);
|
||||
+ int ret;
|
||||
+ WARN_ON_ONCE(!mutex_is_locked(&inode->i_mutex) &&
|
||||
+ !(inode->i_state & I_FREEING));
|
||||
+ ret = ext4_do_flush_completed_IO(inode, NULL);
|
||||
+ ext4_unwritten_wait(inode);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
ext4_io_end_t *ext4_init_io_end(struct inode *inode, gfp_t flags)
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
From 9f00d109efeaf4d12d56c8e46cd13af80e344f97 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Fri, 5 Oct 2012 11:32:02 -0400
|
||||
Subject: [PATCH 12/13] ext4: serialize fallocate with
|
||||
ext4_convert_unwritten_extents
|
||||
|
||||
Fallocate should wait for pended ext4_convert_unwritten_extents()
|
||||
otherwise following race may happen:
|
||||
|
||||
ftruncate( ,12288);
|
||||
fallocate( ,0, 4096)
|
||||
io_sibmit( ,0, 4096); /* Write to fallocated area, split extent if needed */
|
||||
fallocate( ,0, 8192); /* Grow extent and broke assumption about extent */
|
||||
|
||||
Later kwork completion will do:
|
||||
->ext4_convert_unwritten_extents (0, 4096)
|
||||
->ext4_map_blocks(handle, inode, &map, EXT4_GET_BLOCKS_IO_CONVERT_EXT);
|
||||
->ext4_ext_map_blocks() /* Will find new extent: ex = [0,2] !!!!!! */
|
||||
->ext4_ext_handle_uninitialized_extents()
|
||||
->ext4_convert_unwritten_extents_endio()
|
||||
/* convert [0,2] extent to initialized, but only[0,1] was written */
|
||||
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
(cherry picked from commit 60d4616f3dc63371b3dc367e5e88fd4b4f037f65)
|
||||
---
|
||||
fs/ext4/extents.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
|
||||
index 37f46eb..ea2db86 100644
|
||||
--- a/fs/ext4/extents.c
|
||||
+++ b/fs/ext4/extents.c
|
||||
@@ -4410,6 +4410,9 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
|
||||
*/
|
||||
if (len <= EXT_UNINIT_MAX_LEN << blkbits)
|
||||
flags |= EXT4_GET_BLOCKS_NO_NORMALIZE;
|
||||
+
|
||||
+ /* Prevent race condition between unwritten */
|
||||
+ ext4_flush_unwritten_io(inode);
|
||||
retry:
|
||||
while (ret >= 0 && ret < max_blocks) {
|
||||
map.m_lblk = map.m_lblk + ret;
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,153 @@
|
|||
From 5ff6b4cc64765e10df509a60e902561efdeb58d5 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
Date: Fri, 5 Oct 2012 11:32:04 -0400
|
||||
Subject: [PATCH 13/13] ext4: race-condition protection for
|
||||
ext4_convert_unwritten_extents_endio
|
||||
|
||||
We assumed that at the time we call ext4_convert_unwritten_extents_endio()
|
||||
extent in question is fully inside [map.m_lblk, map->m_len] because
|
||||
it was already split during submission. But this may not be true due to
|
||||
a race between writeback vs fallocate.
|
||||
|
||||
If extent in question is larger than requested we will split it again.
|
||||
Special precautions should being done if zeroout required because
|
||||
[map.m_lblk, map->m_len] already contains valid data.
|
||||
|
||||
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
|
||||
(cherry picked from commit 0d4b4ff5282d07a4f83b87b3117cd898b0a3f673)
|
||||
---
|
||||
fs/ext4/extents.c | 57 ++++++++++++++++++++++++++++++++++++++++++++-----------
|
||||
1 file changed, 46 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
|
||||
index ea2db86..ee0d61c 100644
|
||||
--- a/fs/ext4/extents.c
|
||||
+++ b/fs/ext4/extents.c
|
||||
@@ -52,6 +52,9 @@
|
||||
#define EXT4_EXT_MARK_UNINIT1 0x2 /* mark first half uninitialized */
|
||||
#define EXT4_EXT_MARK_UNINIT2 0x4 /* mark second half uninitialized */
|
||||
|
||||
+#define EXT4_EXT_DATA_VALID1 0x8 /* first half contains valid data */
|
||||
+#define EXT4_EXT_DATA_VALID2 0x10 /* second half contains valid data */
|
||||
+
|
||||
static __le32 ext4_extent_block_csum(struct inode *inode,
|
||||
struct ext4_extent_header *eh)
|
||||
{
|
||||
@@ -2897,6 +2900,9 @@ static int ext4_split_extent_at(handle_t *handle,
|
||||
unsigned int ee_len, depth;
|
||||
int err = 0;
|
||||
|
||||
+ BUG_ON((split_flag & (EXT4_EXT_DATA_VALID1 | EXT4_EXT_DATA_VALID2)) ==
|
||||
+ (EXT4_EXT_DATA_VALID1 | EXT4_EXT_DATA_VALID2));
|
||||
+
|
||||
ext_debug("ext4_split_extents_at: inode %lu, logical"
|
||||
"block %llu\n", inode->i_ino, (unsigned long long)split);
|
||||
|
||||
@@ -2955,7 +2961,14 @@ static int ext4_split_extent_at(handle_t *handle,
|
||||
|
||||
err = ext4_ext_insert_extent(handle, inode, path, &newex, flags);
|
||||
if (err == -ENOSPC && (EXT4_EXT_MAY_ZEROOUT & split_flag)) {
|
||||
- err = ext4_ext_zeroout(inode, &orig_ex);
|
||||
+ if (split_flag & (EXT4_EXT_DATA_VALID1|EXT4_EXT_DATA_VALID2)) {
|
||||
+ if (split_flag & EXT4_EXT_DATA_VALID1)
|
||||
+ err = ext4_ext_zeroout(inode, ex2);
|
||||
+ else
|
||||
+ err = ext4_ext_zeroout(inode, ex);
|
||||
+ } else
|
||||
+ err = ext4_ext_zeroout(inode, &orig_ex);
|
||||
+
|
||||
if (err)
|
||||
goto fix_extent_len;
|
||||
/* update the extent length and mark as initialized */
|
||||
@@ -3008,12 +3021,13 @@ static int ext4_split_extent(handle_t *handle,
|
||||
uninitialized = ext4_ext_is_uninitialized(ex);
|
||||
|
||||
if (map->m_lblk + map->m_len < ee_block + ee_len) {
|
||||
- split_flag1 = split_flag & EXT4_EXT_MAY_ZEROOUT ?
|
||||
- EXT4_EXT_MAY_ZEROOUT : 0;
|
||||
+ split_flag1 = split_flag & EXT4_EXT_MAY_ZEROOUT;
|
||||
flags1 = flags | EXT4_GET_BLOCKS_PRE_IO;
|
||||
if (uninitialized)
|
||||
split_flag1 |= EXT4_EXT_MARK_UNINIT1 |
|
||||
EXT4_EXT_MARK_UNINIT2;
|
||||
+ if (split_flag & EXT4_EXT_DATA_VALID2)
|
||||
+ split_flag1 |= EXT4_EXT_DATA_VALID1;
|
||||
err = ext4_split_extent_at(handle, inode, path,
|
||||
map->m_lblk + map->m_len, split_flag1, flags1);
|
||||
if (err)
|
||||
@@ -3026,8 +3040,8 @@ static int ext4_split_extent(handle_t *handle,
|
||||
return PTR_ERR(path);
|
||||
|
||||
if (map->m_lblk >= ee_block) {
|
||||
- split_flag1 = split_flag & EXT4_EXT_MAY_ZEROOUT ?
|
||||
- EXT4_EXT_MAY_ZEROOUT : 0;
|
||||
+ split_flag1 = split_flag & (EXT4_EXT_MAY_ZEROOUT |
|
||||
+ EXT4_EXT_DATA_VALID2);
|
||||
if (uninitialized)
|
||||
split_flag1 |= EXT4_EXT_MARK_UNINIT1;
|
||||
if (split_flag & EXT4_EXT_MARK_UNINIT2)
|
||||
@@ -3305,26 +3319,47 @@ static int ext4_split_unwritten_extents(handle_t *handle,
|
||||
|
||||
split_flag |= ee_block + ee_len <= eof_block ? EXT4_EXT_MAY_ZEROOUT : 0;
|
||||
split_flag |= EXT4_EXT_MARK_UNINIT2;
|
||||
-
|
||||
+ if (flags & EXT4_GET_BLOCKS_CONVERT)
|
||||
+ split_flag |= EXT4_EXT_DATA_VALID2;
|
||||
flags |= EXT4_GET_BLOCKS_PRE_IO;
|
||||
return ext4_split_extent(handle, inode, path, map, split_flag, flags);
|
||||
}
|
||||
|
||||
static int ext4_convert_unwritten_extents_endio(handle_t *handle,
|
||||
- struct inode *inode,
|
||||
- struct ext4_ext_path *path)
|
||||
+ struct inode *inode,
|
||||
+ struct ext4_map_blocks *map,
|
||||
+ struct ext4_ext_path *path)
|
||||
{
|
||||
struct ext4_extent *ex;
|
||||
+ ext4_lblk_t ee_block;
|
||||
+ unsigned int ee_len;
|
||||
int depth;
|
||||
int err = 0;
|
||||
|
||||
depth = ext_depth(inode);
|
||||
ex = path[depth].p_ext;
|
||||
+ ee_block = le32_to_cpu(ex->ee_block);
|
||||
+ ee_len = ext4_ext_get_actual_len(ex);
|
||||
|
||||
ext_debug("ext4_convert_unwritten_extents_endio: inode %lu, logical"
|
||||
"block %llu, max_blocks %u\n", inode->i_ino,
|
||||
- (unsigned long long)le32_to_cpu(ex->ee_block),
|
||||
- ext4_ext_get_actual_len(ex));
|
||||
+ (unsigned long long)ee_block, ee_len);
|
||||
+
|
||||
+ /* If extent is larger than requested then split is required */
|
||||
+ if (ee_block != map->m_lblk || ee_len > map->m_len) {
|
||||
+ err = ext4_split_unwritten_extents(handle, inode, map, path,
|
||||
+ EXT4_GET_BLOCKS_CONVERT);
|
||||
+ if (err < 0)
|
||||
+ goto out;
|
||||
+ ext4_ext_drop_refs(path);
|
||||
+ path = ext4_ext_find_extent(inode, map->m_lblk, path);
|
||||
+ if (IS_ERR(path)) {
|
||||
+ err = PTR_ERR(path);
|
||||
+ goto out;
|
||||
+ }
|
||||
+ depth = ext_depth(inode);
|
||||
+ ex = path[depth].p_ext;
|
||||
+ }
|
||||
|
||||
err = ext4_ext_get_access(handle, inode, path + depth);
|
||||
if (err)
|
||||
@@ -3634,7 +3669,7 @@ ext4_ext_handle_uninitialized_extents(handle_t *handle, struct inode *inode,
|
||||
}
|
||||
/* IO end_io complete, convert the filled extent to written */
|
||||
if ((flags & EXT4_GET_BLOCKS_CONVERT)) {
|
||||
- ret = ext4_convert_unwritten_extents_endio(handle, inode,
|
||||
+ ret = ext4_convert_unwritten_extents_endio(handle, inode, map,
|
||||
path);
|
||||
if (ret >= 0) {
|
||||
ext4_update_inode_fsync_trans(handle, inode, 1);
|
||||
--
|
||||
1.7.12.rc0.22.gcdd159b
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From 01ffc0a7f1c1801a2354719dedbc32aff45b987d Mon Sep 17 00:00:00 2001
|
||||
From: David Woodhouse <dwmw2@infradead.org>
|
||||
Date: Sat, 24 Nov 2012 12:11:21 +0000
|
||||
Subject: [PATCH] 8139cp: re-enable interrupts after tx timeout
|
||||
|
||||
Recovery doesn't work too well if we leave interrupts disabled...
|
||||
|
||||
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
|
||||
Acked-by: Francois Romieu <romieu@fr.zoreil.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/realtek/8139cp.c | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
|
||||
index 3de318d..6cb96b4 100644
|
||||
--- a/drivers/net/ethernet/realtek/8139cp.c
|
||||
+++ b/drivers/net/ethernet/realtek/8139cp.c
|
||||
@@ -1219,6 +1219,7 @@ static void cp_tx_timeout(struct net_device *dev)
|
||||
cp_clean_rings(cp);
|
||||
rc = cp_init_rings(cp);
|
||||
cp_start_hw(cp);
|
||||
+ cp_enable_irq(cp);
|
||||
|
||||
netif_wake_queue(dev);
|
||||
|
||||
--
|
||||
1.7.6.5
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
From b26623dab7eeb1e9f5898c7a49458789dd492f20 Mon Sep 17 00:00:00 2001
|
||||
From: Francois Romieu <romieu@fr.zoreil.com>
|
||||
Date: Wed, 21 Nov 2012 10:07:29 +0000
|
||||
Subject: 8139cp: revert "set ring address before enabling receiver"
|
||||
|
||||
From: Francois Romieu <romieu@fr.zoreil.com>
|
||||
|
||||
commit b26623dab7eeb1e9f5898c7a49458789dd492f20 upstream.
|
||||
|
||||
This patch reverts b01af4579ec41f48e9b9c774e70bd6474ad210db.
|
||||
|
||||
The original patch was tested with emulated hardware. Real
|
||||
hardware chokes.
|
||||
|
||||
Fixes https://bugzilla.kernel.org/show_bug.cgi?id=47041
|
||||
|
||||
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
|
||||
Acked-by: Jeff Garzik <jgarzik@redhat.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: CAI Qian <caiqian@redhat.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/net/ethernet/realtek/8139cp.c | 22 +++++++++++-----------
|
||||
1 file changed, 11 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/realtek/8139cp.c
|
||||
+++ b/drivers/net/ethernet/realtek/8139cp.c
|
||||
@@ -979,17 +979,6 @@ static void cp_init_hw (struct cp_privat
|
||||
cpw32_f (MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0)));
|
||||
cpw32_f (MAC0 + 4, le32_to_cpu (*(__le32 *) (dev->dev_addr + 4)));
|
||||
|
||||
- cpw32_f(HiTxRingAddr, 0);
|
||||
- cpw32_f(HiTxRingAddr + 4, 0);
|
||||
-
|
||||
- ring_dma = cp->ring_dma;
|
||||
- cpw32_f(RxRingAddr, ring_dma & 0xffffffff);
|
||||
- cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16);
|
||||
-
|
||||
- ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE;
|
||||
- cpw32_f(TxRingAddr, ring_dma & 0xffffffff);
|
||||
- cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16);
|
||||
-
|
||||
cp_start_hw(cp);
|
||||
cpw8(TxThresh, 0x06); /* XXX convert magic num to a constant */
|
||||
|
||||
@@ -1003,6 +992,17 @@ static void cp_init_hw (struct cp_privat
|
||||
|
||||
cpw8(Config5, cpr8(Config5) & PMEStatus);
|
||||
|
||||
+ cpw32_f(HiTxRingAddr, 0);
|
||||
+ cpw32_f(HiTxRingAddr + 4, 0);
|
||||
+
|
||||
+ ring_dma = cp->ring_dma;
|
||||
+ cpw32_f(RxRingAddr, ring_dma & 0xffffffff);
|
||||
+ cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16);
|
||||
+
|
||||
+ ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE;
|
||||
+ cpw32_f(TxRingAddr, ring_dma & 0xffffffff);
|
||||
+ cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16);
|
||||
+
|
||||
cpw16(MultiIntr, 0);
|
||||
|
||||
cpw8_f(Cfg9346, Cfg9346_Lock);
|
|
@ -0,0 +1,100 @@
|
|||
From a9dbe40fc10cea2efe6e1ff9e03c62dd7579c5ba Mon Sep 17 00:00:00 2001
|
||||
From: David Woodhouse <dwmw2@infradead.org>
|
||||
Date: Wed, 21 Nov 2012 10:27:19 +0000
|
||||
Subject: [PATCH] 8139cp: set ring address after enabling C+ mode
|
||||
|
||||
This fixes (for me) a regression introduced by commit b01af457 ("8139cp:
|
||||
set ring address before enabling receiver"). That commit configured the
|
||||
descriptor ring addresses earlier in the initialisation sequence, in
|
||||
order to avoid the possibility of triggering stray DMA before the
|
||||
correct address had been set up.
|
||||
|
||||
Unfortunately, it seems that the hardware will scribble garbage into the
|
||||
TxRingAddr registers when we enable "plus mode" Tx in the CpCmd
|
||||
register. Observed on a Traverse Geos router board.
|
||||
|
||||
To deal with this, while not reintroducing the problem which led to the
|
||||
original commit, we augment cp_start_hw() to write to the CpCmd register
|
||||
*first*, then set the descriptor ring addresses, and then finally to
|
||||
enable Rx and Tx in the original 8139 Cmd register. The datasheet
|
||||
actually indicates that we should enable Tx/Rx in the Cmd register
|
||||
*before* configuring the descriptor addresses, but that would appear to
|
||||
re-introduce the problem that the offending commit b01af457 was trying
|
||||
to solve. And this variant appears to work fine on real hardware.
|
||||
|
||||
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
|
||||
Cc: stable@kernel.org [3.5+]
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/realtek/8139cp.c | 40 +++++++++++++++++++++++----------
|
||||
1 files changed, 28 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
|
||||
index 1c81825..5166d94 100644
|
||||
--- a/drivers/net/ethernet/realtek/8139cp.c
|
||||
+++ b/drivers/net/ethernet/realtek/8139cp.c
|
||||
@@ -957,7 +957,35 @@ static void cp_reset_hw (struct cp_private *cp)
|
||||
|
||||
static inline void cp_start_hw (struct cp_private *cp)
|
||||
{
|
||||
+ dma_addr_t ring_dma;
|
||||
+
|
||||
cpw16(CpCmd, cp->cpcmd);
|
||||
+
|
||||
+ /*
|
||||
+ * These (at least TxRingAddr) need to be configured after the
|
||||
+ * corresponding bits in CpCmd are enabled. Datasheet v1.6 §6.33
|
||||
+ * (C+ Command Register) recommends that these and more be configured
|
||||
+ * *after* the [RT]xEnable bits in CpCmd are set. And on some hardware
|
||||
+ * it's been observed that the TxRingAddr is actually reset to garbage
|
||||
+ * when C+ mode Tx is enabled in CpCmd.
|
||||
+ */
|
||||
+ cpw32_f(HiTxRingAddr, 0);
|
||||
+ cpw32_f(HiTxRingAddr + 4, 0);
|
||||
+
|
||||
+ ring_dma = cp->ring_dma;
|
||||
+ cpw32_f(RxRingAddr, ring_dma & 0xffffffff);
|
||||
+ cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16);
|
||||
+
|
||||
+ ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE;
|
||||
+ cpw32_f(TxRingAddr, ring_dma & 0xffffffff);
|
||||
+ cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16);
|
||||
+
|
||||
+ /*
|
||||
+ * Strictly speaking, the datasheet says this should be enabled
|
||||
+ * *before* setting the descriptor addresses. But what, then, would
|
||||
+ * prevent it from doing DMA to random unconfigured addresses?
|
||||
+ * This variant appears to work fine.
|
||||
+ */
|
||||
cpw8(Cmd, RxOn | TxOn);
|
||||
}
|
||||
|
||||
@@ -969,7 +997,6 @@ static void cp_enable_irq(struct cp_private *cp)
|
||||
static void cp_init_hw (struct cp_private *cp)
|
||||
{
|
||||
struct net_device *dev = cp->dev;
|
||||
- dma_addr_t ring_dma;
|
||||
|
||||
cp_reset_hw(cp);
|
||||
|
||||
@@ -979,17 +1006,6 @@ static void cp_init_hw (struct cp_private *cp)
|
||||
cpw32_f (MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0)));
|
||||
cpw32_f (MAC0 + 4, le32_to_cpu (*(__le32 *) (dev->dev_addr + 4)));
|
||||
|
||||
- cpw32_f(HiTxRingAddr, 0);
|
||||
- cpw32_f(HiTxRingAddr + 4, 0);
|
||||
-
|
||||
- ring_dma = cp->ring_dma;
|
||||
- cpw32_f(RxRingAddr, ring_dma & 0xffffffff);
|
||||
- cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16);
|
||||
-
|
||||
- ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE;
|
||||
- cpw32_f(TxRingAddr, ring_dma & 0xffffffff);
|
||||
- cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16);
|
||||
-
|
||||
cp_start_hw(cp);
|
||||
cpw8(TxThresh, 0x06); /* XXX convert magic num to a constant */
|
||||
|
||||
--
|
||||
1.7.6.5
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
From b7e383046c2c7c13ad928cd7407eafff758ddd4b Mon Sep 17 00:00:00 2001
|
||||
From: Zhang Rui <rui.zhang@intel.com>
|
||||
Date: Tue, 4 Dec 2012 23:23:16 +0100
|
||||
Subject: [PATCH] ACPI : do not use Lid and Sleep button for S5 wakeup
|
||||
|
||||
When system enters power off, the _PSW of Lid device is enabled.
|
||||
But this may cause the system to reboot instead of power off.
|
||||
|
||||
A proper way to fix this is to always disable lid wakeup capability for S5.
|
||||
|
||||
References: https://bugzilla.kernel.org/show_bug.cgi?id=35262
|
||||
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/scan.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
|
||||
index d0b38ab..bd523bf 100644
|
||||
--- a/drivers/acpi/scan.c
|
||||
+++ b/drivers/acpi/scan.c
|
||||
@@ -917,8 +917,8 @@ acpi_bus_extract_wakeup_device_power_package(acpi_handle handle,
|
||||
static void acpi_bus_set_run_wake_flags(struct acpi_device *device)
|
||||
{
|
||||
struct acpi_device_id button_device_ids[] = {
|
||||
- {"PNP0C0D", 0},
|
||||
{"PNP0C0C", 0},
|
||||
+ {"PNP0C0D", 0},
|
||||
{"PNP0C0E", 0},
|
||||
{"", 0},
|
||||
};
|
||||
@@ -930,6 +930,11 @@ static void acpi_bus_set_run_wake_flags(struct acpi_device *device)
|
||||
/* Power button, Lid switch always enable wakeup */
|
||||
if (!acpi_match_device_ids(device, button_device_ids)) {
|
||||
device->wakeup.flags.run_wake = 1;
|
||||
+ if (!acpi_match_device_ids(device, &button_device_ids[1])) {
|
||||
+ /* Do not use Lid/sleep button for S5 wakeup */
|
||||
+ if (device->wakeup.sleep_state == ACPI_STATE_S5)
|
||||
+ device->wakeup.sleep_state = ACPI_STATE_S4;
|
||||
+ }
|
||||
device_set_wakeup_capable(&device->dev, true);
|
||||
return;
|
||||
}
|
||||
--
|
||||
1.8.0.1
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
From 7f198e1cc6d4fda9c84c0da4fc3aafb441342f78 Mon Sep 17 00:00:00 2001
|
||||
From: Jaroslav Resler <resler@cs.cas.cz>
|
||||
Date: Tue, 11 Sep 2012 17:25:32 +0800
|
||||
Subject: [PATCH 1/2] Bluetooth: Add support for BCM20702A0 [04ca, 2003]
|
||||
|
||||
Add another vendor specific ID for BCM20702A0.
|
||||
|
||||
output of usb-devices:
|
||||
T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=02 Dev#= 4 Spd=12 MxCh= 0
|
||||
D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
|
||||
P: Vendor=04ca ProdID=2003 Rev= 1.12
|
||||
S: Manufacturer=Broadcom Corp
|
||||
S: Product=BCM20702A0
|
||||
S: SerialNumber=446D57861623
|
||||
C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr= 0mA
|
||||
I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
|
||||
E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
|
||||
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
|
||||
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
|
||||
I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
|
||||
E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
|
||||
E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
|
||||
I: If#= 1 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
|
||||
E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
|
||||
E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
|
||||
I: If#= 1 Alt= 2 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
|
||||
E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
|
||||
E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
|
||||
I: If#= 1 Alt= 3 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
|
||||
E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
|
||||
E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
|
||||
I: If#= 1 Alt= 4 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
|
||||
E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
|
||||
E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
|
||||
I: If#= 1 Alt= 5 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
|
||||
E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
|
||||
E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
|
||||
I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
|
||||
E: Ad=84(I) Atr=02(Bulk) MxPS= 32 Ivl=0ms
|
||||
E: Ad=04(O) Atr=02(Bulk) MxPS= 32 Ivl=0ms
|
||||
I:* If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
|
||||
|
||||
Signed-off-by: Cho, Yu-Chen <acho@suse.com>
|
||||
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
|
||||
---
|
||||
drivers/bluetooth/btusb.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
|
||||
index 654e248..b167944 100644
|
||||
--- a/drivers/bluetooth/btusb.c
|
||||
+++ b/drivers/bluetooth/btusb.c
|
||||
@@ -96,6 +96,7 @@ static struct usb_device_id btusb_table[] = {
|
||||
{ USB_DEVICE(0x0c10, 0x0000) },
|
||||
|
||||
/* Broadcom BCM20702A0 */
|
||||
+ { USB_DEVICE(0x04ca, 0x2003) },
|
||||
{ USB_DEVICE(0x0489, 0xe042) },
|
||||
{ USB_DEVICE(0x413c, 0x8197) },
|
||||
|
||||
--
|
||||
1.8.0
|
||||
|
||||
|
||||
From a5f86c3423428c8e28b6501d0e9c3929ca91f07d Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Cook <jeff@deserettechnology.com>
|
||||
Date: Fri, 9 Nov 2012 16:39:48 -0700
|
||||
Subject: [PATCH 2/2] Bluetooth: Add support for BCM20702A0 [0b05, 17b5]
|
||||
|
||||
Vendor-specific ID for BCM20702A0.
|
||||
Support for bluetooth over Asus Wi-Fi GO!, included with Asus P8Z77-V
|
||||
Deluxe.
|
||||
|
||||
T: Bus=07 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
|
||||
D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
|
||||
P: Vendor=0b05 ProdID=17b5 Rev=01.12
|
||||
S: Manufacturer=Broadcom Corp
|
||||
S: Product=BCM20702A0
|
||||
S: SerialNumber=94DBC98AC113
|
||||
C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
|
||||
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
|
||||
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
|
||||
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
|
||||
I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Jeff Cook <jeff@deserettechnology.com>
|
||||
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
|
||||
---
|
||||
drivers/bluetooth/btusb.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
|
||||
index b167944..6dc44ff 100644
|
||||
--- a/drivers/bluetooth/btusb.c
|
||||
+++ b/drivers/bluetooth/btusb.c
|
||||
@@ -96,6 +96,7 @@ static struct usb_device_id btusb_table[] = {
|
||||
{ USB_DEVICE(0x0c10, 0x0000) },
|
||||
|
||||
/* Broadcom BCM20702A0 */
|
||||
+ { USB_DEVICE(0x0b05, 0x17b5) },
|
||||
{ USB_DEVICE(0x04ca, 0x2003) },
|
||||
{ USB_DEVICE(0x0489, 0xe042) },
|
||||
{ USB_DEVICE(0x413c, 0x8197) },
|
||||
--
|
||||
1.8.0
|
||||
|
193
Makefile
193
Makefile
|
@ -17,15 +17,16 @@ help:
|
|||
|
||||
include Makefile.config
|
||||
|
||||
ifndef KVERSION
|
||||
KVERSION := $(shell awk '$$1 == "%define" && $$2 == "base_sublevel" { \
|
||||
print "2.6." $$3 \
|
||||
}' $(SPECFILE))
|
||||
endif
|
||||
|
||||
prep:
|
||||
fedpkg -v prep --arch=$(PREPARCH)
|
||||
|
||||
noarch:
|
||||
fedpkg -v local --arch=noarch
|
||||
|
||||
# 'make local' also needs to build the noarch firmware package
|
||||
local: noarch
|
||||
fedpkg -v local
|
||||
|
||||
extremedebug:
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_PAGEALLOC is not set/CONFIG_DEBUG_PAGEALLOC=y/' config-nodebug
|
||||
|
||||
|
@ -36,18 +37,17 @@ debug:
|
|||
@perl -pi -e 's/# CONFIG_DEBUG_SLAB is not set/CONFIG_DEBUG_SLAB=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_MUTEXES is not set/CONFIG_DEBUG_MUTEXES=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_RT_MUTEXES is not set/CONFIG_DEBUG_RT_MUTEXES=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_RWSEMS is not set/CONFIG_DEBUG_RWSEMS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_LOCK_ALLOC is not set/CONFIG_DEBUG_LOCK_ALLOC=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_PROVE_LOCKING is not set/CONFIG_PROVE_LOCKING=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_PROVE_RCU is not set/CONFIG_PROVE_RCU=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_SPINLOCK is not set/CONFIG_DEBUG_SPINLOCK=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_VM is not set/CONFIG_DEBUG_VM=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_SLEEP_IN_IRQ is not set/CONFIG_DEBUG_SLEEP_IN_IRQ=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_FAULT_INJECTION is not set/CONFIG_FAULT_INJECTION=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_FAILSLAB is not set/CONFIG_FAILSLAB=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_FAIL_PAGE_ALLOC is not set/CONFIG_FAIL_PAGE_ALLOC=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_FAIL_IO_TIMEOUT is not set/CONFIG_FAIL_IO_TIMEOUT=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_FAIL_MAKE_REQUEST is not set/CONFIG_FAIL_MAKE_REQUEST=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_FAIL_MMC_REQUEST is not set/CONFIG_FAIL_MMC_REQUEST=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_FAULT_INJECTION_DEBUG_FS is not set/CONFIG_FAULT_INJECTION_DEBUG_FS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set/CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_SG is not set/CONFIG_DEBUG_SG=y/' config-nodebug
|
||||
|
@ -66,7 +66,6 @@ debug:
|
|||
@perl -pi -e 's/# CONFIG_DMA_API_DEBUG is not set/CONFIG_DMA_API_DEBUG=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_PM_TEST_SUSPEND is not set/CONFIG_PM_TEST_SUSPEND=y/' config-generic
|
||||
@perl -pi -e 's/# CONFIG_PM_ADVANCED_DEBUG is not set/CONFIG_PM_ADVANCED_DEBUG=y/' config-generic
|
||||
@perl -pi -e 's/# CONFIG_BOOT_TRACER is not set/CONFIG_BOOT_TRACER=y/' config-generic
|
||||
@perl -pi -e 's/# CONFIG_B43_DEBUG is not set/CONFIG_B43_DEBUG=y/' config-generic
|
||||
@perl -pi -e 's/# CONFIG_B43LEGACY_DEBUG is not set/CONFIG_B43LEGACY_DEBUG=y/' config-generic
|
||||
@perl -pi -e 's/# CONFIG_MMIOTRACE is not set/CONFIG_MMIOTRACE=y/' config-nodebug
|
||||
|
@ -77,12 +76,11 @@ debug:
|
|||
@perl -pi -e 's/# CONFIG_EXT4_DEBUG is not set/CONFIG_EXT4_DEBUG=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_PERF_USE_VMALLOC is not set/CONFIG_DEBUG_PERF_USE_VMALLOC=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_JBD2_DEBUG is not set/CONFIG_JBD2_DEBUG=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_CFQ_IOSCHED is not set/CONFIG_DEBUG_CFQ_IOSCHED=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_BLK_CGROUP is not set/CONFIG_DEBUG_BLK_CGROUP=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DRBD_FAULT_INJECTION is not set/CONFIG_DRBD_FAULT_INJECTION=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_ATH_DEBUG is not set/CONFIG_ATH_DEBUG=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_CARL9170_DEBUGFS is not set/CONFIG_CARL9170_DEBUGFS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_IWLWIFI_DEVICE_TRACING is not set/CONFIG_IWLWIFI_DEVICE_TRACING=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set/CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DMADEVICES_DEBUG is not set/CONFIG_DMADEVICES_DEBUG=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DMADEVICES_VDEBUG is not set/CONFIG_DMADEVICES_VDEBUG=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_CEPH_LIB_PRETTYDEBUG is not set/CONFIG_CEPH_LIB_PRETTYDEBUG=y/' config-nodebug
|
||||
|
@ -93,21 +91,22 @@ debug:
|
|||
@perl -pi -e 's/# CONFIG_DEBUG_PER_CPU_MAPS is not set/CONFIG_DEBUG_PER_CPU_MAPS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_TEST_LIST_SORT is not set/CONFIG_TEST_LIST_SORT=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_ATOMIC_SLEEP is not set/CONFIG_DEBUG_ATOMIC_SLEEP=y/' config-nodebug
|
||||
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_SET_MODULE_RONX is not set/CONFIG_DEBUG_SET_MODULE_RONX=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DETECT_HUNG_TASK is not set/CONFIG_DETECT_HUNG_TASK=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set/CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_KMEMLEAK is not set/CONFIG_DEBUG_KMEMLEAK=y/' config-nodebug
|
||||
|
||||
@# just in case we're going from extremedebug -> debug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
|
||||
|
||||
@perl -pi -e 's/CONFIG_NR_CPUS=256/CONFIG_NR_CPUS=512/' config-x86_64-generic
|
||||
@perl -pi -e 's/# CONFIG_MAXSMP is not set/CONFIG_MAXSMP=y/' config-x86-generic
|
||||
|
||||
# Try out UAS in rawhide builds.
|
||||
@perl -pi -e 's/# CONFIG_USB_UAS is not set/CONFIG_USB_UAS=m/' config-generic
|
||||
|
||||
@perl -pi -e 's/^%define debugbuildsenabled 1/%define debugbuildsenabled 0/' kernel.spec
|
||||
@perl -pi -e 's/^%define rawhide_skip_docs 0/%define rawhide_skip_docs 1/' kernel.spec
|
||||
@rpmdev-bumpspec -c "Reenable debugging options." kernel.spec
|
||||
|
||||
nodebuginfo:
|
||||
@perl -pi -e 's/^%define with_debuginfo %\{\?_without_debuginfo: 0\} %\{\?\!_without_debuginfo: 1\}/%define with_debuginfo %\{\?_without_debuginfo: 0\} %\{\?\!_without_debuginfo: 0\}/' kernel.spec
|
||||
nodebug: release
|
||||
@perl -pi -e 's/^%define debugbuildsenabled 1/%define debugbuildsenabled 0/' kernel.spec
|
||||
release:
|
||||
@perl -pi -e 's/CONFIG_SLUB_DEBUG_ON=y/# CONFIG_SLUB_DEBUG_ON is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_LOCK_STAT=y/# CONFIG_LOCK_STAT is not set/' config-nodebug
|
||||
|
@ -115,18 +114,17 @@ release:
|
|||
@perl -pi -e 's/CONFIG_DEBUG_SLAB=y/# CONFIG_DEBUG_SLAB is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_MUTEXES=y/# CONFIG_DEBUG_MUTEXES is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_RT_MUTEXES=y/# CONFIG_DEBUG_RT_MUTEXES is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_RWSEMS=y/# CONFIG_DEBUG_RWSEMS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_LOCK_ALLOC=y/# CONFIG_DEBUG_LOCK_ALLOC is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_PROVE_LOCKING=y/# CONFIG_PROVE_LOCKING is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_PROVE_RCU=y/# CONFIG_PROVE_RCU is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_SPINLOCK=y/# CONFIG_DEBUG_SPINLOCK is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_VM=y/# CONFIG_DEBUG_VM is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_SLEEP_IN_IRQ=y/# CONFIG_DEBUG_SLEEP_IN_IRQ is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_FAULT_INJECTION=y/# CONFIG_FAULT_INJECTION is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_FAILSLAB=y/# CONFIG_FAILSLAB is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_FAIL_PAGE_ALLOC=y/# CONFIG_FAIL_PAGE_ALLOC is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_FAIL_IO_TIMEOUT=y/# CONFIG_FAIL_IO_TIMEOUT is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_FAIL_MAKE_REQUEST=y/# CONFIG_FAIL_MAKE_REQUEST is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_FAIL_MMC_REQUEST=y/# CONFIG_FAIL_MMC_REQUEST is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_FAULT_INJECTION_DEBUG_FS=y/# CONFIG_FAULT_INJECTION_DEBUG_FS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y/# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_SG=y/# CONFIG_DEBUG_SG is not set/' config-nodebug
|
||||
|
@ -143,9 +141,8 @@ release:
|
|||
@perl -pi -e 's/CONFIG_SYSCTL_SYSCALL_CHECK=y/# CONFIG_SYSCTL_SYSCALL_CHECK is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_NOTIFIERS=y/# CONFIG_DEBUG_NOTIFIERS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DMA_API_DEBUG=y/# CONFIG_DMA_API_DEBUG is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_PM_TEST_SUSPEND=y/#\ CONFIG_PM_TEST_SUSPEND\ is\ not\ set/' config-generic
|
||||
@perl -pi -e 's/CONFIG_PM_ADVANCED_DEBUG=y/#\ CONFIG_PM_ADVANCED_DEBUG\ is\ not\ set/' config-generic
|
||||
@perl -pi -e 's/CONFIG_BOOT_TRACER=y/#\ CONFIG_BOOT_TRACER\ is\ not\ set/' config-generic
|
||||
@perl -pi -e 's/CONFIG_PM_TEST_SUSPEND=y/# CONFIG_PM_TEST_SUSPEND is not set/' config-generic
|
||||
@perl -pi -e 's/CONFIG_PM_ADVANCED_DEBUG=y/# CONFIG_PM_ADVANCED_DEBUG is not set/' config-generic
|
||||
@perl -pi -e 's/CONFIG_B43_DEBUG=y/# CONFIG_B43_DEBUG is not set/' config-generic
|
||||
@perl -pi -e 's/CONFIG_B43LEGACY_DEBUG=y/# CONFIG_B43LEGACY_DEBUG is not set/' config-generic
|
||||
@perl -pi -e 's/CONFIG_MMIOTRACE=y/# CONFIG_MMIOTRACE is not set/' config-nodebug
|
||||
|
@ -156,12 +153,11 @@ release:
|
|||
@perl -pi -e 's/CONFIG_EXT4_DEBUG=y/# CONFIG_EXT4_DEBUG is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_PERF_USE_VMALLOC=y/# CONFIG_DEBUG_PERF_USE_VMALLOC is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_JBD2_DEBUG=y/# CONFIG_JBD2_DEBUG is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_CFQ_IOSCHED=y/# CONFIG_DEBUG_CFQ_IOSCHED is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_BLK_CGROUP=y/# CONFIG_DEBUG_BLK_CGROUP is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DRBD_FAULT_INJECTION=y/# CONFIG_DRBD_FAULT_INJECTION is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_ATH_DEBUG=y/# CONFIG_ATH_DEBUG is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_CARL9170_DEBUGFS=y/# CONFIG_CARL9170_DEBUGFS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_IWLWIFI_DEVICE_TRACING=y/# CONFIG_IWLWIFI_DEVICE_TRACING is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y/# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DMADEVICES_DEBUG=y/# CONFIG_DMADEVICES_DEBUG is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DMADEVICES_VDEBUG=y/# CONFIG_DMADEVICES_VDEBUG is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_CEPH_LIB_PRETTYDEBUG=y/# CONFIG_CEPH_LIB_PRETTYDEBUG is not set/' config-nodebug
|
||||
|
@ -172,144 +168,37 @@ release:
|
|||
@perl -pi -e 's/CONFIG_DEBUG_PER_CPU_MAPS=y/# CONFIG_DEBUG_PER_CPU_MAPS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_TEST_LIST_SORT=y/# CONFIG_TEST_LIST_SORT is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_ATOMIC_SLEEP=y/# CONFIG_DEBUG_ATOMIC_SLEEP is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DETECT_HUNG_TASK=y/# CONFIG_DETECT_HUNG_TASK is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y/# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_KMEMLEAK=y/# CONFIG_DEBUG_KMEMLEAK is not set/' config-nodebug
|
||||
|
||||
@perl -pi -e 's/CONFIG_DEBUG_SET_MODULE_RONX=y/# CONFIG_DEBUG_SET_MODULE_RONX is not set/' config-nodebug
|
||||
|
||||
# Undo anything that make extremedebug might have set
|
||||
@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-debug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
|
||||
|
||||
@perl -pi -e 's/CONFIG_NR_CPUS=512/CONFIG_NR_CPUS=256/' config-x86_64-generic
|
||||
# Change defaults back to sane things.
|
||||
@perl -pi -e 's/CONFIG_MAXSMP=y/# CONFIG_MAXSMP is not set/' config-x86-generic
|
||||
|
||||
# Disable UAS for release until it's ready. (#717633, #744099)
|
||||
@perl -pi -e 's/CONFIG_USB_UAS=m/# CONFIG_USB_UAS is not set/' config-generic
|
||||
|
||||
@perl -pi -e 's/^%define debugbuildsenabled 0/%define debugbuildsenabled 1/' kernel.spec
|
||||
@perl -pi -e 's/^%define rawhide_skip_docs 1/%define rawhide_skip_docs 0/' kernel.spec
|
||||
@rpmdev-bumpspec -c "Disable debugging options." kernel.spec
|
||||
|
||||
reconfig:
|
||||
@rm -f kernel-*-config
|
||||
@VERSION=$(KVERSION) make -f Makefile.config configs
|
||||
@scripts/reconfig.sh
|
||||
nodebuginfo:
|
||||
@perl -pi -e 's/^%define with_debuginfo %\{\?_without_debuginfo: 0\} %\{\?\!_without_debuginfo: 1\}/%define with_debuginfo %\{\?_without_debuginfo: 0\} %\{\?\!_without_debuginfo: 0\}/' kernel.spec
|
||||
nodebug: release
|
||||
@perl -pi -e 's/^%define debugbuildsenabled 1/%define debugbuildsenabled 0/' kernel.spec
|
||||
|
||||
unused-kernel-patches:
|
||||
@for f in *.patch; do if [ -e $$f ]; then (egrep -q "^Patch[[:digit:]]+:[[:space:]]+$$f" $(SPECFILE) || echo "Unused: $$f") && egrep -q "^ApplyPatch[[:space:]]+$$f|^ApplyOptionalPatch[[:space:]]+$$f" $(SPECFILE) || echo "Unapplied: $$f"; fi; done
|
||||
|
||||
# since i386 isn't a target...
|
||||
compile compile-short: DIST_DEFINES += --target $(shell uname -m)
|
||||
ifeq ($(MAKECMDGOALS),me a sandwich)
|
||||
.PHONY: me a sandwich
|
||||
me a:
|
||||
@:
|
||||
|
||||
# 'make local' also needs to build the noarch firmware package
|
||||
local: noarch
|
||||
|
||||
#
|
||||
# Hacks for building vanilla (unpatched) kernel rpms.
|
||||
# Use "make vanilla-TARGET" like "make TARGET" (make vanilla-scratch-build).
|
||||
#
|
||||
vanilla-%: $(SPECFILE:.spec=-vanilla.spec)
|
||||
@$(MAKE) $* SPECFILE=$<
|
||||
|
||||
$(SPECFILE:.spec=-vanilla.spec): $(SPECFILE)
|
||||
@rm -f $@
|
||||
(echo %define nopatches 1; cat $<) > $@
|
||||
|
||||
#scratch-build: NAME = $(shell rpm $(RPM_DEFINES) $(DIST_DEFINES) -q --qf "%{NAME}\n" --specfile $(SPECFILE)| head -1)
|
||||
#scratch-build: test-srpm
|
||||
# $(BUILD_CLIENT) build $(BUILD_FLAGS) --scratch $(TARGET) \
|
||||
# $(SRCRPMDIR)/$(NAME)-$(VERSION)-$(RELEASE).src.rpm
|
||||
|
||||
# Dismal kludge for building via brew from cvs after "make vanilla-tag".
|
||||
ifdef BEEHIVE_SRPM_BUILD
|
||||
export CHECKOUT_TAG ?= $(shell sed s/^.// CVS/Tag)
|
||||
tag-pattern = $(TAG_NAME)-$(TAG_VERSION)-0_%_$(TAG_RELEASE)
|
||||
ifeq (,$(filter-out $(tag-pattern),$(CHECKOUT_TAG)))
|
||||
variant := $(patsubst $(tag-pattern),%,$(CHECKOUT_TAG))
|
||||
srpm: SPECFILE := $(wildcard $(SPECFILE:.spec=-$(variant).spec) \
|
||||
$(SPECFILE:.spec=.t.$(variant).spec))
|
||||
srpm beehive-sprm: RELEASE := 0.$(variant).$(RELEASE)
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# Hacks for building kernel rpms from upstream code plus local GIT branches.
|
||||
# Use "make git/BRANCH/TARGET" like "make TARGET".
|
||||
# Use "make git/BRANCH-fedora/TARGET" to include Fedora patches on top.
|
||||
#
|
||||
ifndef GIT_SPEC
|
||||
git/%:
|
||||
@$(MAKE) GIT_SPEC=$(subst /,-,$(*D)) git-$(*F)
|
||||
else
|
||||
git-%: $(SPECFILE:.spec=.t.$(GIT_SPEC).spec)
|
||||
@$(MAKE) GIT_SPEC= $* SPECFILE=$<
|
||||
endif
|
||||
|
||||
#
|
||||
# Your git-branches.mk file can define GIT_DIR, e.g.:
|
||||
# GIT_DIR = ${HOME}/kernel/.git
|
||||
# Make sure GIT_AUTHOR_NAME and GIT_AUTHOR_EMAIL are also set
|
||||
# or your rpm changelogs will look like crap.
|
||||
#
|
||||
# For each branch it can define a variable branch-BRANCH or tag-BRANCH
|
||||
# giving the parent of BRANCH to diff against in a separate patch. If
|
||||
# the parent is unknown, it will use $(branch-upstream) defaulting to
|
||||
# "refs/remotes/upstream/master".
|
||||
#
|
||||
# Defining tag-BRANCH means the tag corresponds to an upstream patch in
|
||||
# the sources file, so that is used instead of generating a patch with
|
||||
# git. If there is no tag-upstream defined, it will figure out a vNNN
|
||||
# tag or vNNN-gitN pseudo-tag from the last patch in the sources file.
|
||||
# For example:
|
||||
# tag-some-hacks = v2.6.21-rc5
|
||||
# branch-more-hacks = some-hacks
|
||||
# Leads to patches:
|
||||
# git diff v2.6.21-rc5..more-hacks > linux-2.6.21-rc5-some-hacks.patch
|
||||
# git diff some-hacks..more-hacks > linux-2.6.21-rc5-more-hacks.patch
|
||||
# Whereas having no git-branches.mk at all but doing
|
||||
# "make GIT_DIR=... git/mybranch/test-srpm" does:
|
||||
# id=`cat patch-2.6.21-rc5-git4.id` # auto-fetched via upstream file
|
||||
# git diff $id..upstream > linux-2.6.21-rc5-git4-upstream.patch
|
||||
# git diff upstream..mybranch > linux-2.6.21-rc5-git4-mybranch.patch
|
||||
# If the upstream patch (or any branch patch) is empty it's left out.
|
||||
#
|
||||
git-branches.mk:;
|
||||
-include git-branches.mk
|
||||
|
||||
branch-upstream ?= refs/remotes/upstream/master
|
||||
|
||||
ifdef GIT_DIR
|
||||
export GIT_DIR
|
||||
export GIT_AUTHOR_NAME
|
||||
export GIT_AUTHOR_EMAIL
|
||||
gen-patches ?= gen-patches
|
||||
|
||||
ifndef havespec
|
||||
$(SPECFILE:.spec=.t.%-fedora.spec): $(SPECFILE) $(gen-patches) FORCE
|
||||
./$(gen-patches) --fedora < $< > $@ $(gen-patches-args)
|
||||
$(SPECFILE:.spec=.t.%.spec): $(SPECFILE) $(gen-patches) FORCE
|
||||
./$(gen-patches) < $< > $@ $(gen-patches-args)
|
||||
.PRECIOUS: $(SPECFILE:.spec=.t.%.spec) $(SPECFILE:.spec=.t.%-fedora.spec)
|
||||
endif
|
||||
|
||||
spec-%: $(SPECFILE:.spec=.t.%.spec) ;
|
||||
$(SPECFILE):;
|
||||
FORCE:;
|
||||
|
||||
branch-of-* = $(firstword $(head-$*) $*)
|
||||
gen-patches-args = --name $* v$(KVERSION) $(call heads,$(branch-of-*))
|
||||
define heads
|
||||
$(if $(tag-$1),$(filter-out v$(KVERSION),$(tag-$1)),\
|
||||
$(call heads,$(firstword $(branch-$1) $(branch-upstream)))) $1
|
||||
endef
|
||||
|
||||
files-%-fedora:
|
||||
@echo $(SPECFILE:.spec=.t.$*-fedora.spec)
|
||||
@$(call list-patches,$(branch-of-*))
|
||||
files-%:
|
||||
@echo $(SPECFILE:.spec=.t.$*.spec)
|
||||
@$(call list-patches,$(branch-of-*))
|
||||
define list-patches
|
||||
$(if $(tag-$1),version=$(patsubst v%,%,$(tag-$1)),\
|
||||
$(call list-patches,$(firstword $(branch-$1) $(branch-upstream)))); \
|
||||
echo linux-$${version}-$(patsubst refs/remotes/%/master,%,$1).patch
|
||||
endef
|
||||
|
||||
ifndef tag-$(branch-upstream)
|
||||
tag-$(branch-upstream) := $(shell \
|
||||
sed -n 's/^.* *//;s/\.bz2$$//;s/patch-/v/;/^v/h;$${g;p}' sources)
|
||||
endif
|
||||
sandwich:
|
||||
@[ `id -u` -ne 0 ] && echo "What? Make it yourself." || echo Okay.
|
||||
endif
|
||||
|
|
|
@ -8,13 +8,12 @@ CONFIGFILES = \
|
|||
$(CFG)-i686.config $(CFG)-i686-debug.config \
|
||||
$(CFG)-i686-PAE.config $(CFG)-i686-PAEdebug.config \
|
||||
$(CFG)-x86_64.config $(CFG)-x86_64-debug.config \
|
||||
$(CFG)-s390x.config $(CFG)-arm.config \
|
||||
$(CFG)-s390x.config \
|
||||
$(CFG)-ppc.config $(CFG)-ppc-smp.config \
|
||||
$(CFG)-sparc64.config \
|
||||
$(CFG)-ppc64.config $(CFG)-ppc64-debug.config \
|
||||
$(CFG)-ia64.config
|
||||
$(CFG)-ppc64.config $(CFG)-ppc64-debug.config
|
||||
|
||||
PLATFORMS = x86 x86_64 powerpc powerpc32 powerpc64 s390x ia64 sparc64
|
||||
PLATFORMS = x86 x86_64 powerpc powerpc32 powerpc64 s390x sparc64
|
||||
TEMPFILES = $(addprefix temp-, $(addsuffix -generic, $(PLATFORMS)))
|
||||
|
||||
configs: $(CONFIGFILES)
|
||||
|
@ -32,16 +31,22 @@ temp-generic: config-generic
|
|||
temp-debug-generic: config-generic
|
||||
cat config-generic config-debug > temp-debug-generic
|
||||
|
||||
temp-x86-generic: config-x86-generic temp-generic
|
||||
temp-x86-32: config-x86-32-generic config-x86-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-x86-debug-generic: config-x86-generic temp-debug-generic
|
||||
temp-x86-32-generic: temp-x86-32 temp-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-x86_64-generic: config-x86_64-generic temp-generic
|
||||
temp-x86-debug-generic: temp-x86-32 temp-debug-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-x86_64-debug-generic: config-x86_64-generic temp-debug-generic
|
||||
temp-x86-64: config-x86_64-generic config-x86-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-x86_64-generic: temp-x86-64 temp-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-x86_64-debug-generic: temp-x86-64 temp-debug-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-sparc64-generic: config-sparc64-generic temp-generic
|
||||
|
@ -59,16 +64,13 @@ temp-powerpc32-generic: config-powerpc32-generic temp-powerpc-generic
|
|||
temp-s390-generic: config-s390x temp-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-ia64-generic: config-ia64-generic temp-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
kernel-$(VERSION)-i686-PAE.config: config-i686-PAE temp-x86-generic
|
||||
kernel-$(VERSION)-i686-PAE.config: config-i686-PAE temp-x86-32-generic
|
||||
perl merge.pl $^ i386 > $@
|
||||
|
||||
kernel-$(VERSION)-i686-PAEdebug.config: config-i686-PAE temp-x86-debug-generic
|
||||
perl merge.pl $^ i386 > $@
|
||||
|
||||
kernel-$(VERSION)-i686.config: /dev/null temp-x86-generic
|
||||
kernel-$(VERSION)-i686.config: /dev/null temp-x86-32-generic
|
||||
perl merge.pl $^ i386 > $@
|
||||
|
||||
kernel-$(VERSION)-i686-debug.config: /dev/null temp-x86-debug-generic
|
||||
|
@ -92,14 +94,8 @@ kernel-$(VERSION)-ppc64-debug.config: config-powerpc64 temp-powerpc-debug-generi
|
|||
kernel-$(VERSION)-s390x.config: config-s390x temp-s390-generic
|
||||
perl merge.pl $^ s390 > $@
|
||||
|
||||
kernel-$(VERSION)-arm.config: config-arm temp-generic
|
||||
perl merge.pl $^ arm > $@
|
||||
|
||||
kernel-$(VERSION)-ppc.config: /dev/null temp-powerpc32-generic
|
||||
perl merge.pl $^ powerpc > $@
|
||||
|
||||
kernel-$(VERSION)-ppc-smp.config: config-powerpc32-smp temp-powerpc32-generic
|
||||
perl merge.pl $^ powerpc > $@
|
||||
|
||||
kernel-$(VERSION)-ia64.config: /dev/null temp-ia64-generic
|
||||
perl merge.pl $^ ia64 > $@
|
||||
|
|
|
@ -0,0 +1,102 @@
|
|||
From 95ab000388974d8ffef8257306b4be6e8778b768 Mon Sep 17 00:00:00 2001
|
||||
From: Jianpeng Ma <majianpeng@gmail.com>
|
||||
Date: Sat, 4 Aug 2012 10:34:14 +0800
|
||||
Subject: [PATCH] [SCSI] mvsas: Fix oops when ata commond timeout.
|
||||
|
||||
Kernel message follows:
|
||||
|
||||
[ 511.712011] sd 11:0:0:0: [sdf] command ffff8800a4e81400 timed out
|
||||
[ 511.712022] sas: Enter sas_scsi_recover_host busy: 1 failed: 1
|
||||
[ 511.712024] sas: trying to find task 0xffff8800a4d24c80
|
||||
[ 511.712026] sas: sas_scsi_find_task: aborting task 0xffff8800a4d24c80
|
||||
[ 511.712029] drivers/scsi/mvsas/mv_sas.c 1631:mvs_abort_task()
|
||||
mvi=ffff8800b5300000 task=ffff8800a4d24c80 slot=ffff8800b5325038
|
||||
slot_idx=x0
|
||||
[ 511.712035] BUG: unable to handle kernel NULL pointer dereference at
|
||||
0000000000000058
|
||||
[ 511.712040] IP: [<ffffffff815f8c0c>] _raw_spin_lock_irqsave+0xc/0x30
|
||||
[ 511.712047] PGD 0
|
||||
[ 511.712049] Oops: 0002 [#1] SMP
|
||||
[ 511.712052] Modules linked in: mvsas libsas scsi_transport_sas
|
||||
raid456 async_pq async_xor xor async_memcpy async_raid6_recov raid6_pq
|
||||
async_tx [last unloaded: mvsas]
|
||||
[ 511.712062] CPU 3
|
||||
[ 511.712066] Pid: 7322, comm: scsi_eh_11 Not tainted 3.5.0+ #106 To Be
|
||||
Filled By O.E.M. To Be Filled By O.E.M./To be filled by O.E.M.
|
||||
[ 511.712068] RIP: 0010:[<ffffffff815f8c0c>] [<ffffffff815f8c0c>]
|
||||
_raw_spin_lock_irqsave+0xc/0x30
|
||||
[ 511.712073] RSP: 0018:ffff880098d3bcb0 EFLAGS: 00010086
|
||||
[ 511.712074] RAX: 0000000000000286 RBX: 0000000000000058 RCX:
|
||||
00000000000000c3
|
||||
[ 511.712076] RDX: 0000000000000100 RSI: 0000000000000046 RDI:
|
||||
0000000000000058
|
||||
[ 511.712078] RBP: ffff880098d3bcb0 R08: 000000000000000a R09:
|
||||
0000000000000000
|
||||
[ 511.712080] R10: 00000000000004e8 R11: 00000000000004e7 R12:
|
||||
ffff8800a4d24c80
|
||||
[ 511.712082] R13: 0000000000000050 R14: ffff8800b5325038 R15:
|
||||
ffff8800a4eafe00
|
||||
[ 511.712084] FS: 0000000000000000(0000) GS:ffff8800bdb80000(0000)
|
||||
knlGS:0000000000000000
|
||||
[ 511.712086] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
|
||||
[ 511.712088] CR2: 0000000000000058 CR3: 00000000a4ce6000 CR4:
|
||||
00000000000407e0
|
||||
[ 511.712090] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
|
||||
0000000000000000
|
||||
[ 511.712091] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7:
|
||||
0000000000000400
|
||||
[ 511.712093] Process scsi_eh_11 (pid: 7322, threadinfo
|
||||
ffff880098d3a000, task ffff8800a61dde40)
|
||||
[ 511.712095] Stack:
|
||||
[ 511.712096] ffff880098d3bce0 ffffffff81060683 ffff880000000000
|
||||
0000000000000000
|
||||
[ 511.712099] ffff8800a4d24c80 ffff8800b5300000 ffff880098d3bcf0
|
||||
ffffffffa0076a88
|
||||
[ 511.712102] ffff880098d3bd50 ffffffffa0079bb5 ffff880000000000
|
||||
ffff880000000018
|
||||
[ 511.712106] Call Trace:
|
||||
[ 511.712110] [<ffffffff81060683>] complete+0x23/0x60
|
||||
[ 511.712115] [<ffffffffa0076a88>] mvs_tmf_timedout+0x18/0x20 [mvsas]
|
||||
[ 511.712119] [<ffffffffa0079bb5>] mvs_slot_complete+0x765/0x7d0
|
||||
[mvsas]
|
||||
[ 511.712125] [<ffffffffa005a17d>] sas_scsi_recover_host+0x55d/0xdb0
|
||||
[libsas]
|
||||
[ 511.712128] [<ffffffff8106d600>] ? idle_balance+0xe0/0x130
|
||||
[ 511.712133] [<ffffffff813b150c>] scsi_error_handler+0xcc/0x470
|
||||
[ 511.712136] [<ffffffff815f7ad0>] ? __schedule+0x370/0x730
|
||||
[ 511.712139] [<ffffffff8105f728>] ? __wake_up_common+0x58/0x90
|
||||
[ 511.712142] [<ffffffff813b1440>] ? scsi_eh_get_sense+0x110/0x110
|
||||
[ 511.712146] [<ffffffff810571be>] kthread+0x8e/0xa0
|
||||
[ 511.712150] [<ffffffff816015f4>] kernel_thread_helper+0x4/0x10
|
||||
[ 511.712153] [<ffffffff81057130>] ? flush_kthread_work+0x120/0x120
|
||||
[ 511.712156] [<ffffffff816015f0>] ? gs_change+0xb/0xb
|
||||
[ 511.712157] Code: 8a 00 01 00 00 89 d0 f0 66 0f b1 0f 66 39 d0 0f 94
|
||||
c0 0f b6 c0 5d c3 0f 1f 84 00 00 00 00 00 55 48 89 e5 9c 58 fa ba 00 01
|
||||
00 00 <f0> 66 0f c1 17 0f b6 ce 38 d1 74 11 0f 1f 84 00 00 00 00 00 f3
|
||||
[ 511.712191] RIP [<ffffffff815f8c0c>] _raw_spin_lock_irqsave+0xc/0x30
|
||||
[ 511.712194] RSP <ffff880098d3bcb0>
|
||||
[ 511.712196] CR2: 0000000000000058
|
||||
[ 511.712198] ---[ end trace a781c7b1e65db92c ]---
|
||||
|
||||
Signed-off-by: Jianpeng Ma <majianpeng@gmail.com>
|
||||
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
|
||||
---
|
||||
drivers/scsi/mvsas/mv_sas.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c
|
||||
index 4539d59..a3776d6 100644
|
||||
--- a/drivers/scsi/mvsas/mv_sas.c
|
||||
+++ b/drivers/scsi/mvsas/mv_sas.c
|
||||
@@ -1629,7 +1629,7 @@ int mvs_abort_task(struct sas_task *task)
|
||||
mv_dprintk("mvs_abort_task() mvi=%p task=%p "
|
||||
"slot=%p slot_idx=x%x\n",
|
||||
mvi, task, slot, slot_idx);
|
||||
- mvs_tmf_timedout((unsigned long)task);
|
||||
+ task->task_state_flags |= SAS_TASK_STATE_ABORTED;
|
||||
mvs_slot_task_free(mvi, task, slot, slot_idx);
|
||||
rc = TMF_RESP_FUNC_COMPLETE;
|
||||
goto out;
|
||||
--
|
||||
1.8.0
|
||||
|
8
TODO
8
TODO
|
@ -4,7 +4,6 @@
|
|||
Empty
|
||||
|
||||
* linux-2.6-debug-taint-vm.patch
|
||||
* linux-2.6-debug-vm-would-have-oomkilled.patch
|
||||
TODO: Push upstream
|
||||
|
||||
* linux-2.6-acpi-video-dos.patch
|
||||
|
@ -23,9 +22,6 @@
|
|||
Rolandware that is used by the debuginfo generation.
|
||||
Possibly upstreamable ?
|
||||
|
||||
* linux-2.6.29-sparc-IOC_TYPECHECK.patch
|
||||
Responsible: Spot/Dennis.
|
||||
|
||||
* linux-2.6-v4l-dvb-uvcvideo-update.patch
|
||||
Responsible: Hans.
|
||||
|
||||
|
@ -43,11 +39,7 @@
|
|||
One half of the remaining exec-shield diff.
|
||||
davej bugged Ingo again on Jun 17 2011 about upstreaming.
|
||||
|
||||
* runtime_pm_fixups.patch
|
||||
* linux-2.6-usb-pci-autosuspend.patch
|
||||
* linux-2.6-enable-more-pci-autosuspend.patch
|
||||
* linux-2.6-acpi-debug-infinite-loop.patch
|
||||
* acpi-ec-add-delay-before-write.patch
|
||||
Responsible: mjg59
|
||||
|
||||
* linux-2.6-v4l-dvb-experimental.patch
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
commit 2f02bc8af3abb846823811af65ec6cc46a4d525d
|
||||
Author: Alan Stern <stern@rowland.harvard.edu>
|
||||
Date: Wed Nov 7 16:35:00 2012 -0500
|
||||
|
||||
USB: report submission of active URBs
|
||||
|
||||
This patch (as1633) changes slightly the way usbcore handled
|
||||
submissions of URBs that are already active. It will now return
|
||||
-EBUSY rather than -EINVAL, and it will call WARN_ONCE to draw
|
||||
people's attention to the bug.
|
||||
|
||||
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
diff --git a/Documentation/usb/error-codes.txt b/Documentation/usb/error-codes.txt
|
||||
index 8d1e2a9..9c3eb84 100644
|
||||
--- a/Documentation/usb/error-codes.txt
|
||||
+++ b/Documentation/usb/error-codes.txt
|
||||
@@ -21,6 +21,8 @@ Non-USB-specific:
|
||||
|
||||
USB-specific:
|
||||
|
||||
+-EBUSY The URB is already active.
|
||||
+
|
||||
-ENODEV specified USB-device or bus doesn't exist
|
||||
|
||||
-ENOENT specified interface or endpoint does not exist or
|
||||
diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
|
||||
index 3662287..e0d9d94 100644
|
||||
--- a/drivers/usb/core/urb.c
|
||||
+++ b/drivers/usb/core/urb.c
|
||||
@@ -321,8 +321,13 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
|
||||
struct usb_host_endpoint *ep;
|
||||
int is_out;
|
||||
|
||||
- if (!urb || urb->hcpriv || !urb->complete)
|
||||
+ if (!urb || !urb->complete)
|
||||
return -EINVAL;
|
||||
+ if (urb->hcpriv) {
|
||||
+ WARN_ONCE(1, "URB %p submitted while active\n", urb);
|
||||
+ return -EBUSY;
|
||||
+ }
|
||||
+
|
||||
dev = urb->dev;
|
||||
if ((!dev) || (dev->state < USB_STATE_UNAUTHENTICATED))
|
||||
return -ENODEV;
|
|
@ -1,51 +0,0 @@
|
|||
https://bugzilla.kernel.org/show_bug.cgi?id=14733#c41
|
||||
|
||||
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
|
||||
index 27e0b92..09fbb69 100644
|
||||
--- a/drivers/acpi/ec.c
|
||||
+++ b/drivers/acpi/ec.c
|
||||
@@ -226,6 +226,7 @@ static int ec_poll(struct acpi_ec *ec)
|
||||
if (ec_transaction_done(ec))
|
||||
return 0;
|
||||
} else {
|
||||
+ msleep(1);
|
||||
if (wait_event_timeout(ec->wait,
|
||||
ec_transaction_done(ec),
|
||||
msecs_to_jiffies(1)))
|
||||
@@ -233,8 +234,8 @@ static int ec_poll(struct acpi_ec *ec)
|
||||
}
|
||||
advance_transaction(ec, acpi_ec_read_status(ec));
|
||||
} while (time_before(jiffies, delay));
|
||||
- if (acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF)
|
||||
- break;
|
||||
+// if (acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF)
|
||||
+// break;
|
||||
pr_debug(PREFIX "controller reset, restart transaction\n");
|
||||
spin_lock_irqsave(&ec->curr_lock, flags);
|
||||
start_transaction(ec);
|
||||
@@ -271,15 +272,24 @@ static int ec_check_ibf0(struct acpi_ec *ec)
|
||||
return (status & ACPI_EC_FLAG_IBF) == 0;
|
||||
}
|
||||
|
||||
+/* try to clean input buffer with burst_disable transaction */
|
||||
+static int acpi_ec_clean_buffer(struct acpi_ec *ec)
|
||||
+{
|
||||
+ struct transaction t = {.command = ACPI_EC_BURST_DISABLE,
|
||||
+ .wdata = NULL, .rdata = NULL,
|
||||
+ .wlen = 0, .rlen = 0};
|
||||
+ return acpi_ec_transaction_unlocked(ec, &t);
|
||||
+}
|
||||
+
|
||||
static int ec_wait_ibf0(struct acpi_ec *ec)
|
||||
{
|
||||
unsigned long delay = jiffies + msecs_to_jiffies(ec_delay);
|
||||
/* interrupt wait manually if GPE mode is not active */
|
||||
while (time_before(jiffies, delay))
|
||||
if (wait_event_timeout(ec->wait, ec_check_ibf0(ec),
|
||||
msecs_to_jiffies(1)))
|
||||
return 0;
|
||||
- return -ETIME;
|
||||
+ return acpi_ec_clean_buffer(ec);
|
||||
}
|
||||
|
||||
static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t)
|
|
@ -0,0 +1,38 @@
|
|||
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
|
||||
index 3ed80b2..17fc718 100644
|
||||
--- a/drivers/acpi/sleep.c
|
||||
+++ b/drivers/acpi/sleep.c
|
||||
@@ -390,6 +390,14 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
|
||||
},
|
||||
{
|
||||
.callback = init_nvs_nosave,
|
||||
+ .ident = "Sony Vaio VGN-FW21E",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW21E"),
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ .callback = init_nvs_nosave,
|
||||
.ident = "Sony Vaio VGN-SR11M",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
|
||||
index 0e46fae..6d9a3ab 100644
|
||||
--- a/drivers/acpi/sleep.c
|
||||
+++ b/drivers/acpi/sleep.c
|
||||
@@ -398,6 +398,14 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
|
||||
},
|
||||
{
|
||||
.callback = init_nvs_nosave,
|
||||
+ .ident = "Sony Vaio VPCEB17FX",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB17FX"),
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ .callback = init_nvs_nosave,
|
||||
.ident = "Sony Vaio VGN-SR11M",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
|
@ -1,702 +0,0 @@
|
|||
From e11e9e78799a7641fe0dc5289f35f2604a4b71a3 Mon Sep 17 00:00:00 2001
|
||||
From: Bastien Nocera <hadess@hadess.net>
|
||||
Date: Sun, 17 Jan 2010 00:40:15 +0000
|
||||
Subject: [PATCH] Input: add appleir USB driver
|
||||
|
||||
This driver was originally written by James McKenzie, updated by
|
||||
Greg Kroah-Hartman, further updated by myself, with suspend support
|
||||
added.
|
||||
|
||||
More recent versions of the IR receiver are also supported through
|
||||
a patch by Alex Karpenko. The patch also adds support for the 2nd
|
||||
and 5th generation of the controller, and the menu key on newer
|
||||
brushed metal remotes.
|
||||
|
||||
Tested on a MacbookAir1,1
|
||||
|
||||
Signed-off-by: Bastien Nocera <hadess@hadess.net>
|
||||
---
|
||||
Documentation/input/appleir.txt | 46 ++++
|
||||
drivers/hid/hid-apple.c | 4 -
|
||||
drivers/hid/hid-core.c | 7 +-
|
||||
drivers/hid/hid-ids.h | 5 +-
|
||||
drivers/input/misc/Kconfig | 13 +
|
||||
drivers/input/misc/Makefile | 1 +
|
||||
drivers/input/misc/appleir.c | 519 +++++++++++++++++++++++++++++++++++++++
|
||||
7 files changed, 588 insertions(+), 7 deletions(-)
|
||||
create mode 100644 Documentation/input/appleir.txt
|
||||
create mode 100644 drivers/input/misc/appleir.c
|
||||
|
||||
diff --git a/Documentation/input/appleir.txt b/Documentation/input/appleir.txt
|
||||
new file mode 100644
|
||||
index 0000000..db637fb
|
||||
--- /dev/null
|
||||
+++ b/Documentation/input/appleir.txt
|
||||
@@ -0,0 +1,46 @@
|
||||
+Apple IR receiver Driver (appleir)
|
||||
+----------------------------------
|
||||
+ Copyright (C) 2009 Bastien Nocera <hadess@hadess.net>
|
||||
+
|
||||
+The appleir driver is a kernel input driver to handle Apple's IR
|
||||
+receivers (and associated remotes) in the kernel.
|
||||
+
|
||||
+The driver is an input driver which only handles "official" remotes
|
||||
+as built and sold by Apple.
|
||||
+
|
||||
+Authors
|
||||
+-------
|
||||
+
|
||||
+James McKenzie (original driver)
|
||||
+Alex Karpenko (05ac:8242 support)
|
||||
+Greg Kroah-Hartman (cleanups and original submission)
|
||||
+Bastien Nocera (further cleanups, brushed metal "enter"
|
||||
+button support and suspend support)
|
||||
+
|
||||
+Supported hardware
|
||||
+------------------
|
||||
+
|
||||
+- All Apple laptops and desktops from 2005 onwards, except:
|
||||
+ - the unibody Macbook (2009)
|
||||
+ - Mac Pro (all versions)
|
||||
+- Apple TV (all revisions prior to September 2010)
|
||||
+
|
||||
+The remote will only support the 6 (old white) or 7 (brushed metal) buttons
|
||||
+of the remotes as sold by Apple. See the next section if you want to use
|
||||
+other remotes or want to use lirc with the device instead of the kernel driver.
|
||||
+
|
||||
+Using lirc (native) instead of the kernel driver
|
||||
+------------------------------------------------
|
||||
+
|
||||
+First, you will need to disable the kernel driver for the receiver.
|
||||
+
|
||||
+This can be achieved by passing quirks to the usbhid driver.
|
||||
+The quirk line would be:
|
||||
+usbhid.quirks=0x05ac:0x8242:0x40000010
|
||||
+
|
||||
+With 0x05ac being the vendor ID (Apple, you shouldn't need to change this)
|
||||
+With 0x8242 being the product ID (check the output of lsusb for your hardware)
|
||||
+And 0x10 being "HID_QUIRK_HIDDEV_FORCE" and 0x40000000 being "HID_QUIRK_NO_IGNORE"
|
||||
+
|
||||
+This should force the creation of a hiddev device for the receiver, and
|
||||
+make it usable under lirc.
|
||||
diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
|
||||
index bba05d0..0059d5a 100644
|
||||
--- a/drivers/hid/hid-apple.c
|
||||
+++ b/drivers/hid/hid-apple.c
|
||||
@@ -361,10 +361,6 @@ static void apple_remove(struct hid_device *hdev)
|
||||
}
|
||||
|
||||
static const struct hid_device_id apple_devices[] = {
|
||||
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL),
|
||||
- .driver_data = APPLE_HIDDEV | APPLE_IGNORE_HIDINPUT },
|
||||
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4),
|
||||
- .driver_data = APPLE_HIDDEV | APPLE_IGNORE_HIDINPUT },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE),
|
||||
.driver_data = APPLE_MIGHTYMOUSE | APPLE_INVERT_HWHEEL },
|
||||
|
||||
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
|
||||
index baa25ad..abc5bd7 100644
|
||||
--- a/drivers/hid/hid-core.c
|
||||
+++ b/drivers/hid/hid-core.c
|
||||
@@ -1244,8 +1244,6 @@ static const struct hid_device_id hid_blacklist[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ACTIONSTAR, USB_DEVICE_ID_ACTIONSTAR_1011) },
|
||||
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
|
||||
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) },
|
||||
@@ -1577,6 +1575,11 @@ static const struct hid_device_id hid_ignore_list[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL2) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL3) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL5) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM)},
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM2)},
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_AVERMEDIA, USB_DEVICE_ID_AVER_FM_MR800) },
|
||||
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
|
||||
index 11af537..360a5ca 100644
|
||||
--- a/drivers/hid/hid-ids.h
|
||||
+++ b/drivers/hid/hid-ids.h
|
||||
@@ -100,8 +100,11 @@
|
||||
#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b
|
||||
#define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY 0x030a
|
||||
#define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY 0x030b
|
||||
-#define USB_DEVICE_ID_APPLE_ATV_IRCONTROL 0x8241
|
||||
+#define USB_DEVICE_ID_APPLE_IRCONTROL 0x8240
|
||||
+#define USB_DEVICE_ID_APPLE_IRCONTROL2 0x1440
|
||||
+#define USB_DEVICE_ID_APPLE_IRCONTROL3 0x8241
|
||||
#define USB_DEVICE_ID_APPLE_IRCONTROL4 0x8242
|
||||
+#define USB_DEVICE_ID_APPLE_IRCONTROL5 0x8243
|
||||
|
||||
#define USB_VENDOR_ID_ASUS 0x0486
|
||||
#define USB_DEVICE_ID_ASUS_T91MT 0x0185
|
||||
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
|
||||
index 60de906..2f2f2e7 100644
|
||||
--- a/drivers/input/misc/Kconfig
|
||||
+++ b/drivers/input/misc/Kconfig
|
||||
@@ -209,6 +209,19 @@ config INPUT_KEYSPAN_REMOTE
|
||||
To compile this driver as a module, choose M here: the module will
|
||||
be called keyspan_remote.
|
||||
|
||||
+config INPUT_APPLEIR
|
||||
+ tristate "Apple infrared receiver (built in)"
|
||||
+ depends on USB_ARCH_HAS_HCD
|
||||
+ select USB
|
||||
+ help
|
||||
+ Say Y here if you want to use a Apple infrared remote control. All
|
||||
+ the Apple computers from 2005 onwards include such a port, except
|
||||
+ the unibody Macbook (2009), and Mac Pros. This receiver is also
|
||||
+ used in the Apple TV set-top box prior to the 2010 model.
|
||||
+
|
||||
+ To compile this driver as a module, choose M here: the module will
|
||||
+ be called appleir.
|
||||
+
|
||||
config INPUT_POWERMATE
|
||||
tristate "Griffin PowerMate and Contour Jog support"
|
||||
depends on USB_ARCH_HAS_HCD
|
||||
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
|
||||
index 1fe1f6c..d5ef2b9 100644
|
||||
--- a/drivers/input/misc/Makefile
|
||||
+++ b/drivers/input/misc/Makefile
|
||||
@@ -13,6 +13,7 @@ obj-$(CONFIG_INPUT_ADXL34X) += adxl34x.o
|
||||
obj-$(CONFIG_INPUT_ADXL34X_I2C) += adxl34x-i2c.o
|
||||
obj-$(CONFIG_INPUT_ADXL34X_SPI) += adxl34x-spi.o
|
||||
obj-$(CONFIG_INPUT_APANEL) += apanel.o
|
||||
+obj-$(CONFIG_INPUT_APPLEIR) += appleir.o
|
||||
obj-$(CONFIG_INPUT_ATI_REMOTE) += ati_remote.o
|
||||
obj-$(CONFIG_INPUT_ATI_REMOTE2) += ati_remote2.o
|
||||
obj-$(CONFIG_INPUT_ATLAS_BTNS) += atlas_btns.o
|
||||
diff --git a/drivers/input/misc/appleir.c b/drivers/input/misc/appleir.c
|
||||
new file mode 100644
|
||||
index 0000000..3817a3c
|
||||
--- /dev/null
|
||||
+++ b/drivers/input/misc/appleir.c
|
||||
@@ -0,0 +1,519 @@
|
||||
+/*
|
||||
+ * appleir: USB driver for the apple ir device
|
||||
+ *
|
||||
+ * Original driver written by James McKenzie
|
||||
+ * Ported to recent 2.6 kernel versions by Greg Kroah-Hartman <gregkh@suse.de>
|
||||
+ *
|
||||
+ * Copyright (C) 2006 James McKenzie
|
||||
+ * Copyright (C) 2008 Greg Kroah-Hartman <greg@kroah.com>
|
||||
+ * Copyright (C) 2008 Novell Inc.
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License as published by the Free
|
||||
+ * Software Foundation, version 2.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/input.h>
|
||||
+#include <linux/usb/input.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/usb.h>
|
||||
+#include <linux/usb/input.h>
|
||||
+#include <asm/unaligned.h>
|
||||
+#include <asm/byteorder.h>
|
||||
+
|
||||
+#define DRIVER_VERSION "v1.2"
|
||||
+#define DRIVER_AUTHOR "James McKenzie"
|
||||
+#define DRIVER_DESC "Apple infrared receiver driver"
|
||||
+#define DRIVER_LICENSE "GPL"
|
||||
+
|
||||
+MODULE_AUTHOR(DRIVER_AUTHOR);
|
||||
+MODULE_DESCRIPTION(DRIVER_DESC);
|
||||
+MODULE_LICENSE(DRIVER_LICENSE);
|
||||
+
|
||||
+#define USB_VENDOR_ID_APPLE 0x05ac
|
||||
+#define USB_DEVICE_ID_APPLE_IRCONTROL 0x8240
|
||||
+#define USB_DEVICE_ID_APPLE_IRCONTROL2 0x1440
|
||||
+#define USB_DEVICE_ID_APPLE_IRCONTROL3 0x8241
|
||||
+#define USB_DEVICE_ID_APPLE_IRCONTROL4 0x8242
|
||||
+#define USB_DEVICE_ID_APPLE_IRCONTROL5 0x8243
|
||||
+
|
||||
+#define URB_SIZE 32
|
||||
+
|
||||
+#define MAX_KEYS 9
|
||||
+#define MAX_KEYS_MASK (MAX_KEYS - 1)
|
||||
+
|
||||
+#define dbginfo(dev, format, arg...) do { if (debug) dev_info(dev , format , ## arg); } while (0)
|
||||
+
|
||||
+static int debug;
|
||||
+module_param(debug, int, 0644);
|
||||
+MODULE_PARM_DESC(debug, "Enable extra debug messages and information");
|
||||
+
|
||||
+/* I have two devices both of which report the following */
|
||||
+/* 25 87 ee 83 0a + */
|
||||
+/* 25 87 ee 83 0c - */
|
||||
+/* 25 87 ee 83 09 << */
|
||||
+/* 25 87 ee 83 06 >> */
|
||||
+/* 25 87 ee 83 05 >" */
|
||||
+/* 25 87 ee 83 03 menu */
|
||||
+/* 26 00 00 00 00 for key repeat*/
|
||||
+
|
||||
+/* Thomas Glanzmann reports the following responses */
|
||||
+/* 25 87 ee ca 0b + */
|
||||
+/* 25 87 ee ca 0d - */
|
||||
+/* 25 87 ee ca 08 << */
|
||||
+/* 25 87 ee ca 07 >> */
|
||||
+/* 25 87 ee ca 04 >" */
|
||||
+/* 25 87 ee ca 02 menu */
|
||||
+/* 26 00 00 00 00 for key repeat*/
|
||||
+/* He also observes the following event sometimes */
|
||||
+/* sent after a key is release, which I interpret */
|
||||
+/* as a flat battery message */
|
||||
+/* 25 87 e0 ca 06 flat battery */
|
||||
+
|
||||
+/* Alexandre Karpenko reports the following responses for Device ID 0x8242 */
|
||||
+/* 25 87 ee 47 0b + */
|
||||
+/* 25 87 ee 47 0d - */
|
||||
+/* 25 87 ee 47 08 << */
|
||||
+/* 25 87 ee 47 07 >> */
|
||||
+/* 25 87 ee 47 04 >" */
|
||||
+/* 25 87 ee 47 02 menu */
|
||||
+/* 26 87 ee 47 ** for key repeat (** is the code of the key being held) */
|
||||
+
|
||||
+/* Bastien Nocera's "new" remote */
|
||||
+/* 25 87 ee 91 5f followed by
|
||||
+ * 25 87 ee 91 05 gives you >"
|
||||
+ *
|
||||
+ * 25 87 ee 91 5c followed by
|
||||
+ * 25 87 ee 91 05 gives you the middle button */
|
||||
+
|
||||
+static const unsigned short appleir_key_table[] = {
|
||||
+ KEY_RESERVED,
|
||||
+ KEY_MENU,
|
||||
+ KEY_PLAYPAUSE,
|
||||
+ KEY_FORWARD,
|
||||
+ KEY_BACK,
|
||||
+ KEY_VOLUMEUP,
|
||||
+ KEY_VOLUMEDOWN,
|
||||
+ KEY_ENTER,
|
||||
+ KEY_RESERVED,
|
||||
+};
|
||||
+
|
||||
+struct appleir {
|
||||
+ struct input_dev *input_dev;
|
||||
+ unsigned short keymap[ARRAY_SIZE(appleir_key_table)];
|
||||
+ u8 *data;
|
||||
+ dma_addr_t dma_buf;
|
||||
+ struct usb_device *usbdev;
|
||||
+ unsigned int flags;
|
||||
+ struct urb *urb;
|
||||
+ struct timer_list key_up_timer;
|
||||
+ int current_key;
|
||||
+ int prev_key_idx;
|
||||
+ char phys[32];
|
||||
+};
|
||||
+
|
||||
+static DEFINE_MUTEX(appleir_mutex);
|
||||
+
|
||||
+enum {
|
||||
+ APPLEIR_OPENED = 0x1,
|
||||
+ APPLEIR_SUSPENDED = 0x2,
|
||||
+};
|
||||
+
|
||||
+static struct usb_device_id appleir_ids[] = {
|
||||
+ { USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
|
||||
+ { USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL2) },
|
||||
+ { USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL3) },
|
||||
+ { USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
|
||||
+ { USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL5) },
|
||||
+ {}
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(usb, appleir_ids);
|
||||
+
|
||||
+static void dump_packet(struct appleir *appleir, char *msg, u8 *data, int len)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ printk(KERN_ERR "appleir: %s (%d bytes)", msg, len);
|
||||
+
|
||||
+ for (i = 0; i < len; ++i)
|
||||
+ printk(" %02x", data[i]);
|
||||
+ printk(" (should be command %d)\n", (data[4] >> 1) & MAX_KEYS_MASK);
|
||||
+}
|
||||
+
|
||||
+static int get_key(int data)
|
||||
+{
|
||||
+ switch (data) {
|
||||
+ case 0x02:
|
||||
+ case 0x03:
|
||||
+ /* menu */
|
||||
+ return 1;
|
||||
+ case 0x04:
|
||||
+ case 0x05:
|
||||
+ /* >" */
|
||||
+ return 2;
|
||||
+ case 0x06:
|
||||
+ case 0x07:
|
||||
+ /* >> */
|
||||
+ return 3;
|
||||
+ case 0x08:
|
||||
+ case 0x09:
|
||||
+ /* << */
|
||||
+ return 4;
|
||||
+ case 0x0a:
|
||||
+ case 0x0b:
|
||||
+ /* + */
|
||||
+ return 5;
|
||||
+ case 0x0c:
|
||||
+ case 0x0d:
|
||||
+ /* - */
|
||||
+ return 6;
|
||||
+ case 0x5c:
|
||||
+ /* Middle button, on newer remotes,
|
||||
+ * part of a 2 packet-command */
|
||||
+ return -7;
|
||||
+ default:
|
||||
+ return -1;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void key_up(struct appleir *appleir, int key)
|
||||
+{
|
||||
+ dbginfo(&appleir->input_dev->dev, "key %d up\n", key);
|
||||
+ input_report_key(appleir->input_dev, key, 0);
|
||||
+ input_sync(appleir->input_dev);
|
||||
+}
|
||||
+
|
||||
+static void key_down(struct appleir *appleir, int key)
|
||||
+{
|
||||
+ dbginfo(&appleir->input_dev->dev, "key %d down\n", key);
|
||||
+ input_report_key(appleir->input_dev, key, 1);
|
||||
+ input_sync(appleir->input_dev);
|
||||
+}
|
||||
+
|
||||
+static void battery_flat(struct appleir *appleir)
|
||||
+{
|
||||
+ dev_err(&appleir->input_dev->dev, "possible flat battery?\n");
|
||||
+}
|
||||
+
|
||||
+static void key_up_tick(unsigned long data)
|
||||
+{
|
||||
+ struct appleir *appleir = (struct appleir *)data;
|
||||
+
|
||||
+ if (appleir->current_key) {
|
||||
+ key_up(appleir, appleir->current_key);
|
||||
+ appleir->current_key = 0;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void new_data(struct appleir *appleir, u8 *data, int len)
|
||||
+{
|
||||
+ static const u8 keydown[] = { 0x25, 0x87, 0xee };
|
||||
+ static const u8 keyrepeat[] = { 0x26, };
|
||||
+ static const u8 flatbattery[] = { 0x25, 0x87, 0xe0 };
|
||||
+
|
||||
+ if (debug)
|
||||
+ dump_packet(appleir, "received", data, len);
|
||||
+
|
||||
+ if (len != 5)
|
||||
+ return;
|
||||
+
|
||||
+ if (!memcmp(data, keydown, sizeof(keydown))) {
|
||||
+ int index;
|
||||
+
|
||||
+ /* If we already have a key down, take it up before marking
|
||||
+ this one down */
|
||||
+ if (appleir->current_key)
|
||||
+ key_up(appleir, appleir->current_key);
|
||||
+
|
||||
+ /* Handle dual packet commands */
|
||||
+ if (appleir->prev_key_idx > 0)
|
||||
+ index = appleir->prev_key_idx;
|
||||
+ else
|
||||
+ index = get_key(data[4]);
|
||||
+
|
||||
+ if (index > 0) {
|
||||
+ appleir->current_key = appleir->keymap[index];
|
||||
+
|
||||
+ key_down(appleir, appleir->current_key);
|
||||
+ /* Remote doesn't do key up, either pull them up, in the test
|
||||
+ above, or here set a timer which pulls them up after 1/8 s */
|
||||
+ mod_timer(&appleir->key_up_timer, jiffies + HZ / 8);
|
||||
+ appleir->prev_key_idx = 0;
|
||||
+ return;
|
||||
+ } else if (index == -7) {
|
||||
+ /* Remember key for next packet */
|
||||
+ appleir->prev_key_idx = 0 - index;
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ appleir->prev_key_idx = 0;
|
||||
+
|
||||
+ if (!memcmp(data, keyrepeat, sizeof(keyrepeat))) {
|
||||
+ key_down(appleir, appleir->current_key);
|
||||
+ /* Remote doesn't do key up, either pull them up, in the test
|
||||
+ above, or here set a timer which pulls them up after 1/8 s */
|
||||
+ mod_timer(&appleir->key_up_timer, jiffies + HZ / 8);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!memcmp(data, flatbattery, sizeof(flatbattery))) {
|
||||
+ battery_flat(appleir);
|
||||
+ /* Fall through */
|
||||
+ }
|
||||
+
|
||||
+ dump_packet(appleir, "unknown packet", data, len);
|
||||
+}
|
||||
+
|
||||
+static void appleir_urb(struct urb *urb)
|
||||
+{
|
||||
+ struct appleir *appleir = urb->context;
|
||||
+ int status = urb->status;
|
||||
+ int retval;
|
||||
+
|
||||
+ switch (status) {
|
||||
+ case 0:
|
||||
+ new_data(appleir, urb->transfer_buffer, urb->actual_length);
|
||||
+ break;
|
||||
+ case -ECONNRESET:
|
||||
+ case -ENOENT:
|
||||
+ case -ESHUTDOWN:
|
||||
+ /* This urb is terminated, clean up */
|
||||
+ dbginfo(&appleir->input_dev->dev, "%s - urb shutting down with status: %d", __func__,
|
||||
+ urb->status);
|
||||
+ return;
|
||||
+ default:
|
||||
+ dbginfo(&appleir->input_dev->dev, "%s - nonzero urb status received: %d", __func__,
|
||||
+ urb->status);
|
||||
+ }
|
||||
+
|
||||
+ retval = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
+ if (retval)
|
||||
+ err("%s - usb_submit_urb failed with result %d", __func__,
|
||||
+ retval);
|
||||
+}
|
||||
+
|
||||
+static int appleir_open(struct input_dev *dev)
|
||||
+{
|
||||
+ struct appleir *appleir = input_get_drvdata(dev);
|
||||
+ struct usb_interface *intf = usb_ifnum_to_if(appleir->usbdev, 0);
|
||||
+ int r;
|
||||
+
|
||||
+ r = usb_autopm_get_interface(intf);
|
||||
+ if (r) {
|
||||
+ dev_err(&intf->dev,
|
||||
+ "%s(): usb_autopm_get_interface() = %d\n", __func__, r);
|
||||
+ return r;
|
||||
+ }
|
||||
+
|
||||
+ mutex_lock(&appleir_mutex);
|
||||
+
|
||||
+ if (usb_submit_urb(appleir->urb, GFP_ATOMIC)) {
|
||||
+ r = -EIO;
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ appleir->flags |= APPLEIR_OPENED;
|
||||
+
|
||||
+ mutex_unlock(&appleir_mutex);
|
||||
+
|
||||
+ usb_autopm_put_interface(intf);
|
||||
+
|
||||
+ return 0;
|
||||
+fail:
|
||||
+ mutex_unlock(&appleir_mutex);
|
||||
+ usb_autopm_put_interface(intf);
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+static void appleir_close(struct input_dev *dev)
|
||||
+{
|
||||
+ struct appleir *appleir = input_get_drvdata(dev);
|
||||
+
|
||||
+ mutex_lock(&appleir_mutex);
|
||||
+
|
||||
+ if (!(appleir->flags & APPLEIR_SUSPENDED)) {
|
||||
+ usb_kill_urb(appleir->urb);
|
||||
+ del_timer_sync(&appleir->key_up_timer);
|
||||
+ }
|
||||
+
|
||||
+ appleir->flags &= ~APPLEIR_OPENED;
|
||||
+
|
||||
+ mutex_unlock(&appleir_mutex);
|
||||
+}
|
||||
+
|
||||
+static int appleir_probe(struct usb_interface *intf,
|
||||
+ const struct usb_device_id *id)
|
||||
+{
|
||||
+ struct usb_device *dev = interface_to_usbdev(intf);
|
||||
+ struct usb_endpoint_descriptor *endpoint;
|
||||
+ struct appleir *appleir = NULL;
|
||||
+ struct input_dev *input_dev;
|
||||
+ int retval = -ENOMEM;
|
||||
+ int i;
|
||||
+
|
||||
+ appleir = kzalloc(sizeof(struct appleir), GFP_KERNEL);
|
||||
+ if (!appleir)
|
||||
+ goto allocfail;
|
||||
+
|
||||
+ appleir->data = usb_alloc_coherent(dev, URB_SIZE, GFP_KERNEL,
|
||||
+ &appleir->dma_buf);
|
||||
+ if (!appleir->data)
|
||||
+ goto usbfail;
|
||||
+
|
||||
+ appleir->urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
+ if (!appleir->urb)
|
||||
+ goto urbfail;
|
||||
+
|
||||
+ appleir->usbdev = dev;
|
||||
+
|
||||
+ input_dev = input_allocate_device();
|
||||
+ if (!input_dev)
|
||||
+ goto inputfail;
|
||||
+
|
||||
+ appleir->input_dev = input_dev;
|
||||
+
|
||||
+ usb_make_path(dev, appleir->phys, sizeof(appleir->phys));
|
||||
+ strlcpy(appleir->phys, "/input0", sizeof(appleir->phys));
|
||||
+
|
||||
+ input_dev->name = "Apple Infrared Remote Controller";
|
||||
+ input_dev->phys = appleir->phys;
|
||||
+ usb_to_input_id(dev, &input_dev->id);
|
||||
+ input_dev->dev.parent = &intf->dev;
|
||||
+ input_dev->keycode = appleir->keymap;
|
||||
+ input_dev->keycodesize = sizeof(unsigned short);
|
||||
+ input_dev->keycodemax = ARRAY_SIZE(appleir->keymap);
|
||||
+
|
||||
+ input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
|
||||
+
|
||||
+ memcpy(appleir->keymap, appleir_key_table, sizeof(appleir->keymap));
|
||||
+ for (i = 0; i < ARRAY_SIZE(appleir_key_table); i++)
|
||||
+ set_bit(appleir->keymap[i], input_dev->keybit);
|
||||
+ clear_bit(KEY_RESERVED, input_dev->keybit);
|
||||
+
|
||||
+ input_set_drvdata(input_dev, appleir);
|
||||
+ input_dev->open = appleir_open;
|
||||
+ input_dev->close = appleir_close;
|
||||
+
|
||||
+ endpoint = &intf->cur_altsetting->endpoint[0].desc;
|
||||
+
|
||||
+ usb_fill_int_urb(appleir->urb, dev,
|
||||
+ usb_rcvintpipe(dev, endpoint->bEndpointAddress),
|
||||
+ appleir->data, 8,
|
||||
+ appleir_urb, appleir, endpoint->bInterval);
|
||||
+
|
||||
+ appleir->urb->transfer_dma = appleir->dma_buf;
|
||||
+ appleir->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
+
|
||||
+ setup_timer(&appleir->key_up_timer,
|
||||
+ key_up_tick, (unsigned long) appleir);
|
||||
+
|
||||
+ retval = input_register_device(appleir->input_dev);
|
||||
+ if (retval)
|
||||
+ goto inputfail;
|
||||
+
|
||||
+ usb_set_intfdata(intf, appleir);
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+inputfail:
|
||||
+ input_free_device(appleir->input_dev);
|
||||
+
|
||||
+urbfail:
|
||||
+ usb_free_urb(appleir->urb);
|
||||
+
|
||||
+usbfail:
|
||||
+ usb_free_coherent(dev, URB_SIZE, appleir->data,
|
||||
+ appleir->dma_buf);
|
||||
+
|
||||
+allocfail:
|
||||
+ kfree(appleir);
|
||||
+
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+static void appleir_disconnect(struct usb_interface *intf)
|
||||
+{
|
||||
+ struct appleir *appleir = usb_get_intfdata(intf);
|
||||
+
|
||||
+ usb_set_intfdata(intf, NULL);
|
||||
+ input_unregister_device(appleir->input_dev);
|
||||
+ usb_free_urb(appleir->urb);
|
||||
+ usb_free_coherent(interface_to_usbdev(intf), URB_SIZE,
|
||||
+ appleir->data, appleir->dma_buf);
|
||||
+ kfree(appleir);
|
||||
+}
|
||||
+
|
||||
+static int appleir_suspend(struct usb_interface *interface,
|
||||
+ pm_message_t message)
|
||||
+{
|
||||
+ struct appleir *appleir = usb_get_intfdata(interface);
|
||||
+
|
||||
+ mutex_lock(&appleir_mutex);
|
||||
+ if (appleir->flags & APPLEIR_OPENED)
|
||||
+ usb_kill_urb(appleir->urb);
|
||||
+
|
||||
+ appleir->flags |= APPLEIR_SUSPENDED;
|
||||
+
|
||||
+ mutex_unlock(&appleir_mutex);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int appleir_resume(struct usb_interface *interface)
|
||||
+{
|
||||
+ struct appleir *appleir;
|
||||
+ int r = 0;
|
||||
+
|
||||
+ appleir = usb_get_intfdata(interface);
|
||||
+
|
||||
+ mutex_lock(&appleir_mutex);
|
||||
+ if (appleir->flags & APPLEIR_OPENED) {
|
||||
+ struct usb_endpoint_descriptor *endpoint;
|
||||
+
|
||||
+ endpoint = &interface->cur_altsetting->endpoint[0].desc;
|
||||
+ usb_fill_int_urb(appleir->urb, appleir->usbdev,
|
||||
+ usb_rcvintpipe(appleir->usbdev, endpoint->bEndpointAddress),
|
||||
+ appleir->data, 8,
|
||||
+ appleir_urb, appleir, endpoint->bInterval);
|
||||
+ appleir->urb->transfer_dma = appleir->dma_buf;
|
||||
+ appleir->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
+
|
||||
+ /* And reset the USB device */
|
||||
+ if (usb_submit_urb(appleir->urb, GFP_ATOMIC))
|
||||
+ r = -EIO;
|
||||
+ }
|
||||
+
|
||||
+ appleir->flags &= ~APPLEIR_SUSPENDED;
|
||||
+
|
||||
+ mutex_unlock(&appleir_mutex);
|
||||
+
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+static struct usb_driver appleir_driver = {
|
||||
+ .name = "appleir",
|
||||
+ .probe = appleir_probe,
|
||||
+ .disconnect = appleir_disconnect,
|
||||
+ .suspend = appleir_suspend,
|
||||
+ .resume = appleir_resume,
|
||||
+ .reset_resume = appleir_resume,
|
||||
+ .id_table = appleir_ids,
|
||||
+};
|
||||
+
|
||||
+static int __init appleir_init(void)
|
||||
+{
|
||||
+ return usb_register(&appleir_driver);
|
||||
+}
|
||||
+
|
||||
+static void __exit appleir_exit(void)
|
||||
+{
|
||||
+ usb_deregister(&appleir_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(appleir_init);
|
||||
+module_exit(appleir_exit);
|
||||
--
|
||||
1.7.2.2
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
Lines: 75
|
||||
|
||||
On Thu, Jan 03, 2013 at 12:15:35PM -0600, Ed Cashin wrote:
|
||||
...
|
||||
> >>>>> On Jan 3, 2013, at 8:25 AM, Josh Boyer wrote:
|
||||
...
|
||||
> >>>>>> [699170.611997] aoe: AoE v47 initialised.
|
||||
...
|
||||
> >>>>>> [699231.308319] WARNING: at lib/list_debug.c:62 __list_del_entry+0x82/0xd0()
|
||||
> >>>>>> [699231.312031] Hardware name: S5000VSA
|
||||
> >>>>>> [699231.315658] list_del corruption. next->prev should be ffff880009fa37e8, but was ffffffff81c79c00
|
||||
> >>>>>> [699231.319352] Modules linked in: aoe(-) ip6table_filter ip6_tables ebtable_nat ebtables lockd sunrpc bridge 8021q garp stp llc vfat fat binfmt_misc iTCO_wdt iTCO_vendor_support vhost_net lpc_ich radeon tun macvtap mfd_core serio_raw coretemp i2c_algo_bit ttm i5000_edac macvlan drm_kms_helper e1000e edac_core microcode i5k_amb shpchp i2c_i801 drm kvm_intel i2c_core kvm ioatdma dca raid1
|
||||
> >>>>>> [699231.336259] Pid: 8584, comm: modprobe Not tainted 3.6.11-1.fc17.x86_64 #1
|
||||
> >>>>>> [699231.340561] Call Trace:
|
||||
> >>>>>> [699231.344865] [<ffffffff8105c8ef>] warn_slowpath_common+0x7f/0xc0
|
||||
> >>>>>> [699231.349212] [<ffffffff8105c9e6>] warn_slowpath_fmt+0x46/0x50
|
||||
> >>>>>> [699231.353595] [<ffffffff812eee52>] __list_del_entry+0x82/0xd0
|
||||
> >>>>>> [699231.357954] [<ffffffff812eeeb1>] list_del+0x11/0x40
|
||||
> >>>>>> [699231.362319] [<ffffffff812f6458>] percpu_counter_destroy+0x28/0x50
|
||||
> >>>>>> [699231.366712] [<ffffffff8114c513>] bdi_destroy+0x43/0x140
|
||||
> >>>>>> [699231.371127] [<ffffffff812be20c>] blk_release_queue+0x8c/0xc0
|
||||
> >>>>>> [699231.375454] [<ffffffff812dc322>] kobject_cleanup+0x82/0x1b0
|
||||
> >>>>>> [699231.379675] [<ffffffff812dc1ab>] kobject_put+0x2b/0x60
|
||||
> >>>>>> [699231.383851] [<ffffffff812b80a5>] blk_put_queue+0x15/0x20
|
||||
> >>>>>> [699231.387899] [<ffffffff812bc659>] blk_cleanup_queue+0xc9/0xe0
|
||||
> >>>>>> [699231.391794] [<ffffffffa01f53f5>] aoedev_freedev+0x135/0x150 [aoe]
|
||||
> >>>>>> [699231.395668] [<ffffffffa01f59a5>] aoedev_exit+0x65/0x80 [aoe]
|
||||
> >>>>>> [699231.399493] [<ffffffffa01f5afe>] aoe_exit+0x2e/0x40 [aoe]
|
||||
> >>>>>> [699231.403273] [<ffffffff810bdefe>] sys_delete_module+0x16e/0x2d0
|
||||
> >>>>>> [699231.407119] [<ffffffff8161db56>] ? __schedule+0x3c6/0x7a0
|
||||
> >>>>>> [699231.411050] [<ffffffff8119054a>] ? sys_write+0x4a/0x90
|
||||
> >>>>>> [699231.415033] [<ffffffff81627329>] system_call_fastpath+0x16/0x1b
|
||||
> >>>>>> [699231.419117] ---[ end trace 9e1558af1964b569 ]---
|
||||
> >>>>>> [699231.423248] ------------[ cut here ]------------
|
||||
|
||||
The blk_alloc_queue has already done a bdi_init, so do not bdi_init again in
|
||||
aoeblk_gdalloc.
|
||||
|
||||
The patch below applies to v3.5.6, with its v47 aoe driver. On my system it
|
||||
eliminates the list_del corruption messages.
|
||||
|
||||
It updates VERSION for convenience during testing.
|
||||
|
||||
diff --git a/drivers/block/aoe/aoe.h b/drivers/block/aoe/aoe.h
|
||||
index db195ab..2ccb9e2 100644
|
||||
--- a/drivers/block/aoe/aoe.h
|
||||
+++ b/drivers/block/aoe/aoe.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright (c) 2007 Coraid, Inc. See COPYING for GPL terms. */
|
||||
-#define VERSION "47"
|
||||
+#define VERSION "47nobdi1"
|
||||
#define AOE_MAJOR 152
|
||||
#define DEVICE_NAME "aoe"
|
||||
|
||||
diff --git a/drivers/block/aoe/aoeblk.c b/drivers/block/aoe/aoeblk.c
|
||||
index 321de7b..7eca463 100644
|
||||
--- a/drivers/block/aoe/aoeblk.c
|
||||
+++ b/drivers/block/aoe/aoeblk.c
|
||||
@@ -276,8 +276,6 @@ aoeblk_gdalloc(void *vp)
|
||||
goto err_mempool;
|
||||
blk_queue_make_request(d->blkq, aoeblk_make_request);
|
||||
d->blkq->backing_dev_info.name = "aoe";
|
||||
- if (bdi_init(&d->blkq->backing_dev_info))
|
||||
- goto err_blkq;
|
||||
spin_lock_irqsave(&d->lock, flags);
|
||||
gd->major = AOE_MAJOR;
|
||||
gd->first_minor = d->sysminor * AOE_PARTITIONS;
|
||||
@@ -298,9 +296,6 @@ aoeblk_gdalloc(void *vp)
|
||||
aoedisk_add_sysfs(d);
|
||||
return;
|
||||
|
||||
-err_blkq:
|
||||
- blk_cleanup_queue(d->blkq);
|
||||
- d->blkq = NULL;
|
||||
err_mempool:
|
||||
mempool_destroy(d->bufpool);
|
||||
err_disk:
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
From 82f15998fafe683add83f7a11b2e25f919b3cd2d Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Pirko <jpirko@redhat.com>
|
||||
Date: Tue, 25 Oct 2011 13:47:16 -0400
|
||||
Subject: [PATCH] benet: remove bogus "unlikely" on vlan check
|
||||
|
||||
Use of unlikely in this place is wrong. Remove it.
|
||||
|
||||
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Backported-by: Josh Boyer <jwboyer@redhat.com>
|
||||
---
|
||||
drivers/net/benet/be_main.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c
|
||||
index c411bb1..6df0c7e 100644
|
||||
--- a/drivers/net/benet/be_main.c
|
||||
+++ b/drivers/net/benet/be_main.c
|
||||
@@ -1192,7 +1192,7 @@ static void be_rx_compl_process(struct be_adapter *adapter,
|
||||
skb->rxhash = rxcp->rss_hash;
|
||||
|
||||
|
||||
- if (unlikely(rxcp->vlanf))
|
||||
+ if (rxcp->vlanf)
|
||||
__vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
|
||||
|
||||
netif_receive_skb(skb);
|
||||
@@ -1249,7 +1249,7 @@ static void be_rx_compl_process_gro(struct be_adapter *adapter,
|
||||
if (adapter->netdev->features & NETIF_F_RXHASH)
|
||||
skb->rxhash = rxcp->rss_hash;
|
||||
|
||||
- if (unlikely(rxcp->vlanf))
|
||||
+ if (rxcp->vlanf)
|
||||
__vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
|
||||
|
||||
napi_gro_frags(&eq_obj->napi);
|
||||
--
|
||||
1.7.6.4
|
||||
|
|
@ -0,0 +1,214 @@
|
|||
Fix a crash when block device is read and block size is changed at the same time
|
||||
|
||||
commit b87570f5d349661814b262dd5fc40787700f80d6
|
||||
Author: Mikulas Patocka <mpatocka@redhat.com>
|
||||
Date: Wed Sep 26 07:46:40 2012 +0200
|
||||
|
||||
Fix a crash when block device is read and block size is changed at the same time
|
||||
|
||||
The kernel may crash when block size is changed and I/O is issued
|
||||
simultaneously.
|
||||
|
||||
Because some subsystems (udev or lvm) may read any block device anytime,
|
||||
the bug actually puts any code that changes a block device size in
|
||||
jeopardy.
|
||||
|
||||
The crash can be reproduced if you place "msleep(1000)" to
|
||||
blkdev_get_blocks just before "bh->b_size = max_blocks <<
|
||||
inode->i_blkbits;".
|
||||
Then, run "dd if=/dev/ram0 of=/dev/null bs=4k count=1 iflag=direct"
|
||||
While it is waiting in msleep, run "blockdev --setbsz 2048 /dev/ram0"
|
||||
You get a BUG.
|
||||
|
||||
The direct and non-direct I/O is written with the assumption that block
|
||||
size does not change. It doesn't seem practical to fix these crashes
|
||||
one-by-one there may be many crash possibilities when block size changes
|
||||
at a certain place and it is impossible to find them all and verify the
|
||||
code.
|
||||
|
||||
This patch introduces a new rw-lock bd_block_size_semaphore. The lock is
|
||||
taken for read during I/O. It is taken for write when changing block
|
||||
size. Consequently, block size can't be changed while I/O is being
|
||||
submitted.
|
||||
|
||||
For asynchronous I/O, the patch only prevents block size change while
|
||||
the I/O is being submitted. The block size can change when the I/O is in
|
||||
progress or when the I/O is being finished. This is acceptable because
|
||||
there are no accesses to block size when asynchronous I/O is being
|
||||
finished.
|
||||
|
||||
The patch prevents block size changing while the device is mapped with
|
||||
mmap.
|
||||
|
||||
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
|
||||
Index: linux-3.6.x86_64/drivers/char/raw.c
|
||||
===================================================================
|
||||
--- linux-3.6.x86_64.orig/drivers/char/raw.c 2012-11-16 17:12:35.127010280 -0500
|
||||
+++ linux-3.6.x86_64/drivers/char/raw.c 2012-11-16 17:12:37.381002516 -0500
|
||||
@@ -285,7 +285,7 @@
|
||||
|
||||
static const struct file_operations raw_fops = {
|
||||
.read = do_sync_read,
|
||||
- .aio_read = generic_file_aio_read,
|
||||
+ .aio_read = blkdev_aio_read,
|
||||
.write = do_sync_write,
|
||||
.aio_write = blkdev_aio_write,
|
||||
.fsync = blkdev_fsync,
|
||||
Index: linux-3.6.x86_64/fs/block_dev.c
|
||||
===================================================================
|
||||
--- linux-3.6.x86_64.orig/fs/block_dev.c 2012-11-16 17:12:35.127010280 -0500
|
||||
+++ linux-3.6.x86_64/fs/block_dev.c 2012-11-16 17:12:37.381002516 -0500
|
||||
@@ -116,6 +116,8 @@
|
||||
|
||||
int set_blocksize(struct block_device *bdev, int size)
|
||||
{
|
||||
+ struct address_space *mapping;
|
||||
+
|
||||
/* Size must be a power of two, and between 512 and PAGE_SIZE */
|
||||
if (size > PAGE_SIZE || size < 512 || !is_power_of_2(size))
|
||||
return -EINVAL;
|
||||
@@ -124,6 +126,20 @@
|
||||
if (size < bdev_logical_block_size(bdev))
|
||||
return -EINVAL;
|
||||
|
||||
+ /* Prevent starting I/O or mapping the device */
|
||||
+ down_write(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
+ /* Check that the block device is not memory mapped */
|
||||
+ mapping = bdev->bd_inode->i_mapping;
|
||||
+ mutex_lock(&mapping->i_mmap_mutex);
|
||||
+ if (!prio_tree_empty(&mapping->i_mmap) ||
|
||||
+ !list_empty(&mapping->i_mmap_nonlinear)) {
|
||||
+ mutex_unlock(&mapping->i_mmap_mutex);
|
||||
+ up_write(&bdev->bd_block_size_semaphore);
|
||||
+ return -EBUSY;
|
||||
+ }
|
||||
+ mutex_unlock(&mapping->i_mmap_mutex);
|
||||
+
|
||||
/* Don't change the size if it is same as current */
|
||||
if (bdev->bd_block_size != size) {
|
||||
sync_blockdev(bdev);
|
||||
@@ -131,6 +147,9 @@
|
||||
bdev->bd_inode->i_blkbits = blksize_bits(size);
|
||||
kill_bdev(bdev);
|
||||
}
|
||||
+
|
||||
+ up_write(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -472,6 +491,7 @@
|
||||
inode_init_once(&ei->vfs_inode);
|
||||
/* Initialize mutex for freeze. */
|
||||
mutex_init(&bdev->bd_fsfreeze_mutex);
|
||||
+ init_rwsem(&bdev->bd_block_size_semaphore);
|
||||
}
|
||||
|
||||
static inline void __bd_forget(struct inode *inode)
|
||||
@@ -1567,6 +1587,22 @@
|
||||
return blkdev_ioctl(bdev, mode, cmd, arg);
|
||||
}
|
||||
|
||||
+ssize_t blkdev_aio_read(struct kiocb *iocb, const struct iovec *iov,
|
||||
+ unsigned long nr_segs, loff_t pos)
|
||||
+{
|
||||
+ ssize_t ret;
|
||||
+ struct block_device *bdev = I_BDEV(iocb->ki_filp->f_mapping->host);
|
||||
+
|
||||
+ down_read(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
+ ret = generic_file_aio_read(iocb, iov, nr_segs, pos);
|
||||
+
|
||||
+ up_read(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(blkdev_aio_read);
|
||||
+
|
||||
/*
|
||||
* Write data to the block device. Only intended for the block device itself
|
||||
* and the raw driver which basically is a fake block device.
|
||||
@@ -1578,12 +1614,16 @@
|
||||
unsigned long nr_segs, loff_t pos)
|
||||
{
|
||||
struct file *file = iocb->ki_filp;
|
||||
+ struct block_device *bdev = I_BDEV(file->f_mapping->host);
|
||||
struct blk_plug plug;
|
||||
ssize_t ret;
|
||||
|
||||
BUG_ON(iocb->ki_pos != pos);
|
||||
|
||||
blk_start_plug(&plug);
|
||||
+
|
||||
+ down_read(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos);
|
||||
if (ret > 0 || ret == -EIOCBQUEUED) {
|
||||
ssize_t err;
|
||||
@@ -1592,11 +1632,29 @@
|
||||
if (err < 0 && ret > 0)
|
||||
ret = err;
|
||||
}
|
||||
+
|
||||
+ up_read(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
blk_finish_plug(&plug);
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(blkdev_aio_write);
|
||||
|
||||
+int blkdev_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
+{
|
||||
+ int ret;
|
||||
+ struct block_device *bdev = I_BDEV(file->f_mapping->host);
|
||||
+
|
||||
+ down_read(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
+ ret = generic_file_mmap(file, vma);
|
||||
+
|
||||
+ up_read(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Try to release a page associated with block device when the system
|
||||
* is under memory pressure.
|
||||
@@ -1627,9 +1685,9 @@
|
||||
.llseek = block_llseek,
|
||||
.read = do_sync_read,
|
||||
.write = do_sync_write,
|
||||
- .aio_read = generic_file_aio_read,
|
||||
+ .aio_read = blkdev_aio_read,
|
||||
.aio_write = blkdev_aio_write,
|
||||
- .mmap = generic_file_mmap,
|
||||
+ .mmap = blkdev_mmap,
|
||||
.fsync = blkdev_fsync,
|
||||
.unlocked_ioctl = block_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
Index: linux-3.6.x86_64/include/linux/fs.h
|
||||
===================================================================
|
||||
--- linux-3.6.x86_64.orig/include/linux/fs.h 2012-11-16 17:12:35.127010280 -0500
|
||||
+++ linux-3.6.x86_64/include/linux/fs.h 2012-11-16 17:12:37.424002387 -0500
|
||||
@@ -724,6 +724,8 @@
|
||||
int bd_fsfreeze_count;
|
||||
/* Mutex for freeze */
|
||||
struct mutex bd_fsfreeze_mutex;
|
||||
+ /* A semaphore that prevents I/O while block size is being changed */
|
||||
+ struct rw_semaphore bd_block_size_semaphore;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -2564,6 +2566,8 @@
|
||||
unsigned long *nr_segs, size_t *count, int access_flags);
|
||||
|
||||
/* fs/block_dev.c */
|
||||
+extern ssize_t blkdev_aio_read(struct kiocb *iocb, const struct iovec *iov,
|
||||
+ unsigned long nr_segs, loff_t pos);
|
||||
extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov,
|
||||
unsigned long nr_segs, loff_t pos);
|
||||
extern int blkdev_fsync(struct file *filp, loff_t start, loff_t end,
|
|
@ -0,0 +1,290 @@
|
|||
blockdev: turn a rw semaphore into a percpu rw semaphore
|
||||
|
||||
commit 62ac665ff9fc07497ca524bd20d6a96893d11071
|
||||
Author: Mikulas Patocka <mpatocka@redhat.com>
|
||||
Date: Wed Sep 26 07:46:43 2012 +0200
|
||||
|
||||
blockdev: turn a rw semaphore into a percpu rw semaphore
|
||||
|
||||
This avoids cache line bouncing when many processes lock the semaphore
|
||||
for read.
|
||||
|
||||
New percpu lock implementation
|
||||
|
||||
The lock consists of an array of percpu unsigned integers, a boolean
|
||||
variable and a mutex.
|
||||
|
||||
When we take the lock for read, we enter rcu read section, check for a
|
||||
"locked" variable. If it is false, we increase a percpu counter on the
|
||||
current cpu and exit the rcu section. If "locked" is true, we exit the
|
||||
rcu section, take the mutex and drop it (this waits until a writer
|
||||
finished) and retry.
|
||||
|
||||
Unlocking for read just decreases percpu variable. Note that we can
|
||||
unlock on a difference cpu than where we locked, in this case the
|
||||
counter underflows. The sum of all percpu counters represents the number
|
||||
of processes that hold the lock for read.
|
||||
|
||||
When we need to lock for write, we take the mutex, set "locked" variable
|
||||
to true and synchronize rcu. Since RCU has been synchronized, no
|
||||
processes can create new read locks. We wait until the sum of percpu
|
||||
counters is zero - when it is, there are no readers in the critical
|
||||
section.
|
||||
|
||||
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
|
||||
Index: linux-3.6.x86_64/Documentation/percpu-rw-semaphore.txt
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ linux-3.6.x86_64/Documentation/percpu-rw-semaphore.txt 2012-11-16 17:12:57.351936583 -0500
|
||||
@@ -0,0 +1,27 @@
|
||||
+Percpu rw semaphores
|
||||
+--------------------
|
||||
+
|
||||
+Percpu rw semaphores is a new read-write semaphore design that is
|
||||
+optimized for locking for reading.
|
||||
+
|
||||
+The problem with traditional read-write semaphores is that when multiple
|
||||
+cores take the lock for reading, the cache line containing the semaphore
|
||||
+is bouncing between L1 caches of the cores, causing performance
|
||||
+degradation.
|
||||
+
|
||||
+Locking for reading it very fast, it uses RCU and it avoids any atomic
|
||||
+instruction in the lock and unlock path. On the other hand, locking for
|
||||
+writing is very expensive, it calls synchronize_rcu() that can take
|
||||
+hundreds of microseconds.
|
||||
+
|
||||
+The lock is declared with "struct percpu_rw_semaphore" type.
|
||||
+The lock is initialized percpu_init_rwsem, it returns 0 on success and
|
||||
+-ENOMEM on allocation failure.
|
||||
+The lock must be freed with percpu_free_rwsem to avoid memory leak.
|
||||
+
|
||||
+The lock is locked for read with percpu_down_read, percpu_up_read and
|
||||
+for write with percpu_down_write, percpu_up_write.
|
||||
+
|
||||
+The idea of using RCU for optimized rw-lock was introduced by
|
||||
+Eric Dumazet <eric.dumazet@gmail.com>.
|
||||
+The code was written by Mikulas Patocka <mpatocka@redhat.com>
|
||||
Index: linux-3.6.x86_64/fs/block_dev.c
|
||||
===================================================================
|
||||
--- linux-3.6.x86_64.orig/fs/block_dev.c 2012-11-16 17:12:37.381002516 -0500
|
||||
+++ linux-3.6.x86_64/fs/block_dev.c 2012-11-16 17:27:41.217005828 -0500
|
||||
@@ -127,7 +127,7 @@
|
||||
return -EINVAL;
|
||||
|
||||
/* Prevent starting I/O or mapping the device */
|
||||
- down_write(&bdev->bd_block_size_semaphore);
|
||||
+ percpu_down_write(&bdev->bd_block_size_semaphore);
|
||||
|
||||
/* Check that the block device is not memory mapped */
|
||||
mapping = bdev->bd_inode->i_mapping;
|
||||
@@ -135,7 +135,7 @@
|
||||
if (!prio_tree_empty(&mapping->i_mmap) ||
|
||||
!list_empty(&mapping->i_mmap_nonlinear)) {
|
||||
mutex_unlock(&mapping->i_mmap_mutex);
|
||||
- up_write(&bdev->bd_block_size_semaphore);
|
||||
+ percpu_up_write(&bdev->bd_block_size_semaphore);
|
||||
return -EBUSY;
|
||||
}
|
||||
mutex_unlock(&mapping->i_mmap_mutex);
|
||||
@@ -148,7 +148,7 @@
|
||||
kill_bdev(bdev);
|
||||
}
|
||||
|
||||
- up_write(&bdev->bd_block_size_semaphore);
|
||||
+ percpu_up_write(&bdev->bd_block_size_semaphore);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -460,6 +460,12 @@
|
||||
struct bdev_inode *ei = kmem_cache_alloc(bdev_cachep, GFP_KERNEL);
|
||||
if (!ei)
|
||||
return NULL;
|
||||
+
|
||||
+ if (unlikely(percpu_init_rwsem(&ei->bdev.bd_block_size_semaphore))) {
|
||||
+ kmem_cache_free(bdev_cachep, ei);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
return &ei->vfs_inode;
|
||||
}
|
||||
|
||||
@@ -468,6 +474,8 @@
|
||||
struct inode *inode = container_of(head, struct inode, i_rcu);
|
||||
struct bdev_inode *bdi = BDEV_I(inode);
|
||||
|
||||
+ percpu_free_rwsem(&bdi->bdev.bd_block_size_semaphore);
|
||||
+
|
||||
kmem_cache_free(bdev_cachep, bdi);
|
||||
}
|
||||
|
||||
@@ -491,7 +499,6 @@
|
||||
inode_init_once(&ei->vfs_inode);
|
||||
/* Initialize mutex for freeze. */
|
||||
mutex_init(&bdev->bd_fsfreeze_mutex);
|
||||
- init_rwsem(&bdev->bd_block_size_semaphore);
|
||||
}
|
||||
|
||||
static inline void __bd_forget(struct inode *inode)
|
||||
@@ -1593,11 +1600,11 @@
|
||||
ssize_t ret;
|
||||
struct block_device *bdev = I_BDEV(iocb->ki_filp->f_mapping->host);
|
||||
|
||||
- down_read(&bdev->bd_block_size_semaphore);
|
||||
+ percpu_down_read(&bdev->bd_block_size_semaphore);
|
||||
|
||||
ret = generic_file_aio_read(iocb, iov, nr_segs, pos);
|
||||
|
||||
- up_read(&bdev->bd_block_size_semaphore);
|
||||
+ percpu_up_read(&bdev->bd_block_size_semaphore);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1622,7 +1629,7 @@
|
||||
|
||||
blk_start_plug(&plug);
|
||||
|
||||
- down_read(&bdev->bd_block_size_semaphore);
|
||||
+ percpu_down_read(&bdev->bd_block_size_semaphore);
|
||||
|
||||
ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos);
|
||||
if (ret > 0 || ret == -EIOCBQUEUED) {
|
||||
@@ -1633,7 +1640,7 @@
|
||||
ret = err;
|
||||
}
|
||||
|
||||
- up_read(&bdev->bd_block_size_semaphore);
|
||||
+ percpu_up_read(&bdev->bd_block_size_semaphore);
|
||||
|
||||
blk_finish_plug(&plug);
|
||||
|
||||
@@ -1646,11 +1653,11 @@
|
||||
int ret;
|
||||
struct block_device *bdev = I_BDEV(file->f_mapping->host);
|
||||
|
||||
- down_read(&bdev->bd_block_size_semaphore);
|
||||
+ percpu_down_read(&bdev->bd_block_size_semaphore);
|
||||
|
||||
ret = generic_file_mmap(file, vma);
|
||||
|
||||
- up_read(&bdev->bd_block_size_semaphore);
|
||||
+ percpu_up_read(&bdev->bd_block_size_semaphore);
|
||||
|
||||
return ret;
|
||||
}
|
||||
Index: linux-3.6.x86_64/include/linux/fs.h
|
||||
===================================================================
|
||||
--- linux-3.6.x86_64.orig/include/linux/fs.h 2012-11-16 17:12:37.424002387 -0500
|
||||
+++ linux-3.6.x86_64/include/linux/fs.h 2012-11-16 17:28:12.578901349 -0500
|
||||
@@ -415,6 +415,7 @@
|
||||
#include <linux/migrate_mode.h>
|
||||
#include <linux/uidgid.h>
|
||||
#include <linux/lockdep.h>
|
||||
+#include <linux/percpu-rwsem.h>
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
@@ -725,7 +726,7 @@
|
||||
/* Mutex for freeze */
|
||||
struct mutex bd_fsfreeze_mutex;
|
||||
/* A semaphore that prevents I/O while block size is being changed */
|
||||
- struct rw_semaphore bd_block_size_semaphore;
|
||||
+ struct percpu_rw_semaphore bd_block_size_semaphore;
|
||||
};
|
||||
|
||||
/*
|
||||
Index: linux-3.6.x86_64/include/linux/percpu-rwsem.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ linux-3.6.x86_64/include/linux/percpu-rwsem.h 2012-11-16 17:12:57.354936574 -0500
|
||||
@@ -0,0 +1,89 @@
|
||||
+#ifndef _LINUX_PERCPU_RWSEM_H
|
||||
+#define _LINUX_PERCPU_RWSEM_H
|
||||
+
|
||||
+#include <linux/mutex.h>
|
||||
+#include <linux/percpu.h>
|
||||
+#include <linux/rcupdate.h>
|
||||
+#include <linux/delay.h>
|
||||
+
|
||||
+struct percpu_rw_semaphore {
|
||||
+ unsigned __percpu *counters;
|
||||
+ bool locked;
|
||||
+ struct mutex mtx;
|
||||
+};
|
||||
+
|
||||
+static inline void percpu_down_read(struct percpu_rw_semaphore *p)
|
||||
+{
|
||||
+ rcu_read_lock();
|
||||
+ if (unlikely(p->locked)) {
|
||||
+ rcu_read_unlock();
|
||||
+ mutex_lock(&p->mtx);
|
||||
+ this_cpu_inc(*p->counters);
|
||||
+ mutex_unlock(&p->mtx);
|
||||
+ return;
|
||||
+ }
|
||||
+ this_cpu_inc(*p->counters);
|
||||
+ rcu_read_unlock();
|
||||
+}
|
||||
+
|
||||
+static inline void percpu_up_read(struct percpu_rw_semaphore *p)
|
||||
+{
|
||||
+ /*
|
||||
+ * On X86, write operation in this_cpu_dec serves as a memory unlock
|
||||
+ * barrier (i.e. memory accesses may be moved before the write, but
|
||||
+ * no memory accesses are moved past the write).
|
||||
+ * On other architectures this may not be the case, so we need smp_mb()
|
||||
+ * there.
|
||||
+ */
|
||||
+#if defined(CONFIG_X86) && (!defined(CONFIG_X86_PPRO_FENCE) && !defined(CONFIG_X86_OOSTORE))
|
||||
+ barrier();
|
||||
+#else
|
||||
+ smp_mb();
|
||||
+#endif
|
||||
+ this_cpu_dec(*p->counters);
|
||||
+}
|
||||
+
|
||||
+static inline unsigned __percpu_count(unsigned __percpu *counters)
|
||||
+{
|
||||
+ unsigned total = 0;
|
||||
+ int cpu;
|
||||
+
|
||||
+ for_each_possible_cpu(cpu)
|
||||
+ total += ACCESS_ONCE(*per_cpu_ptr(counters, cpu));
|
||||
+
|
||||
+ return total;
|
||||
+}
|
||||
+
|
||||
+static inline void percpu_down_write(struct percpu_rw_semaphore *p)
|
||||
+{
|
||||
+ mutex_lock(&p->mtx);
|
||||
+ p->locked = true;
|
||||
+ synchronize_rcu();
|
||||
+ while (__percpu_count(p->counters))
|
||||
+ msleep(1);
|
||||
+ smp_rmb(); /* paired with smp_mb() in percpu_sem_up_read() */
|
||||
+}
|
||||
+
|
||||
+static inline void percpu_up_write(struct percpu_rw_semaphore *p)
|
||||
+{
|
||||
+ p->locked = false;
|
||||
+ mutex_unlock(&p->mtx);
|
||||
+}
|
||||
+
|
||||
+static inline int percpu_init_rwsem(struct percpu_rw_semaphore *p)
|
||||
+{
|
||||
+ p->counters = alloc_percpu(unsigned);
|
||||
+ if (unlikely(!p->counters))
|
||||
+ return -ENOMEM;
|
||||
+ p->locked = false;
|
||||
+ mutex_init(&p->mtx);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static inline void percpu_free_rwsem(struct percpu_rw_semaphore *p)
|
||||
+{
|
||||
+ free_percpu(p->counters);
|
||||
+ p->counters = NULL; /* catch use after free bugs */
|
||||
+}
|
||||
+
|
||||
+#endif
|
File diff suppressed because it is too large
Load Diff
153
config-arm
153
config-arm
|
@ -1,153 +0,0 @@
|
|||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
# CONFIG_SMP is not set
|
||||
|
||||
# CONFIG_CMDLINE_FORCE is not set
|
||||
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
|
||||
CONFIG_ARCH_VERSATILE=y
|
||||
CONFIG_ARCH_VERSATILE_PB=y
|
||||
CONFIG_MACH_VERSATILE_AB=y
|
||||
|
||||
CONFIG_HIGHMEM=y
|
||||
# CONFIG_HIGHPTE is not set
|
||||
|
||||
# CONFIG_CPU_ICACHE_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
|
||||
|
||||
CONFIG_ZBOOT_ROM_TEXT=0
|
||||
CONFIG_ZBOOT_ROM_BSS=0
|
||||
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
|
||||
CONFIG_ATAGS_PROC=y
|
||||
|
||||
# CONFIG_FPE_NWFPE is not set
|
||||
CONFIG_FPE_FASTFPE=y
|
||||
CONFIG_VFP=y
|
||||
|
||||
CONFIG_PM=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
# CONFIG_PM_TRACE is not set
|
||||
CONFIG_SUSPEND=y
|
||||
# CONFIG_PM_TEST_SUSPEND is not set
|
||||
CONFIG_APM_EMULATION=y
|
||||
|
||||
CONFIG_ARM_THUMB=y
|
||||
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_OABI_COMPAT=y
|
||||
|
||||
# CONFIG_UACCESS_WITH_MEMCPY is not set
|
||||
|
||||
CONFIG_CMDLINE="console=ttyAM0,115200 root=/dev/sda1 rootdelay=20"
|
||||
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
|
||||
# CONFIG_CPU_IDLE is not set
|
||||
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_LEDS_CPU=y
|
||||
|
||||
CONFIG_MTD_AFS_PARTS=y
|
||||
CONFIG_MTD_ARM_INTEGRATOR=y
|
||||
CONFIG_MTD_IMPA7=y
|
||||
|
||||
CONFIG_AX88796=m
|
||||
CONFIG_AX88796_93CX6=y
|
||||
CONFIG_SMC91X=m
|
||||
CONFIG_DM9000=m
|
||||
CONFIG_DM9000_DEBUGLEVEL=4
|
||||
# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set
|
||||
CONFIG_SMC911X=m
|
||||
CONFIG_SMSC911X=m
|
||||
|
||||
CONFIG_SERIO_AMBAKMI=m
|
||||
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
|
||||
CONFIG_I2C_VERSATILE=y
|
||||
|
||||
CONFIG_THERMAL=y
|
||||
|
||||
# CONFIG_MFD_T7L66XB is not set
|
||||
# CONFIG_MFD_TC6387XB is not set
|
||||
|
||||
CONFIG_FB_ARMCLCD=m
|
||||
|
||||
CONFIG_SND_ARM=y
|
||||
CONFIG_SND_ARMAACI=m
|
||||
|
||||
CONFIG_USB_MUSB_HDRC=y
|
||||
# CONFIG_MUSB_PIO_ONLY is not set
|
||||
CONFIG_USB_TUSB6010=y
|
||||
# CONFIG_USB_MUSB_DEBUG is not set
|
||||
|
||||
CONFIG_MMC_ARMMMCI=m
|
||||
CONFIG_MMC_DW=m
|
||||
# CONFIG_MMC_DW_IDMAC is not set
|
||||
|
||||
CONFIG_RTC_DRV_PL030=m
|
||||
CONFIG_RTC_DRV_PL031=m
|
||||
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
# CONFIG_DEBUG_ERRORS is not set
|
||||
# CONFIG_DEBUG_LL is not set
|
||||
|
||||
CONFIG_ARM_UNWIND=y
|
||||
|
||||
CONFIG_RCU_FANOUT=32
|
||||
|
||||
# CONFIG_USB_ULPI is not set
|
||||
# CONFIG_OC_ETM is not set
|
||||
|
||||
# CONFIG_MTD_PISMO is not set
|
||||
|
||||
CONFIG_PERF_EVENTS=y
|
||||
CONFIG_PERF_COUNTERS=y
|
||||
|
||||
# CONFIG_MG_DISK is not set
|
||||
# CONFIG_GPIO_PL061 is not set
|
||||
|
||||
CONFIG_CC_STACKPROTECTOR=y
|
||||
|
||||
CONFIG_AUTO_ZRELADDR=y
|
||||
|
||||
# CONFIG_ARM_CHARLCD is not set
|
||||
# CONFIG_DEPRECATED_PARAM_STRUCT is not set
|
||||
|
||||
# CONFIG_ARM_SP805_WATCHDOG is not set
|
||||
|
||||
CONFIG_PM_OPP=y
|
||||
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_STRICT_DEVMEM=y
|
||||
|
||||
# CONFIG_AMBA_PL08X is not set
|
||||
|
||||
# CONFIG_HVC_DCC is not set
|
||||
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
|
||||
# CONFIG_ARM_PATCH_PHYS_VIRT is not set
|
||||
|
||||
CONFIG_FTMAC100=m
|
||||
|
||||
CONFIG_HWSPINLOCK_OMAP=m
|
||||
|
||||
CONFIG_USE_OF=y
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
CONFIG_MTD_PHYSMAP_OF=m
|
||||
CONFIG_SERIAL_OF_PLATFORM=m
|
||||
CONFIG_MMC_SDHCI_OF=m
|
||||
CONFIG_MMC_SDHCI_PXAV3=m
|
||||
CONFIG_MMC_SDHCI_PXAV2=m
|
||||
|
||||
CONFIG_FTGMAC100=m
|
19
config-debug
19
config-debug
|
@ -24,6 +24,7 @@ CONFIG_FAIL_MAKE_REQUEST=y
|
|||
CONFIG_FAULT_INJECTION_DEBUG_FS=y
|
||||
CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
|
||||
CONFIG_FAIL_IO_TIMEOUT=y
|
||||
CONFIG_FAIL_MMC_REQUEST=y
|
||||
|
||||
CONFIG_SLUB_DEBUG_ON=y
|
||||
|
||||
|
@ -72,7 +73,7 @@ CONFIG_DEBUG_PERF_USE_VMALLOC=y
|
|||
|
||||
CONFIG_JBD2_DEBUG=y
|
||||
|
||||
CONFIG_DEBUG_CFQ_IOSCHED=y
|
||||
CONFIG_DEBUG_BLK_CGROUP=y
|
||||
|
||||
CONFIG_DRBD_FAULT_INJECTION=y
|
||||
|
||||
|
@ -81,7 +82,6 @@ CONFIG_CARL9170_DEBUGFS=y
|
|||
CONFIG_IWLWIFI_DEVICE_TRACING=y
|
||||
|
||||
CONFIG_DEBUG_OBJECTS_WORK=y
|
||||
# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
|
||||
|
||||
CONFIG_DMADEVICES_DEBUG=y
|
||||
CONFIG_DMADEVICES_VDEBUG=y
|
||||
|
@ -99,4 +99,17 @@ CONFIG_KDB_KEYBOARD=y
|
|||
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
|
||||
CONFIG_TEST_LIST_SORT=y
|
||||
|
||||
CONFIG_DEBUG_SET_MODULE_RONX=y
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
|
||||
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
|
||||
|
||||
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
|
||||
|
||||
CONFIG_DEBUG_KMEMLEAK=y
|
||||
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=1024
|
||||
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
|
||||
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
|
||||
|
||||
CONFIG_MAC80211_MESSAGE_TRACING=y
|
||||
|
||||
CONFIG_EDAC_DEBUG=y
|
||||
|
|
1533
config-generic
1533
config-generic
File diff suppressed because it is too large
Load Diff
|
@ -1,202 +0,0 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
#
|
||||
|
||||
#
|
||||
# Processor type and features
|
||||
#
|
||||
CONFIG_IA64=y
|
||||
CONFIG_64BIT=y
|
||||
# CONFIG_XEN is not set
|
||||
CONFIG_MMU=y
|
||||
CONFIG_EFI=y
|
||||
# CONFIG_ITANIUM is not set
|
||||
CONFIG_MCKINLEY=y
|
||||
CONFIG_IA64_GENERIC=y
|
||||
# CONFIG_IA64_DIG is not set
|
||||
# CONFIG_IA64_HP_ZX1 is not set
|
||||
# CONFIG_IA64_SGI_SN2 is not set
|
||||
CONFIG_IA64_ESI=y
|
||||
CONFIG_IA64_HP_AML_NFW=y
|
||||
CONFIG_MSPEC=y
|
||||
# CONFIG_IA64_HP_SIM is not set
|
||||
# CONFIG_IA64_PAGE_SIZE_4KB is not set
|
||||
# CONFIG_IA64_PAGE_SIZE_8KB is not set
|
||||
CONFIG_IA64_PAGE_SIZE_16KB=y
|
||||
# CONFIG_IA64_PAGE_SIZE_64KB is not set
|
||||
CONFIG_IA64_L1_CACHE_SHIFT=7
|
||||
CONFIG_NUMA=y
|
||||
# CONFIG_VIRTUAL_MEM_MAP is not set
|
||||
CONFIG_SPARSEMEM_MANUAL=y
|
||||
CONFIG_SPARSEMEM=y
|
||||
CONFIG_MEMORY_HOTPLUG=y
|
||||
CONFIG_MEMORY_HOTREMOVE=y
|
||||
CONFIG_IA64_MCA_RECOVERY=m
|
||||
CONFIG_IA64_CYCLONE=y
|
||||
CONFIG_MMTIMER=y
|
||||
CONFIG_IOSAPIC=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=18
|
||||
CONFIG_NR_CPUS=1024
|
||||
# CONFIG_IA32_SUPPORT is not set
|
||||
# CONFIG_COMPAT is not set
|
||||
CONFIG_PERFMON=y
|
||||
CONFIG_IA64_PALINFO=y
|
||||
CONFIG_EFI_VARS=y
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=16
|
||||
CONFIG_EFI_PCDP=y
|
||||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
|
||||
#
|
||||
# IDE chipset support/bugfixes
|
||||
#
|
||||
CONFIG_BLK_DEV_SGIIOC4=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
CONFIG_TCG_INFINEON=m
|
||||
|
||||
#
|
||||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_GEN_RTC is not set
|
||||
CONFIG_EFI_RTC=y
|
||||
CONFIG_RTC_DRV_EFI=y
|
||||
|
||||
|
||||
#
|
||||
# AGP
|
||||
#
|
||||
CONFIG_AGP_I460=y
|
||||
CONFIG_AGP_HP_ZX1=y
|
||||
CONFIG_AGP_SGI_TIOCA=y
|
||||
|
||||
#
|
||||
# HP Simulator drivers
|
||||
#
|
||||
# CONFIG_HP_SIMETH is not set
|
||||
# CONFIG_HP_SIMSERIAL is not set
|
||||
# CONFIG_HP_SIMSCSI is not set
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_IA64_PRINT_HAZARDS is not set
|
||||
# CONFIG_DISABLE_VHPT is not set
|
||||
# CONFIG_IA64_DEBUG_CMPXCHG is not set
|
||||
# CONFIG_IA64_DEBUG_IRQ is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
# CONFIG_MTD is not set
|
||||
|
||||
#
|
||||
# SGI
|
||||
#
|
||||
CONFIG_SGI_SNSC=y
|
||||
CONFIG_SGI_TIOCX=y
|
||||
CONFIG_SGI_MBCS=m
|
||||
CONFIG_SGI_IOC3=m
|
||||
CONFIG_SGI_IOC4=y
|
||||
CONFIG_SGI_XP=m
|
||||
CONFIG_SGI_GRU=m
|
||||
# CONFIG_SGI_GRU_DEBUG is not set
|
||||
CONFIG_SERIAL_SGI_L1_CONSOLE=y
|
||||
CONFIG_SERIAL_SGI_IOC3=m
|
||||
CONFIG_SERIAL_SGI_IOC4=m
|
||||
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
|
||||
#
|
||||
CONFIG_ACPI=y
|
||||
CONFIG_ACPI_AC=y
|
||||
# CONFIG_ACPI_ASUS is not set
|
||||
CONFIG_ACPI_PROCFS_POWER=y
|
||||
CONFIG_ACPI_SYSFS_POWER=y
|
||||
# CONFIG_ACPI_BATTERY is not set
|
||||
CONFIG_ACPI_BLACKLIST_YEAR=0
|
||||
CONFIG_ACPI_BUTTON=y
|
||||
# CONFIG_ACPI_DOCK is not set
|
||||
CONFIG_ACPI_FAN=y
|
||||
CONFIG_ACPI_HOTPLUG_MEMORY=y
|
||||
CONFIG_ACPI_NUMA=y
|
||||
CONFIG_ACPI_POWER=y
|
||||
CONFIG_ACPI_PROCESSOR=y
|
||||
CONFIG_ACPI_PROCFS=y
|
||||
CONFIG_ACPI_SLEEP=y
|
||||
CONFIG_ACPI_THERMAL=y
|
||||
# CONFIG_ACPI_TOSHIBA is not set
|
||||
CONFIG_ACPI_VIDEO=m
|
||||
# CONFIG_ACPI_PROC_EVENT is not set
|
||||
CONFIG_ACPI_HED=m
|
||||
CONFIG_ACPI_EC_DEBUGFS=m
|
||||
CONFIG_ACPI_IPMI=m
|
||||
CONFIG_ACPI_CUSTOM_METHOD=m
|
||||
CONFIG_SENSORS_ACPI_POWER=m
|
||||
|
||||
CONFIG_PM=y
|
||||
CONFIG_HOTPLUG_PCI=y
|
||||
# CONFIG_HPET is not set
|
||||
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
||||
CONFIG_HOTPLUG_PCI_SHPC=m
|
||||
CONFIG_HOTPLUG_PCI_SGI=m
|
||||
CONFIG_PNPACPI=y
|
||||
|
||||
CONFIG_SCHED_SMT=y
|
||||
|
||||
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
|
||||
|
||||
CONFIG_IA64_ACPI_CPUFREQ=m
|
||||
|
||||
# CONFIG_PERMIT_BSP_REMOVE is not set
|
||||
# CONFIG_FORCE_CPEI_RETARGET is not set
|
||||
|
||||
CONFIG_NODES_SHIFT=10
|
||||
|
||||
|
||||
CONFIG_HW_RANDOM_INTEL=m
|
||||
|
||||
CONFIG_CRASH_DUMP=y
|
||||
CONFIG_PROC_VMCORE=y
|
||||
|
||||
# drivers/media/video/usbvision/usbvision-i2c.c:64:39: error: macro "outb" passed 4 arguments, but takes just 2
|
||||
# CONFIG_VIDEO_USBVISION is not set
|
||||
|
||||
# CONFIG_IA64_MC_ERR_INJECT is not set
|
||||
|
||||
CONFIG_DMIID=y
|
||||
CONFIG_DMI_SYSFS=y
|
||||
|
||||
CONFIG_SENSORS_I5K_AMB=m
|
||||
|
||||
CONFIG_SPARSEMEM_VMEMMAP=y
|
||||
|
||||
CONFIG_FRAME_WARN=2048
|
||||
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM=m
|
||||
CONFIG_KVM_INTEL=m
|
||||
|
||||
CONFIG_HP_ILO=m
|
||||
|
||||
CONFIG_PARAVIRT_GUEST=y
|
||||
CONFIG_PARAVIRT=y
|
||||
|
||||
CONFIG_DMAR_DEFAULT_ON=y
|
||||
|
||||
CONFIG_RCU_FANOUT=64
|
||||
|
||||
CONFIG_ACPI_POWER_METER=m
|
||||
CONFIG_I2C_SCMI=m
|
||||
|
||||
# CONFIG_HP_ACCEL is not set
|
112
config-nodebug
112
config-nodebug
|
@ -2,101 +2,109 @@ CONFIG_SND_VERBOSE_PRINTK=y
|
|||
CONFIG_SND_DEBUG=y
|
||||
CONFIG_SND_PCM_XRUN_DEBUG=y
|
||||
|
||||
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
||||
# CONFIG_DEBUG_ATOMIC_SLEEP is not set
|
||||
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_DEBUG_LOCK_ALLOC=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_DEBUG_LOCK_ALLOC is not set
|
||||
# CONFIG_PROVE_LOCKING is not set
|
||||
CONFIG_DEBUG_VM=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_PROVE_RCU is not set
|
||||
# CONFIG_PROVE_RCU_REPEATEDLY is not set
|
||||
CONFIG_DEBUG_PER_CPU_MAPS=y
|
||||
# CONFIG_DEBUG_PER_CPU_MAPS is not set
|
||||
CONFIG_CPUMASK_OFFSTACK=y
|
||||
|
||||
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
|
||||
# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set
|
||||
|
||||
CONFIG_FAULT_INJECTION=y
|
||||
CONFIG_FAILSLAB=y
|
||||
CONFIG_FAIL_PAGE_ALLOC=y
|
||||
CONFIG_FAIL_MAKE_REQUEST=y
|
||||
CONFIG_FAULT_INJECTION_DEBUG_FS=y
|
||||
CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
|
||||
CONFIG_FAIL_IO_TIMEOUT=y
|
||||
# CONFIG_FAULT_INJECTION is not set
|
||||
# CONFIG_FAILSLAB is not set
|
||||
# CONFIG_FAIL_PAGE_ALLOC is not set
|
||||
# CONFIG_FAIL_MAKE_REQUEST is not set
|
||||
# CONFIG_FAULT_INJECTION_DEBUG_FS is not set
|
||||
# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set
|
||||
# CONFIG_FAIL_IO_TIMEOUT is not set
|
||||
# CONFIG_FAIL_MMC_REQUEST is not set
|
||||
|
||||
CONFIG_SLUB_DEBUG_ON=y
|
||||
# CONFIG_SLUB_DEBUG_ON is not set
|
||||
|
||||
CONFIG_LOCK_STAT=y
|
||||
# CONFIG_LOCK_STAT is not set
|
||||
|
||||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
|
||||
CONFIG_ACPI_DEBUG=y
|
||||
# CONFIG_ACPI_DEBUG is not set
|
||||
# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
|
||||
|
||||
CONFIG_DEBUG_SG=y
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
|
||||
# CONFIG_DEBUG_PAGEALLOC is not set
|
||||
|
||||
CONFIG_DEBUG_WRITECOUNT=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
# CONFIG_DEBUG_WRITECOUNT is not set
|
||||
# CONFIG_DEBUG_OBJECTS is not set
|
||||
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
|
||||
CONFIG_DEBUG_OBJECTS_FREE=y
|
||||
CONFIG_DEBUG_OBJECTS_TIMERS=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
# CONFIG_DEBUG_OBJECTS_FREE is not set
|
||||
# CONFIG_DEBUG_OBJECTS_TIMERS is not set
|
||||
# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set
|
||||
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
|
||||
|
||||
CONFIG_X86_PTDUMP=y
|
||||
# CONFIG_X86_PTDUMP is not set
|
||||
|
||||
CONFIG_CAN_DEBUG_DEVICES=y
|
||||
# CONFIG_CAN_DEBUG_DEVICES is not set
|
||||
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||
|
||||
CONFIG_DEBUG_NOTIFIERS=y
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
|
||||
CONFIG_DMA_API_DEBUG=y
|
||||
# CONFIG_DMA_API_DEBUG is not set
|
||||
|
||||
CONFIG_MMIOTRACE=y
|
||||
# CONFIG_MMIOTRACE is not set
|
||||
|
||||
CONFIG_DEBUG_CREDENTIALS=y
|
||||
# CONFIG_DEBUG_CREDENTIALS is not set
|
||||
|
||||
# off in both production debug and nodebug builds,
|
||||
# on in rawhide nodebug builds
|
||||
CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
|
||||
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
||||
|
||||
CONFIG_EXT4_DEBUG=y
|
||||
# CONFIG_EXT4_DEBUG is not set
|
||||
|
||||
CONFIG_DEBUG_PERF_USE_VMALLOC=y
|
||||
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
|
||||
|
||||
CONFIG_JBD2_DEBUG=y
|
||||
# CONFIG_JBD2_DEBUG is not set
|
||||
|
||||
CONFIG_DEBUG_CFQ_IOSCHED=y
|
||||
# CONFIG_DEBUG_BLK_CGROUP is not set
|
||||
|
||||
CONFIG_DRBD_FAULT_INJECTION=y
|
||||
# CONFIG_DRBD_FAULT_INJECTION is not set
|
||||
|
||||
CONFIG_ATH_DEBUG=y
|
||||
CONFIG_CARL9170_DEBUGFS=y
|
||||
CONFIG_IWLWIFI_DEVICE_TRACING=y
|
||||
# CONFIG_ATH_DEBUG is not set
|
||||
# CONFIG_CARL9170_DEBUGFS is not set
|
||||
# CONFIG_IWLWIFI_DEVICE_TRACING is not set
|
||||
|
||||
CONFIG_DEBUG_OBJECTS_WORK=y
|
||||
# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
|
||||
# CONFIG_DEBUG_OBJECTS_WORK is not set
|
||||
|
||||
CONFIG_DMADEVICES_DEBUG=y
|
||||
CONFIG_DMADEVICES_VDEBUG=y
|
||||
# CONFIG_DMADEVICES_DEBUG is not set
|
||||
# CONFIG_DMADEVICES_VDEBUG is not set
|
||||
|
||||
CONFIG_PM_ADVANCED_DEBUG=y
|
||||
|
||||
CONFIG_CEPH_LIB_PRETTYDEBUG=y
|
||||
CONFIG_QUOTA_DEBUG=y
|
||||
# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
|
||||
# CONFIG_QUOTA_DEBUG is not set
|
||||
|
||||
CONFIG_PCI_DEFAULT_USE_CRS=y
|
||||
|
||||
CONFIG_KGDB_KDB=y
|
||||
CONFIG_KDB_KEYBOARD=y
|
||||
|
||||
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
|
||||
CONFIG_TEST_LIST_SORT=y
|
||||
# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set
|
||||
# CONFIG_TEST_LIST_SORT is not set
|
||||
|
||||
CONFIG_DEBUG_SET_MODULE_RONX=y
|
||||
# CONFIG_DETECT_HUNG_TASK is not set
|
||||
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
|
||||
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
|
||||
|
||||
# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set
|
||||
|
||||
# CONFIG_MAC80211_MESSAGE_TRACING is not set
|
||||
|
||||
# CONFIG_EDAC_DEBUG is not set
|
||||
|
|
|
@ -38,15 +38,16 @@ CONFIG_AGP_UNINORTH=y
|
|||
CONFIG_FB_OF=y
|
||||
# CONFIG_FB_CONTROL is not set
|
||||
CONFIG_FB_IBM_GXT4500=y
|
||||
CONFIG_FB_RADEON=y
|
||||
CONFIG_FB_MATROX=y
|
||||
CONFIG_FB_NVIDIA=m
|
||||
# CONFIG_FB_VGA16 is not set
|
||||
CONFIG_FB_ATY128_BACKLIGHT=y
|
||||
CONFIG_FB_ATY_BACKLIGHT=y
|
||||
CONFIG_FB_RADEON_BACKLIGHT=y
|
||||
CONFIG_FB_RIVA_BACKLIGHT=y
|
||||
CONFIG_FB_NVIDIA_BACKLIGHT=y
|
||||
# CONFIG_FB_MB862XX is not set
|
||||
# CONFIG_FB_MB862XX_PCI_GDC is not set
|
||||
# CONFIG_FB_MB862XX_LIME is not set
|
||||
# CONFIG_FB_MB862XX_I2C is not set
|
||||
|
||||
|
||||
CONFIG_SND_POWERMAC=m
|
||||
CONFIG_SND_POWERMAC_AUTO_DRC=y
|
||||
|
@ -159,7 +160,7 @@ CONFIG_IDE_TASK_IOCTL=y
|
|||
# CONFIG_BLK_DEV_SLC90E66 is not set
|
||||
# CONFIG_BLK_DEV_TRM290 is not set
|
||||
# CONFIG_BLK_DEV_VIA82CXXX is not set
|
||||
CONFIG_BLK_DEV_IDE_PMAC=y
|
||||
CONFIG_BLK_DEV_IDE_PMAC=m
|
||||
CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
|
||||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
# CONFIG_BLK_DEV_HD is not set
|
||||
|
@ -175,14 +176,14 @@ CONFIG_PMAC_APM_EMU=m
|
|||
CONFIG_HW_RANDOM_PASEMI=m
|
||||
|
||||
CONFIG_EDAC=y
|
||||
# CONFIG_EDAC_DEBUG is not set
|
||||
CONFIG_EDAC_MM_EDAC=m
|
||||
CONFIG_EDAC_PASEMI=m
|
||||
CONFIG_EDAC_AMD8131=m
|
||||
CONFIG_EDAC_AMD8111=m
|
||||
CONFIG_EDAC_LEGACY_SYSFS=y
|
||||
|
||||
CONFIG_AXON_RAM=m
|
||||
CONFIG_OPROFILE_CELL=y
|
||||
# CONFIG_AXON_RAM is not set
|
||||
# CONFIG_OPROFILE_CELL is not set
|
||||
|
||||
CONFIG_SUSPEND_FREEZER=y
|
||||
# CONFIG_IDEPCI_PCIBUS_ORDER is not set
|
||||
|
@ -192,7 +193,7 @@ CONFIG_USB_EHCI_HCD_PPC_OF=y
|
|||
|
||||
# CONFIG_MPC5121_ADS is not set
|
||||
# CONFIG_MPC5121_GENERIC is not set
|
||||
CONFIG_MTD_OF_PARTS=m
|
||||
CONFIG_MTD_OF_PARTS=y
|
||||
# CONFIG_MTD_NAND_FSL_ELBC is not set
|
||||
CONFIG_THERMAL=y
|
||||
|
||||
|
@ -203,9 +204,9 @@ CONFIG_DMADEVICES=y
|
|||
|
||||
CONFIG_SND_PPC=y
|
||||
|
||||
CONFIG_PPC_82xx=y
|
||||
CONFIG_PPC_83xx=y
|
||||
CONFIG_PPC_86xx=y
|
||||
# CONFIG_PPC_82xx is not set
|
||||
# CONFIG_PPC_83xx is not set
|
||||
# CONFIG_PPC_86xx is not set
|
||||
CONFIG_EXTRA_TARGETS=""
|
||||
# CONFIG_CODE_PATCHING_SELFTEST is not set
|
||||
# CONFIG_FTR_FIXUP_SELFTEST is not set
|
||||
|
@ -219,27 +220,28 @@ CONFIG_EXTRA_TARGETS=""
|
|||
# CONFIG_SERIAL_QE is not set
|
||||
# CONFIG_I2C_CPM is not set
|
||||
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
|
||||
CONFIG_SERIO_XILINX_XPS_PS2=m
|
||||
# CONFIG_SERIO_XILINX_XPS_PS2 is not set
|
||||
|
||||
# CONFIG_PPC_SMLPAR is not set
|
||||
|
||||
CONFIG_MGCOGE=y
|
||||
CONFIG_GEF_SBC610=y
|
||||
CONFIG_GEF_PPC9A=y
|
||||
CONFIG_GEF_SBC310=y
|
||||
# CONFIG_MGCOGE is not set
|
||||
# CONFIG_GEF_SBC610 is not set
|
||||
# CONFIG_GEF_PPC9A is not set
|
||||
# CONFIG_GEF_SBC310 is not set
|
||||
|
||||
CONFIG_QUICC_ENGINE=y
|
||||
CONFIG_QE_GPIO=y
|
||||
CONFIG_MPC8xxx_GPIO=y
|
||||
# CONFIG_QUICC_ENGINE is not set
|
||||
# CONFIG_QE_GPIO is not set
|
||||
# CONFIG_MPC8xxx_GPIO is not set
|
||||
|
||||
CONFIG_IDE_GD=y
|
||||
CONFIG_IDE_GD_ATA=y
|
||||
CONFIG_IDE_GD_ATAPI=y
|
||||
|
||||
CONFIG_MCU_MPC8349EMITX=m
|
||||
# CONFIG_MCU_MPC8349EMITX is not set
|
||||
|
||||
CONFIG_GPIO_XILINX=y
|
||||
# CONFIG_GPIO_XILINX is not set
|
||||
|
||||
CONFIG_PMIC_DA903X=y
|
||||
CONFIG_BACKLIGHT_DA903X=m
|
||||
|
@ -260,11 +262,11 @@ CONFIG_TOUCHSCREEN_DA9034=m
|
|||
|
||||
CONFIG_SIMPLE_GPIO=y
|
||||
|
||||
CONFIG_FSL_PQ_MDIO=m
|
||||
# CONFIG_FSL_PQ_MDIO is not set
|
||||
|
||||
CONFIG_PS3_VRAM=m
|
||||
# CONFIG_PS3_VRAM is not set
|
||||
CONFIG_MDIO_GPIO=m
|
||||
CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL=m
|
||||
# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
|
||||
# CONFIG_DEBUG_GPIO is not set
|
||||
CONFIG_GPIO_PCA953X=m
|
||||
CONFIG_GPIO_PCF857X=m
|
||||
|
@ -272,8 +274,6 @@ CONFIG_GPIO_PCF857X=m
|
|||
# CONFIG_USB_FHCI_HCD is not set
|
||||
# CONFIG_FHCI_DEBUG is not set
|
||||
|
||||
# CONFIG_DRM_RADEON_KMS is not set
|
||||
|
||||
# CONFIG_AMIGAONE is not set
|
||||
|
||||
CONFIG_PPC_OF_BOOT_TRAMPOLINE=y
|
||||
|
@ -294,38 +294,41 @@ CONFIG_SWIOTLB=y
|
|||
|
||||
CONFIG_PPC_DISABLE_WERROR=y
|
||||
|
||||
CONFIG_XILINX_LL_TEMAC=m
|
||||
CONFIG_XILINX_EMACLITE=m
|
||||
# CONFIG_XILINX_LL_TEMAC is not set
|
||||
# CONFIG_XILINX_EMACLITE is not set
|
||||
|
||||
CONFIG_GPIO_WM831X=m
|
||||
# CONFIG_GPIO_LANGWELL is not set
|
||||
# CONFIG_GPIO_UCB1400 is not set
|
||||
CONFIG_EDAC_MPC85XX=m
|
||||
# CONFIG_EDAC_MPC85XX is not set
|
||||
|
||||
CONFIG_NR_IRQS=512
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
|
||||
CONFIG_PPC_MPC5200_LPBFIFO=m
|
||||
CONFIG_CAN_MSCAN=m
|
||||
CONFIG_CAN_MPC5XXX=m
|
||||
# CONFIG_PPC_MPC5200_LPBFIFO is not set
|
||||
# CONFIG_CAN_MSCAN is not set
|
||||
# CONFIG_CAN_MPC5XXX is not set
|
||||
CONFIG_PATA_MACIO=m
|
||||
CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
|
||||
# CONFIG_PMIC_ADP5520 is not set
|
||||
# CONFIG_MFD_88PM8607 is not set
|
||||
# CONFIG_MFD_MAX8997 is not set
|
||||
# CONFIG_MFD_TPS65910 is not set
|
||||
# CONFIG_MFD_TPS65912_I2C is not set
|
||||
# CONFIG_MFD_WL1273_CORE is not set
|
||||
# CONFIG_XPS_USB_HCD_XILINX is not set
|
||||
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
|
||||
# CONFIG_MMC_SDHCI_OF_HLWD is not set
|
||||
|
||||
# CONFIG_MFD_TC35892 is not set
|
||||
# CONFIG_MFD_AAT2870_CORE is not set
|
||||
|
||||
# CONFIG_GPIO_SCH is not set
|
||||
|
||||
# CONFIG_PPC_MPC512x is not set
|
||||
# CONFIG_RTC_DRV_MPC5121 is not set
|
||||
|
||||
CONFIG_MPC512X_DMA=m
|
||||
# CONFIG_MPC512X_DMA is not set
|
||||
|
||||
CONFIG_KVM_GUEST=y
|
||||
|
||||
|
@ -336,13 +339,33 @@ CONFIG_I2C_MPC=m
|
|||
|
||||
CONFIG_RFKILL_GPIO=m
|
||||
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM=m
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE=9
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_INTC=y
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD=255
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD=2048
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=m
|
||||
# CONFIG_CRYPTO_DEV_FSL_CAAM is not set
|
||||
|
||||
# CONFIG_GPIO_GENERIC_PLATFORM is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
|
||||
# CONFIG_CAN_FLEXCAN is not set
|
||||
# CONFIG_NET_VENDOR_XILINX is not set
|
||||
# CONFIG_PPC_EPAPR_HV_BYTECHAN is not set
|
||||
# CONFIG_IBM_EMAC is not set
|
||||
# CONFIG_NET_VENDOR_PASEMI is not set
|
||||
# CONFIG_NET_VENDOR_TOSHIBA is not set
|
||||
|
||||
# Disable btrfs until it is shown to work with 64k pages (rhbz 747079)
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
# CONFIG_OF_SELFTEST is not set
|
||||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
# CONFIG_CPU_IDLE is not set
|
||||
CONFIG_STRICT_DEVMEM=y
|
||||
|
||||
CONFIG_RCU_FANOUT_LEAF=16
|
||||
|
||||
# CONFIG_V4L_RADIO_ISA_DRIVERS is not set
|
||||
# CONFIG_IRQ_DOMAIN_DEBUG is not set
|
||||
# CONFIG_MPIC_MSGR is not set
|
||||
# CONFIG_FA_DUMP is not set
|
||||
# CONFIG_MDIO_BUS_MUX_GPIO is not set
|
||||
|
||||
# CONFIG_FAIL_IOMMU is not set
|
||||
|
|
|
@ -7,17 +7,17 @@ CONFIG_PPC32=y
|
|||
CONFIG_CPU_FREQ_PMAC=y
|
||||
CONFIG_PPC_CHRP=y
|
||||
CONFIG_PPC_PMAC=y
|
||||
CONFIG_PPC_MPC52xx=y
|
||||
# CONFIG_PPC_MPC52xx is not set
|
||||
CONFIG_PPC_PREP=y
|
||||
|
||||
# CONFIG_PPC_MPC5200_SIMPLE is not set
|
||||
CONFIG_SATA_FSL=m
|
||||
# CONFIG_SATA_FSL is not set
|
||||
# CONFIG_SATA_NV is not set
|
||||
|
||||
# busted in .28git1
|
||||
# ERROR: "cacheable_memzero" [drivers/net/gianfar_driver.ko] undefined!
|
||||
# CONFIG_GIANFAR is not set
|
||||
CONFIG_USB_EHCI_FSL=y
|
||||
# CONFIG_USB_EHCI_FSL is not set
|
||||
|
||||
CONFIG_PMAC_APM_EMU=y
|
||||
CONFIG_PMAC_BACKLIGHT=y
|
||||
|
@ -41,6 +41,7 @@ CONFIG_ADB_PMU_LED=y
|
|||
CONFIG_ADB_PMU_LED_IDE=y
|
||||
|
||||
CONFIG_PMAC_MEDIABAY=y
|
||||
CONFIG_NET_VENDOR_APPLE=y
|
||||
CONFIG_BMAC=m
|
||||
CONFIG_MACE=m
|
||||
# CONFIG_MACE_AAUI_PORT is not set
|
||||
|
@ -72,24 +73,20 @@ CONFIG_BRIQ_PANEL=m
|
|||
# CONFIG_ATA_PIIX is not set
|
||||
# CONFIG_PATA_AMD is not set
|
||||
# CONFIG_PATA_ATIIXP is not set
|
||||
CONFIG_PATA_MPC52xx=m
|
||||
# CONFIG_PATA_MPC52xx is not set
|
||||
# CONFIG_PATA_MPIIX is not set
|
||||
# CONFIG_PATA_OLDPIIX is not set
|
||||
# CONFIG_PATA_OPTI is not set
|
||||
# CONFIG_PATA_SERVERWORKS is not set
|
||||
|
||||
CONFIG_SERIAL_MPC52xx=y
|
||||
CONFIG_SERIAL_MPC52xx_CONSOLE=y
|
||||
CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200
|
||||
# CONFIG_SERIAL_MPC52xx is not set
|
||||
# CONFIG_MPC5200_WDT is not set
|
||||
CONFIG_8xxx_WDT=m
|
||||
CONFIG_GEF_WDT=m
|
||||
|
||||
CONFIG_PPC_MPC5200_BUGFIX=y
|
||||
CONFIG_FEC_MPC52xx=m
|
||||
# CONFIG_PPC_MPC5200_BUGFIX is not set
|
||||
# CONFIG_NET_VENDOR_FREESCALE is not set
|
||||
#CHECK: This may later become a tristate.
|
||||
CONFIG_FEC_MPC52xx_MDIO=y
|
||||
CONFIG_PPC_MPC5200_GPIO=y
|
||||
CONFIG_MDIO_GPIO=m
|
||||
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
|
@ -144,26 +141,28 @@ CONFIG_VIRTUALIZATION=y
|
|||
CONFIG_SND_ISA=y
|
||||
CONFIG_CRYPTO_DEV_TALITOS=m
|
||||
|
||||
CONFIG_FSL_EMB_PERFMON=y
|
||||
CONFIG_MPC8272_ADS=y
|
||||
CONFIG_PQ2FADS=y
|
||||
CONFIG_EP8248E=y
|
||||
CONFIG_MPC830x_RDB=y
|
||||
CONFIG_MPC831x_RDB=y
|
||||
CONFIG_MPC832x_MDS=y
|
||||
CONFIG_MPC832x_RDB=y
|
||||
CONFIG_MPC834x_MDS=y
|
||||
CONFIG_MPC834x_ITX=y
|
||||
CONFIG_MPC836x_MDS=y
|
||||
CONFIG_MPC836x_RDK=y
|
||||
CONFIG_MPC837x_MDS=y
|
||||
CONFIG_MPC837x_RDB=y
|
||||
CONFIG_SBC834x=y
|
||||
CONFIG_ASP834x=y
|
||||
CONFIG_KMETER1=y
|
||||
CONFIG_MPC8641_HPCN=y
|
||||
CONFIG_SBC8641D=y
|
||||
CONFIG_MPC8610_HPCD=y
|
||||
# CONFIG_FSL_EMB_PERFMON is not set
|
||||
# CONFIG_MPC8272_ADS is not set
|
||||
# CONFIG_PQ2FADS is not set
|
||||
# CONFIG_EP8248E is not set
|
||||
# CONFIG_MPC830x_RDB is not set
|
||||
# CONFIG_MPC831x_RDB is not set
|
||||
# CONFIG_MPC832x_MDS is not set
|
||||
# CONFIG_MPC832x_RDB is not set
|
||||
# CONFIG_MPC834x_MDS is not set
|
||||
# CONFIG_MPC834x_ITX is not set
|
||||
# CONFIG_MPC836x_MDS is not set
|
||||
# CONFIG_MPC836x_RDK is not set
|
||||
# CONFIG_MPC837x_MDS is not set
|
||||
# CONFIG_MPC837x_RDB is not set
|
||||
# CONFIG_SBC834x is not set
|
||||
# CONFIG_ASP834x is not set
|
||||
# CONFIG_KMETER1 is not set
|
||||
# CONFIG_MPC8641_HPCN is not set
|
||||
# CONFIG_SBC8641D is not set
|
||||
# CONFIG_MPC8610_HPCD is not set
|
||||
# CONFIG_FSL_LBC is not set
|
||||
# CONFIG_MTD_NAND_FSL_UPM is not set
|
||||
|
||||
# CONFIG_USB_MUSB_HDRC is not set
|
||||
|
||||
|
@ -172,8 +171,6 @@ CONFIG_MPC8610_HPCD=y
|
|||
# drivers/mtd/maps/sbc8240.c:172: warning: passing argument 1 of 'simple_map_init' from incompatible pointer type
|
||||
# drivers/mtd/maps/sbc8240.c:177: error: 'struct mtd_info' has no member named 'module'
|
||||
|
||||
CONFIG_MTD_NAND_FSL_UPM=m
|
||||
|
||||
CONFIG_RCU_FANOUT=32
|
||||
|
||||
CONFIG_PERF_COUNTERS=y
|
||||
|
@ -185,3 +182,4 @@ CONFIG_KVM_BOOK3S_32=m
|
|||
# CONFIG_SCSI_QLA_ISCSI is not set
|
||||
|
||||
CONFIG_BATTERY_PMU=m
|
||||
|
||||
|
|
|
@ -1,49 +1,33 @@
|
|||
CONFIG_WINDFARM_PM72=y
|
||||
CONFIG_WINDFARM_PM81=y
|
||||
CONFIG_WINDFARM_PM91=y
|
||||
CONFIG_WINDFARM_PM121=y
|
||||
CONFIG_WINDFARM_RM31=y
|
||||
CONFIG_PPC_PMAC64=y
|
||||
CONFIG_PPC_MAPLE=y
|
||||
CONFIG_PPC_CELL=y
|
||||
CONFIG_PPC_IBM_CELL_BLADE=y
|
||||
# CONFIG_PPC_CELL is not set
|
||||
# CONFIG_PPC_IBM_CELL_BLADE is not set
|
||||
CONFIG_PPC_ISERIES=y
|
||||
CONFIG_PPC_PSERIES=y
|
||||
CONFIG_PPC_PMAC=y
|
||||
CONFIG_PPC_PASEMI=y
|
||||
CONFIG_PPC_POWERNV=y
|
||||
CONFIG_PPC_POWERNV_RTAS=y
|
||||
# CONFIG_PPC_PASEMI is not set
|
||||
# CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set
|
||||
CONFIG_PPC_PS3=y
|
||||
CONFIG_PPC_CELLEB=y
|
||||
CONFIG_PPC_CELL_QPACE=y
|
||||
CONFIG_PS3_HTAB_SIZE=20
|
||||
# CONFIG_PS3_DYNAMIC_DMA is not set
|
||||
CONFIG_PS3_ADVANCED=y
|
||||
CONFIG_PS3_HTAB_SIZE=20
|
||||
# CONFIG_PS3_DYNAMIC_DMA is not set
|
||||
CONFIG_PS3_VUART=y
|
||||
CONFIG_PS3_PS3AV=y
|
||||
CONFIG_PS3_STORAGE=m
|
||||
CONFIG_PS3_DISK=m
|
||||
CONFIG_PS3_ROM=m
|
||||
CONFIG_PS3_FLASH=m
|
||||
CONFIG_PS3_LPM=y
|
||||
CONFIG_SND_PS3=m
|
||||
CONFIG_SND_PS3_DEFAULT_START_DELAY=1000
|
||||
CONFIG_GELIC_NET=m
|
||||
CONFIG_GELIC_WIRELESS=y
|
||||
CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE=y
|
||||
CONFIG_CBE_THERM=m
|
||||
CONFIG_CBE_CPUFREQ=m
|
||||
CONFIG_CBE_CPUFREQ_PMI=m
|
||||
CONFIG_CBE_CPUFREQ_PMI_ENABLE=y
|
||||
# CONFIG_PPC_PS3 is not set
|
||||
# CONFIG_PPC_CELLEB is not set
|
||||
# CONFIG_PPC_CELL_QPACE is not set
|
||||
CONFIG_PMAC_RACKMETER=m
|
||||
CONFIG_IBMEBUS=y
|
||||
CONFIG_SPU_FS=m
|
||||
CONFIG_RTAS_FLASH=y
|
||||
# CONFIG_UDBG_RTAS_CONSOLE is not set
|
||||
CONFIG_PPC_SPLPAR=y
|
||||
CONFIG_SCANLOG=y
|
||||
CONFIG_LPARCFG=y
|
||||
CONFIG_SERIAL_ICOM=m
|
||||
CONFIG_HVCS=m
|
||||
CONFIG_HVC_CONSOLE=y
|
||||
# CONFIG_HVC_OLD_HVSI is not set
|
||||
CONFIG_HOTPLUG_PCI=y
|
||||
CONFIG_THERM_PM72=y
|
||||
CONFIG_IBMVETH=m
|
||||
|
@ -56,13 +40,13 @@ CONFIG_ADB_PMU_LED=y
|
|||
CONFIG_ADB_PMU_LED_IDE=y
|
||||
CONFIG_PMAC_SMU=y
|
||||
CONFIG_CPU_FREQ_PMAC64=y
|
||||
CONFIG_CPU_FREQ_MAPLE=y
|
||||
CONFIG_SCSI_IPR=m
|
||||
CONFIG_SCSI_IPR_TRACE=y
|
||||
CONFIG_SCSI_IPR_DUMP=y
|
||||
CONFIG_SPIDER_NET=m
|
||||
CONFIG_HVC_RTAS=y
|
||||
CONFIG_HVC_ISERIES=y
|
||||
CONFIG_CBE_RAS=y
|
||||
CONFIG_HVC_OPAL=y
|
||||
|
||||
# iSeries device drivers
|
||||
#
|
||||
|
@ -74,19 +58,13 @@ CONFIG_VIOTAPE=m
|
|||
CONFIG_PASEMI_MAC=m
|
||||
CONFIG_SERIAL_OF_PLATFORM=m
|
||||
|
||||
CONFIG_PPC_PASEMI_IOMMU=y
|
||||
CONFIG_SERIAL_TXX9=y
|
||||
CONFIG_SERIAL_TXX9_NR_UARTS=6
|
||||
CONFIG_SERIAL_TXX9_CONSOLE=y
|
||||
|
||||
CONFIG_HVC_BEAT=y
|
||||
|
||||
CONFIG_FB_PS3=y
|
||||
CONFIG_FB_PS3_DEFAULT_SIZE_M=18
|
||||
|
||||
CONFIG_PPC_PMI=m
|
||||
CONFIG_PS3_SYS_MANAGER=y
|
||||
# CONFIG_BLK_DEV_CELLEB is not set
|
||||
|
||||
CONFIG_PATA_SCC=m
|
||||
|
||||
|
@ -94,7 +72,7 @@ CONFIG_APM_EMULATION=m
|
|||
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_NR_CPUS=128
|
||||
CONFIG_NR_CPUS=1024
|
||||
# CONFIG_FB_PLATINUM is not set
|
||||
# CONFIG_FB_VALKYRIE is not set
|
||||
# CONFIG_FB_CT65550 is not set
|
||||
|
@ -107,9 +85,16 @@ CONFIG_NR_CPUS=128
|
|||
CONFIG_RTAS_PROC=y
|
||||
CONFIG_IOMMU_VMERGE=y
|
||||
CONFIG_NUMA=y
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
CONFIG_PPC_64K_PAGES=y
|
||||
CONFIG_PPC_SUBPAGE_PROT=y
|
||||
CONFIG_SCHED_SMT=y
|
||||
|
||||
CONFIG_HZ=100
|
||||
CONFIG_HZ_100=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
|
||||
CONFIG_MEMORY_HOTREMOVE=y
|
||||
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
CONFIG_IRQSTACKS=y
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
|
@ -118,7 +103,7 @@ CONFIG_DEBUG_STACKOVERFLOW=y
|
|||
CONFIG_EHEA=m
|
||||
CONFIG_INFINIBAND_EHCA=m
|
||||
|
||||
CONFIG_HCALL_STATS=y
|
||||
# CONFIG_HCALL_STATS is not set
|
||||
|
||||
CONFIG_XMON_DISASSEMBLY=y
|
||||
|
||||
|
@ -130,24 +115,14 @@ CONFIG_SECCOMP=y
|
|||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
# CONFIG_BLK_DEV_PLATFORM is not set
|
||||
CONFIG_IBM_NEW_EMAC=m
|
||||
CONFIG_IBM_NEW_EMAC_RXB=128
|
||||
CONFIG_IBM_NEW_EMAC_TXB=64
|
||||
CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
|
||||
CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
|
||||
CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
|
||||
# CONFIG_IBM_NEW_EMAC_DEBUG is not set
|
||||
|
||||
# CONFIG_VIRQ_DEBUG is not set
|
||||
CONFIG_ELECTRA_CF=m
|
||||
|
||||
CONFIG_MTD_NAND_PASEMI=m
|
||||
CONFIG_EDAC_CELL=m
|
||||
CONFIG_EDAC_CPC925=m
|
||||
CONFIG_FRAME_WARN=2048
|
||||
|
||||
CONFIG_PHYP_DUMP=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
CONFIG_FORCE_MAX_ZONEORDER=9
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
|
||||
CONFIG_VSX=y
|
||||
|
@ -156,14 +131,6 @@ CONFIG_SCSI_IBMVFC=m
|
|||
# CONFIG_SCSI_IBMVFC_TRACE is not set
|
||||
CONFIG_IBM_BSR=m
|
||||
|
||||
CONFIG_SERIO_XILINX_XPS_PS2=m
|
||||
|
||||
CONFIG_PPC_IBM_CELL_RESETBUTTON=y
|
||||
CONFIG_PPC_IBM_CELL_POWERBUTTON=m
|
||||
CONFIG_CBE_CPUFREQ_SPU_GOVERNOR=m
|
||||
|
||||
CONFIG_RTC_DRV_PS3=y
|
||||
|
||||
CONFIG_CRASH_DUMP=y
|
||||
CONFIG_RELOCATABLE=y
|
||||
|
||||
|
@ -174,6 +141,8 @@ CONFIG_PERF_EVENTS=y
|
|||
CONFIG_EVENT_PROFILE=y
|
||||
|
||||
CONFIG_KVM_BOOK3S_64=m
|
||||
#-- Enable _HV once publicly available POWER7 hardware can use it
|
||||
# CONFIG_KVM_BOOK3S_64_HV is not set
|
||||
# CONFIG_KVM_EXIT_TIMING is not set
|
||||
|
||||
#-- bz#607175
|
||||
|
@ -181,7 +150,9 @@ CONFIG_KVM_BOOK3S_64=m
|
|||
CONFIG_PPC_SMLPAR=y
|
||||
CONFIG_CMM=y
|
||||
#-- DLPAR memory remove
|
||||
# CONFIG_SPARSEMEM_VMEMMAP is not set
|
||||
CONFIG_SPARSEMEM_VMEMMAP=y
|
||||
|
||||
# CONFIG_COMPACTION is not set
|
||||
|
||||
CONFIG_PSERIES_ENERGY=m
|
||||
|
||||
|
@ -189,4 +160,11 @@ CONFIG_PPC_ICSWX=y
|
|||
CONFIG_IO_EVENT_IRQ=y
|
||||
CONFIG_HW_RANDOM_AMD=m
|
||||
|
||||
CONFIG_HW_RANDOM_PSERIES=m
|
||||
CONFIG_CRYPTO_DEV_NX=m
|
||||
|
||||
CONFIG_BPF_JIT=y
|
||||
|
||||
# CONFIG_PPC_ICSWX_PID is not set
|
||||
# CONFIG_PPC_ICSWX_USE_SIGILL is not set
|
||||
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
|
||||
|
|
|
@ -197,6 +197,7 @@ CONFIG_QETH_L3=m
|
|||
CONFIG_CRYPTO_SHA512_S390=m
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM=m
|
||||
# CONFIG_KVM_S390_UCONTROL is not set
|
||||
CONFIG_S390_GUEST=y
|
||||
|
||||
|
||||
|
@ -210,6 +211,7 @@ CONFIG_CHSC_SCH=m
|
|||
CONFIG_HVC_IUCV=y
|
||||
|
||||
CONFIG_RCU_FANOUT=64
|
||||
CONFIG_RCU_FANOUT_LEAF=8
|
||||
|
||||
CONFIG_SECCOMP=y
|
||||
|
||||
|
@ -236,5 +238,6 @@ CONFIG_STRICT_DEVMEM=y
|
|||
|
||||
# CONFIG_WARN_DYNAMIC_STACK is not set
|
||||
|
||||
CONFIG_JUMP_LABEL=y
|
||||
CONFIG_CRYPTO_GHASH_S390=m
|
||||
CONFIG_NET_CORE=y
|
||||
CONFIG_ETHERNET=y
|
||||
|
|
|
@ -43,6 +43,7 @@ CONFIG_I2C_ALI1535=m
|
|||
# CONFIG_VGASTATE is not set
|
||||
# CONFIG_FB_DDC is not set
|
||||
# CONFIG_FB_BW2 is not set
|
||||
# CONFIG_FB_GRVGA is not set
|
||||
CONFIG_FB_CG3=y
|
||||
CONFIG_FB_CG6=y
|
||||
# CONFIG_FB_RIVA is not set
|
||||
|
@ -172,6 +173,7 @@ CONFIG_LEDS_SUNFIRE=m
|
|||
CONFIG_TADPOLE_TS102_UCTRL=m
|
||||
|
||||
CONFIG_RCU_FANOUT=64
|
||||
CONFIG_RCU_FANOUT_LEAF=16
|
||||
|
||||
CONFIG_LIRC_ENE0100=m
|
||||
# CONFIG_BATTERY_DS2782 is not set
|
||||
|
@ -191,8 +193,10 @@ CONFIG_FB_XVR1000=y
|
|||
|
||||
CONFIG_CRYPTO_DEV_NIAGARA2=y
|
||||
|
||||
CONFIG_JUMP_LABEL=y
|
||||
|
||||
# CONFIG_MTD_OF_PARTS is not set
|
||||
# CONFIG_MTD_PHYSMAP_OF is not set
|
||||
# CONFIG_MMC_SDHCI_OF is not set
|
||||
# CONFIG_OF_SELFTEST is not set
|
||||
|
||||
CONFIG_BPF_JIT=y
|
||||
# CONFIG_IRQ_DOMAIN_DEBUG is not set
|
||||
|
|
|
@ -0,0 +1,219 @@
|
|||
# CONFIG_64BIT is not set
|
||||
|
||||
CONFIG_X86_32_NON_STANDARD=y
|
||||
|
||||
# CONFIG_X86_ELAN is not set
|
||||
# CONFIG_X86_NUMAQ is not set
|
||||
# CONFIG_X86_SUMMIT is not set
|
||||
CONFIG_X86_BIGSMP=y
|
||||
# CONFIG_X86_VISWS is not set
|
||||
# CONFIG_X86_RDC321X is not set
|
||||
# CONFIG_X86_ES7000 is not set
|
||||
# CONFIG_M386 is not set
|
||||
# CONFIG_M486 is not set
|
||||
# CONFIG_M586 is not set
|
||||
# CONFIG_M586TSC is not set
|
||||
# CONFIG_M586MMX is not set
|
||||
CONFIG_M686=y
|
||||
# CONFIG_MPENTIUMII is not set
|
||||
# CONFIG_MPENTIUMIII is not set
|
||||
# CONFIG_MPENTIUMM is not set
|
||||
# CONFIG_MPENTIUM4 is not set
|
||||
# CONFIG_MK6 is not set
|
||||
# CONFIG_MK7 is not set
|
||||
# CONFIG_MK8 is not set
|
||||
# CONFIG_MCRUSOE is not set
|
||||
# CONFIG_MWINCHIPC6 is not set
|
||||
# CONFIG_MWINCHIP3D is not set
|
||||
# CONFIG_MCYRIXIII is not set
|
||||
# CONFIG_MVIAC3_2 is not set
|
||||
|
||||
CONFIG_NR_CPUS=32
|
||||
CONFIG_X86_GENERIC=y
|
||||
# CONFIG_X86_PPRO_FENCE is not set
|
||||
|
||||
CONFIG_TOSHIBA=m
|
||||
|
||||
CONFIG_SONYPI=m
|
||||
CONFIG_SONYPI_COMPAT=y
|
||||
|
||||
# CONFIG_NUMA is not set
|
||||
|
||||
# CONFIG_NOHIGHMEM is not set
|
||||
CONFIG_HIGHMEM4G=y
|
||||
# CONFIG_HIGHMEM64G is not set
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_HIGHPTE=y
|
||||
|
||||
# CONFIG_MATH_EMULATION is not set
|
||||
|
||||
CONFIG_FB_GEODE=y
|
||||
CONFIG_FB_GEODE_LX=y
|
||||
CONFIG_FB_GEODE_GX=y
|
||||
# CONFIG_FB_GEODE_GX1 is not set
|
||||
|
||||
# CONFIG_PCI_GOBIOS is not set
|
||||
# CONFIG_PCI_GODIRECT is not set
|
||||
# CONFIG_PCI_GOMMCONFIG is not set
|
||||
CONFIG_PCI_GOANY=y
|
||||
|
||||
CONFIG_IBM_ASM=m
|
||||
|
||||
#
|
||||
# APM (Advanced Power Management) BIOS Support
|
||||
#
|
||||
CONFIG_APM=y
|
||||
# CONFIG_APM_IGNORE_USER_SUSPEND is not set
|
||||
# CONFIG_APM_DO_ENABLE is not set
|
||||
CONFIG_APM_CPU_IDLE=y
|
||||
# CONFIG_APM_DISPLAY_BLANK is not set
|
||||
# CONFIG_APM_ALLOW_INTS is not set
|
||||
|
||||
CONFIG_ACPI_BLACKLIST_YEAR=1999
|
||||
|
||||
|
||||
# CONFIG_X86_POWERNOW_K6 is not set
|
||||
CONFIG_X86_POWERNOW_K7=y
|
||||
# CONFIG_X86_GX_SUSPMOD is not set
|
||||
CONFIG_X86_SPEEDSTEP_ICH=y
|
||||
CONFIG_X86_SPEEDSTEP_SMI=y
|
||||
CONFIG_X86_SPEEDSTEP_LIB=y
|
||||
# CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not set
|
||||
CONFIG_X86_LONGRUN=y
|
||||
# CONFIG_X86_LONGHAUL is not set
|
||||
# CONFIG_X86_CPUFREQ_NFORCE2 is not set
|
||||
# e_powersaver is dangerous
|
||||
# CONFIG_X86_E_POWERSAVER is not set
|
||||
|
||||
CONFIG_X86_HT=y
|
||||
CONFIG_X86_TRAMPOLINE=y
|
||||
|
||||
|
||||
# CONFIG_4KSTACKS is not set
|
||||
|
||||
CONFIG_PCI_DIRECT=y
|
||||
|
||||
# SHPC has half-arsed PCI probing, which makes it load on too many systems
|
||||
# CONFIG_HOTPLUG_PCI_SHPC is not set
|
||||
|
||||
CONFIG_BLK_DEV_AMD74XX=y
|
||||
|
||||
CONFIG_I2C_ALI1535=m
|
||||
CONFIG_I2C_ALI15X3=m
|
||||
CONFIG_I2C_ALI1563=m
|
||||
CONFIG_I2C_SIS5595=m
|
||||
CONFIG_I2C_SIS630=m
|
||||
|
||||
CONFIG_SCx200_ACB=m
|
||||
|
||||
# CONFIG_X86_REBOOTFIXUPS is not set
|
||||
|
||||
CONFIG_PC8736x_GPIO=m
|
||||
# CONFIG_NSC_GPIO is not set
|
||||
CONFIG_CS5535_GPIO=m
|
||||
CONFIG_GPIO_SCH=m
|
||||
|
||||
CONFIG_SND_ISA=y
|
||||
CONFIG_SND_ES18XX=m
|
||||
|
||||
CONFIG_HW_RANDOM_GEODE=m
|
||||
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
|
||||
CONFIG_TC1100_WMI=m
|
||||
|
||||
CONFIG_IB700_WDT=m
|
||||
|
||||
CONFIG_PHYSICAL_ALIGN=0x400000
|
||||
CONFIG_PHYSICAL_START=0x400000
|
||||
|
||||
# CONFIG_KEXEC_JUMP is not set
|
||||
|
||||
CONFIG_CRYPTO_AES_586=y
|
||||
CONFIG_CRYPTO_DEV_GEODE=m
|
||||
CONFIG_CRYPTO_TWOFISH_586=m
|
||||
|
||||
CONFIG_VIDEO_CAFE_CCIC=m
|
||||
|
||||
CONFIG_XEN_MAX_DOMAIN_MEMORY=8
|
||||
|
||||
CONFIG_MTD_NAND_CAFE=m
|
||||
|
||||
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
|
||||
|
||||
|
||||
CONFIG_OLPC=y
|
||||
CONFIG_OLPC_OPENFIRMWARE=y
|
||||
CONFIG_BATTERY_OLPC=y
|
||||
CONFIG_MOUSE_PS2_OLPC=y
|
||||
CONFIG_OLPC_XO1_PM=y
|
||||
CONFIG_OLPC_XO15_SCI=y
|
||||
CONFIG_OLPC_XO1_RTC=y
|
||||
CONFIG_OLPC_XO1_SCI=y
|
||||
# CONFIG_ALIX is not set
|
||||
# staging
|
||||
# CONFIG_FB_OLPC_DCON is not set
|
||||
|
||||
# CONFIG_IRQ_DOMAIN_DEBUG is not set
|
||||
|
||||
# CONFIG_SPARSE_IRQ is not set
|
||||
|
||||
CONFIG_RCU_FANOUT=32
|
||||
|
||||
# CONFIG_X86_ANCIENT_MCE is not set
|
||||
|
||||
# CONFIG_X86_MRST is not set
|
||||
|
||||
CONFIG_I2C_PXA=m
|
||||
# CONFIG_GPIO_LANGWELL is not set
|
||||
|
||||
# CONFIG_INTEL_TXT is not set
|
||||
|
||||
CONFIG_GEODE_WDT=m
|
||||
CONFIG_CS5535_MFGPT=m
|
||||
CONFIG_CS5535_CLOCK_EVENT_SRC=m
|
||||
|
||||
CONFIG_LEDS_INTEL_SS4200=m
|
||||
|
||||
CONFIG_OLPC_XO1=m
|
||||
CONFIG_XO1_RFKILL=m
|
||||
|
||||
CONFIG_X86_32_IRIS=m
|
||||
|
||||
|
||||
CONFIG_MTD_OF_PARTS=y
|
||||
CONFIG_MTD_PHYSMAP_OF=m
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
CONFIG_SERIAL_OF_PLATFORM=m
|
||||
CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
|
||||
# CONFIG_MMC_SDHCI_OF is not set
|
||||
|
||||
# CONFIG_X86_INTEL_MID is not set
|
||||
|
||||
CONFIG_MFD_CS5535=m
|
||||
|
||||
# I2O enabled only for 32-bit x86, disabled for PAE kernel
|
||||
CONFIG_I2O=m
|
||||
CONFIG_I2O_BLOCK=m
|
||||
CONFIG_I2O_SCSI=m
|
||||
CONFIG_I2O_PROC=m
|
||||
CONFIG_I2O_CONFIG=y
|
||||
CONFIG_I2O_EXT_ADAPTEC=y
|
||||
CONFIG_I2O_CONFIG_OLD_IOCTL=y
|
||||
CONFIG_I2O_BUS=m
|
||||
|
||||
# CONFIG_EDAC_SBRIDGE is not set
|
||||
|
||||
# CONFIG_X86_WANT_INTEL_MID is not set
|
||||
# CONFIG_OF_SELFTEST is not set
|
||||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
# CONFIG_GEOS is not set
|
||||
# CONFIG_NET5501 is not set
|
||||
# CONFIG_MDIO_BUS_MUX_GPIO is not set
|
||||
# CONFIG_GPIO_SODAVILLE is not set
|
||||
# CONFIG_BACKLIGHT_OT200 is not set
|
||||
|
||||
# CONFIG_STA2X11 is not set
|
||||
|
|
@ -1,216 +1,123 @@
|
|||
CONFIG_UID16=y
|
||||
# CONFIG_64BIT is not set
|
||||
# CONFIG_KERNEL_LZMA is not set
|
||||
|
||||
#
|
||||
# Processor type and features
|
||||
#
|
||||
#
|
||||
# Enable summit and co via the generic arch
|
||||
#
|
||||
CONFIG_X86_EXTENDED_PLATFORM=y
|
||||
CONFIG_X86_32_NON_STANDARD=y
|
||||
|
||||
# CONFIG_X86_ELAN is not set
|
||||
# CONFIG_X86_NUMAQ is not set
|
||||
# CONFIG_X86_SUMMIT is not set
|
||||
CONFIG_X86_BIGSMP=y
|
||||
# CONFIG_X86_VISWS is not set
|
||||
# CONFIG_X86_RDC321X is not set
|
||||
# CONFIG_X86_ES7000 is not set
|
||||
# CONFIG_M386 is not set
|
||||
# CONFIG_M486 is not set
|
||||
# CONFIG_M586 is not set
|
||||
# CONFIG_M586TSC is not set
|
||||
# CONFIG_M586MMX is not set
|
||||
CONFIG_M686=y
|
||||
# CONFIG_MPENTIUMII is not set
|
||||
# CONFIG_MPENTIUMIII is not set
|
||||
# CONFIG_MPENTIUMM is not set
|
||||
# CONFIG_MPENTIUM4 is not set
|
||||
# CONFIG_MK6 is not set
|
||||
# CONFIG_MK7 is not set
|
||||
# CONFIG_MK8 is not set
|
||||
# CONFIG_MCRUSOE is not set
|
||||
# CONFIG_MWINCHIPC6 is not set
|
||||
# CONFIG_MWINCHIP3D is not set
|
||||
# CONFIG_MCYRIXIII is not set
|
||||
# CONFIG_MVIAC3_2 is not set
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=64
|
||||
|
||||
CONFIG_X86_GENERIC=y
|
||||
# CONFIG_X86_PPRO_FENCE is not set
|
||||
|
||||
CONFIG_HPET=y
|
||||
CONFIG_HPET_TIMER=y
|
||||
# CONFIG_HPET_MMAP is not set
|
||||
CONFIG_X86_MCE=y
|
||||
CONFIG_TOSHIBA=m
|
||||
|
||||
CONFIG_I8K=m
|
||||
CONFIG_SONYPI=m
|
||||
CONFIG_SONYPI_COMPAT=y
|
||||
CONFIG_MICROCODE=m
|
||||
CONFIG_MICROCODE_INTEL=y
|
||||
CONFIG_MICROCODE_AMD=y
|
||||
|
||||
CONFIG_X86_MSR=y
|
||||
CONFIG_X86_CPUID=y
|
||||
CONFIG_EDD=m
|
||||
# CONFIG_EDD_OFF is not set
|
||||
# CONFIG_NUMA is not set
|
||||
|
||||
# CONFIG_NOHIGHMEM is not set
|
||||
CONFIG_HIGHMEM4G=y
|
||||
# CONFIG_HIGHMEM64G is not set
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_HIGHPTE=y
|
||||
|
||||
# CONFIG_MATH_EMULATION is not set
|
||||
CONFIG_MTRR=y
|
||||
CONFIG_MTRR_SANITIZER=y
|
||||
CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
|
||||
CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
|
||||
CONFIG_X86_PAT=y
|
||||
CONFIG_X86_PM_TIMER=y
|
||||
|
||||
CONFIG_EFI=y
|
||||
CONFIG_EFI_STUB=y
|
||||
CONFIG_EFI_VARS=y
|
||||
CONFIG_EFI_PCDP=y
|
||||
CONFIG_FB_EFI=y
|
||||
|
||||
# FIXME: 32bit only?
|
||||
# CONFIG_FB_N411 is not set
|
||||
|
||||
CONFIG_DMAR=y
|
||||
CONFIG_INTEL_IOMMU=y
|
||||
CONFIG_DMAR_BROKEN_GFX_WA=y
|
||||
CONFIG_DMAR_FLOPPY_WA=y
|
||||
CONFIG_DMAR_DEFAULT_ON=y
|
||||
|
||||
CONFIG_FB_GEODE=y
|
||||
CONFIG_FB_GEODE_LX=y
|
||||
CONFIG_FB_GEODE_GX=y
|
||||
# CONFIG_FB_GEODE_GX1 is not set
|
||||
|
||||
# CONFIG_PCI_GOBIOS is not set
|
||||
# CONFIG_PCI_GODIRECT is not set
|
||||
# CONFIG_PCI_GOMMCONFIG is not set
|
||||
CONFIG_PCI_GOANY=y
|
||||
|
||||
#
|
||||
# x86 specific drivers
|
||||
#
|
||||
CONFIG_PCMCIA_FDOMAIN=m
|
||||
CONFIG_SCSI_FUTURE_DOMAIN=m
|
||||
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
|
||||
# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
|
||||
CONFIG_SCSI_ADVANSYS=m
|
||||
|
||||
CONFIG_CC_STACKPROTECTOR=y
|
||||
|
||||
CONFIG_SECCOMP=y
|
||||
|
||||
CONFIG_CAPI_EICON=y
|
||||
|
||||
# I2O enabled only for 32-bit x86, disabled for PAE kernel
|
||||
CONFIG_I2O=m
|
||||
CONFIG_I2O_BLOCK=m
|
||||
CONFIG_I2O_SCSI=m
|
||||
CONFIG_I2O_PROC=m
|
||||
CONFIG_I2O_CONFIG=y
|
||||
CONFIG_I2O_EXT_ADAPTEC=y
|
||||
CONFIG_I2O_CONFIG_OLD_IOCTL=y
|
||||
CONFIG_I2O_BUS=m
|
||||
|
||||
#
|
||||
# APM (Advanced Power Management) BIOS Support
|
||||
#
|
||||
CONFIG_APM=y
|
||||
# CONFIG_APM_IGNORE_USER_SUSPEND is not set
|
||||
# CONFIG_APM_DO_ENABLE is not set
|
||||
CONFIG_APM_CPU_IDLE=y
|
||||
# CONFIG_APM_DISPLAY_BLANK is not set
|
||||
# CONFIG_APM_ALLOW_INTS is not set
|
||||
|
||||
#
|
||||
# Kernel debugging
|
||||
#
|
||||
CONFIG_X86_MPPARSE=y
|
||||
# CONFIG_X86_VERBOSE_BOOTUP is not set
|
||||
# CONFIG_MMIOTRACE_TEST is not set
|
||||
# CONFIG_DEBUG_PER_CPU_MAPS is not set
|
||||
CONFIG_DEBUG_RODATA=y
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
|
||||
CONFIG_ACPI=y
|
||||
CONFIG_ACPI_AC=y
|
||||
# CONFIG_ACPI_ASUS is not set
|
||||
CONFIG_ACPI_PROCFS_POWER=y
|
||||
CONFIG_ACPI_SYSFS_POWER=y
|
||||
CONFIG_ACPI_BATTERY=y
|
||||
CONFIG_ACPI_BLACKLIST_YEAR=1999
|
||||
CONFIG_ACPI_BUTTON=y
|
||||
CONFIG_ACPI_CONTAINER=m
|
||||
CONFIG_ACPI_DOCK=y
|
||||
CONFIG_ACPI_FAN=y
|
||||
CONFIG_ACPI_NUMA=y
|
||||
CONFIG_ACPI_PROCESSOR=y
|
||||
CONFIG_ACPI_POWER=y
|
||||
CONFIG_ACPI_PROCFS=y
|
||||
CONFIG_ACPI_SBS=m
|
||||
CONFIG_ACPI_SLEEP=y
|
||||
CONFIG_ACPI_THERMAL=y
|
||||
CONFIG_TOPSTAR_LAPTOP=m
|
||||
CONFIG_ACPI_TOSHIBA=m
|
||||
CONFIG_ACPI_VIDEO=m
|
||||
# FIXME: Next two are deprecated. Remove them when they disappear upstream
|
||||
# CONFIG_ACPI_PROCFS_POWER is not set
|
||||
# CONFIG_ACPI_PROC_EVENT is not set
|
||||
CONFIG_PNPACPI=y
|
||||
CONFIG_ACPI_POWER_METER=m
|
||||
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
|
||||
CONFIG_ACPI_HED=m
|
||||
CONFIG_ACPI_APEI=y
|
||||
CONFIG_ACPI_APEI_PCIEAER=y
|
||||
CONFIG_ACPI_APEI_GHES=m
|
||||
CONFIG_ACPI_APEI_GHES=y
|
||||
CONFIG_ACPI_APEI_MEMORY_FAILURE=y
|
||||
# CONFIG_ACPI_APEI_EINJ is not set
|
||||
CONFIG_ACPI_IPMI=m
|
||||
CONFIG_ACPI_CUSTOM_METHOD=m
|
||||
CONFIG_ACPI_BGRT=m
|
||||
|
||||
CONFIG_X86_ACPI_CPUFREQ=y
|
||||
CONFIG_X86_PCC_CPUFREQ=y
|
||||
# CONFIG_X86_POWERNOW_K6 is not set
|
||||
CONFIG_X86_POWERNOW_K7=y
|
||||
CONFIG_X86_POWERNOW_K8=y
|
||||
# CONFIG_X86_GX_SUSPMOD is not set
|
||||
# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
|
||||
CONFIG_X86_SPEEDSTEP_ICH=y
|
||||
CONFIG_X86_SPEEDSTEP_SMI=y
|
||||
CONFIG_X86_SPEEDSTEP_LIB=y
|
||||
# CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not set
|
||||
CONFIG_X86_P4_CLOCKMOD=y
|
||||
CONFIG_X86_LONGRUN=y
|
||||
# CONFIG_X86_LONGHAUL is not set
|
||||
# CONFIG_X86_CPUFREQ_NFORCE2 is not set
|
||||
# e_powersaver is dangerous
|
||||
# CONFIG_X86_E_POWERSAVER is not set
|
||||
|
||||
CONFIG_X86_HT=y
|
||||
CONFIG_X86_TRAMPOLINE=y
|
||||
# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
|
||||
|
||||
#
|
||||
# various x86 specific drivers
|
||||
#
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_IBM_ASM=m
|
||||
CONFIG_CRYPTO_TWOFISH_586=m
|
||||
CONFIG_CRYPTO_DEV_PADLOCK=m
|
||||
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
|
||||
CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
|
||||
|
||||
CONFIG_GENERIC_ISA_DMA=y
|
||||
CONFIG_SCHED_SMT=y
|
||||
|
||||
CONFIG_SUSPEND=y
|
||||
CONFIG_HIBERNATION=y
|
||||
CONFIG_PM_STD_PARTITION=""
|
||||
|
||||
CONFIG_DEBUG_RODATA=y
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
# CONFIG_4KSTACKS is not set
|
||||
CONFIG_DEBUG_NMI_TIMEOUT=5
|
||||
|
||||
CONFIG_PCI_DIRECT=y
|
||||
CONFIG_PCI_MMCONFIG=y
|
||||
CONFIG_PCI_BIOS=y
|
||||
CONFIG_PCI_IOAPIC=y
|
||||
|
||||
CONFIG_HOTPLUG_PCI=y
|
||||
CONFIG_HOTPLUG_PCI_COMPAQ=m
|
||||
# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
|
||||
CONFIG_HOTPLUG_PCI_IBM=m
|
||||
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
||||
# SHPC has half-arsed PCI probing, which makes it load on too many systems
|
||||
# CONFIG_HOTPLUG_PCI_SHPC is not set
|
||||
|
||||
CONFIG_PM=y
|
||||
|
||||
CONFIG_IPW2100=m
|
||||
|
@ -223,9 +130,6 @@ CONFIG_IPW2200_QOS=y
|
|||
|
||||
CONFIG_BLK_DEV_AMD74XX=y
|
||||
|
||||
CONFIG_I2C_ALI1535=m
|
||||
CONFIG_I2C_ALI15X3=m
|
||||
CONFIG_I2C_ALI1563=m
|
||||
CONFIG_I2C_AMD756=m
|
||||
CONFIG_I2C_AMD756_S4882=m
|
||||
CONFIG_I2C_AMD8111=m
|
||||
|
@ -234,45 +138,35 @@ CONFIG_I2C_ISCH=m
|
|||
CONFIG_I2C_NFORCE2=m
|
||||
CONFIG_I2C_NFORCE2_S4985=m
|
||||
CONFIG_I2C_PIIX4=m
|
||||
CONFIG_I2C_SIS5595=m
|
||||
CONFIG_I2C_SIS630=m
|
||||
CONFIG_I2C_SIS96X=m
|
||||
|
||||
CONFIG_I2C_VIA=m
|
||||
CONFIG_I2C_VIAPRO=m
|
||||
|
||||
CONFIG_SCx200_ACB=m
|
||||
|
||||
# CONFIG_X86_REBOOTFIXUPS is not set
|
||||
|
||||
CONFIG_DELL_RBU=m
|
||||
CONFIG_DCDBAS=m
|
||||
|
||||
CONFIG_GPIO_SCH=m
|
||||
CONFIG_PC8736x_GPIO=m
|
||||
# CONFIG_NSC_GPIO is not set
|
||||
CONFIG_CS5535_GPIO=m
|
||||
|
||||
CONFIG_EDAC=y
|
||||
# CONFIG_EDAC_DEBUG is not set
|
||||
CONFIG_EDAC_MM_EDAC=m
|
||||
CONFIG_EDAC_AMD76X=m
|
||||
CONFIG_EDAC_AMD8111=m
|
||||
CONFIG_EDAC_AMD8131=m
|
||||
CONFIG_EDAC_E7XXX=m
|
||||
CONFIG_EDAC_E752X=m
|
||||
CONFIG_EDAC_I82860=m
|
||||
CONFIG_EDAC_I82875P=m
|
||||
CONFIG_EDAC_I82975X=m
|
||||
CONFIG_EDAC_I3000=m
|
||||
CONFIG_EDAC_I3200=m
|
||||
CONFIG_EDAC_I5000=m
|
||||
CONFIG_EDAC_I5100=m
|
||||
CONFIG_EDAC_I5400=m
|
||||
CONFIG_EDAC_R82600=m
|
||||
CONFIG_EDAC_AMD8131=m
|
||||
CONFIG_EDAC_AMD8111=m
|
||||
CONFIG_EDAC_I7CORE=m
|
||||
CONFIG_EDAC_I3000=m
|
||||
CONFIG_EDAC_I7300=m
|
||||
CONFIG_EDAC_I7CORE=m
|
||||
CONFIG_EDAC_R82600=m
|
||||
CONFIG_EDAC_X38=m
|
||||
CONFIG_EDAC_MCE_INJ=m
|
||||
CONFIG_EDAC_DECODE_MCE=m
|
||||
CONFIG_EDAC_LEGACY_SYSFS=y
|
||||
|
||||
CONFIG_SCHED_MC=y
|
||||
|
||||
|
@ -283,83 +177,80 @@ CONFIG_TCG_INFINEON=m
|
|||
|
||||
CONFIG_HW_RANDOM_INTEL=m
|
||||
CONFIG_HW_RANDOM_AMD=m
|
||||
CONFIG_HW_RANDOM_GEODE=m
|
||||
CONFIG_HW_RANDOM_VIA=m
|
||||
|
||||
|
||||
# CONFIG_COMPAT_VDSO is not set
|
||||
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
|
||||
CONFIG_X86_PLATFORM_DEVICES=y
|
||||
|
||||
CONFIG_ASUS_LAPTOP=m
|
||||
CONFIG_COMPAL_LAPTOP=m
|
||||
CONFIG_DELL_LAPTOP=m
|
||||
CONFIG_EEEPC_LAPTOP=m
|
||||
CONFIG_EEEPC_WMI=m
|
||||
CONFIG_FUJITSU_LAPTOP=m
|
||||
# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
|
||||
CONFIG_IDEAPAD_LAPTOP=m
|
||||
CONFIG_MSI_LAPTOP=m
|
||||
CONFIG_PANASONIC_LAPTOP=m
|
||||
CONFIG_SAMSUNG_LAPTOP=m
|
||||
CONFIG_SONY_LAPTOP=m
|
||||
CONFIG_DELL_LAPTOP=m
|
||||
CONFIG_TOPSTAR_LAPTOP=m
|
||||
CONFIG_FUJITSU_TABLET=m
|
||||
CONFIG_AMILO_RFKILL=m
|
||||
|
||||
|
||||
CONFIG_ACPI_WMI=m
|
||||
CONFIG_ACER_WMI=m
|
||||
CONFIG_ACERHDF=m
|
||||
CONFIG_TC1100_WMI=m
|
||||
CONFIG_ASUS_WMI=m
|
||||
CONFIG_ASUS_NB_WMI=m
|
||||
CONFIG_HP_WMI=m
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
CONFIG_DELL_WMI=m
|
||||
CONFIG_DELL_WMI_AIO=m
|
||||
CONFIG_ASUS_WMI=m
|
||||
CONFIG_ASUS_NB_WMI=m
|
||||
CONFIG_XO15_EBOOK=m
|
||||
CONFIG_EEEPC_WMI=m
|
||||
CONFIG_INTEL_OAKTRAIL=m
|
||||
CONFIG_SAMSUNG_Q10=m
|
||||
CONFIG_XO15_EBOOK=m
|
||||
|
||||
# CONFIG_TOUCHSCREEN_INTEL_MID is not set
|
||||
|
||||
# CONFIG_SMSC37B787_WDT is not set
|
||||
CONFIG_W83697HF_WDT=m
|
||||
CONFIG_IB700_WDT=m
|
||||
CONFIG_VIA_WDT=m
|
||||
CONFIG_IE6XX_WDT=m
|
||||
|
||||
CONFIG_RELOCATABLE=y
|
||||
CONFIG_PHYSICAL_ALIGN=0x400000
|
||||
CONFIG_PHYSICAL_START=0x400000
|
||||
CONFIG_CRASH_DUMP=y
|
||||
# CONFIG_KEXEC_JUMP is not set
|
||||
CONFIG_PROC_VMCORE=y
|
||||
CONFIG_CRASH=m
|
||||
|
||||
CONFIG_CRYPTO_DEV_GEODE=m
|
||||
|
||||
CONFIG_VIDEO_CAFE_CCIC=m
|
||||
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM=m
|
||||
CONFIG_KVM_INTEL=m
|
||||
CONFIG_KVM_AMD=m
|
||||
CONFIG_LGUEST=m
|
||||
CONFIG_LGUEST_GUEST=y
|
||||
|
||||
CONFIG_PARAVIRT_GUEST=y
|
||||
CONFIG_PARAVIRT=y
|
||||
CONFIG_PARAVIRT_TIME_ACCOUNTING=y
|
||||
# CONFIG_PARAVIRT_DEBUG is not set
|
||||
|
||||
# PARAVIRT_SPINLOCKS has a 5% perf hit
|
||||
# PARAVIRT_SPINLOCKS has a 5% perf hit on native hw (see kconfig)
|
||||
# CONFIG_PARAVIRT_SPINLOCKS is not set
|
||||
|
||||
CONFIG_KVM_CLOCK=y
|
||||
CONFIG_KVM_GUEST=y
|
||||
CONFIG_KVM_MMU_AUDIT=y # default $x would be nice...
|
||||
CONFIG_LGUEST_GUEST=y
|
||||
CONFIG_VMI=y
|
||||
|
||||
CONFIG_XEN=y
|
||||
# CONFIG_XEN_DEBUG is not set
|
||||
CONFIG_XEN_MAX_DOMAIN_MEMORY=8
|
||||
CONFIG_XEN_BALLOON=y
|
||||
CONFIG_XEN_SCRUB_PAGES=y
|
||||
CONFIG_XEN_SAVE_RESTORE=y
|
||||
CONFIG_HVC_XEN=y
|
||||
CONFIG_HVC_XEN_FRONTEND=y
|
||||
CONFIG_XEN_FBDEV_FRONTEND=y
|
||||
CONFIG_XEN_KBDDEV_FRONTEND=y
|
||||
CONFIG_XEN_BLKDEV_FRONTEND=m
|
||||
CONFIG_XEN_NETDEV_FRONTEND=m
|
||||
CONFIG_XEN_NETDEV_BACKEND=m
|
||||
|
@ -371,15 +262,15 @@ CONFIG_XEN_COMPAT_XENFS=y
|
|||
CONFIG_XEN_BACKEND=y
|
||||
CONFIG_XEN_BLKDEV_BACKEND=m
|
||||
CONFIG_XEN_DEBUG_FS=y
|
||||
CONFIG_XEN_PLATFORM_PCI=m
|
||||
CONFIG_XEN_PLATFORM_PCI=y
|
||||
CONFIG_XEN_GNTDEV=m
|
||||
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
|
||||
CONFIG_XEN_SELFBALLOONING=y
|
||||
CONFIG_XEN_PCIDEV_BACKEND=m
|
||||
CONFIG_XEN_ACPI_PROCESSOR=m
|
||||
|
||||
CONFIG_MTD_ESB2ROM=m
|
||||
CONFIG_MTD_CK804XROM=m
|
||||
CONFIG_MTD_NAND_CAFE=m
|
||||
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
|
@ -411,152 +302,118 @@ CONFIG_SENSORS_FAM15H_POWER=m
|
|||
CONFIG_SENSORS_ACPI_POWER=m
|
||||
|
||||
# CONFIG_CPA_DEBUG is not set
|
||||
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
|
||||
|
||||
CONFIG_HP_WATCHDOG=m
|
||||
CONFIG_NV_TCO=m
|
||||
CONFIG_SP5100_TCO=m
|
||||
|
||||
CONFIG_OLPC=y
|
||||
CONFIG_OLPC_OPENFIRMWARE=y
|
||||
CONFIG_BATTERY_OLPC=y
|
||||
CONFIG_MOUSE_PS2_OLPC=y
|
||||
|
||||
# staging
|
||||
# CONFIG_FB_OLPC_DCON is not set
|
||||
|
||||
CONFIG_STRICT_DEVMEM=y
|
||||
|
||||
# CONFIG_NO_BOOTMEM is not set
|
||||
|
||||
# CONFIG_MEMTEST is not set
|
||||
# CONFIG_DEBUG_TLBFLUSH is not set
|
||||
# CONFIG_MAXSMP is not set
|
||||
CONFIG_MTRR_SANITIZER=y
|
||||
CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
|
||||
CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
|
||||
CONFIG_SYSPROF_TRACER=y
|
||||
|
||||
# CONFIG_X86_VERBOSE_BOOTUP is not set
|
||||
# CONFIG_MMIOTRACE_TEST is not set
|
||||
|
||||
# CONFIG_DEBUG_PER_CPU_MAPS is not set
|
||||
|
||||
CONFIG_HP_ILO=m
|
||||
|
||||
CONFIG_BACKLIGHT_APPLE=m
|
||||
|
||||
CONFIG_OPROFILE_IBS=y
|
||||
CONFIG_MICROCODE_INTEL=y
|
||||
CONFIG_MICROCODE_AMD=y
|
||||
|
||||
# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
|
||||
CONFIG_X86_RESERVE_LOW_64K=y
|
||||
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
|
||||
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
|
||||
CONFIG_PANASONIC_LAPTOP=m
|
||||
|
||||
CONFIG_X86_PTRACE_BTS=y
|
||||
|
||||
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
|
||||
|
||||
CONFIG_POWER_TRACER=y
|
||||
CONFIG_HW_BRANCH_TRACER=y
|
||||
|
||||
# CONFIG_SPARSE_IRQ is not set
|
||||
|
||||
CONFIG_RCU_FANOUT=32
|
||||
|
||||
# CONFIG_IOMMU_STRESS is not set
|
||||
|
||||
CONFIG_PERF_COUNTERS=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
CONFIG_EVENT_PROFILE=y
|
||||
|
||||
CONFIG_X86_MCE=y
|
||||
CONFIG_X86_MCE_INTEL=y
|
||||
CONFIG_X86_MCE_AMD=y
|
||||
# CONFIG_X86_ANCIENT_MCE is not set
|
||||
# CONFIG_X86_MCE_INJECT is not set
|
||||
|
||||
# CONFIG_X86_MRST is not set
|
||||
CONFIG_SFI=y
|
||||
|
||||
CONFIG_INPUT_WINBOND_CIR=m
|
||||
CONFIG_I2C_SCMI=m
|
||||
CONFIG_I2C_PXA=m
|
||||
CONFIG_SBC_FITPC2_WATCHDOG=m
|
||||
CONFIG_EDAC_I3200=m
|
||||
CONFIG_EDAC_DECODE_MCE=m
|
||||
|
||||
# CONFIG_GPIO_LANGWELL is not set
|
||||
|
||||
# CONFIG_INTEL_TXT is not set
|
||||
|
||||
CONFIG_CS5535_MFGPT=m
|
||||
CONFIG_GEODE_WDT=m
|
||||
CONFIG_CS5535_CLOCK_EVENT_SRC=m
|
||||
|
||||
CONFIG_LEDS_INTEL_SS4200=m
|
||||
|
||||
CONFIG_X86_DECODER_SELFTEST=y
|
||||
|
||||
CONFIG_ACPI_CMPC=m
|
||||
CONFIG_MSI_WMI=m
|
||||
CONFIG_TOSHIBA_BT_RFKILL=m
|
||||
# CONFIG_SAMSUNG_LAPTOP is not set
|
||||
|
||||
CONFIG_VGA_SWITCHEROO=y
|
||||
CONFIG_LPC_SCH=m
|
||||
|
||||
CONFIG_GPIO_ICH=m
|
||||
|
||||
CONFIG_PCI_CNB20LE_QUIRK=y
|
||||
|
||||
CONFIG_ACPI_EC_DEBUGFS=m
|
||||
# CONFIG_ACPI_APEI_ERST_DEBUG is not set
|
||||
# CONFIG_ACPI_QUICKSTART is not set
|
||||
|
||||
CONFIG_INTEL_IDLE=y
|
||||
|
||||
# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
|
||||
CONFIG_SENSORS_PKGTEMP=m
|
||||
CONFIG_F71808E_WDT=m
|
||||
CONFIG_HPWDT_NMI_DECODING=y
|
||||
# CONFIG_MFD_TPS6586X is not set
|
||||
# CONFIG_INTEL_MID_DMAC is not set
|
||||
CONFIG_PCH_DMA=m
|
||||
# CONFIG_ACPI_QUICKSTART is not set
|
||||
CONFIG_IDEAPAD_ACPI=m
|
||||
CONFIG_INTEL_IPS=m
|
||||
# CONFIG_IBM_RTL is not set
|
||||
|
||||
CONFIG_OLPC_XO1=m
|
||||
CONFIG_XO1_RFKILL=m
|
||||
CONFIG_VIDEO_VIA_CAMERA=m
|
||||
|
||||
CONFIG_EDAC_MCE_INJ=m
|
||||
# CONFIG_V4L_RADIO_ISA_DRIVERS is not set
|
||||
CONFIG_IRQ_TIME_ACCOUNTING=y
|
||||
CONFIG_X86_RESERVE_LOW=64
|
||||
|
||||
# CONFIG_IRQ_DOMAIN_DEBUG is not set
|
||||
|
||||
CONFIG_PCH_GBE=m
|
||||
CONFIG_PCH_PHUB=m
|
||||
|
||||
CONFIG_JUMP_LABEL=y
|
||||
|
||||
CONFIG_X86_32_IRIS=m
|
||||
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
|
||||
CONFIG_CRYPTO_AES_NI_INTEL=y
|
||||
CONFIG_CRYPTO_AES_586=y
|
||||
|
||||
CONFIG_MTD_OF_PARTS=m
|
||||
CONFIG_MTD_PHYSMAP_OF=m
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
CONFIG_SERIAL_OF_PLATFORM=m
|
||||
CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
|
||||
# CONFIG_MMC_SDHCI_OF is not set
|
||||
CONFIG_CRYPTO_SERPENT_SSE2_586=m
|
||||
|
||||
CONFIG_HP_ACCEL=m
|
||||
|
||||
# CONFIG_RAPIDIO is not set
|
||||
|
||||
# CONFIG_X86_INTEL_MID is not set
|
||||
|
||||
# CONFIG_GPIO_GENERIC_PLATFORM is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
|
||||
CONFIG_SCHED_SMT=y
|
||||
CONFIG_CC_STACKPROTECTOR=y
|
||||
CONFIG_RELOCATABLE=y
|
||||
|
||||
CONFIG_HYPERV=m
|
||||
CONFIG_HYPERV_UTILS=m
|
||||
CONFIG_HID_HYPERV_MOUSE=m
|
||||
CONFIG_HYPERV_NET=m
|
||||
CONFIG_HYPERV_STORAGE=m
|
||||
|
||||
# Depends on PCI
|
||||
CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
|
||||
|
||||
CONFIG_DRM_GMA500=m
|
||||
# CONFIG_DRM_GMA600 is not set
|
||||
# CONFIG_DRM_GMA3600 is not set
|
||||
|
||||
CONFIG_RCU_FANOUT_LEAF=16
|
||||
|
||||
# Maybe enable in debug kernels?
|
||||
# CONFIG_DEBUG_NMI_SELFTEST is not set
|
||||
|
||||
CONFIG_APPLE_GMUX=m
|
||||
|
|
|
@ -1,229 +1,70 @@
|
|||
CONFIG_64BIT=y
|
||||
CONFIG_UID16=y
|
||||
# CONFIG_KERNEL_LZMA is not set
|
||||
|
||||
# CONFIG_X86_X32 is not set
|
||||
# CONFIG_MK8 is not set
|
||||
# CONFIG_MPSC is not set
|
||||
CONFIG_GENERIC_CPU=y
|
||||
CONFIG_X86_EXTENDED_PLATFORM=y
|
||||
|
||||
# CONFIG_X86_VSMP is not set
|
||||
# CONFIG_X86_UV is not set
|
||||
CONFIG_X86_MSR=y
|
||||
CONFIG_X86_CPUID=y
|
||||
CONFIG_MTRR=y
|
||||
CONFIG_NUMA=y
|
||||
CONFIG_K8_NUMA=y
|
||||
CONFIG_AMD_NUMA=y
|
||||
CONFIG_X86_64_ACPI_NUMA=y
|
||||
# CONFIG_NUMA_EMU is not set
|
||||
CONFIG_NR_CPUS=512
|
||||
CONFIG_X86_POWERNOW_K8=m
|
||||
CONFIG_X86_P4_CLOCKMOD=m
|
||||
# CONFIG_X86_NUMACHIP is not set
|
||||
|
||||
|
||||
CONFIG_NR_CPUS=256
|
||||
CONFIG_PHYSICAL_START=0x1000000
|
||||
|
||||
CONFIG_IA32_EMULATION=y
|
||||
# CONFIG_IA32_AOUT is not set
|
||||
|
||||
CONFIG_AMD_IOMMU=y
|
||||
CONFIG_AMD_IOMMU_STATS=y
|
||||
CONFIG_AMD_IOMMU_V2=m
|
||||
# CONFIG_IOMMU_DEBUG is not set
|
||||
CONFIG_DEBUG_RODATA=y
|
||||
CONFIG_MICROCODE=m
|
||||
CONFIG_SWIOTLB=y
|
||||
CONFIG_CALGARY_IOMMU=y
|
||||
CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
|
||||
CONFIG_X86_PM_TIMER=y
|
||||
CONFIG_EDD=m
|
||||
# CONFIG_EDD_OFF is not set
|
||||
CONFIG_PCI_BIOS=y
|
||||
CONFIG_PCI_MMCONFIG=y
|
||||
CONFIG_DMAR=y
|
||||
CONFIG_DMAR_BROKEN_GFX_WA=y
|
||||
CONFIG_DMAR_FLOPPY_WA=y
|
||||
CONFIG_DMAR_DEFAULT_ON=y
|
||||
# CONFIG_CALGARY_IOMMU is not set
|
||||
|
||||
CONFIG_KEXEC_JUMP=y
|
||||
|
||||
CONFIG_EFI=y
|
||||
CONFIG_EFI_VARS=y
|
||||
CONFIG_EFI_PCDP=y
|
||||
CONFIG_FB_EFI=y
|
||||
|
||||
CONFIG_SCSI_ADVANSYS=m
|
||||
|
||||
CONFIG_SECCOMP=y
|
||||
|
||||
CONFIG_CAPI_EICON=y
|
||||
|
||||
CONFIG_GENERIC_ISA_DMA=y
|
||||
CONFIG_SCHED_SMT=y
|
||||
CONFIG_SUSPEND=y
|
||||
CONFIG_HIBERNATION=y
|
||||
CONFIG_PM_STD_PARTITION=""
|
||||
|
||||
# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
|
||||
CONFIG_X86_PCC_CPUFREQ=y
|
||||
CONFIG_X86_ACPI_CPUFREQ=y
|
||||
|
||||
CONFIG_ACPI=y
|
||||
CONFIG_ACPI_AC=y
|
||||
# CONFIG_ACPI_ASUS is not set
|
||||
CONFIG_ACPI_PROCFS_POWER=y
|
||||
CONFIG_ACPI_SYSFS_POWER=y
|
||||
CONFIG_ACPI_BATTERY=y
|
||||
CONFIG_ACPI_BLACKLIST_YEAR=0
|
||||
CONFIG_ACPI_BUTTON=y
|
||||
CONFIG_ACPI_CONTAINER=m
|
||||
CONFIG_ACPI_DOCK=y
|
||||
CONFIG_ACPI_FAN=y
|
||||
CONFIG_ACPI_HOTPLUG_MEMORY=m
|
||||
CONFIG_ACPI_NUMA=y
|
||||
CONFIG_ACPI_PROCESSOR=y
|
||||
CONFIG_ACPI_PROCFS=y
|
||||
CONFIG_ACPI_SBS=m
|
||||
CONFIG_ACPI_SLEEP=y
|
||||
CONFIG_ACPI_THERMAL=y
|
||||
CONFIG_ACPI_TOSHIBA=m
|
||||
CONFIG_ACPI_POWER=y
|
||||
CONFIG_ACPI_VIDEO=m
|
||||
# CONFIG_ACPI_PROC_EVENT is not set
|
||||
CONFIG_ACPI_POWER_METER=m
|
||||
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
|
||||
CONFIG_ACPI_HED=m
|
||||
CONFIG_ACPI_APEI=y
|
||||
CONFIG_ACPI_APEI_PCIEAER=y
|
||||
CONFIG_ACPI_APEI_GHES=m
|
||||
# CONFIG_ACPI_APEI_EINJ is not set
|
||||
CONFIG_ACPI_IPMI=m
|
||||
CONFIG_ACPI_CUSTOM_METHOD=m
|
||||
|
||||
CONFIG_X86_PLATFORM_DEVICES=y
|
||||
CONFIG_ASUS_LAPTOP=m
|
||||
CONFIG_COMPAL_LAPTOP=m
|
||||
CONFIG_FUJITSU_LAPTOP=m
|
||||
# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
|
||||
CONFIG_MSI_LAPTOP=m
|
||||
CONFIG_SONY_LAPTOP=m
|
||||
CONFIG_SONYPI_COMPAT=y
|
||||
CONFIG_EEEPC_LAPTOP=m
|
||||
CONFIG_EEEPC_WMI=m
|
||||
CONFIG_DELL_LAPTOP=m
|
||||
CONFIG_ACPI_WMI=m
|
||||
CONFIG_ACER_WMI=m
|
||||
CONFIG_ACERHDF=m
|
||||
CONFIG_HP_WMI=m
|
||||
CONFIG_DELL_WMI=m
|
||||
CONFIG_DELL_WMI_AIO=m
|
||||
CONFIG_ASUS_WMI=m
|
||||
CONFIG_ASUS_NB_WMI=m
|
||||
# CONFIG_XO15_EBOOK is not set
|
||||
CONFIG_INTEL_OAKTRAIL=m
|
||||
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
|
||||
# CONFIG_TOUCHSCREEN_INTEL_MID is not set
|
||||
|
||||
CONFIG_THINKPAD_ACPI=m
|
||||
# CONFIG_THINKPAD_ACPI_DEBUG is not set
|
||||
# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set
|
||||
CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
|
||||
CONFIG_THINKPAD_ACPI_VIDEO=y
|
||||
CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
|
||||
# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
|
||||
|
||||
CONFIG_HOTPLUG_PCI=y
|
||||
CONFIG_HOTPLUG_PCI_COMPAQ=m
|
||||
# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
|
||||
CONFIG_HOTPLUG_PCI_IBM=m
|
||||
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
||||
# SHPC has half-arsed PCI probing, which makes it load on too many systems
|
||||
CONFIG_HOTPLUG_PCI_SHPC=m
|
||||
|
||||
CONFIG_HPET=y
|
||||
# CONFIG_HPET_MMAP is not set
|
||||
CONFIG_PM=y
|
||||
|
||||
CONFIG_IPW2100=m
|
||||
CONFIG_IPW2100_MONITOR=y
|
||||
CONFIG_IPW2200=m
|
||||
CONFIG_IPW2200_MONITOR=y
|
||||
CONFIG_IPW2200_RADIOTAP=y
|
||||
CONFIG_IPW2200_PROMISCUOUS=y
|
||||
CONFIG_IPW2200_QOS=y
|
||||
|
||||
CONFIG_PNP=y
|
||||
CONFIG_PNPACPI=y
|
||||
|
||||
# Really ? not 32bit only ?
|
||||
CONFIG_BLK_DEV_AMD74XX=y
|
||||
CONFIG_CRYPTO_DEV_PADLOCK=m
|
||||
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
|
||||
CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
|
||||
|
||||
CONFIG_CRYPTO_AES_X86_64=y
|
||||
CONFIG_CRYPTO_AES_NI_INTEL=y
|
||||
|
||||
CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m
|
||||
CONFIG_CRYPTO_TWOFISH_X86_64=m
|
||||
CONFIG_CRYPTO_SALSA20_X86_64=m
|
||||
|
||||
CONFIG_X86_MCE=y
|
||||
CONFIG_X86_MCE_INTEL=y
|
||||
CONFIG_X86_MCE_AMD=y
|
||||
CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
|
||||
CONFIG_CRYPTO_SHA1_SSSE3=m
|
||||
CONFIG_CRYPTO_BLOWFISH_X86_64=m
|
||||
CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m
|
||||
CONFIG_CRYPTO_CAMELLIA_X86_64=m
|
||||
CONFIG_CRYPTO_SERPENT_AVX_X86_64=m
|
||||
CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
|
||||
|
||||
# CONFIG_I2C_ALI1535 is not set
|
||||
# CONFIG_I2C_ALI1563 is not set
|
||||
# CONFIG_I2C_ALI15X3 is not set
|
||||
CONFIG_I2C_AMD756=m
|
||||
CONFIG_I2C_AMD756_S4882=m
|
||||
CONFIG_I2C_AMD8111=m
|
||||
CONFIG_I2C_I801=m
|
||||
CONFIG_I2C_ISCH=m
|
||||
CONFIG_I2C_NFORCE2_S4985=m
|
||||
CONFIG_I2C_PIIX4=m
|
||||
# CONFIG_I2C_SIS5595 is not set
|
||||
# CONFIG_I2C_SIS630 is not set
|
||||
|
||||
CONFIG_I2C_SIS96X=m
|
||||
CONFIG_I2C_VIA=m
|
||||
CONFIG_I2C_VIAPRO=m
|
||||
|
||||
CONFIG_DELL_RBU=m
|
||||
CONFIG_DCDBAS=m
|
||||
|
||||
CONFIG_NVRAM=y
|
||||
|
||||
CONFIG_EDAC=y
|
||||
# CONFIG_EDAC_DEBUG is not set
|
||||
CONFIG_EDAC_MM_EDAC=m
|
||||
CONFIG_EDAC_AMD76X=m
|
||||
CONFIG_EDAC_E7XXX=m
|
||||
CONFIG_EDAC_E752X=m
|
||||
CONFIG_EDAC_I5000=m
|
||||
CONFIG_EDAC_I5100=m
|
||||
CONFIG_EDAC_I5400=m
|
||||
CONFIG_EDAC_I82875P=m
|
||||
CONFIG_EDAC_I82860=m
|
||||
CONFIG_EDAC_I82975X=m
|
||||
CONFIG_EDAC_R82600=m
|
||||
CONFIG_EDAC_AMD8131=m
|
||||
CONFIG_EDAC_AMD8111=m
|
||||
CONFIG_EDAC_AMD64=m
|
||||
# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set
|
||||
CONFIG_EDAC_DECODE_MCE=m
|
||||
CONFIG_EDAC_I7CORE=m
|
||||
CONFIG_EDAC_I3000=m
|
||||
CONFIG_EDAC_I7300=m
|
||||
CONFIG_EDAC_X38=m
|
||||
CONFIG_EDAC_SBRIDGE=m
|
||||
|
||||
CONFIG_SCHED_MC=y
|
||||
|
||||
CONFIG_TCG_INFINEON=m
|
||||
|
||||
CONFIG_HW_RANDOM_INTEL=m
|
||||
CONFIG_HW_RANDOM_AMD=m
|
||||
CONFIG_HW_RANDOM_VIA=m
|
||||
|
||||
# CONFIG_HW_RANDOM_GEODE is not set
|
||||
|
||||
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
CONFIG_DEBUG_NMI_TIMEOUT=5
|
||||
|
||||
CONFIG_GPIO_SCH=m
|
||||
# CONFIG_PC8736x_GPIO is not set
|
||||
|
||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||
|
@ -232,8 +73,8 @@ CONFIG_SPARSEMEM=y
|
|||
CONFIG_HAVE_MEMORY_PRESENT=y
|
||||
CONFIG_SPARSEMEM_EXTREME=y
|
||||
CONFIG_SPARSEMEM_VMEMMAP=y
|
||||
CONFIG_MEMORY_HOTPLUG=y
|
||||
CONFIG_MEMORY_HOTREMOVE=y
|
||||
# CONFIG_MEMORY_HOTPLUG is not set
|
||||
# CONFIG_MEMORY_HOTREMOVE is not set
|
||||
|
||||
# CONFIG_BLK_DEV_CMD640 is not set
|
||||
# CONFIG_BLK_DEV_RZ1000 is not set
|
||||
|
@ -242,229 +83,47 @@ CONFIG_MEMORY_HOTREMOVE=y
|
|||
# CONFIG_BLK_DEV_CS5530 is not set
|
||||
# CONFIG_BLK_DEV_CS5535 is not set
|
||||
|
||||
CONFIG_CC_STACKPROTECTOR=y
|
||||
|
||||
CONFIG_SGI_IOC4=m
|
||||
CONFIG_SGI_XP=m
|
||||
CONFIG_SGI_GRU=m
|
||||
# CONFIG_SGI_GRU_DEBUG is not set
|
||||
|
||||
# CONFIG_SMSC37B787_WDT is not set
|
||||
CONFIG_W83697HF_WDT=m
|
||||
|
||||
# CONFIG_VIDEO_CAFE_CCIC is not set
|
||||
|
||||
CONFIG_MTD_ESB2ROM=m
|
||||
CONFIG_MTD_CK804XROM=m
|
||||
|
||||
CONFIG_RELOCATABLE=y
|
||||
CONFIG_MACINTOSH_DRIVERS=y
|
||||
|
||||
CONFIG_CRASH_DUMP=y
|
||||
CONFIG_PHYSICAL_START=0x1000000
|
||||
CONFIG_PROC_VMCORE=y
|
||||
CONFIG_CRASH=m
|
||||
|
||||
CONFIG_DMIID=y
|
||||
CONFIG_DMI_SYSFS=y
|
||||
|
||||
CONFIG_ISCSI_IBFT_FIND=y
|
||||
CONFIG_ISCSI_IBFT=m
|
||||
|
||||
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_CPU_IDLE=y
|
||||
# CONFIG_CPU_IDLE_GOV_LADDER is not set
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM=m
|
||||
CONFIG_KVM_INTEL=m
|
||||
CONFIG_KVM_AMD=m
|
||||
|
||||
CONFIG_PARAVIRT_GUEST=y
|
||||
CONFIG_PARAVIRT=y
|
||||
# CONFIG_PARAVIRT_DEBUG is not set
|
||||
# PARAVIRT_SPINLOCKS has a 5% perf hit
|
||||
# CONFIG_PARAVIRT_SPINLOCKS is not set
|
||||
CONFIG_KVM_CLOCK=y
|
||||
CONFIG_KVM_GUEST=y
|
||||
CONFIG_KVM_MMU_AUDIT=y
|
||||
|
||||
CONFIG_XEN=y
|
||||
# CONFIG_XEN_DEBUG is not set
|
||||
CONFIG_XEN_MAX_DOMAIN_MEMORY=32
|
||||
CONFIG_XEN_BALLOON=y
|
||||
CONFIG_XEN_SCRUB_PAGES=y
|
||||
CONFIG_XEN_SAVE_RESTORE=y
|
||||
CONFIG_HVC_XEN=y
|
||||
CONFIG_XEN_FBDEV_FRONTEND=y
|
||||
CONFIG_XEN_KBDDEV_FRONTEND=y
|
||||
CONFIG_XEN_BLKDEV_FRONTEND=m
|
||||
CONFIG_XEN_NETDEV_FRONTEND=m
|
||||
CONFIG_XEN_NETDEV_BACKEND=m
|
||||
CONFIG_XEN_WDT=m
|
||||
CONFIG_XEN_GRANT_DEV_ALLOC=m
|
||||
CONFIG_XEN_PCIDEV_FRONTEND=m
|
||||
CONFIG_XENFS=m
|
||||
CONFIG_XEN_COMPAT_XENFS=y
|
||||
CONFIG_XEN_MAX_DOMAIN_MEMORY=128
|
||||
# CONFIG_XEN_BALLOON_MEMORY_HOTPLUG is not set
|
||||
CONFIG_XEN_DEV_EVTCHN=m
|
||||
CONFIG_XEN_SYS_HYPERVISOR=y
|
||||
CONFIG_XEN_BACKEND=y
|
||||
CONFIG_XEN_BLKDEV_BACKEND=m
|
||||
CONFIG_XEN_GNTDEV=m
|
||||
CONFIG_XEN_DEBUG_FS=y
|
||||
CONFIG_XEN_PLATFORM_PCI=m
|
||||
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
|
||||
CONFIG_XEN_SELFBALLOONING=y
|
||||
CONFIG_XEN_PCIDEV_BACKEND=m
|
||||
# CONFIG_XEN_MCE_LOG is not set
|
||||
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
|
||||
CONFIG_SENSORS_I5K_AMB=m
|
||||
CONFIG_SENSORS_FAM15H_POWER=m
|
||||
CONFIG_SENSORS_ACPI_POWER=m
|
||||
|
||||
# CONFIG_COMPAT_VDSO is not set
|
||||
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
|
||||
# CONFIG_DEBUG_PER_CPU_MAPS is not set
|
||||
# CONFIG_CPA_DEBUG is not set
|
||||
|
||||
CONFIG_HP_WATCHDOG=m
|
||||
CONFIG_NV_TCO=m
|
||||
CONFIG_SP5100_TCO=m
|
||||
|
||||
CONFIG_FRAME_WARN=2048
|
||||
|
||||
CONFIG_NODES_SHIFT=9
|
||||
CONFIG_X86_PAT=y
|
||||
# FIXME: These should be 32bit only
|
||||
# CONFIG_FB_N411 is not set
|
||||
CONFIG_STRICT_DEVMEM=y
|
||||
|
||||
CONFIG_DIRECT_GBPAGES=y
|
||||
|
||||
# CONFIG_NO_BOOTMEM is not set
|
||||
|
||||
# CONFIG_MEMTEST is not set
|
||||
CONFIG_AMD_IOMMU=y
|
||||
CONFIG_AMD_IOMMU_STATS=y
|
||||
# CONFIG_MAXSMP is not set
|
||||
CONFIG_MTRR_SANITIZER=y
|
||||
CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
|
||||
CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
|
||||
CONFIG_SYSPROF_TRACER=y
|
||||
# CONFIG_X86_VERBOSE_BOOTUP is not set
|
||||
# CONFIG_MMIOTRACE_TEST is not set
|
||||
|
||||
CONFIG_X86_MPPARSE=y
|
||||
|
||||
CONFIG_BACKLIGHT_APPLE=m
|
||||
|
||||
CONFIG_OPROFILE_IBS=y
|
||||
CONFIG_MICROCODE_INTEL=y
|
||||
CONFIG_MICROCODE_AMD=y
|
||||
|
||||
# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
|
||||
CONFIG_X86_RESERVE_LOW_64K=y
|
||||
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
|
||||
CONFIG_PANASONIC_LAPTOP=m
|
||||
|
||||
CONFIG_X86_PTRACE_BTS=y
|
||||
|
||||
CONFIG_I7300_IDLE=m
|
||||
CONFIG_INTR_REMAP=y
|
||||
|
||||
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
|
||||
|
||||
CONFIG_POWER_TRACER=y
|
||||
CONFIG_HW_BRANCH_TRACER=y
|
||||
CONFIG_IRQ_REMAP=y
|
||||
|
||||
CONFIG_X86_X2APIC=y
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
|
||||
CONFIG_RCU_FANOUT=64
|
||||
|
||||
# CONFIG_IOMMU_STRESS is not set
|
||||
|
||||
CONFIG_PERF_COUNTERS=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
CONFIG_EVENT_PROFILE=y
|
||||
|
||||
# CONFIG_X86_MCE_INJECT is not set
|
||||
|
||||
CONFIG_SFI=y
|
||||
CONFIG_INPUT_WINBOND_CIR=m
|
||||
CONFIG_I2C_SCMI=m
|
||||
CONFIG_SBC_FITPC2_WATCHDOG=m
|
||||
CONFIG_EDAC_I3200=m
|
||||
CONFIG_TOPSTAR_LAPTOP=m
|
||||
CONFIG_INTEL_TXT=y
|
||||
|
||||
CONFIG_GPIO_LANGWELL=y
|
||||
|
||||
CONFIG_FUNCTION_GRAPH_TRACER=y
|
||||
|
||||
CONFIG_ACPI_CMPC=m
|
||||
CONFIG_MSI_WMI=m
|
||||
CONFIG_TOSHIBA_BT_RFKILL=m
|
||||
# CONFIG_SAMSUNG_LAPTOP is not set
|
||||
|
||||
CONFIG_CS5535_MFGPT=m
|
||||
CONFIG_GEODE_WDT=m
|
||||
CONFIG_CS5535_CLOCK_EVENT_SRC=m
|
||||
|
||||
CONFIG_X86_DECODER_SELFTEST=y
|
||||
|
||||
CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
|
||||
|
||||
CONFIG_VGA_SWITCHEROO=y
|
||||
CONFIG_LPC_SCH=m
|
||||
|
||||
CONFIG_I7300_IDLE=m
|
||||
|
||||
CONFIG_PCI_CNB20LE_QUIRK=y
|
||||
|
||||
CONFIG_ACPI_EC_DEBUGFS=m
|
||||
# CONFIG_ACPI_APEI_ERST_DEBUG is not set
|
||||
CONFIG_INTEL_IDLE=y
|
||||
# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
|
||||
CONFIG_SENSORS_PKGTEMP=m
|
||||
CONFIG_F71808E_WDT=m
|
||||
CONFIG_HPWDT_NMI_DECODING=y
|
||||
# CONFIG_MFD_TPS6586X is not set
|
||||
# CONFIG_INTEL_MID_DMAC is not set
|
||||
CONFIG_PCH_DMA=m
|
||||
# CONFIG_ACPI_QUICKSTART is not set
|
||||
CONFIG_IDEAPAD_ACPI=m
|
||||
CONFIG_INTEL_IPS=m
|
||||
CONFIG_IDEAPAD_LAPTOP=m
|
||||
# CONFIG_IBM_RTL is not set
|
||||
|
||||
CONFIG_EDAC_MCE_INJ=m
|
||||
CONFIG_IRQ_TIME_ACCOUNTING=y
|
||||
CONFIG_X86_RESERVE_LOW=64
|
||||
|
||||
CONFIG_PCH_GBE=m
|
||||
CONFIG_PCH_PHUB=m
|
||||
|
||||
CONFIG_VIDEO_VIA_CAMERA=m
|
||||
|
||||
CONFIG_JUMP_LABEL=y
|
||||
|
||||
CONFIG_HP_ILO=m
|
||||
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
|
||||
CONFIG_HP_ACCEL=m
|
||||
|
||||
# CONFIG_RAPIDIO is not set
|
||||
|
||||
CONFIG_BPF_JIT=y
|
||||
|
||||
# CONFIG_GPIO_GENERIC_PLATFORM is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
# Should be 32bit only, but lacks KConfig depends
|
||||
# CONFIG_XO15_EBOOK is not set
|
||||
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
# See 'cpupower help' and cpupower(1) for more info
|
||||
CPUPOWER_START_OPTS="frequency-set -g performance"
|
||||
CPUPOWER_STOP_OPTS="frequency-set -g ondemand"
|
|
@ -0,0 +1,13 @@
|
|||
[Unit]
|
||||
Description=Configure CPU power related settings
|
||||
After=syslog.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
EnvironmentFile=/etc/sysconfig/cpupower
|
||||
ExecStart=/usr/bin/cpupower $CPUPOWER_START_OPTS
|
||||
ExecStop=/usr/bin/cpupower $CPUPOWER_STOP_OPTS
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1,17 @@
|
|||
--- linux-3.3.noarch/net/ipv4/route.c~ 2012-04-02 20:24:44.162789023 -0400
|
||||
+++ linux-3.3.noarch/net/ipv4/route.c 2012-04-02 20:25:20.610784137 -0400
|
||||
@@ -2794,6 +2794,14 @@ static struct rtable *ip_route_output_sl
|
||||
fl4->saddr = FIB_RES_PREFSRC(net, res);
|
||||
|
||||
dev_out = FIB_RES_DEV(res);
|
||||
+
|
||||
+ if (!dev_out) {
|
||||
+ pr_crit("ipv4: FIB_RES_DEV() is NULL, nh_sel=%d\n",
|
||||
+ res.nh_sel);
|
||||
+ rth = ERR_PTR(-EINVAL);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
fl4->flowi4_oif = dev_out->ifindex;
|
||||
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
From 696199f8ccf7fc6d17ef89c296ad3b6c78c52d9c Mon Sep 17 00:00:00 2001
|
||||
From: Al Viro <viro@zeniv.linux.org.uk>
|
||||
Date: Thu, 29 Nov 2012 22:00:51 -0500
|
||||
Subject: [PATCH] don't do blind d_drop() in nfs_prime_dcache()
|
||||
|
||||
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
|
||||
---
|
||||
fs/nfs/dir.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
|
||||
index ce8cb92..99489cf 100644
|
||||
--- a/fs/nfs/dir.c
|
||||
+++ b/fs/nfs/dir.c
|
||||
@@ -450,7 +450,8 @@ void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry)
|
||||
nfs_refresh_inode(dentry->d_inode, entry->fattr);
|
||||
goto out;
|
||||
} else {
|
||||
- d_drop(dentry);
|
||||
+ if (d_invalidate(dentry) != 0)
|
||||
+ goto out;
|
||||
dput(dentry);
|
||||
}
|
||||
}
|
||||
--
|
||||
1.8.0.1
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
From 115cb7ab7d3b87fe43b1fe9b05ec894b1fcfb5cf Mon Sep 17 00:00:00 2001
|
||||
From: Adam Jackson <ajax@redhat.com>
|
||||
Date: Wed, 7 Dec 2011 18:26:23 -0500
|
||||
Subject: [PATCH] drm/edid: Try harder to fix up broken headers
|
||||
|
||||
There's no reason to force the first byte to be correct if we're already
|
||||
scoring how correct the header is.
|
||||
|
||||
See also: https://bugzilla.redhat.com/show_bug.cgi?id=722909
|
||||
|
||||
Signed-off-by: Adam Jackson <ajax@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/drm_edid.c | 18 ++++++++----------
|
||||
1 files changed, 8 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
|
||||
index 7425e5c..8b16a49 100644
|
||||
--- a/drivers/gpu/drm/drm_edid.c
|
||||
+++ b/drivers/gpu/drm/drm_edid.c
|
||||
@@ -154,16 +154,14 @@ drm_edid_block_valid(u8 *raw_edid)
|
||||
int i;
|
||||
u8 csum = 0;
|
||||
struct edid *edid = (struct edid *)raw_edid;
|
||||
-
|
||||
- if (raw_edid[0] == 0x00) {
|
||||
- int score = drm_edid_header_is_valid(raw_edid);
|
||||
- if (score == 8) ;
|
||||
- else if (score >= 6) {
|
||||
- DRM_DEBUG("Fixing EDID header, your hardware may be failing\n");
|
||||
- memcpy(raw_edid, edid_header, sizeof(edid_header));
|
||||
- } else {
|
||||
- goto bad;
|
||||
- }
|
||||
+ int score = drm_edid_header_is_valid(raw_edid);
|
||||
+
|
||||
+ if (score == 8) ;
|
||||
+ else if (score >= 6) {
|
||||
+ DRM_DEBUG("Fixing EDID header, your hardware may be failing\n");
|
||||
+ memcpy(raw_edid, edid_header, sizeof(edid_header));
|
||||
+ } else {
|
||||
+ goto bad;
|
||||
}
|
||||
|
||||
for (i = 0; i < EDID_LENGTH; i++)
|
||||
--
|
||||
1.7.7.3
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
From 504c7267a1e84b157cbd7e9c1b805e1bc0c2c846 Mon Sep 17 00:00:00 2001
|
||||
From: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Date: Thu, 23 Aug 2012 13:12:52 +0100
|
||||
Subject: [PATCH] drm/i915: Use cpu relocations if the object is in the GTT
|
||||
but not mappable
|
||||
|
||||
This prevents the case of unbinding the object in order to process the
|
||||
relocations through the GTT and then rebinding it only to then proceed
|
||||
to use cpu relocations as the object is now in the CPU write domain. By
|
||||
choosing to use cpu relocations up front, we can therefore avoid the
|
||||
rebind penalty.
|
||||
|
||||
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
---
|
||||
drivers/gpu/drm/i915/i915_gem_execbuffer.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
|
||||
index f7346d8..dc87563 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
|
||||
@@ -95,6 +95,7 @@ eb_destroy(struct eb_objects *eb)
|
||||
static inline int use_cpu_reloc(struct drm_i915_gem_object *obj)
|
||||
{
|
||||
return (obj->base.write_domain == I915_GEM_DOMAIN_CPU ||
|
||||
+ !obj->map_and_fenceable ||
|
||||
obj->cache_level != I915_CACHE_NONE);
|
||||
}
|
||||
|
||||
--
|
||||
1.7.12.1
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index 296cfc2..516e1e2 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -350,7 +350,7 @@ intel_dp_check_edp(struct intel_dp *intel_dp)
|
||||
if (!is_edp(intel_dp))
|
||||
return;
|
||||
if (!ironlake_edp_have_panel_power(intel_dp) && !ironlake_edp_have_panel_vdd(intel_dp)) {
|
||||
- WARN(1, "eDP powered off while attempting aux channel communication.\n");
|
||||
+ DRM_ERROR("eDP powered off while attempting aux channel communication.\n");
|
||||
DRM_DEBUG_KMS("Status 0x%08x Control 0x%08x\n",
|
||||
I915_READ(PCH_PP_STATUS),
|
||||
I915_READ(PCH_PP_CONTROL));
|
||||
@@ -400,7 +400,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
|
||||
}
|
||||
|
||||
if (try == 3) {
|
||||
- WARN(1, "dp_aux_ch not started status 0x%08x\n",
|
||||
+ DRM_ERROR("dp_aux_ch not started status 0x%08x\n",
|
||||
I915_READ(ch_ctl));
|
||||
return -EBUSY;
|
||||
}
|
||||
@@ -1024,8 +1024,8 @@ static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
|
||||
return;
|
||||
DRM_DEBUG_KMS("Turn eDP VDD on\n");
|
||||
|
||||
- WARN(intel_dp->want_panel_vdd,
|
||||
- "eDP VDD already requested on\n");
|
||||
+ if (intel_dp->want_panel_vdd)
|
||||
+ DRM_ERROR("eDP VDD already requested on\n");
|
||||
|
||||
intel_dp->want_panel_vdd = true;
|
||||
|
||||
@@ -1090,7 +1090,8 @@ static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
|
||||
return;
|
||||
|
||||
DRM_DEBUG_KMS("Turn eDP VDD off %d\n", intel_dp->want_panel_vdd);
|
||||
- WARN(!intel_dp->want_panel_vdd, "eDP VDD not forced on");
|
||||
+ if (!intel_dp->want_panel_vdd)
|
||||
+ DRM_ERROR("eDP VDD not forced on");
|
||||
|
||||
intel_dp->want_panel_vdd = false;
|
||||
|
||||
@@ -1160,7 +1161,8 @@ static void ironlake_edp_panel_off(struct intel_dp *intel_dp)
|
||||
|
||||
DRM_DEBUG_KMS("Turn eDP power off\n");
|
||||
|
||||
- WARN(!intel_dp->want_panel_vdd, "Need VDD to turn off panel\n");
|
||||
+ if (!intel_dp->want_panel_vdd)
|
||||
+ DRM_ERROR("Need VDD to turn off panel\n");
|
||||
|
||||
pp = ironlake_get_pp_control(dev_priv);
|
||||
pp &= ~(POWER_TARGET_ON | PANEL_POWER_RESET | EDP_BLC_ENABLE);
|
|
@ -1,18 +0,0 @@
|
|||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -5821,7 +5821,6 @@ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||
struct intel_load_detect_pipe *old)
|
||||
{
|
||||
struct drm_encoder *encoder = &intel_encoder->base;
|
||||
- struct drm_device *dev = encoder->dev;
|
||||
struct drm_crtc *crtc = encoder->crtc;
|
||||
struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
@@ -5832,7 +5831,6 @@ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||
|
||||
if (old->load_detect_temp) {
|
||||
connector->encoder = NULL;
|
||||
- drm_helper_disable_unused_functions(dev);
|
||||
|
||||
if (old->release_fb)
|
||||
old->release_fb->funcs->destroy(old->release_fb);
|
|
@ -0,0 +1,151 @@
|
|||
diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
|
||||
index 82478e0..d8831ab 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_state.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_state.c
|
||||
@@ -579,6 +579,14 @@ nouveau_card_init(struct drm_device *dev)
|
||||
if (ret)
|
||||
goto out_display_early;
|
||||
|
||||
+ /* workaround an odd issue on nvc1 by disabling the device's
|
||||
+ * nosnoop capability. hopefully won't cause issues until a
|
||||
+ * better fix is found - assuming there is one...
|
||||
+ */
|
||||
+ if (dev_priv->chipset == 0xc1) {
|
||||
+ nv_mask(dev, 0x00088080, 0x00000800, 0x00000000);
|
||||
+ }
|
||||
+
|
||||
nouveau_pm_init(dev);
|
||||
|
||||
ret = engine->vram.init(dev);
|
||||
@@ -1102,12 +1110,13 @@ int nouveau_load(struct drm_device *dev, unsigned long flags)
|
||||
dev_priv->noaccel = !!nouveau_noaccel;
|
||||
if (nouveau_noaccel == -1) {
|
||||
switch (dev_priv->chipset) {
|
||||
- case 0xc1: /* known broken */
|
||||
- case 0xc8: /* never tested */
|
||||
+#if 0
|
||||
+ case 0xXX: /* known broken */
|
||||
NV_INFO(dev, "acceleration disabled by default, pass "
|
||||
"noaccel=0 to force enable\n");
|
||||
dev_priv->noaccel = true;
|
||||
break;
|
||||
+#endif
|
||||
default:
|
||||
dev_priv->noaccel = false;
|
||||
break;
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvc0_graph.c b/drivers/gpu/drm/nouveau/nvc0_graph.c
|
||||
index 4b8d0b3..3cc1c60 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvc0_graph.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvc0_graph.c
|
||||
@@ -156,8 +156,8 @@ nvc0_graph_create_context_mmio_list(struct nouveau_channel *chan)
|
||||
struct nvc0_graph_priv *priv = nv_engine(chan->dev, NVOBJ_ENGINE_GR);
|
||||
struct nvc0_graph_chan *grch = chan->engctx[NVOBJ_ENGINE_GR];
|
||||
struct drm_device *dev = chan->dev;
|
||||
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
int i = 0, gpc, tp, ret;
|
||||
- u32 magic;
|
||||
|
||||
ret = nouveau_gpuobj_new(dev, chan, 0x2000, 256, NVOBJ_FLAG_VM,
|
||||
&grch->unk408004);
|
||||
@@ -206,14 +206,37 @@ nvc0_graph_create_context_mmio_list(struct nouveau_channel *chan)
|
||||
nv_wo32(grch->mmio, i++ * 4, 0x0041880c);
|
||||
nv_wo32(grch->mmio, i++ * 4, 0x80000018);
|
||||
|
||||
- magic = 0x02180000;
|
||||
- nv_wo32(grch->mmio, i++ * 4, 0x00405830);
|
||||
- nv_wo32(grch->mmio, i++ * 4, magic);
|
||||
- for (gpc = 0; gpc < priv->gpc_nr; gpc++) {
|
||||
- for (tp = 0; tp < priv->tp_nr[gpc]; tp++, magic += 0x0324) {
|
||||
- u32 reg = 0x504520 + (gpc * 0x8000) + (tp * 0x0800);
|
||||
- nv_wo32(grch->mmio, i++ * 4, reg);
|
||||
- nv_wo32(grch->mmio, i++ * 4, magic);
|
||||
+ if (dev_priv->chipset != 0xc1) {
|
||||
+ u32 magic = 0x02180000;
|
||||
+ nv_wo32(grch->mmio, i++ * 4, 0x00405830);
|
||||
+ nv_wo32(grch->mmio, i++ * 4, magic);
|
||||
+ for (gpc = 0; gpc < priv->gpc_nr; gpc++) {
|
||||
+ for (tp = 0; tp < priv->tp_nr[gpc]; tp++) {
|
||||
+ u32 reg = TP_UNIT(gpc, tp, 0x520);
|
||||
+ nv_wo32(grch->mmio, i++ * 4, reg);
|
||||
+ nv_wo32(grch->mmio, i++ * 4, magic);
|
||||
+ magic += 0x0324;
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ u32 magic = 0x02180000;
|
||||
+ nv_wo32(grch->mmio, i++ * 4, 0x00405830);
|
||||
+ nv_wo32(grch->mmio, i++ * 4, magic | 0x0000218);
|
||||
+ nv_wo32(grch->mmio, i++ * 4, 0x004064c4);
|
||||
+ nv_wo32(grch->mmio, i++ * 4, 0x0086ffff);
|
||||
+ for (gpc = 0; gpc < priv->gpc_nr; gpc++) {
|
||||
+ for (tp = 0; tp < priv->tp_nr[gpc]; tp++) {
|
||||
+ u32 reg = TP_UNIT(gpc, tp, 0x520);
|
||||
+ nv_wo32(grch->mmio, i++ * 4, reg);
|
||||
+ nv_wo32(grch->mmio, i++ * 4, (1 << 28) | magic);
|
||||
+ magic += 0x0324;
|
||||
+ }
|
||||
+ for (tp = 0; tp < priv->tp_nr[gpc]; tp++) {
|
||||
+ u32 reg = TP_UNIT(gpc, tp, 0x544);
|
||||
+ nv_wo32(grch->mmio, i++ * 4, reg);
|
||||
+ nv_wo32(grch->mmio, i++ * 4, magic);
|
||||
+ magic += 0x0324;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/gpu/drm/nouveau/nvc0_grctx.c b/drivers/gpu/drm/nouveau/nvc0_grctx.c
|
||||
index dd0e6a7..96b0b93d 100644
|
||||
--- a/drivers/gpu/drm/nouveau/nvc0_grctx.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvc0_grctx.c
|
||||
@@ -1812,6 +1812,7 @@ nvc0_grctx_generate(struct nouveau_channel *chan)
|
||||
/* calculate first set of magics */
|
||||
memcpy(tpnr, priv->tp_nr, sizeof(priv->tp_nr));
|
||||
|
||||
+ gpc = -1;
|
||||
for (tp = 0; tp < priv->tp_total; tp++) {
|
||||
do {
|
||||
gpc = (gpc + 1) % priv->gpc_nr;
|
||||
@@ -1861,30 +1862,26 @@ nvc0_grctx_generate(struct nouveau_channel *chan)
|
||||
|
||||
if (1) {
|
||||
u32 tp_mask = 0, tp_set = 0;
|
||||
- u8 tpnr[GPC_MAX];
|
||||
+ u8 tpnr[GPC_MAX], a, b;
|
||||
|
||||
memcpy(tpnr, priv->tp_nr, sizeof(priv->tp_nr));
|
||||
for (gpc = 0; gpc < priv->gpc_nr; gpc++)
|
||||
tp_mask |= ((1 << priv->tp_nr[gpc]) - 1) << (gpc * 8);
|
||||
|
||||
- gpc = -1;
|
||||
- for (i = 0, gpc = -1; i < 32; i++) {
|
||||
- int ltp = i * (priv->tp_total - 1) / 32;
|
||||
-
|
||||
- do {
|
||||
- gpc = (gpc + 1) % priv->gpc_nr;
|
||||
- } while (!tpnr[gpc]);
|
||||
- tp = priv->tp_nr[gpc] - tpnr[gpc]--;
|
||||
+ for (i = 0, gpc = -1, b = -1; i < 32; i++) {
|
||||
+ a = (i * (priv->tp_total - 1)) / 32;
|
||||
+ if (a != b) {
|
||||
+ b = a;
|
||||
+ do {
|
||||
+ gpc = (gpc + 1) % priv->gpc_nr;
|
||||
+ } while (!tpnr[gpc]);
|
||||
+ tp = priv->tp_nr[gpc] - tpnr[gpc]--;
|
||||
|
||||
- tp_set |= 1 << ((gpc * 8) + tp);
|
||||
+ tp_set |= 1 << ((gpc * 8) + tp);
|
||||
+ }
|
||||
|
||||
- do {
|
||||
- nv_wr32(dev, 0x406800 + (i * 0x20), tp_set);
|
||||
- tp_set ^= tp_mask;
|
||||
- nv_wr32(dev, 0x406c00 + (i * 0x20), tp_set);
|
||||
- tp_set ^= tp_mask;
|
||||
- } while (ltp == (++i * (priv->tp_total - 1) / 32));
|
||||
- i--;
|
||||
+ nv_wr32(dev, 0x406800 + (i * 0x20), tp_set);
|
||||
+ nv_wr32(dev, 0x406c00 + (i * 0x20), tp_set ^ tp_mask);
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,22 @@
|
|||
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
|
||||
index 3ae4128..ff7dc70 100644
|
||||
--- a/arch/x86/platform/efi/efi.c
|
||||
+++ b/arch/x86/platform/efi/efi.c
|
||||
@@ -659,10 +659,13 @@ void __init efi_enter_virtual_mode(void)
|
||||
|
||||
for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
|
||||
md = p;
|
||||
- if (!(md->attribute & EFI_MEMORY_RUNTIME) &&
|
||||
- md->type != EFI_BOOT_SERVICES_CODE &&
|
||||
- md->type != EFI_BOOT_SERVICES_DATA)
|
||||
- continue;
|
||||
+ if (!(md->attribute & EFI_MEMORY_RUNTIME)) {
|
||||
+#ifdef CONFIG_X86_64
|
||||
+ if (md->type != EFI_BOOT_SERVICES_CODE &&
|
||||
+ md->type != EFI_BOOT_SERVICES_DATA)
|
||||
+#endif
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
size = md->num_pages << EFI_PAGE_SHIFT;
|
||||
end = md->phys_addr + size;
|
|
@ -0,0 +1,118 @@
|
|||
From 20ae2081584450e552735a3df968ce5b5946a607 Mon Sep 17 00:00:00 2001
|
||||
From: Kees Cook <keescook@chromium.org>
|
||||
Date: Mon, 26 Nov 2012 08:56:37 -0500
|
||||
Subject: [PATCH 1/2] exec: do not leave bprm->interp on stack
|
||||
|
||||
If a series of scripts are executed, each triggering module loading via
|
||||
unprintable bytes in the script header, kernel stack contents can leak
|
||||
into the command line.
|
||||
|
||||
Normally execution of binfmt_script and binfmt_misc happens recursively.
|
||||
However, when modules are enabled, and unprintable bytes exist in the
|
||||
bprm->buf, execution will restart after attempting to load matching binfmt
|
||||
modules. Unfortunately, the logic in binfmt_script and binfmt_misc does
|
||||
not expect to get restarted. They leave bprm->interp pointing to their
|
||||
local stack. This means on restart bprm->interp is left pointing into
|
||||
unused stack memory which can then be copied into the userspace argv
|
||||
areas.
|
||||
|
||||
After additional study, it seems that both recursion and restart remains
|
||||
the desirable way to handle exec with scripts, misc, and modules. As
|
||||
such, we need to protect the changes to interp.
|
||||
|
||||
This changes the logic to require allocation for any changes to the
|
||||
bprm->interp. To avoid adding a new kmalloc to every exec, the default
|
||||
value is left as-is. Only when passing through binfmt_script or
|
||||
binfmt_misc does an allocation take place.
|
||||
|
||||
For a proof of concept, see DoTest.sh from:
|
||||
http://www.halfdog.net/Security/2012/LinuxKernelBinfmtScriptStackDataDisclosure/
|
||||
|
||||
Signed-off-by: Kees Cook <keescook@chromium.org>
|
||||
Cc: halfdog <me@halfdog.net>
|
||||
Cc: P J P <ppandit@redhat.com>
|
||||
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
fs/binfmt_misc.c | 5 ++++-
|
||||
fs/binfmt_script.c | 4 +++-
|
||||
fs/exec.c | 15 +++++++++++++++
|
||||
include/linux/binfmts.h | 1 +
|
||||
4 files changed, 23 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
|
||||
index 790b3cd..772428d 100644
|
||||
--- a/fs/binfmt_misc.c
|
||||
+++ b/fs/binfmt_misc.c
|
||||
@@ -176,7 +176,10 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
||||
goto _error;
|
||||
bprm->argc ++;
|
||||
|
||||
- bprm->interp = iname; /* for binfmt_script */
|
||||
+ /* Update interp in case binfmt_script needs it. */
|
||||
+ retval = bprm_change_interp(iname, bprm);
|
||||
+ if (retval < 0)
|
||||
+ goto _error;
|
||||
|
||||
interp_file = open_exec (iname);
|
||||
retval = PTR_ERR (interp_file);
|
||||
diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c
|
||||
index d3b8c1f..df49d48 100644
|
||||
--- a/fs/binfmt_script.c
|
||||
+++ b/fs/binfmt_script.c
|
||||
@@ -82,7 +82,9 @@ static int load_script(struct linux_binprm *bprm,struct pt_regs *regs)
|
||||
retval = copy_strings_kernel(1, &i_name, bprm);
|
||||
if (retval) return retval;
|
||||
bprm->argc++;
|
||||
- bprm->interp = interp;
|
||||
+ retval = bprm_change_interp(interp, bprm);
|
||||
+ if (retval < 0)
|
||||
+ return retval;
|
||||
|
||||
/*
|
||||
* OK, now restart the process with the interpreter's dentry.
|
||||
diff --git a/fs/exec.c b/fs/exec.c
|
||||
index fab2c6d..59896ae 100644
|
||||
--- a/fs/exec.c
|
||||
+++ b/fs/exec.c
|
||||
@@ -1202,9 +1202,24 @@ void free_bprm(struct linux_binprm *bprm)
|
||||
mutex_unlock(¤t->signal->cred_guard_mutex);
|
||||
abort_creds(bprm->cred);
|
||||
}
|
||||
+ /* If a binfmt changed the interp, free it. */
|
||||
+ if (bprm->interp != bprm->filename)
|
||||
+ kfree(bprm->interp);
|
||||
kfree(bprm);
|
||||
}
|
||||
|
||||
+int bprm_change_interp(char *interp, struct linux_binprm *bprm)
|
||||
+{
|
||||
+ /* If a binfmt changed the interp, free it first. */
|
||||
+ if (bprm->interp != bprm->filename)
|
||||
+ kfree(bprm->interp);
|
||||
+ bprm->interp = kstrdup(interp, GFP_KERNEL);
|
||||
+ if (!bprm->interp)
|
||||
+ return -ENOMEM;
|
||||
+ return 0;
|
||||
+}
|
||||
+EXPORT_SYMBOL(bprm_change_interp);
|
||||
+
|
||||
/*
|
||||
* install the new credentials for this executable
|
||||
*/
|
||||
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
|
||||
index 366422b..eb53e15 100644
|
||||
--- a/include/linux/binfmts.h
|
||||
+++ b/include/linux/binfmts.h
|
||||
@@ -128,6 +128,7 @@ extern int setup_arg_pages(struct linux_binprm * bprm,
|
||||
unsigned long stack_top,
|
||||
int executable_stack);
|
||||
extern int bprm_mm_init(struct linux_binprm *bprm);
|
||||
+extern int bprm_change_interp(char *interp, struct linux_binprm *bprm);
|
||||
extern int copy_strings_kernel(int argc, const char *const *argv,
|
||||
struct linux_binprm *bprm);
|
||||
extern int prepare_bprm_creds(struct linux_binprm *bprm);
|
||||
--
|
||||
1.8.0
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
From 4ae8186cd77835b45f1b35edb4ce70309287bfc3 Mon Sep 17 00:00:00 2001
|
||||
From: Kees Cook <keescook@chromium.org>
|
||||
Date: Mon, 26 Nov 2012 09:02:11 -0500
|
||||
Subject: [PATCH 2/2] exec: use -ELOOP for max recursion depth
|
||||
|
||||
To avoid an explosion of request_module calls on a chain of abusive
|
||||
scripts, fail maximum recursion with -ELOOP instead of -ENOEXEC. As soon
|
||||
as maximum recursion depth is hit, the error will fail all the way back
|
||||
up the chain, aborting immediately.
|
||||
|
||||
This also has the side-effect of stopping the user's shell from attempting
|
||||
to reexecute the top-level file as a shell script. As seen in the
|
||||
dash source:
|
||||
|
||||
if (cmd != path_bshell && errno == ENOEXEC) {
|
||||
*argv-- = cmd;
|
||||
*argv = cmd = path_bshell;
|
||||
goto repeat;
|
||||
}
|
||||
|
||||
The above logic was designed for running scripts automatically that lacked
|
||||
the "#!" header, not to re-try failed recursion. On a legitimate -ENOEXEC,
|
||||
things continue to behave as the shell expects.
|
||||
|
||||
Additionally, when tracking recursion, the binfmt handlers should not be
|
||||
involved. The recursion being tracked is the depth of calls through
|
||||
search_binary_handler(), so that function should be exclusively responsible
|
||||
for tracking the depth.
|
||||
|
||||
Signed-off-by: Kees Cook <keescook@chromium.org>
|
||||
Cc: halfdog <me@halfdog.net>
|
||||
Cc: P J P <ppandit@redhat.com>
|
||||
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
fs/binfmt_em86.c | 1 -
|
||||
fs/binfmt_misc.c | 6 ------
|
||||
fs/binfmt_script.c | 4 +---
|
||||
fs/exec.c | 10 +++++-----
|
||||
include/linux/binfmts.h | 2 --
|
||||
5 files changed, 6 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/fs/binfmt_em86.c b/fs/binfmt_em86.c
|
||||
index 2790c7e..575796a 100644
|
||||
--- a/fs/binfmt_em86.c
|
||||
+++ b/fs/binfmt_em86.c
|
||||
@@ -42,7 +42,6 @@ static int load_em86(struct linux_binprm *bprm,struct pt_regs *regs)
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
- bprm->recursion_depth++; /* Well, the bang-shell is implicit... */
|
||||
allow_write_access(bprm->file);
|
||||
fput(bprm->file);
|
||||
bprm->file = NULL;
|
||||
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
|
||||
index 772428d..f0f1a06 100644
|
||||
--- a/fs/binfmt_misc.c
|
||||
+++ b/fs/binfmt_misc.c
|
||||
@@ -117,10 +117,6 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
||||
if (!enabled)
|
||||
goto _ret;
|
||||
|
||||
- retval = -ENOEXEC;
|
||||
- if (bprm->recursion_depth > BINPRM_MAX_RECURSION)
|
||||
- goto _ret;
|
||||
-
|
||||
/* to keep locking time low, we copy the interpreter string */
|
||||
read_lock(&entries_lock);
|
||||
fmt = check_file(bprm);
|
||||
@@ -200,8 +196,6 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
||||
if (retval < 0)
|
||||
goto _error;
|
||||
|
||||
- bprm->recursion_depth++;
|
||||
-
|
||||
retval = search_binary_handler (bprm, regs);
|
||||
if (retval < 0)
|
||||
goto _error;
|
||||
diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c
|
||||
index df49d48..8ae4be1 100644
|
||||
--- a/fs/binfmt_script.c
|
||||
+++ b/fs/binfmt_script.c
|
||||
@@ -22,15 +22,13 @@ static int load_script(struct linux_binprm *bprm,struct pt_regs *regs)
|
||||
char interp[BINPRM_BUF_SIZE];
|
||||
int retval;
|
||||
|
||||
- if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!') ||
|
||||
- (bprm->recursion_depth > BINPRM_MAX_RECURSION))
|
||||
+ if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!'))
|
||||
return -ENOEXEC;
|
||||
/*
|
||||
* This section does the #! interpretation.
|
||||
* Sorta complicated, but hopefully it will work. -TYT
|
||||
*/
|
||||
|
||||
- bprm->recursion_depth++;
|
||||
allow_write_access(bprm->file);
|
||||
fput(bprm->file);
|
||||
bprm->file = NULL;
|
||||
diff --git a/fs/exec.c b/fs/exec.c
|
||||
index 59896ae..541cc51 100644
|
||||
--- a/fs/exec.c
|
||||
+++ b/fs/exec.c
|
||||
@@ -1398,6 +1398,10 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
|
||||
struct linux_binfmt *fmt;
|
||||
pid_t old_pid, old_vpid;
|
||||
|
||||
+ /* This allows 4 levels of binfmt rewrites before failing hard. */
|
||||
+ if (depth > 5)
|
||||
+ return -ELOOP;
|
||||
+
|
||||
retval = security_bprm_check(bprm);
|
||||
if (retval)
|
||||
return retval;
|
||||
@@ -1422,12 +1426,8 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
|
||||
if (!try_module_get(fmt->module))
|
||||
continue;
|
||||
read_unlock(&binfmt_lock);
|
||||
+ bprm->recursion_depth = depth + 1;
|
||||
retval = fn(bprm, regs);
|
||||
- /*
|
||||
- * Restore the depth counter to its starting value
|
||||
- * in this call, so we don't have to rely on every
|
||||
- * load_binary function to restore it on return.
|
||||
- */
|
||||
bprm->recursion_depth = depth;
|
||||
if (retval >= 0) {
|
||||
if (depth == 0) {
|
||||
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
|
||||
index eb53e15..5bab59b 100644
|
||||
--- a/include/linux/binfmts.h
|
||||
+++ b/include/linux/binfmts.h
|
||||
@@ -68,8 +68,6 @@ struct linux_binprm {
|
||||
#define BINPRM_FLAGS_EXECFD_BIT 1
|
||||
#define BINPRM_FLAGS_EXECFD (1 << BINPRM_FLAGS_EXECFD_BIT)
|
||||
|
||||
-#define BINPRM_MAX_RECURSION 4
|
||||
-
|
||||
/* Function parameter for binfmt->coredump */
|
||||
struct coredump_params {
|
||||
long signr;
|
||||
--
|
||||
1.8.0
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
commit 93f9052643409c13b3b5f76833865087351f55b8
|
||||
Author: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Wed Sep 12 14:32:42 2012 -0400
|
||||
|
||||
ext4: set bg_itable_unused when resizing
|
||||
|
||||
Set bg_itable_unused for file systems that have uninit_bg enabled.
|
||||
This will speed up the first e2fsck run after the file system is
|
||||
resized.
|
||||
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
|
||||
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
|
||||
index 7adc088..a5be589 100644
|
||||
--- a/fs/ext4/resize.c
|
||||
+++ b/fs/ext4/resize.c
|
||||
@@ -1268,6 +1268,9 @@ static int ext4_setup_new_descs(handle_t *handle, struct super_block *sb,
|
||||
ext4_free_group_clusters_set(sb, gdp,
|
||||
EXT4_B2C(sbi, group_data->free_blocks_count));
|
||||
ext4_free_inodes_set(sb, gdp, EXT4_INODES_PER_GROUP(sb));
|
||||
+ if (ext4_has_group_desc_csum(sb))
|
||||
+ ext4_itable_unused_set(sb, gdp,
|
||||
+ EXT4_INODES_PER_GROUP(sb));
|
||||
gdp->bg_flags = cpu_to_le16(*bg_flags);
|
||||
ext4_group_desc_csum_set(sb, group, gdp);
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
From 2702b1526c7278c4d65d78de209a465d4de2885e Mon Sep 17 00:00:00 2001
|
||||
From: Kees Cook <keescook@chromium.org>
|
||||
Date: Fri, 19 Oct 2012 13:56:51 -0700
|
||||
Subject: [PATCH 1/2] kernel/sys.c: fix stack memory content leak via UNAME26
|
||||
|
||||
Calling uname() with the UNAME26 personality set allows a leak of kernel
|
||||
stack contents. This fixes it by defensively calculating the length of
|
||||
copy_to_user() call, making the len argument unsigned, and initializing
|
||||
the stack buffer to zero (now technically unneeded, but hey, overkill).
|
||||
|
||||
CVE-2012-0957
|
||||
|
||||
Reported-by: PaX Team <pageexec@freemail.hu>
|
||||
Signed-off-by: Kees Cook <keescook@chromium.org>
|
||||
Cc: Andi Kleen <ak@linux.intel.com>
|
||||
Cc: PaX Team <pageexec@freemail.hu>
|
||||
Cc: Brad Spengler <spender@grsecurity.net>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
kernel/sys.c | 12 +++++++-----
|
||||
1 file changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/kernel/sys.c b/kernel/sys.c
|
||||
index c5cb5b9..01865c6 100644
|
||||
--- a/kernel/sys.c
|
||||
+++ b/kernel/sys.c
|
||||
@@ -1265,15 +1265,16 @@ DECLARE_RWSEM(uts_sem);
|
||||
* Work around broken programs that cannot handle "Linux 3.0".
|
||||
* Instead we map 3.x to 2.6.40+x, so e.g. 3.0 would be 2.6.40
|
||||
*/
|
||||
-static int override_release(char __user *release, int len)
|
||||
+static int override_release(char __user *release, size_t len)
|
||||
{
|
||||
int ret = 0;
|
||||
- char buf[65];
|
||||
|
||||
if (current->personality & UNAME26) {
|
||||
- char *rest = UTS_RELEASE;
|
||||
+ const char *rest = UTS_RELEASE;
|
||||
+ char buf[65] = { 0 };
|
||||
int ndots = 0;
|
||||
unsigned v;
|
||||
+ size_t copy;
|
||||
|
||||
while (*rest) {
|
||||
if (*rest == '.' && ++ndots >= 3)
|
||||
@@ -1283,8 +1284,9 @@ static int override_release(char __user *release, int len)
|
||||
rest++;
|
||||
}
|
||||
v = ((LINUX_VERSION_CODE >> 8) & 0xff) + 40;
|
||||
- snprintf(buf, len, "2.6.%u%s", v, rest);
|
||||
- ret = copy_to_user(release, buf, len);
|
||||
+ copy = min(sizeof(buf), max_t(size_t, 1, len));
|
||||
+ copy = scnprintf(buf, copy, "2.6.%u%s", v, rest);
|
||||
+ ret = copy_to_user(release, buf, copy + 1);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
1.7.12.1
|
||||
|
||||
|
||||
From 31fd84b95eb211d5db460a1dda85e004800a7b52 Mon Sep 17 00:00:00 2001
|
||||
From: Kees Cook <keescook@chromium.org>
|
||||
Date: Fri, 19 Oct 2012 18:45:53 -0700
|
||||
Subject: [PATCH 2/2] use clamp_t in UNAME26 fix
|
||||
|
||||
The min/max call needed to have explicit types on some architectures
|
||||
(e.g. mn10300). Use clamp_t instead to avoid the warning:
|
||||
|
||||
kernel/sys.c: In function 'override_release':
|
||||
kernel/sys.c:1287:10: warning: comparison of distinct pointer types lacks a cast [enabled by default]
|
||||
|
||||
Reported-by: Fengguang Wu <fengguang.wu@intel.com>
|
||||
Signed-off-by: Kees Cook <keescook@chromium.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
kernel/sys.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/kernel/sys.c b/kernel/sys.c
|
||||
index 01865c6..e6e0ece 100644
|
||||
--- a/kernel/sys.c
|
||||
+++ b/kernel/sys.c
|
||||
@@ -1284,7 +1284,7 @@ static int override_release(char __user *release, size_t len)
|
||||
rest++;
|
||||
}
|
||||
v = ((LINUX_VERSION_CODE >> 8) & 0xff) + 40;
|
||||
- copy = min(sizeof(buf), max_t(size_t, 1, len));
|
||||
+ copy = clamp_t(size_t, len, 1, sizeof(buf));
|
||||
copy = scnprintf(buf, copy, "2.6.%u%s", v, rest);
|
||||
ret = copy_to_user(release, buf, copy + 1);
|
||||
}
|
||||
--
|
||||
1.7.12.1
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
|
||||
Legacy hypervisors (RHEL 5.0 and RHEL 5.1) do not handle guest writes to
|
||||
cr4 gracefully. If a guest attempts to write a bit of cr4 that is
|
||||
unsupported, then the HV is so offended it crashes the domain. While
|
||||
later guest kernels (such as RHEL6) don't assume the HV supports all
|
||||
features, they do expect nicer responses. That assumption introduced
|
||||
code that probes whether or not xsave is supported early in the boot. So
|
||||
now when attempting to boot a RHEL6 guest on RHEL5.0 or RHEL5.1 an early
|
||||
crash will occur.
|
||||
|
||||
This patch is quite obviously an undesirable hack. The real fix for this
|
||||
problem should be in the HV, and is, in later HVs. However, to support
|
||||
running on old HVs, RHEL6 can take this small change. No impact will
|
||||
occur for running on any RHEL HV (not even RHEL 5.5 supports xsave).
|
||||
There is only potential for guest performance loss on upstream Xen.
|
||||
|
||||
---
|
||||
arch/x86/xen/enlighten.c | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
|
||||
index 52f8e19..6db3d67 100644
|
||||
--- a/arch/x86/xen/enlighten.c
|
||||
+++ b/arch/x86/xen/enlighten.c
|
||||
@@ -802,6 +802,7 @@ static void xen_write_cr4(unsigned long cr4)
|
||||
{
|
||||
cr4 &= ~X86_CR4_PGE;
|
||||
cr4 &= ~X86_CR4_PSE;
|
||||
+ cr4 &= ~X86_CR4_OSXSAVE;
|
||||
|
||||
native_write_cr4(cr4);
|
||||
}
|
||||
--
|
||||
1.6.6.1
|
|
@ -0,0 +1,74 @@
|
|||
Lock splice_read and splice_write functions
|
||||
|
||||
commit 1a25b1c4ce189e3926f2981f3302352a930086db
|
||||
Author: Mikulas Patocka <mpatocka@redhat.com>
|
||||
Date: Mon Oct 15 17:20:17 2012 -0400
|
||||
|
||||
Lock splice_read and splice_write functions
|
||||
|
||||
Functions generic_file_splice_read and generic_file_splice_write access
|
||||
the pagecache directly. For block devices these functions must be locked
|
||||
so that block size is not changed while they are in progress.
|
||||
|
||||
This patch is an additional fix for commit b87570f5d349 ("Fix a crash
|
||||
when block device is read and block size is changed at the same time")
|
||||
that locked aio_read, aio_write and mmap against block size change.
|
||||
|
||||
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
|
||||
Index: linux-3.6.x86_64/fs/block_dev.c
|
||||
===================================================================
|
||||
--- linux-3.6.x86_64.orig/fs/block_dev.c 2012-11-16 17:12:57.352936580 -0500
|
||||
+++ linux-3.6.x86_64/fs/block_dev.c 2012-11-16 17:13:11.908887989 -0500
|
||||
@@ -1662,6 +1662,39 @@
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static ssize_t blkdev_splice_read(struct file *file, loff_t *ppos,
|
||||
+ struct pipe_inode_info *pipe, size_t len,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
+ ssize_t ret;
|
||||
+ struct block_device *bdev = I_BDEV(file->f_mapping->host);
|
||||
+
|
||||
+ percpu_down_read(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
+ ret = generic_file_splice_read(file, ppos, pipe, len, flags);
|
||||
+
|
||||
+ percpu_up_read(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static ssize_t blkdev_splice_write(struct pipe_inode_info *pipe,
|
||||
+ struct file *file, loff_t *ppos, size_t len,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
+ ssize_t ret;
|
||||
+ struct block_device *bdev = I_BDEV(file->f_mapping->host);
|
||||
+
|
||||
+ percpu_down_read(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
+ ret = generic_file_splice_write(pipe, file, ppos, len, flags);
|
||||
+
|
||||
+ percpu_up_read(&bdev->bd_block_size_semaphore);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/*
|
||||
* Try to release a page associated with block device when the system
|
||||
* is under memory pressure.
|
||||
@@ -1700,8 +1733,8 @@
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = compat_blkdev_ioctl,
|
||||
#endif
|
||||
- .splice_read = generic_file_splice_read,
|
||||
- .splice_write = generic_file_splice_write,
|
||||
+ .splice_read = blkdev_splice_read,
|
||||
+ .splice_write = blkdev_splice_write,
|
||||
};
|
||||
|
||||
int ioctl_by_bdev(struct block_device *bdev, unsigned cmd, unsigned long arg)
|
|
@ -0,0 +1,287 @@
|
|||
commit b94887bbc0621e1e8402e7f0ec4bc3adf46c9a6e
|
||||
Author: Rafael J. Wysocki <rjw@sisk.pl>
|
||||
Date: Fri Feb 17 12:42:08 2012 -0500
|
||||
|
||||
Freeze all filesystems during system suspend and (kernel-driven)
|
||||
hibernation by calling freeze_supers() for all superblocks and thaw
|
||||
them during the subsequent resume with the help of thaw_supers().
|
||||
|
||||
This makes filesystems stay in a consistent state in case something
|
||||
goes wrong between system suspend (or hibernation) and the subsequent
|
||||
resume (e.g. journal replays won't be necessary in those cases). In
|
||||
particular, this should help to solve a long-standing issue that, in
|
||||
some cases, during resume from hibernation the boot loader causes the
|
||||
journal to be replied for the filesystem containing the kernel image
|
||||
and/or initrd causing it to become inconsistent with the information
|
||||
stored in the hibernation image.
|
||||
|
||||
The user-space-driven hibernation (s2disk) is not covered by this
|
||||
change, because the freezing of filesystems prevents s2disk from
|
||||
accessing device special files it needs to do its job.
|
||||
|
||||
This change is based on earlier work by Nigel Cunningham.
|
||||
|
||||
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
|
||||
|
||||
Rebased to 3.3-rc3 by Josh Boyer <jwboyer@redhat.com>
|
||||
|
||||
diff --git a/fs/super.c b/fs/super.c
|
||||
index 6015c02..c8057fa 100644
|
||||
--- a/fs/super.c
|
||||
+++ b/fs/super.c
|
||||
@@ -594,6 +594,79 @@ void iterate_supers_type(struct file_system_type *type,
|
||||
EXPORT_SYMBOL(iterate_supers_type);
|
||||
|
||||
/**
|
||||
+ * thaw_supers - call thaw_super() for all superblocks
|
||||
+ */
|
||||
+void thaw_supers(void)
|
||||
+{
|
||||
+ struct super_block *sb, *p = NULL;
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ list_for_each_entry(sb, &super_blocks, s_list) {
|
||||
+ if (hlist_unhashed(&sb->s_instances))
|
||||
+ continue;
|
||||
+ sb->s_count++;
|
||||
+ spin_unlock(&sb_lock);
|
||||
+
|
||||
+ if (sb->s_flags & MS_FROZEN) {
|
||||
+ thaw_super(sb);
|
||||
+ sb->s_flags &= ~MS_FROZEN;
|
||||
+ }
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ p = sb;
|
||||
+ }
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ spin_unlock(&sb_lock);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * freeze_supers - call freeze_super() for all superblocks
|
||||
+ */
|
||||
+int freeze_supers(void)
|
||||
+{
|
||||
+ struct super_block *sb, *p = NULL;
|
||||
+ int error = 0;
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ /*
|
||||
+ * Freeze in reverse order so filesystems depending on others are
|
||||
+ * frozen in the right order (eg. loopback on ext3).
|
||||
+ */
|
||||
+ list_for_each_entry_reverse(sb, &super_blocks, s_list) {
|
||||
+ if (hlist_unhashed(&sb->s_instances))
|
||||
+ continue;
|
||||
+ sb->s_count++;
|
||||
+ spin_unlock(&sb_lock);
|
||||
+
|
||||
+ if (sb->s_root && sb->s_frozen != SB_FREEZE_TRANS
|
||||
+ && !(sb->s_flags & MS_RDONLY)) {
|
||||
+ error = freeze_super(sb);
|
||||
+ if (!error)
|
||||
+ sb->s_flags |= MS_FROZEN;
|
||||
+ }
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ if (error)
|
||||
+ break;
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ p = sb;
|
||||
+ }
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ spin_unlock(&sb_lock);
|
||||
+
|
||||
+ if (error)
|
||||
+ thaw_supers();
|
||||
+
|
||||
+ return error;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/**
|
||||
* get_super - get the superblock of a device
|
||||
* @bdev: device to get the superblock for
|
||||
*
|
||||
diff --git a/include/linux/fs.h b/include/linux/fs.h
|
||||
index 386da09..a164f4a 100644
|
||||
--- a/include/linux/fs.h
|
||||
+++ b/include/linux/fs.h
|
||||
@@ -210,6 +210,7 @@ struct inodes_stat_t {
|
||||
#define MS_KERNMOUNT (1<<22) /* this is a kern_mount call */
|
||||
#define MS_I_VERSION (1<<23) /* Update inode I_version field */
|
||||
#define MS_STRICTATIME (1<<24) /* Always perform atime updates */
|
||||
+#define MS_FROZEN (1<<25) /* Frozen filesystem */
|
||||
#define MS_NOSEC (1<<28)
|
||||
#define MS_BORN (1<<29)
|
||||
#define MS_ACTIVE (1<<30)
|
||||
@@ -2501,6 +2502,8 @@ extern void drop_super(struct super_block *sb);
|
||||
extern void iterate_supers(void (*)(struct super_block *, void *), void *);
|
||||
extern void iterate_supers_type(struct file_system_type *,
|
||||
void (*)(struct super_block *, void *), void *);
|
||||
+extern int freeze_supers(void);
|
||||
+extern void thaw_supers(void);
|
||||
|
||||
extern int dcache_dir_open(struct inode *, struct file *);
|
||||
extern int dcache_dir_close(struct inode *, struct file *);
|
||||
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
|
||||
index 6d6d288..492fc62 100644
|
||||
--- a/kernel/power/hibernate.c
|
||||
+++ b/kernel/power/hibernate.c
|
||||
@@ -626,12 +626,17 @@ int hibernate(void)
|
||||
if (error)
|
||||
goto Finish;
|
||||
|
||||
- error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM);
|
||||
+ error = freeze_supers();
|
||||
if (error)
|
||||
goto Thaw;
|
||||
+
|
||||
+ error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM);
|
||||
+ if (error)
|
||||
+ goto Thaw_fs;
|
||||
+
|
||||
if (freezer_test_done) {
|
||||
freezer_test_done = false;
|
||||
- goto Thaw;
|
||||
+ goto Thaw_fs;
|
||||
}
|
||||
|
||||
if (in_suspend) {
|
||||
@@ -655,6 +660,8 @@ int hibernate(void)
|
||||
pr_debug("PM: Image restored successfully.\n");
|
||||
}
|
||||
|
||||
+ Thaw_fs:
|
||||
+ thaw_supers();
|
||||
Thaw:
|
||||
thaw_processes();
|
||||
Finish:
|
||||
diff --git a/kernel/power/power.h b/kernel/power/power.h
|
||||
index 21724ee..40d6f64 100644
|
||||
--- a/kernel/power/power.h
|
||||
+++ b/kernel/power/power.h
|
||||
@@ -1,3 +1,4 @@
|
||||
+#include <linux/fs.h>
|
||||
#include <linux/suspend.h>
|
||||
#include <linux/suspend_ioctls.h>
|
||||
#include <linux/utsname.h>
|
||||
@@ -227,45 +228,3 @@ enum {
|
||||
#define TEST_MAX (__TEST_AFTER_LAST - 1)
|
||||
|
||||
extern int pm_test_level;
|
||||
-
|
||||
-#ifdef CONFIG_SUSPEND_FREEZER
|
||||
-static inline int suspend_freeze_processes(void)
|
||||
-{
|
||||
- int error;
|
||||
-
|
||||
- error = freeze_processes();
|
||||
-
|
||||
- /*
|
||||
- * freeze_processes() automatically thaws every task if freezing
|
||||
- * fails. So we need not do anything extra upon error.
|
||||
- */
|
||||
- if (error)
|
||||
- goto Finish;
|
||||
-
|
||||
- error = freeze_kernel_threads();
|
||||
-
|
||||
- /*
|
||||
- * freeze_kernel_threads() thaws only kernel threads upon freezing
|
||||
- * failure. So we have to thaw the userspace tasks ourselves.
|
||||
- */
|
||||
- if (error)
|
||||
- thaw_processes();
|
||||
-
|
||||
- Finish:
|
||||
- return error;
|
||||
-}
|
||||
-
|
||||
-static inline void suspend_thaw_processes(void)
|
||||
-{
|
||||
- thaw_processes();
|
||||
-}
|
||||
-#else
|
||||
-static inline int suspend_freeze_processes(void)
|
||||
-{
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static inline void suspend_thaw_processes(void)
|
||||
-{
|
||||
-}
|
||||
-#endif
|
||||
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
|
||||
index 4fd51be..5f51fc7 100644
|
||||
--- a/kernel/power/suspend.c
|
||||
+++ b/kernel/power/suspend.c
|
||||
@@ -29,6 +29,62 @@
|
||||
|
||||
#include "power.h"
|
||||
|
||||
+#ifdef CONFIG_SUSPEND_FREEZER
|
||||
+
|
||||
+static inline int suspend_freeze_processes(void)
|
||||
+{
|
||||
+ int error;
|
||||
+
|
||||
+ error = freeze_processes();
|
||||
+
|
||||
+ /*
|
||||
+ * freeze_processes() automatically thaws every task if freezing
|
||||
+ * fails. So we need not do anything extra upon error.
|
||||
+ */
|
||||
+
|
||||
+ if (error)
|
||||
+ goto Finish;
|
||||
+
|
||||
+ error = freeze_supers();
|
||||
+ if (error) {
|
||||
+ thaw_processes();
|
||||
+ goto Finish;
|
||||
+ }
|
||||
+
|
||||
+ error = freeze_kernel_threads();
|
||||
+
|
||||
+ /*
|
||||
+ * freeze_kernel_threads() thaws only kernel threads upon freezing
|
||||
+ * failure. So we have to thaw the userspace tasks ourselves.
|
||||
+ */
|
||||
+ if (error) {
|
||||
+ thaw_supers();
|
||||
+ thaw_processes();
|
||||
+ }
|
||||
+
|
||||
+Finish:
|
||||
+ return error;
|
||||
+}
|
||||
+
|
||||
+static inline void suspend_thaw_processes(void)
|
||||
+{
|
||||
+ thaw_supers();
|
||||
+ thaw_processes();
|
||||
+}
|
||||
+
|
||||
+#else /* !CONFIG_SUSPEND_FREEZER */
|
||||
+
|
||||
+static inline int suspend_freeze_processes(void)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static inline void suspend_thaw_processes(void)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+#endif /* !CONFIG_SUSPEND_FREEZER */
|
||||
+
|
||||
const char *const pm_states[PM_SUSPEND_MAX] = {
|
||||
[PM_SUSPEND_STANDBY] = "standby",
|
||||
[PM_SUSPEND_MEM] = "mem",
|
|
@ -0,0 +1,15 @@
|
|||
--- a/drivers/platform/x86/intel_ips.c
|
||||
+++ a/drivers/platform/x86/intel_ips.c
|
||||
@@ -1603,6 +1603,12 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
goto error_unmap;
|
||||
}
|
||||
|
||||
+ /* No IRQ assigned is a BIOS failure... */
|
||||
+ if (dev->irq <= 0) {
|
||||
+ ret = -ENODEV;
|
||||
+ goto error_unmap;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* IRQ handler for ME interaction
|
||||
* Note: don't use MSI here as the PCH has bugs.
|
|
@ -0,0 +1,104 @@
|
|||
From 658f1bd2dd632209df00ec66349e15941ffdd83b Mon Sep 17 00:00:00 2001
|
||||
From: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
Date: Wed, 16 Jan 2013 10:28:09 +0000
|
||||
Subject: [PATCH 3.8] iwlegacy: fix IBSS cleanup
|
||||
|
||||
We do not correctly change interface type when switching from
|
||||
IBSS mode to STA mode, that results in microcode errors.
|
||||
|
||||
Resolves:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=886946
|
||||
|
||||
Reported-by: Jaroslav Skarvada <jskarvad@redhat.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
---
|
||||
drivers/net/wireless/iwlegacy/common.c | 35 ++++++++++++++--------------------
|
||||
1 file changed, 14 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c
|
||||
index 7e16d10..90b8970 100644
|
||||
--- a/drivers/net/wireless/iwlegacy/common.c
|
||||
+++ b/drivers/net/wireless/iwlegacy/common.c
|
||||
@@ -3958,17 +3958,21 @@ il_connection_init_rx_config(struct il_priv *il)
|
||||
|
||||
memset(&il->staging, 0, sizeof(il->staging));
|
||||
|
||||
- if (!il->vif) {
|
||||
+ switch (il->iw_mode) {
|
||||
+ case NL80211_IFTYPE_UNSPECIFIED:
|
||||
il->staging.dev_type = RXON_DEV_TYPE_ESS;
|
||||
- } else if (il->vif->type == NL80211_IFTYPE_STATION) {
|
||||
+ break;
|
||||
+ case NL80211_IFTYPE_STATION:
|
||||
il->staging.dev_type = RXON_DEV_TYPE_ESS;
|
||||
il->staging.filter_flags = RXON_FILTER_ACCEPT_GRP_MSK;
|
||||
- } else if (il->vif->type == NL80211_IFTYPE_ADHOC) {
|
||||
+ break;
|
||||
+ case NL80211_IFTYPE_ADHOC:
|
||||
il->staging.dev_type = RXON_DEV_TYPE_IBSS;
|
||||
il->staging.flags = RXON_FLG_SHORT_PREAMBLE_MSK;
|
||||
il->staging.filter_flags =
|
||||
RXON_FILTER_BCON_AWARE_MSK | RXON_FILTER_ACCEPT_GRP_MSK;
|
||||
- } else {
|
||||
+ break;
|
||||
+ default:
|
||||
IL_ERR("Unsupported interface type %d\n", il->vif->type);
|
||||
return;
|
||||
}
|
||||
@@ -4550,8 +4554,7 @@ out:
|
||||
EXPORT_SYMBOL(il_mac_add_interface);
|
||||
|
||||
static void
|
||||
-il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif,
|
||||
- bool mode_change)
|
||||
+il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif)
|
||||
{
|
||||
lockdep_assert_held(&il->mutex);
|
||||
|
||||
@@ -4560,9 +4563,7 @@ il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif,
|
||||
il_force_scan_end(il);
|
||||
}
|
||||
|
||||
- if (!mode_change)
|
||||
- il_set_mode(il);
|
||||
-
|
||||
+ il_set_mode(il);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -4575,8 +4576,8 @@ il_mac_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
|
||||
|
||||
WARN_ON(il->vif != vif);
|
||||
il->vif = NULL;
|
||||
-
|
||||
- il_teardown_interface(il, vif, false);
|
||||
+ il->iw_mode = NL80211_IFTYPE_UNSPECIFIED;
|
||||
+ il_teardown_interface(il, vif);
|
||||
memset(il->bssid, 0, ETH_ALEN);
|
||||
|
||||
D_MAC80211("leave\n");
|
||||
@@ -4685,18 +4686,10 @@ il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
}
|
||||
|
||||
/* success */
|
||||
- il_teardown_interface(il, vif, true);
|
||||
vif->type = newtype;
|
||||
vif->p2p = false;
|
||||
- err = il_set_mode(il);
|
||||
- WARN_ON(err);
|
||||
- /*
|
||||
- * We've switched internally, but submitting to the
|
||||
- * device may have failed for some reason. Mask this
|
||||
- * error, because otherwise mac80211 will not switch
|
||||
- * (and set the interface type back) and we'll be
|
||||
- * out of sync with it.
|
||||
- */
|
||||
+ il->iw_mode = newtype;
|
||||
+ il_teardown_interface(il, vif);
|
||||
err = 0;
|
||||
|
||||
out:
|
||||
--
|
||||
1.8.0.2
|
||||
|
1772
kernel.spec
1772
kernel.spec
File diff suppressed because it is too large
Load Diff
|
@ -152,7 +152,7 @@ Main executable randomisation (PIE) : 12 bits (guessed)
|
|||
struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)
|
||||
--- a/arch/x86/mm/mmap.c
|
||||
+++ b/arch/x86/mm/mmap.c
|
||||
@@ -124,13 +124,16 @@ static unsigned long mmap_legacy_base(void)
|
||||
@@ -124,13 +124,19 @@ static unsigned long mmap_legacy_base(void)
|
||||
*/
|
||||
void arch_pick_mmap_layout(struct mm_struct *mm)
|
||||
{
|
||||
|
@ -163,9 +163,12 @@ Main executable randomisation (PIE) : 12 bits (guessed)
|
|||
} else {
|
||||
mm->mmap_base = mmap_base();
|
||||
mm->get_unmapped_area = arch_get_unmapped_area_topdown;
|
||||
+#ifdef CONFIG_X86_32
|
||||
+ if (!(current->personality & READ_IMPLIES_EXEC)
|
||||
+ && !(__supported_pte_mask & _PAGE_NX)
|
||||
+ && mmap_is_ia32())
|
||||
+ mm->get_unmapped_exec_area = arch_get_unmapped_exec_area;
|
||||
+#endif
|
||||
mm->unmap_area = arch_unmap_area_topdown;
|
||||
}
|
||||
}
|
||||
|
@ -224,3 +227,25 @@ Main executable randomisation (PIE) : 12 bits (guessed)
|
|||
if (new_addr & ~PAGE_MASK) {
|
||||
ret = new_addr;
|
||||
goto out;
|
||||
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
|
||||
index 57d1868..29c0c35 100644
|
||||
--- a/arch/x86/kernel/process.c
|
||||
+++ b/arch/x86/kernel/process.c
|
||||
@@ -669,6 +669,16 @@ unsigned long arch_align_stack(unsigned long sp)
|
||||
unsigned long arch_randomize_brk(struct mm_struct *mm)
|
||||
{
|
||||
unsigned long range_end = mm->brk + 0x02000000;
|
||||
- return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
|
||||
+ unsigned long bump = 0;
|
||||
+#ifdef CONFIG_X86_32
|
||||
+ /* in the case of NX emulation, shove the brk segment way out of the
|
||||
+ way of the exec randomization area, since it can collide with
|
||||
+ future allocations if not. */
|
||||
+ if ( (mm->get_unmapped_exec_area == arch_get_unmapped_exec_area) &&
|
||||
+ (mm->brk < 0x08000000) ) {
|
||||
+ bump = (TASK_SIZE/6);
|
||||
+ }
|
||||
+#endif
|
||||
+ return bump + (randomize_range(mm->brk, range_end, 0) ? : mm->brk);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
--- linux-2.6.34.noarch/drivers/acpi/acpica/acconfig.h~ 2010-07-01 14:49:03.000000000 -0400
|
||||
+++ linux-2.6.34.noarch/drivers/acpi/acpica/acconfig.h 2010-07-01 14:49:17.000000000 -0400
|
||||
--- linux-2.6.34.noarch/include/acpi/acconfig.h~ 2010-07-01 14:49:03.000000000 -0400
|
||||
+++ linux-2.6.34.noarch/include/acpi/acconfig.h 2010-07-01 14:49:17.000000000 -0400
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
/* Maximum number of While() loop iterations before forced abort */
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
From df42d15cd28f468ecd4c30465b98a53cce90617c Mon Sep 17 00:00:00 2001
|
||||
From f72d640713d01b3b704c6e84ab49b62f19fc9c22 Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@phobos.i.jkkm.org>
|
||||
Date: Tue, 30 Mar 2010 00:16:25 -0400
|
||||
Subject: dev-crash-driver.patch
|
||||
Subject: [PATCH] dev-crash-driver.patch
|
||||
|
||||
---
|
||||
arch/ia64/include/asm/crash.h | 90 +++++++++++++++++++++++++++++
|
||||
arch/ia64/kernel/ia64_ksyms.c | 3 +
|
||||
arch/x86/include/asm/crash.h | 75 ++++++++++++++++++++++++
|
||||
arch/x86/mm/ioremap.c | 2 +
|
||||
drivers/char/Kconfig | 2 +
|
||||
drivers/char/Kconfig | 3 +
|
||||
drivers/char/Makefile | 2 +
|
||||
drivers/char/crash.c | 128 +++++++++++++++++++++++++++++++++++++++++
|
||||
7 files changed, 302 insertions(+), 0 deletions(-)
|
||||
7 files changed, 303 insertions(+), 0 deletions(-)
|
||||
create mode 100644 arch/ia64/include/asm/crash.h
|
||||
create mode 100644 arch/x86/include/asm/crash.h
|
||||
create mode 100644 drivers/char/crash.c
|
||||
|
@ -208,7 +208,7 @@ index 0000000..dfcc006
|
|||
+
|
||||
+#endif /* _ASM_I386_CRASH_H */
|
||||
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
|
||||
index 5eb1ba7..3e525d2 100644
|
||||
index be1ef57..ac659f7 100644
|
||||
--- a/arch/x86/mm/ioremap.c
|
||||
+++ b/arch/x86/mm/ioremap.c
|
||||
@@ -24,6 +24,8 @@
|
||||
|
@ -220,6 +220,30 @@ index 5eb1ba7..3e525d2 100644
|
|||
/*
|
||||
* Fix up the linear direct mapping of the kernel to avoid cache attribute
|
||||
* conflicts.
|
||||
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
|
||||
index 423fd56..e04a561 100644
|
||||
--- a/drivers/char/Kconfig
|
||||
+++ b/drivers/char/Kconfig
|
||||
@@ -4,6 +4,9 @@
|
||||
|
||||
menu "Character devices"
|
||||
|
||||
+config CRASH
|
||||
+ tristate "Crash Utility memory driver"
|
||||
+
|
||||
source "drivers/tty/Kconfig"
|
||||
|
||||
config DEVKMEM
|
||||
diff --git a/drivers/char/Makefile b/drivers/char/Makefile
|
||||
index 32762ba..3d5d525 100644
|
||||
--- a/drivers/char/Makefile
|
||||
+++ b/drivers/char/Makefile
|
||||
@@ -65,3 +65,5 @@ obj-$(CONFIG_JS_RTC) += js-rtc.o
|
||||
js-rtc-y = rtc.o
|
||||
|
||||
obj-$(CONFIG_TILE_SROM) += tile-srom.o
|
||||
+
|
||||
+obj-$(CONFIG_CRASH) += crash.o
|
||||
diff --git a/drivers/char/crash.c b/drivers/char/crash.c
|
||||
new file mode 100644
|
||||
index 0000000..e5437de
|
||||
|
@ -354,29 +378,6 @@ index 0000000..e5437de
|
|||
+module_exit(crash_cleanup_module);
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
||||
--
|
||||
1.7.6
|
||||
|
||||
diff --git a/drivers/char/Makefile b/drivers/char/Makefile
|
||||
index ba53ec9..6588b33 100644
|
||||
--- a/drivers/char/Makefile
|
||||
+++ b/drivers/char/Makefile
|
||||
@@ -98,3 +98,5 @@ obj-$(CONFIG_RAMOOPS) += ramoops.o
|
||||
|
||||
obj-$(CONFIG_JS_RTC) += js-rtc.o
|
||||
js-rtc-y = rtc.o
|
||||
+
|
||||
+obj-$(CONFIG_CRASH) += crash.o
|
||||
|
||||
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
|
||||
index 04f8b2d..e8fb997 100644
|
||||
--- a/drivers/char/Kconfig
|
||||
+++ b/drivers/char/Kconfig
|
||||
@@ -4,6 +4,9 @@
|
||||
|
||||
menu "Character devices"
|
||||
|
||||
+config CRASH
|
||||
+ tristate "Crash Utility memory driver"
|
||||
+
|
||||
source "drivers/tty/Kconfig"
|
||||
|
||||
config DEVKMEM
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
||||
index 4e8985a..70d0853 100644
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -318,6 +318,7 @@ static void bad_page(struct page *page)
|
||||
current->comm, page_to_pfn(page));
|
||||
dump_page(page);
|
||||
|
||||
+ print_modules();
|
||||
dump_stack();
|
||||
out:
|
||||
/* Leave bad fields for debug, except PageBuddy could make trouble */
|
||||
diff --git a/mm/slab.c b/mm/slab.c
|
||||
index d96e223..6f8905b 100644
|
||||
--- a/mm/slab.c
|
||||
+++ b/mm/slab.c
|
||||
@@ -1886,8 +1886,8 @@ static void check_poison_obj(struct kmem_cache *cachep, void *objp)
|
||||
/* Print header */
|
||||
if (lines == 0) {
|
||||
printk(KERN_ERR
|
||||
- "Slab corruption: %s start=%p, len=%d\n",
|
||||
- cachep->name, realobj, size);
|
||||
+ "Slab corruption (%s): %s start=%p, len=%d\n",
|
||||
+ print_tainted(), cachep->name, realobj, size);
|
||||
print_objinfo(cachep, objp, 0);
|
||||
}
|
||||
/* Hexdump the affected line */
|
||||
@@ -2985,8 +2985,8 @@ static void check_slabp(struct kmem_cache *cachep, struct slab *slabp)
|
||||
if (entries != cachep->num - slabp->inuse) {
|
||||
bad:
|
||||
printk(KERN_ERR "slab: Internal list corruption detected in "
|
||||
- "cache '%s'(%d), slabp %p(%d). Hexdump:\n",
|
||||
- cachep->name, cachep->num, slabp, slabp->inuse);
|
||||
+ "cache '%s'(%d), slabp %p(%d). Tainted(%s). Hexdump:\n",
|
||||
+ cachep->name, cachep->num, slabp, slabp->inuse, print_tainted());
|
||||
for (i = 0;
|
||||
i < sizeof(*slabp) + cachep->num * sizeof(kmem_bufctl_t);
|
||||
i++) {
|
||||
diff --git a/mm/slub.c b/mm/slub.c
|
||||
index 35f351f..e7ccb39 100644
|
||||
--- a/mm/slub.c
|
||||
+++ b/mm/slub.c
|
||||
@@ -472,7 +472,7 @@ static void slab_bug(struct kmem_cache *s, char *fmt, ...)
|
||||
va_end(args);
|
||||
printk(KERN_ERR "========================================"
|
||||
"=====================================\n");
|
||||
- printk(KERN_ERR "BUG %s: %s\n", s->name, buf);
|
||||
+ printk(KERN_ERR "BUG %s (%s): %s\n", s->name, print_tainted(), buf);
|
||||
printk(KERN_ERR "----------------------------------------"
|
||||
"-------------------------------------\n\n");
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
From beb764ac03e52eba1a654afb4273fab1f9de3cff Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@mcmartin.ca>
|
||||
Date: Mon, 29 Nov 2010 20:59:14 -0500
|
||||
Subject: [PATCH] linux-2.6-debug-vm-would_have_oomkilled
|
||||
|
||||
---
|
||||
include/linux/oom.h | 1 +
|
||||
kernel/sysctl.c | 7 +++++++
|
||||
mm/oom_kill.c | 8 ++++++++
|
||||
3 files changed, 16 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/include/linux/oom.h b/include/linux/oom.h
|
||||
index 5e3aa83..79a27b4 100644
|
||||
--- a/include/linux/oom.h
|
||||
+++ b/include/linux/oom.h
|
||||
@@ -72,5 +72,6 @@ extern struct task_struct *find_lock_task_mm(struct task_struct *p);
|
||||
extern int sysctl_oom_dump_tasks;
|
||||
extern int sysctl_oom_kill_allocating_task;
|
||||
extern int sysctl_panic_on_oom;
|
||||
+extern int sysctl_would_have_oomkilled;
|
||||
#endif /* __KERNEL__*/
|
||||
#endif /* _INCLUDE_LINUX_OOM_H */
|
||||
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
|
||||
index 5abfa15..a0fed6d 100644
|
||||
--- a/kernel/sysctl.c
|
||||
+++ b/kernel/sysctl.c
|
||||
@@ -1000,6 +1000,13 @@ static struct ctl_table vm_table[] = {
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{
|
||||
+ .procname = "would_have_oomkilled",
|
||||
+ .data = &sysctl_would_have_oomkilled,
|
||||
+ .maxlen = sizeof(sysctl_would_have_oomkilled),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = proc_dointvec,
|
||||
+ },
|
||||
+ {
|
||||
.procname = "overcommit_ratio",
|
||||
.data = &sysctl_overcommit_ratio,
|
||||
.maxlen = sizeof(sysctl_overcommit_ratio),
|
||||
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
|
||||
index 7dcca55..281ac39 100644
|
||||
--- a/mm/oom_kill.c
|
||||
+++ b/mm/oom_kill.c
|
||||
@@ -35,6 +35,7 @@
|
||||
int sysctl_panic_on_oom;
|
||||
int sysctl_oom_kill_allocating_task;
|
||||
int sysctl_oom_dump_tasks = 1;
|
||||
+int sysctl_would_have_oomkilled;
|
||||
static DEFINE_SPINLOCK(zone_scan_lock);
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
@@ -477,6 +478,13 @@ static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order,
|
||||
}
|
||||
|
||||
task_lock(p);
|
||||
+ if (sysctl_would_have_oomkilled) {
|
||||
+ printk(KERN_ERR "%s: would have killed process %d (%s), but continuing instead...\n",
|
||||
+ __func__, task_pid_nr(p), p->comm);
|
||||
+ task_unlock(p);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
pr_err("%s: Kill process %d (%s) score %d or sacrifice child\n",
|
||||
message, task_pid_nr(p), p->comm, points);
|
||||
task_unlock(p);
|
||||
--
|
||||
1.7.3.2
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
|
||||
index d8d7596..a1b7117 100644
|
||||
index eaef02a..2029819 100644
|
||||
--- a/drivers/acpi/video.c
|
||||
+++ b/drivers/acpi/video.c
|
||||
@@ -71,7 +71,7 @@ MODULE_AUTHOR("Bruno Ducrot");
|
||||
@@ -69,7 +69,7 @@ MODULE_AUTHOR("Bruno Ducrot");
|
||||
MODULE_DESCRIPTION("ACPI Video Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
-static int brightness_switch_enabled = 1;
|
||||
+static int brightness_switch_enabled = 0;
|
||||
-static bool brightness_switch_enabled = 1;
|
||||
+static bool brightness_switch_enabled = 0;
|
||||
module_param(brightness_switch_enabled, bool, 0644);
|
||||
|
||||
static int acpi_video_bus_add(struct acpi_device *device);
|
||||
/*
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
diff -up linux-2.6.30.noarch/drivers/pci/pcie/aspm.c.mjg linux-2.6.30.noarch/drivers/pci/pcie/aspm.c
|
||||
--- linux-2.6.30.noarch/drivers/pci/pcie/aspm.c.mjg 2009-07-16 22:01:11.000000000 +0100
|
||||
+++ linux-2.6.30.noarch/drivers/pci/pcie/aspm.c 2009-07-16 22:01:30.000000000 +0100
|
||||
@@ -65,7 +65,7 @@ static LIST_HEAD(link_list);
|
||||
#define POLICY_DEFAULT 0 /* BIOS default setting */
|
||||
#define POLICY_PERFORMANCE 1 /* high performance */
|
||||
#define POLICY_POWERSAVE 2 /* high power saving */
|
||||
-static int aspm_policy;
|
||||
+static int aspm_policy = POLICY_POWERSAVE;
|
||||
static const char *policy_str[] = {
|
||||
[POLICY_DEFAULT] = "default",
|
||||
[POLICY_PERFORMANCE] = "performance",
|
|
@ -1,11 +1,22 @@
|
|||
From 802e6d8c8477a553a677b23a247d6d2638e01958 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Jones <davej@redhat.com>
|
||||
Date: Wed, 26 Oct 2011 13:31:47 -0400
|
||||
Subject: [PATCH] e1000e: ich9 montevina
|
||||
|
||||
This only showed up in one SDV (Montevina).
|
||||
The PCIE slots don't seem to like network cards, so this is the only hope
|
||||
to get networking working. It's never going upstream, but it's low impact
|
||||
enough to carry just to keep those SDVs working.
|
||||
---
|
||||
drivers/net/ethernet/intel/e1000e/ich8lan.c | 6 ++++++
|
||||
drivers/net/ethernet/intel/e1000e/netdev.c | 1 +
|
||||
2 files changed, 7 insertions(+), 0 deletions(-)
|
||||
|
||||
--- linux-2.6.35.noarch/drivers/net/e1000e/ich8lan.c~ 2010-09-29 17:53:13.000000000 -0400
|
||||
+++ linux-2.6.35.noarch/drivers/net/e1000e/ich8lan.c 2010-09-29 17:54:00.000000000 -0400
|
||||
@@ -424,6 +424,12 @@ static s32 e1000_init_phy_params_ich8lan
|
||||
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
|
||||
index 6a17c62..0e40975 100644
|
||||
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
|
||||
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
|
||||
@@ -452,6 +452,12 @@ static s32 e1000_init_phy_params_ich8lan(struct e1000_hw *hw)
|
||||
|
||||
/* Verify phy id */
|
||||
switch (phy->id) {
|
||||
|
@ -18,9 +29,11 @@ enough to carry just to keep those SDVs working.
|
|||
case IGP03E1000_E_PHY_ID:
|
||||
phy->type = e1000_phy_igp_3;
|
||||
phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
|
||||
--- linux-2.6.35.noarch/drivers/net/e1000e/netdev.c~ 2010-09-29 17:54:07.000000000 -0400
|
||||
+++ linux-2.6.35.noarch/drivers/net/e1000e/netdev.c 2010-09-29 17:54:29.000000000 -0400
|
||||
@@ -5994,6 +5994,7 @@ static DEFINE_PCI_DEVICE_TABLE(e1000_pci
|
||||
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
|
||||
index a855db1..edac30b 100644
|
||||
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
|
||||
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
|
||||
@@ -6359,6 +6359,7 @@ static DEFINE_PCI_DEVICE_TABLE(e1000_pci_tbl) = {
|
||||
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M), board_ich9lan },
|
||||
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_AMT), board_ich9lan },
|
||||
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_V), board_ich9lan },
|
||||
|
@ -28,3 +41,6 @@ enough to carry just to keep those SDVs working.
|
|||
|
||||
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LM), board_ich9lan },
|
||||
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LF), board_ich9lan },
|
||||
--
|
||||
1.7.6.4
|
||||
|
||||
|
|
|
@ -1,452 +0,0 @@
|
|||
drivers/acpi/acpica/aclocal.h | 7 +--
|
||||
drivers/acpi/acpica/evgpe.c | 75 +++++++++++++++-----------------
|
||||
drivers/acpi/acpica/evgpeinit.c | 11 +----
|
||||
drivers/acpi/acpica/evgpeutil.c | 5 +-
|
||||
drivers/acpi/acpica/evxface.c | 23 +++++-----
|
||||
drivers/acpi/ec.c | 2 +-
|
||||
drivers/acpi/pci_bind.c | 86 ++++++++++++++++++++++++++++++++++++++
|
||||
drivers/acpi/sleep.c | 2 +-
|
||||
drivers/char/ipmi/ipmi_si_intf.c | 2 +-
|
||||
include/acpi/acpixf.h | 3 +-
|
||||
10 files changed, 143 insertions(+), 73 deletions(-)
|
||||
|
||||
diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h
|
||||
index 2ceb0c0..3663362 100644
|
||||
--- a/drivers/acpi/acpica/aclocal.h
|
||||
+++ b/drivers/acpi/acpica/aclocal.h
|
||||
@@ -406,17 +406,16 @@ struct acpi_predefined_data {
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
-/* Dispatch info for each GPE -- either a method or handler, cannot be both */
|
||||
+/* Dispatch info for each GPE */
|
||||
|
||||
struct acpi_handler_info {
|
||||
acpi_event_handler address; /* Address of handler, if any */
|
||||
void *context; /* Context to be passed to handler */
|
||||
- struct acpi_namespace_node *method_node; /* Method node for this GPE level (saved) */
|
||||
u8 orig_flags; /* Original misc info about this GPE */
|
||||
u8 orig_enabled; /* Set if the GPE was originally enabled */
|
||||
};
|
||||
|
||||
-union acpi_gpe_dispatch_info {
|
||||
+struct acpi_gpe_dispatch_info {
|
||||
struct acpi_namespace_node *method_node; /* Method node for this GPE level */
|
||||
struct acpi_handler_info *handler;
|
||||
};
|
||||
@@ -426,7 +425,7 @@ union acpi_gpe_dispatch_info {
|
||||
* NOTE: Important to keep this struct as small as possible.
|
||||
*/
|
||||
struct acpi_gpe_event_info {
|
||||
- union acpi_gpe_dispatch_info dispatch; /* Either Method or Handler */
|
||||
+ struct acpi_gpe_dispatch_info dispatch;
|
||||
struct acpi_gpe_register_info *register_info; /* Backpointer to register info */
|
||||
u8 flags; /* Misc info about this GPE */
|
||||
u8 gpe_number; /* This GPE */
|
||||
diff --git a/drivers/acpi/acpica/evgpe.c b/drivers/acpi/acpica/evgpe.c
|
||||
index f226eac..c4b1c4c 100644
|
||||
--- a/drivers/acpi/acpica/evgpe.c
|
||||
+++ b/drivers/acpi/acpica/evgpe.c
|
||||
@@ -474,9 +474,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context)
|
||||
* Must check for control method type dispatch one more time to avoid a
|
||||
* race with ev_gpe_install_handler
|
||||
*/
|
||||
- if ((local_gpe_event_info.flags & ACPI_GPE_DISPATCH_MASK) ==
|
||||
- ACPI_GPE_DISPATCH_METHOD) {
|
||||
-
|
||||
+ if (local_gpe_event_info.flags & ACPI_GPE_DISPATCH_METHOD) {
|
||||
/* Allocate the evaluation information block */
|
||||
|
||||
info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
|
||||
@@ -575,41 +573,15 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number)
|
||||
}
|
||||
|
||||
/*
|
||||
- * Dispatch the GPE to either an installed handler, or the control method
|
||||
- * associated with this GPE (_Lxx or _Exx). If a handler exists, we invoke
|
||||
- * it and do not attempt to run the method. If there is neither a handler
|
||||
- * nor a method, we disable this GPE to prevent further such pointless
|
||||
- * events from firing.
|
||||
+ * Dispatch the GPE to either any installed handler or control
|
||||
+ * method associated with this GPE (_Lxx or _Exx). We invoke
|
||||
+ * the method first in case it has side effects that would be
|
||||
+ * interfered with if the handler has already altered hardware
|
||||
+ * state. If there is neither a handler nor a method, we
|
||||
+ * disable this GPE to prevent further such pointless events
|
||||
+ * from firing.
|
||||
*/
|
||||
- switch (gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) {
|
||||
- case ACPI_GPE_DISPATCH_HANDLER:
|
||||
-
|
||||
- /*
|
||||
- * Invoke the installed handler (at interrupt level)
|
||||
- * Ignore return status for now.
|
||||
- * TBD: leave GPE disabled on error?
|
||||
- */
|
||||
- (void)gpe_event_info->dispatch.handler->address(gpe_event_info->
|
||||
- dispatch.
|
||||
- handler->
|
||||
- context);
|
||||
-
|
||||
- /* It is now safe to clear level-triggered events. */
|
||||
-
|
||||
- if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
|
||||
- ACPI_GPE_LEVEL_TRIGGERED) {
|
||||
- status = acpi_hw_clear_gpe(gpe_event_info);
|
||||
- if (ACPI_FAILURE(status)) {
|
||||
- ACPI_EXCEPTION((AE_INFO, status,
|
||||
- "Unable to clear GPE[0x%2X]",
|
||||
- gpe_number));
|
||||
- return_UINT32(ACPI_INTERRUPT_NOT_HANDLED);
|
||||
- }
|
||||
- }
|
||||
- break;
|
||||
-
|
||||
- case ACPI_GPE_DISPATCH_METHOD:
|
||||
-
|
||||
+ if (gpe_event_info->flags & ACPI_GPE_DISPATCH_METHOD) {
|
||||
/*
|
||||
* Disable the GPE, so it doesn't keep firing before the method has a
|
||||
* chance to run (it runs asynchronously with interrupts enabled).
|
||||
@@ -634,10 +606,34 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number)
|
||||
"Unable to queue handler for GPE[0x%2X] - event disabled",
|
||||
gpe_number));
|
||||
}
|
||||
- break;
|
||||
+ }
|
||||
|
||||
- default:
|
||||
+ if (gpe_event_info->flags & ACPI_GPE_DISPATCH_HANDLER) {
|
||||
+ /*
|
||||
+ * Invoke the installed handler (at interrupt level)
|
||||
+ * Ignore return status for now.
|
||||
+ * TBD: leave GPE disabled on error?
|
||||
+ */
|
||||
+ (void)gpe_event_info->dispatch.handler->address(gpe_event_info->
|
||||
+ dispatch.
|
||||
+ handler->
|
||||
+ context);
|
||||
|
||||
+ /* It is now safe to clear level-triggered events. */
|
||||
+
|
||||
+ if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
|
||||
+ ACPI_GPE_LEVEL_TRIGGERED) {
|
||||
+ status = acpi_hw_clear_gpe(gpe_event_info);
|
||||
+ if (ACPI_FAILURE(status)) {
|
||||
+ ACPI_EXCEPTION((AE_INFO, status,
|
||||
+ "Unable to clear GPE[0x%2X]",
|
||||
+ gpe_number));
|
||||
+ return_UINT32(ACPI_INTERRUPT_NOT_HANDLED);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (!(gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK)) {
|
||||
/*
|
||||
* No handler or method to run!
|
||||
* 03/2010: This case should no longer be possible. We will not allow
|
||||
@@ -658,7 +654,6 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number)
|
||||
gpe_number));
|
||||
return_UINT32(ACPI_INTERRUPT_NOT_HANDLED);
|
||||
}
|
||||
- break;
|
||||
}
|
||||
|
||||
return_UINT32(ACPI_INTERRUPT_HANDLED);
|
||||
diff --git a/drivers/acpi/acpica/evgpeinit.c b/drivers/acpi/acpica/evgpeinit.c
|
||||
index 2c7def9..9915b52 100644
|
||||
--- a/drivers/acpi/acpica/evgpeinit.c
|
||||
+++ b/drivers/acpi/acpica/evgpeinit.c
|
||||
@@ -386,16 +386,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
- if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) ==
|
||||
- ACPI_GPE_DISPATCH_HANDLER) {
|
||||
-
|
||||
- /* If there is already a handler, ignore this GPE method */
|
||||
-
|
||||
- return_ACPI_STATUS(AE_OK);
|
||||
- }
|
||||
-
|
||||
- if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) ==
|
||||
- ACPI_GPE_DISPATCH_METHOD) {
|
||||
+ if (gpe_event_info->flags & ACPI_GPE_DISPATCH_METHOD) {
|
||||
/*
|
||||
* If there is already a method, ignore this method. But check
|
||||
* for a type mismatch (if both the _Lxx AND _Exx exist)
|
||||
diff --git a/drivers/acpi/acpica/evgpeutil.c b/drivers/acpi/acpica/evgpeutil.c
|
||||
index 19a0e51..434ad1b 100644
|
||||
--- a/drivers/acpi/acpica/evgpeutil.c
|
||||
+++ b/drivers/acpi/acpica/evgpeutil.c
|
||||
@@ -323,12 +323,11 @@ acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
|
||||
ACPI_GPE_REGISTER_WIDTH)
|
||||
+ j];
|
||||
|
||||
- if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) ==
|
||||
- ACPI_GPE_DISPATCH_HANDLER) {
|
||||
+ if (gpe_event_info->flags & ACPI_GPE_DISPATCH_HANDLER) {
|
||||
ACPI_FREE(gpe_event_info->dispatch.handler);
|
||||
gpe_event_info->dispatch.handler = NULL;
|
||||
gpe_event_info->flags &=
|
||||
- ~ACPI_GPE_DISPATCH_MASK;
|
||||
+ ~ACPI_GPE_DISPATCH_HANDLER;
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/drivers/acpi/acpica/evxface.c b/drivers/acpi/acpica/evxface.c
|
||||
index 36af222..b097136 100644
|
||||
--- a/drivers/acpi/acpica/evxface.c
|
||||
+++ b/drivers/acpi/acpica/evxface.c
|
||||
@@ -662,6 +662,8 @@ ACPI_EXPORT_SYMBOL(acpi_remove_notify_handler)
|
||||
* edge- or level-triggered interrupt.
|
||||
* Address - Address of the handler
|
||||
* Context - Value passed to the handler on each GPE
|
||||
+ * keep_method - Whether the existing method should be
|
||||
+ * displaced or kept
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
@@ -671,7 +673,8 @@ ACPI_EXPORT_SYMBOL(acpi_remove_notify_handler)
|
||||
acpi_status
|
||||
acpi_install_gpe_handler(acpi_handle gpe_device,
|
||||
u32 gpe_number,
|
||||
- u32 type, acpi_event_handler address, void *context)
|
||||
+ u32 type, acpi_event_handler address, void *context,
|
||||
+ bool keep_method)
|
||||
{
|
||||
struct acpi_gpe_event_info *gpe_event_info;
|
||||
struct acpi_handler_info *handler;
|
||||
@@ -711,8 +714,7 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
|
||||
|
||||
/* Make sure that there isn't a handler there already */
|
||||
|
||||
- if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) ==
|
||||
- ACPI_GPE_DISPATCH_HANDLER) {
|
||||
+ if (gpe_event_info->flags & ACPI_GPE_DISPATCH_HANDLER) {
|
||||
status = AE_ALREADY_EXISTS;
|
||||
goto free_and_exit;
|
||||
}
|
||||
@@ -721,7 +723,6 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
|
||||
|
||||
handler->address = address;
|
||||
handler->context = context;
|
||||
- handler->method_node = gpe_event_info->dispatch.method_node;
|
||||
handler->orig_flags = gpe_event_info->flags &
|
||||
(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK);
|
||||
|
||||
@@ -732,7 +733,7 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
|
||||
*/
|
||||
|
||||
if ((handler->orig_flags & ACPI_GPE_DISPATCH_METHOD)
|
||||
- && gpe_event_info->runtime_count) {
|
||||
+ && gpe_event_info->runtime_count && !keep_method) {
|
||||
handler->orig_enabled = 1;
|
||||
(void)acpi_raw_disable_gpe(gpe_event_info);
|
||||
}
|
||||
@@ -741,10 +742,10 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
|
||||
|
||||
gpe_event_info->dispatch.handler = handler;
|
||||
|
||||
- /* Setup up dispatch flags to indicate handler (vs. method) */
|
||||
+ if (!keep_method)
|
||||
+ gpe_event_info->flags &=
|
||||
+ ~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK);
|
||||
|
||||
- gpe_event_info->flags &=
|
||||
- ~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK);
|
||||
gpe_event_info->flags |= (u8) (type | ACPI_GPE_DISPATCH_HANDLER);
|
||||
|
||||
acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
|
||||
@@ -813,8 +814,7 @@ acpi_remove_gpe_handler(acpi_handle gpe_device,
|
||||
|
||||
/* Make sure that a handler is indeed installed */
|
||||
|
||||
- if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) !=
|
||||
- ACPI_GPE_DISPATCH_HANDLER) {
|
||||
+ if (!(gpe_event_info->flags & ACPI_GPE_DISPATCH_HANDLER)) {
|
||||
status = AE_NOT_EXIST;
|
||||
goto unlock_and_exit;
|
||||
}
|
||||
@@ -830,9 +830,8 @@ acpi_remove_gpe_handler(acpi_handle gpe_device,
|
||||
|
||||
handler = gpe_event_info->dispatch.handler;
|
||||
|
||||
- /* Restore Method node (if any), set dispatch flags */
|
||||
+ /* Set dispatch flags */
|
||||
|
||||
- gpe_event_info->dispatch.method_node = handler->method_node;
|
||||
gpe_event_info->flags &=
|
||||
~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK);
|
||||
gpe_event_info->flags |= handler->orig_flags;
|
||||
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
|
||||
index 372ff80..9a39f82 100644
|
||||
--- a/drivers/acpi/ec.c
|
||||
+++ b/drivers/acpi/ec.c
|
||||
@@ -740,7 +740,7 @@ static int ec_install_handlers(struct acpi_ec *ec)
|
||||
return 0;
|
||||
status = acpi_install_gpe_handler(NULL, ec->gpe,
|
||||
ACPI_GPE_EDGE_TRIGGERED,
|
||||
- &acpi_ec_gpe_handler, ec);
|
||||
+ &acpi_ec_gpe_handler, ec, false);
|
||||
if (ACPI_FAILURE(status))
|
||||
return -ENODEV;
|
||||
|
||||
diff --git a/drivers/acpi/pci_bind.c b/drivers/acpi/pci_bind.c
|
||||
index 2ef0409..8b3cc6a 100644
|
||||
--- a/drivers/acpi/pci_bind.c
|
||||
+++ b/drivers/acpi/pci_bind.c
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <linux/pci.h>
|
||||
#include <linux/pci-acpi.h>
|
||||
#include <linux/acpi.h>
|
||||
+#include <linux/list.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <acpi/acpi_bus.h>
|
||||
#include <acpi/acpi_drivers.h>
|
||||
@@ -35,6 +36,43 @@
|
||||
#define _COMPONENT ACPI_PCI_COMPONENT
|
||||
ACPI_MODULE_NAME("pci_bind");
|
||||
|
||||
+static LIST_HEAD(acpi_pci_gpe_devs);
|
||||
+
|
||||
+struct pci_gpe_dev {
|
||||
+ struct list_head node;
|
||||
+ struct pci_dev *dev;
|
||||
+ acpi_handle gpe_device;
|
||||
+ int gpe_number;
|
||||
+ struct work_struct work;
|
||||
+};
|
||||
+
|
||||
+static void acpi_pci_wake_handler_work(struct work_struct *work)
|
||||
+{
|
||||
+ struct pci_gpe_dev *gpe_dev = container_of(work, struct pci_gpe_dev,
|
||||
+ work);
|
||||
+
|
||||
+ pci_check_pme_status(gpe_dev->dev);
|
||||
+ pm_runtime_resume(&gpe_dev->dev->dev);
|
||||
+ pci_wakeup_event(gpe_dev->dev);
|
||||
+ if (gpe_dev->dev->subordinate)
|
||||
+ pci_pme_wakeup_bus(gpe_dev->dev->subordinate);
|
||||
+}
|
||||
+
|
||||
+static u32 acpi_pci_wake_handler(void *data)
|
||||
+{
|
||||
+ long gpe_number = (long) data;
|
||||
+ struct pci_gpe_dev *gpe_dev;
|
||||
+
|
||||
+ list_for_each_entry(gpe_dev, &acpi_pci_gpe_devs, node) {
|
||||
+ if (gpe_number != gpe_dev->gpe_number)
|
||||
+ continue;
|
||||
+
|
||||
+ schedule_work(&gpe_dev->work);
|
||||
+ }
|
||||
+
|
||||
+ return ACPI_INTERRUPT_HANDLED;
|
||||
+}
|
||||
+
|
||||
static int acpi_pci_unbind(struct acpi_device *device)
|
||||
{
|
||||
struct pci_dev *dev;
|
||||
@@ -43,6 +81,30 @@ static int acpi_pci_unbind(struct acpi_device *device)
|
||||
if (!dev)
|
||||
goto out;
|
||||
|
||||
+ if (device->wakeup.flags.valid) {
|
||||
+ struct pci_gpe_dev *gpe_dev;
|
||||
+ struct pci_gpe_dev *tmp;
|
||||
+ int gpe_count = 0;
|
||||
+ int gpe_number = device->wakeup.gpe_number;
|
||||
+ acpi_handle gpe_device = device->wakeup.gpe_device;
|
||||
+
|
||||
+ list_for_each_entry_safe(gpe_dev, tmp, &acpi_pci_gpe_devs, node) {
|
||||
+ if (gpe_dev->dev == dev) {
|
||||
+ flush_work(&gpe_dev->work);
|
||||
+ list_del(&gpe_dev->node);
|
||||
+ kfree(gpe_dev);
|
||||
+ } else if (gpe_dev->gpe_number == gpe_number &&
|
||||
+ gpe_dev->gpe_device == gpe_device) {
|
||||
+ gpe_count++;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (gpe_count == 0) {
|
||||
+ acpi_remove_gpe_handler(gpe_device, gpe_number,
|
||||
+ &acpi_pci_wake_handler);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
device_set_run_wake(&dev->dev, false);
|
||||
pci_acpi_remove_pm_notifier(device);
|
||||
|
||||
@@ -71,6 +133,30 @@ static int acpi_pci_bind(struct acpi_device *device)
|
||||
return 0;
|
||||
|
||||
pci_acpi_add_pm_notifier(device, dev);
|
||||
+ if (device->wakeup.flags.valid) {
|
||||
+ struct pci_gpe_dev *gpe_dev;
|
||||
+ acpi_handle gpe_device = device->wakeup.gpe_device;
|
||||
+ long gpe_number = device->wakeup.gpe_number;
|
||||
+
|
||||
+ gpe_dev = kmalloc(sizeof(struct pci_gpe_dev), GFP_KERNEL);
|
||||
+ if (gpe_dev) {
|
||||
+ gpe_dev->dev = dev;
|
||||
+ gpe_dev->gpe_device = gpe_device;
|
||||
+ gpe_dev->gpe_number = gpe_number;
|
||||
+ INIT_WORK(&gpe_dev->work, acpi_pci_wake_handler_work);
|
||||
+
|
||||
+ acpi_install_gpe_handler(gpe_device, gpe_number,
|
||||
+ ACPI_GPE_LEVEL_TRIGGERED,
|
||||
+ &acpi_pci_wake_handler,
|
||||
+ (void *)gpe_number,
|
||||
+ true);
|
||||
+ acpi_gpe_can_wake(device->wakeup.gpe_device,
|
||||
+ device->wakeup.gpe_number);
|
||||
+ device->wakeup.flags.run_wake = 1;
|
||||
+ list_add_tail(&gpe_dev->node, &acpi_pci_gpe_devs);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (device->wakeup.flags.run_wake)
|
||||
device_set_run_wake(&dev->dev, true);
|
||||
|
||||
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
|
||||
index 721d93b..b0ddef6 100644
|
||||
--- a/drivers/acpi/sleep.c
|
||||
+++ b/drivers/acpi/sleep.c
|
||||
@@ -643,7 +643,7 @@ int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p)
|
||||
if (acpi_target_sleep_state != ACPI_STATE_S0 ||
|
||||
status != AE_NOT_FOUND)
|
||||
d_max = d_min;
|
||||
- } else if (d_max < d_min) {
|
||||
+ } else if (ACPI_SUCCESS(status) && d_max < d_min) {
|
||||
/* Warn the user of the broken DSDT */
|
||||
printk(KERN_WARNING "ACPI: Wrong value from %s\n",
|
||||
acpi_method);
|
||||
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
|
||||
index 035da9e..62a48b2 100644
|
||||
--- a/drivers/char/ipmi/ipmi_si_intf.c
|
||||
+++ b/drivers/char/ipmi/ipmi_si_intf.c
|
||||
@@ -1970,7 +1970,7 @@ static int acpi_gpe_irq_setup(struct smi_info *info)
|
||||
info->irq,
|
||||
ACPI_GPE_LEVEL_TRIGGERED,
|
||||
&ipmi_acpi_gpe,
|
||||
- info);
|
||||
+ info, false);
|
||||
if (status != AE_OK) {
|
||||
dev_warn(info->dev, "%s unable to claim ACPI GPE %d,"
|
||||
" running polled\n", DEVICE_NAME, info->irq);
|
||||
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
|
||||
index 53b7cfd..740eb7e 100644
|
||||
--- a/include/acpi/acpixf.h
|
||||
+++ b/include/acpi/acpixf.h
|
||||
@@ -258,7 +258,8 @@ acpi_remove_address_space_handler(acpi_handle device,
|
||||
acpi_status
|
||||
acpi_install_gpe_handler(acpi_handle gpe_device,
|
||||
u32 gpe_number,
|
||||
- u32 type, acpi_event_handler address, void *context);
|
||||
+ u32 type, acpi_event_handler address, void *context,
|
||||
+ bool keep_method);
|
||||
|
||||
acpi_status
|
||||
acpi_remove_gpe_handler(acpi_handle gpe_device,
|
|
@ -1,3 +1,5 @@
|
|||
diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
|
||||
index 41935fa..6e9259b 100644
|
||||
--- a/arch/x86/include/asm/desc.h
|
||||
+++ b/arch/x86/include/asm/desc.h
|
||||
@@ -5,6 +5,7 @@
|
||||
|
@ -44,6 +46,8 @@
|
|||
+#endif /* CONFIG_X86_32 */
|
||||
+
|
||||
#endif /* _ASM_X86_DESC_H */
|
||||
diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h
|
||||
index 5f55e69..aba94f0 100644
|
||||
--- a/arch/x86/include/asm/mmu.h
|
||||
+++ b/arch/x86/include/asm/mmu.h
|
||||
@@ -7,6 +7,9 @@
|
||||
|
@ -68,9 +72,11 @@
|
|||
} mm_context_t;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
|
||||
index a7d2db9..cc4ad60 100644
|
||||
--- a/arch/x86/include/asm/paravirt.h
|
||||
+++ b/arch/x86/include/asm/paravirt.h
|
||||
@@ -289,6 +289,12 @@ static inline void set_ldt(const void *addr, unsigned entries)
|
||||
@@ -298,6 +298,12 @@ static inline void set_ldt(const void *addr, unsigned entries)
|
||||
{
|
||||
PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries);
|
||||
}
|
||||
|
@ -83,9 +89,11 @@
|
|||
static inline void store_gdt(struct desc_ptr *dtr)
|
||||
{
|
||||
PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr);
|
||||
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
|
||||
index 8e8b9a4..cca421e 100644
|
||||
--- a/arch/x86/include/asm/paravirt_types.h
|
||||
+++ b/arch/x86/include/asm/paravirt_types.h
|
||||
@@ -118,6 +118,9 @@ struct pv_cpu_ops {
|
||||
@@ -125,6 +125,9 @@ struct pv_cpu_ops {
|
||||
void (*store_gdt)(struct desc_ptr *);
|
||||
void (*store_idt)(struct desc_ptr *);
|
||||
void (*set_ldt)(const void *desc, unsigned entries);
|
||||
|
@ -95,9 +103,11 @@
|
|||
unsigned long (*store_tr)(void);
|
||||
void (*load_tls)(struct thread_struct *t, unsigned int cpu);
|
||||
#ifdef CONFIG_X86_64
|
||||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
|
||||
index aa003b1..c094152 100644
|
||||
--- a/arch/x86/kernel/cpu/common.c
|
||||
+++ b/arch/x86/kernel/cpu/common.c
|
||||
@@ -802,6 +802,22 @@ static void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
|
||||
@@ -844,6 +844,22 @@ static void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
|
||||
/* Filter out anything that depends on CPUID levels we don't have */
|
||||
filter_cpuid_features(c, true);
|
||||
|
||||
|
@ -120,9 +130,11 @@
|
|||
/* If the model name is still unset, do table lookup. */
|
||||
if (!c->x86_model_id[0]) {
|
||||
const char *p;
|
||||
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
|
||||
index d90272e..cc594fc 100644
|
||||
--- a/arch/x86/kernel/paravirt.c
|
||||
+++ b/arch/x86/kernel/paravirt.c
|
||||
@@ -345,6 +345,9 @@ struct pv_cpu_ops pv_cpu_ops = {
|
||||
@@ -358,6 +358,9 @@ struct pv_cpu_ops pv_cpu_ops = {
|
||||
.read_tscp = native_read_tscp,
|
||||
.load_tr_desc = native_load_tr_desc,
|
||||
.set_ldt = native_set_ldt,
|
||||
|
@ -132,9 +144,11 @@
|
|||
.load_gdt = native_load_gdt,
|
||||
.load_idt = native_load_idt,
|
||||
.store_gdt = native_store_gdt,
|
||||
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
|
||||
index 8598296..641ae48 100644
|
||||
--- a/arch/x86/kernel/process_32.c
|
||||
+++ b/arch/x86/kernel/process_32.c
|
||||
@@ -243,7 +243,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
|
||||
@@ -247,7 +247,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
|
||||
void
|
||||
start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
||||
{
|
||||
|
@ -145,7 +159,7 @@
|
|||
regs->fs = 0;
|
||||
regs->ds = __USER_DS;
|
||||
regs->es = __USER_DS;
|
||||
@@ -252,6 +255,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
||||
@@ -255,6 +258,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
||||
regs->cs = __USER_CS;
|
||||
regs->ip = new_ip;
|
||||
regs->sp = new_sp;
|
||||
|
@ -157,17 +171,17 @@
|
|||
/*
|
||||
* Free the old FP and other extended state
|
||||
*/
|
||||
@@ -311,6 +319,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
|
||||
if (preload_fpu)
|
||||
prefetch(next->fpu.state);
|
||||
@@ -320,6 +328,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
|
||||
*/
|
||||
lazy_save_gs(prev->gs);
|
||||
|
||||
+ if (next_p->mm)
|
||||
+ load_user_cs_desc(cpu, next_p->mm);
|
||||
+
|
||||
/*
|
||||
* Reload esp0.
|
||||
* Load the per-thread Thread-Local Storage descriptor.
|
||||
*/
|
||||
@@ -404,3 +415,40 @@ unsigned long get_wchan(struct task_struct *p)
|
||||
@@ -390,3 +401,40 @@ unsigned long get_wchan(struct task_struct *p)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -208,9 +222,11 @@
|
|||
+ mm->context.exec_limit = 0;
|
||||
+ set_user_cs(&mm->context.user_cs, 0);
|
||||
+}
|
||||
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
|
||||
index 31d9d0f..f7c210d 100644
|
||||
--- a/arch/x86/kernel/traps.c
|
||||
+++ b/arch/x86/kernel/traps.c
|
||||
@@ -109,6 +109,78 @@ static inline void preempt_conditional_cli(struct pt_regs *regs)
|
||||
@@ -107,6 +107,78 @@ static inline void preempt_conditional_cli(struct pt_regs *regs)
|
||||
dec_preempt_count();
|
||||
}
|
||||
|
||||
|
@ -249,7 +265,7 @@
|
|||
+ for (vma = current->mm->mmap; vma; vma = vma->vm_next)
|
||||
+ if ((vma->vm_flags & VM_EXEC) && (vma->vm_end > limit))
|
||||
+ limit = vma->vm_end;
|
||||
+ vma = get_gate_vma(current);
|
||||
+ vma = get_gate_vma(current->mm);
|
||||
+ if (vma && (vma->vm_flags & VM_EXEC) && (vma->vm_end > limit))
|
||||
+ limit = vma->vm_end;
|
||||
+ spin_unlock(¤t->mm->page_table_lock);
|
||||
|
@ -289,7 +305,7 @@
|
|||
static void __kprobes
|
||||
do_trap(int trapnr, int signr, char *str, struct pt_regs *regs,
|
||||
long error_code, siginfo_t *info)
|
||||
@@ -265,6 +337,29 @@ do_general_protection(struct pt_regs *regs, long error_code)
|
||||
@@ -263,6 +335,29 @@ do_general_protection(struct pt_regs *regs, long error_code)
|
||||
if (!user_mode(regs))
|
||||
goto gp_in_kernel;
|
||||
|
||||
|
@ -319,7 +335,7 @@
|
|||
tsk->thread.error_code = error_code;
|
||||
tsk->thread.trap_no = 13;
|
||||
|
||||
@@ -792,19 +887,37 @@ do_device_not_available(struct pt_regs *regs, long error_code)
|
||||
@@ -649,19 +744,37 @@ do_device_not_available(struct pt_regs *regs, long error_code)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
|
@ -366,6 +382,8 @@
|
|||
}
|
||||
#endif
|
||||
|
||||
diff --git a/arch/x86/mm/setup_nx.c b/arch/x86/mm/setup_nx.c
|
||||
index 410531d..eb040ad 100644
|
||||
--- a/arch/x86/mm/setup_nx.c
|
||||
+++ b/arch/x86/mm/setup_nx.c
|
||||
@@ -1,3 +1,4 @@
|
||||
|
@ -373,16 +391,16 @@
|
|||
#include <linux/spinlock.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
@@ -6,7 +6,7 @@
|
||||
@@ -5,7 +6,7 @@
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/proto.h>
|
||||
|
||||
|
||||
-static int disable_nx __cpuinitdata;
|
||||
+int disable_nx __cpuinitdata;
|
||||
|
||||
|
||||
/*
|
||||
* noexec = on|off
|
||||
@@ -40,6 +42,10 @@ void __cpuinit x86_configure_nx(void)
|
||||
@@ -40,6 +41,10 @@ void __cpuinit x86_configure_nx(void)
|
||||
void __init x86_report_nx(void)
|
||||
{
|
||||
if (!cpu_has_nx) {
|
||||
|
@ -393,9 +411,11 @@
|
|||
printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
|
||||
"missing in CPU!\n");
|
||||
} else {
|
||||
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
|
||||
index d6c0418..c15b765 100644
|
||||
--- a/arch/x86/mm/tlb.c
|
||||
+++ b/arch/x86/mm/tlb.c
|
||||
@@ -6,6 +6,7 @@
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/cpu.h>
|
||||
|
||||
|
@ -403,7 +423,7 @@
|
|||
#include <asm/tlbflush.h>
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/cache.h>
|
||||
@@ -131,6 +132,12 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
|
||||
@@ -134,6 +135,12 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
|
||||
union smp_flush_state *f;
|
||||
|
||||
cpu = smp_processor_id();
|
||||
|
@ -416,9 +436,11 @@
|
|||
/*
|
||||
* orig_rax contains the negated interrupt vector.
|
||||
* Use that to determine where the sender put the data.
|
||||
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
|
||||
index 1f92865..b8f4319 100644
|
||||
--- a/arch/x86/xen/enlighten.c
|
||||
+++ b/arch/x86/xen/enlighten.c
|
||||
@@ -335,6 +335,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
|
||||
@@ -354,6 +354,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
|
||||
xen_mc_issue(PARAVIRT_LAZY_CPU);
|
||||
}
|
||||
|
||||
|
@ -443,7 +465,7 @@
|
|||
static void xen_load_gdt(const struct desc_ptr *dtr)
|
||||
{
|
||||
unsigned long va = dtr->address;
|
||||
@@ -961,6 +979,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
|
||||
@@ -994,6 +1012,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {
|
||||
|
||||
.load_tr_desc = paravirt_nop,
|
||||
.set_ldt = xen_set_ldt,
|
||||
|
@ -453,9 +475,11 @@
|
|||
.load_gdt = xen_load_gdt,
|
||||
.load_idt = xen_load_idt,
|
||||
.load_tls = xen_load_tls,
|
||||
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
|
||||
index 21ac5ee..3f26963 100644
|
||||
--- a/fs/binfmt_elf.c
|
||||
+++ b/fs/binfmt_elf.c
|
||||
@@ -717,6 +722,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
||||
@@ -711,6 +711,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
||||
if (retval)
|
||||
goto out_free_dentry;
|
||||
|
||||
|
@ -471,9 +495,11 @@
|
|||
/* OK, This is the point of no return */
|
||||
current->flags &= ~PF_FORKNOEXEC;
|
||||
current->mm->def_flags = def_flags;
|
||||
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||
index 1c4f3e9..52011a7 100644
|
||||
--- a/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -101,6 +101,9 @@ struct bio_list;
|
||||
@@ -102,6 +102,9 @@ struct fs_struct;
|
||||
struct perf_event_context;
|
||||
struct blk_plug;
|
||||
|
||||
|
@ -483,9 +509,11 @@
|
|||
/*
|
||||
* List of flags we want to share for kernel threads,
|
||||
* if only because they are not used by them anyway.
|
||||
--- b/mm/mmap.c
|
||||
diff --git a/mm/mmap.c b/mm/mmap.c
|
||||
index eae90af..f4de6c0 100644
|
||||
--- a/mm/mmap.c
|
||||
+++ b/mm/mmap.c
|
||||
@@ -44,6 +45,18 @@
|
||||
@@ -46,6 +46,18 @@
|
||||
#define arch_rebalance_pgtables(addr, len) (addr)
|
||||
#endif
|
||||
|
||||
|
@ -504,7 +532,7 @@
|
|||
static void unmap_region(struct mm_struct *mm,
|
||||
struct vm_area_struct *vma, struct vm_area_struct *prev,
|
||||
unsigned long start, unsigned long end);
|
||||
@@ -432,6 +432,8 @@ __vma_link(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
@@ -424,6 +436,8 @@ __vma_link(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
struct vm_area_struct *prev, struct rb_node **rb_link,
|
||||
struct rb_node *rb_parent)
|
||||
{
|
||||
|
@ -513,7 +541,7 @@
|
|||
__vma_link_list(mm, vma, prev, rb_parent);
|
||||
__vma_link_rb(mm, vma, rb_link, rb_parent);
|
||||
}
|
||||
@@ -489,6 +504,8 @@
|
||||
@@ -478,6 +492,8 @@ __vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
rb_erase(&vma->vm_rb, &mm->mm_rb);
|
||||
if (mm->mmap_cache == vma)
|
||||
mm->mmap_cache = prev;
|
||||
|
@ -522,7 +550,7 @@
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -790,6 +807,8 @@
|
||||
@@ -794,6 +810,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
|
||||
} else /* cases 2, 5, 7 */
|
||||
err = vma_adjust(prev, prev->vm_start,
|
||||
end, prev->vm_pgoff, NULL);
|
||||
|
@ -530,8 +558,8 @@
|
|||
+ arch_add_exec_range(mm, prev->vm_end);
|
||||
if (err)
|
||||
return NULL;
|
||||
return prev;
|
||||
@@ -1966,10 +2075,14 @@
|
||||
khugepaged_enter_vma_merge(prev);
|
||||
@@ -1972,10 +1990,14 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
|
||||
if (new->vm_ops && new->vm_ops->open)
|
||||
new->vm_ops->open(new);
|
||||
|
||||
|
@ -548,7 +576,7 @@
|
|||
err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
|
||||
|
||||
/* Success. */
|
||||
@@ -2254,6 +2367,7 @@
|
||||
@@ -2263,6 +2285,7 @@ void exit_mmap(struct mm_struct *mm)
|
||||
|
||||
free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0);
|
||||
tlb_finish_mmu(&tlb, 0, end);
|
||||
|
@ -556,6 +584,8 @@
|
|||
|
||||
/*
|
||||
* Walk the list again, actually closing and freeing it,
|
||||
diff --git a/mm/mprotect.c b/mm/mprotect.c
|
||||
index 5a688a2..128d996 100644
|
||||
--- a/mm/mprotect.c
|
||||
+++ b/mm/mprotect.c
|
||||
@@ -25,9 +25,14 @@
|
||||
|
@ -573,7 +603,7 @@
|
|||
#ifndef pgprot_modify
|
||||
static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
||||
{
|
||||
@@ -138,7 +143,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
|
||||
@@ -148,7 +153,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
|
||||
struct mm_struct *mm = vma->vm_mm;
|
||||
unsigned long oldflags = vma->vm_flags;
|
||||
long nrpages = (end - start) >> PAGE_SHIFT;
|
||||
|
@ -582,7 +612,7 @@
|
|||
pgoff_t pgoff;
|
||||
int error;
|
||||
int dirty_accountable = 0;
|
||||
@@ -203,6 +208,9 @@ success:
|
||||
@@ -213,6 +218,9 @@ success:
|
||||
dirty_accountable = 1;
|
||||
}
|
||||
|
||||
|
@ -592,25 +622,3 @@
|
|||
mmu_notifier_invalidate_range_start(mm, start, end);
|
||||
if (is_vm_hugetlb_page(vma))
|
||||
hugetlb_change_protection(vma, start, end, vma->vm_page_prot);
|
||||
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
|
||||
index 57d1868..29c0c35 100644
|
||||
--- a/arch/x86/kernel/process.c
|
||||
+++ b/arch/x86/kernel/process.c
|
||||
@@ -669,6 +669,16 @@ unsigned long arch_align_stack(unsigned long sp)
|
||||
unsigned long arch_randomize_brk(struct mm_struct *mm)
|
||||
{
|
||||
unsigned long range_end = mm->brk + 0x02000000;
|
||||
- return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
|
||||
+ unsigned long bump = 0;
|
||||
+#ifdef CONFIG_X86_32
|
||||
+ /* in the case of NX emulation, shove the brk segment way out of the
|
||||
+ way of the exec randomization area, since it can collide with
|
||||
+ future allocations if not. */
|
||||
+ if ( (mm->get_unmapped_exec_area == arch_get_unmapped_exec_area) &&
|
||||
+ (mm->brk < 0x08000000) ) {
|
||||
+ bump = (TASK_SIZE/6);
|
||||
+ }
|
||||
+#endif
|
||||
+ return bump + (randomize_range(mm->brk, range_end, 0) ? : mm->brk);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,32 +1,20 @@
|
|||
From b2c6d55b2351152696aafb8c9bf3ec8968acf77c Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@phobos.i.jkkm.org>
|
||||
Date: Mon, 29 Mar 2010 23:59:58 -0400
|
||||
Subject: linux-2.6-input-kill-stupid-messages
|
||||
|
||||
---
|
||||
drivers/input/keyboard/atkbd.c | 5 +++++
|
||||
1 files changed, 5 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
|
||||
index d358ef8..38db098 100644
|
||||
index add5ffd..5eb2f03 100644
|
||||
--- a/drivers/input/keyboard/atkbd.c
|
||||
+++ b/drivers/input/keyboard/atkbd.c
|
||||
@@ -425,11 +426,15 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
|
||||
@@ -430,11 +430,15 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
|
||||
goto out;
|
||||
case ATKBD_RET_ACK:
|
||||
case ATKBD_RET_NAK:
|
||||
+#if 0
|
||||
+# if 0
|
||||
+ /* Quite a few key switchers and other tools trigger this
|
||||
+ * and it confuses people who can do nothing about it */
|
||||
if (printk_ratelimit())
|
||||
dev_warn(&serio->dev,
|
||||
"Spurious %s on %s. "
|
||||
"Some program might be trying access hardware directly.\n",
|
||||
"Some program might be trying to access hardware directly.\n",
|
||||
data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
|
||||
+#endif
|
||||
goto out;
|
||||
case ATKBD_RET_ERR:
|
||||
atkbd->err_count++;
|
||||
--
|
||||
1.7.0.1
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
Subject: [PATCH] [intel_iommu] Default to igfx_off
|
||||
From 602e1f209dd983e40d989e871cd253e8187899b8 Mon Sep 17 00:00:00 2001
|
||||
From: drago01 <drago01@gmail.com>
|
||||
To: fedora-kernel-list <fedora-kernel-list@redhat.com>
|
||||
Date: Wed, 26 Oct 2011 13:37:27 -0400
|
||||
Subject: [PATCH] Default to igfx_off
|
||||
|
||||
This option seems to causes way to many issues, it is
|
||||
being investigated by Intel's chipset team for months now and
|
||||
|
@ -16,14 +17,14 @@ Signed-off-by: Adel Gadllah <adel.gadllah@gmail.com>
|
|||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||
---
|
||||
Documentation/kernel-parameters.txt | 11 +++++------
|
||||
drivers/pci/intel-iommu.c | 9 +++++----
|
||||
drivers/iommu/intel-iommu.c | 9 +++++----
|
||||
2 files changed, 10 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
|
||||
index e7848a0..9914485 100644
|
||||
index 81c287f..ee5693b 100644
|
||||
--- a/Documentation/kernel-parameters.txt
|
||||
+++ b/Documentation/kernel-parameters.txt
|
||||
@@ -992,12 +992,11 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
@@ -1014,12 +1014,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||
Enable intel iommu driver.
|
||||
off
|
||||
Disable intel iommu driver.
|
||||
|
@ -40,22 +41,22 @@ index e7848a0..9914485 100644
|
|||
+ mapped as normal device.
|
||||
forcedac [x86_64]
|
||||
With this option iommu will not optimize to look
|
||||
for io virtual address below 32 bit forcing dual
|
||||
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
|
||||
index 4173125..8f36786 100644
|
||||
for io virtual address below 32-bit forcing dual
|
||||
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
|
||||
index bdc447f..240db6b 100644
|
||||
--- a/drivers/iommu/intel-iommu.c
|
||||
+++ b/drivers/iommu/intel-iommu.c
|
||||
@@ -340,7 +340,8 @@ int dmar_disabled = 0;
|
||||
int dmar_disabled = 1;
|
||||
#endif /*CONFIG_DMAR_DEFAULT_ON*/
|
||||
|
||||
@@ -408,7 +408,8 @@ int dmar_disabled = 1;
|
||||
int intel_iommu_enabled = 0;
|
||||
EXPORT_SYMBOL_GPL(intel_iommu_enabled);
|
||||
|
||||
-static int dmar_map_gfx = 1;
|
||||
+/* disabled by default; causes way too many issues */
|
||||
+static int dmar_map_gfx = 0;
|
||||
static int dmar_forcedac;
|
||||
static int intel_iommu_strict;
|
||||
|
||||
@@ -361,10 +362,10 @@ static int __init intel_iommu_setup(char *str)
|
||||
static int intel_iommu_superpage = 1;
|
||||
@@ -433,10 +434,10 @@ static int __init intel_iommu_setup(char *str)
|
||||
} else if (!strncmp(str, "off", 3)) {
|
||||
dmar_disabled = 1;
|
||||
printk(KERN_INFO "Intel-IOMMU: disabled\n");
|
||||
|
@ -70,9 +71,5 @@ index 4173125..8f36786 100644
|
|||
printk(KERN_INFO
|
||||
"Intel-IOMMU: Forcing DAC for PCI devices\n");
|
||||
--
|
||||
1.6.6.1
|
||||
_______________________________________________
|
||||
kernel mailing list
|
||||
kernel@lists.fedoraproject.org
|
||||
https://admin.fedoraproject.org/mailman/listinfo/kernel
|
||||
1.7.7.4
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
From f072f7db2194c8255c003d985b61ad2f97ebbee0 Mon Sep 17 00:00:00 2001
|
||||
From b707aea6a4947c3806ced2c23e889943a0f36876 Mon Sep 17 00:00:00 2001
|
||||
From: Roland McGrath <roland@redhat.com>
|
||||
Date: Mon, 6 Oct 2008 23:03:03 -0700
|
||||
Subject: [PATCH] kbuild: AFTER_LINK
|
||||
|
@ -7,24 +7,9 @@ If the make variable AFTER_LINK is set, it is a command line to run
|
|||
after each final link. This includes vmlinux itself and vDSO images.
|
||||
|
||||
Signed-off-by: Roland McGrath <roland@redhat.com>
|
||||
---
|
||||
diff --git a/Makefile b/Makefile
|
||||
index f908acc..960ff6f 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -746,6 +746,10 @@ quiet_cmd_vmlinux__ ?= LD $@
|
||||
--start-group $(vmlinux-main) --end-group \
|
||||
$(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o FORCE ,$^)
|
||||
|
||||
+ifdef AFTER_LINK
|
||||
+cmd_vmlinux__ += ; $(AFTER_LINK)
|
||||
+endif
|
||||
+
|
||||
# Generate new vmlinux version
|
||||
quiet_cmd_vmlinux_version = GEN .version
|
||||
cmd_vmlinux_version = set -e; \
|
||||
|
||||
diff --git a/arch/powerpc/kernel/vdso32/Makefile b/arch/powerpc/kernel/vdso32/Makefile
|
||||
index 51ead52..ad21273 100644
|
||||
index 9a7946c..28d6765 100644
|
||||
--- a/arch/powerpc/kernel/vdso32/Makefile
|
||||
+++ b/arch/powerpc/kernel/vdso32/Makefile
|
||||
@@ -41,7 +41,8 @@ $(obj-vdso32): %.o: %.S
|
||||
|
@ -38,7 +23,7 @@ index 51ead52..ad21273 100644
|
|||
cmd_vdso32as = $(CROSS32CC) $(a_flags) -c -o $@ $<
|
||||
|
||||
diff --git a/arch/powerpc/kernel/vdso64/Makefile b/arch/powerpc/kernel/vdso64/Makefile
|
||||
index 79da65d..f11c21b 100644
|
||||
index 8c500d8..d27737b 100644
|
||||
--- a/arch/powerpc/kernel/vdso64/Makefile
|
||||
+++ b/arch/powerpc/kernel/vdso64/Makefile
|
||||
@@ -36,7 +36,8 @@ $(obj-vdso64): %.o: %.S
|
||||
|
@ -51,11 +36,39 @@ index 79da65d..f11c21b 100644
|
|||
quiet_cmd_vdso64as = VDSO64A $@
|
||||
cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
|
||||
|
||||
diff --git a/arch/s390/kernel/vdso32/Makefile b/arch/s390/kernel/vdso32/Makefile
|
||||
index 8ad2b34..e153572 100644
|
||||
--- a/arch/s390/kernel/vdso32/Makefile
|
||||
+++ b/arch/s390/kernel/vdso32/Makefile
|
||||
@@ -43,7 +43,8 @@ $(obj-vdso32): %.o: %.S
|
||||
|
||||
# actual build commands
|
||||
quiet_cmd_vdso32ld = VDSO32L $@
|
||||
- cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $^ -o $@
|
||||
+ cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ \
|
||||
+ $(if $(AFTER_LINK),; $(AFTER_LINK))
|
||||
quiet_cmd_vdso32as = VDSO32A $@
|
||||
cmd_vdso32as = $(CC) $(a_flags) -c -o $@ $<
|
||||
|
||||
diff --git a/arch/s390/kernel/vdso64/Makefile b/arch/s390/kernel/vdso64/Makefile
|
||||
index 2a8ddfd..452ca53 100644
|
||||
--- a/arch/s390/kernel/vdso64/Makefile
|
||||
+++ b/arch/s390/kernel/vdso64/Makefile
|
||||
@@ -43,7 +43,8 @@ $(obj-vdso64): %.o: %.S
|
||||
|
||||
# actual build commands
|
||||
quiet_cmd_vdso64ld = VDSO64L $@
|
||||
- cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@
|
||||
+ cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ \
|
||||
+ $(if $(AFTER_LINK),; $(AFTER_LINK))
|
||||
quiet_cmd_vdso64as = VDSO64A $@
|
||||
cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
|
||||
|
||||
diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile
|
||||
index 4a2afa1..12ad9f7 100644
|
||||
index fd14be1..1f3eb19 100644
|
||||
--- a/arch/x86/vdso/Makefile
|
||||
+++ b/arch/x86/vdso/Makefile
|
||||
@@ -120,8 +120,9 @@ $(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE
|
||||
@@ -178,8 +178,9 @@ $(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE
|
||||
quiet_cmd_vdso = VDSO $@
|
||||
cmd_vdso = $(CC) -nostdlib -o $@ \
|
||||
$(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \
|
||||
|
@ -67,32 +80,21 @@ index 4a2afa1..12ad9f7 100644
|
|||
|
||||
VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
|
||||
GCOV_PROFILE := n
|
||||
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
|
||||
index cd9c6c6..3edf048 100644
|
||||
--- a/scripts/link-vmlinux.sh
|
||||
+++ b/scripts/link-vmlinux.sh
|
||||
@@ -65,6 +65,10 @@ vmlinux_link()
|
||||
-lutil ${1}
|
||||
rm -f linux
|
||||
fi
|
||||
+ if [ -n "${AFTER_LINK}" ]; then
|
||||
+ /usr/lib/rpm/debugedit -b ${RPM_BUILD_DIR} -d /usr/src/debug -i ${2} \
|
||||
+ > ${2}.id
|
||||
+ fi
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
diff --git a/arch/s390/kernel/vdso32/Makefile b/arch/s390/kernel/vdso32/Makefile
|
||||
index d13e875..28a3e1ad 100644
|
||||
--- a/arch/s390/kernel/vdso32/Makefile
|
||||
+++ b/arch/s390/kernel/vdso32/Makefile
|
||||
@@ -40,7 +40,8 @@ $(obj-vdso32): %.o: %.S
|
||||
|
||||
# actual build commands
|
||||
quiet_cmd_vdso32ld = VDSO32L $@
|
||||
- cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $^ -o $@
|
||||
+ cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ \
|
||||
+ $(if $(AFTER_LINK),; $(AFTER_LINK))
|
||||
quiet_cmd_vdso32as = VDSO32A $@
|
||||
cmd_vdso32as = $(CC) $(a_flags) -c -o $@ $<
|
||||
|
||||
diff --git a/arch/s390/kernel/vdso64/Makefile b/arch/s390/kernel/vdso64/Makefile
|
||||
index 449352d..e90e656 100644
|
||||
--- a/arch/s390/kernel/vdso64/Makefile
|
||||
+++ b/arch/s390/kernel/vdso64/Makefile
|
||||
@@ -40,7 +40,8 @@ $(obj-vdso64): %.o: %.S
|
||||
|
||||
# actual build commands
|
||||
quiet_cmd_vdso64ld = VDSO64L $@
|
||||
- cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@
|
||||
+ cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ \
|
||||
+ $(if $(AFTER_LINK),; $(AFTER_LINK))
|
||||
quiet_cmd_vdso64as = VDSO64A $@
|
||||
cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
|
||||
index 2209620..659c1bb 100644
|
||||
--- a/drivers/tty/serial/8250.c
|
||||
+++ b/drivers/tty/serial/8250.c
|
||||
--- a/drivers/tty/serial/8250/8250.c
|
||||
+++ b/drivers/tty/serial/8250/8250.c
|
||||
@@ -7,6 +7,9 @@
|
||||
*
|
||||
* Copyright (C) 2001 Russell King.
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
commit 15d89120d03116adbbf3226a85fbd2fff0b12576
|
||||
Author: Matthew Garrett <mjg@redhat.com>
|
||||
Date: Fri Sep 17 11:09:12 2010 -0400
|
||||
|
||||
Enable USB PCI autosuspend by default
|
||||
|
||||
diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
|
||||
index c3f9854..3c020e6 100644
|
||||
--- a/drivers/usb/core/hcd-pci.c
|
||||
+++ b/drivers/usb/core/hcd-pci.c
|
||||
@@ -248,8 +248,10 @@ int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
goto err4;
|
||||
set_hs_companion(dev, hcd);
|
||||
|
||||
- if (pci_dev_run_wake(dev))
|
||||
+ if (pci_dev_run_wake(dev)) {
|
||||
pm_runtime_put_noidle(&dev->dev);
|
||||
+ pm_runtime_allow(&dev->dev);
|
||||
+ }
|
||||
return retval;
|
||||
|
||||
err4:
|
|
@ -1,21 +0,0 @@
|
|||
diff -up vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h.BAD vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h
|
||||
--- vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h.BAD 2009-03-09 17:01:32.000000000 -0400
|
||||
+++ vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h 2009-03-09 16:52:27.000000000 -0400
|
||||
@@ -41,6 +41,17 @@
|
||||
((nr) << _IOC_NRSHIFT) | \
|
||||
((size) << _IOC_SIZESHIFT))
|
||||
|
||||
+#ifdef __KERNEL__
|
||||
+/* provoke compile error for invalid uses of size argument */
|
||||
+extern unsigned int __invalid_size_argument_for_IOC;
|
||||
+#define _IOC_TYPECHECK(t) \
|
||||
+ ((sizeof(t) == sizeof(t[1]) && \
|
||||
+ sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
|
||||
+ sizeof(t) : __invalid_size_argument_for_IOC)
|
||||
+#else
|
||||
+#define _IOC_TYPECHECK(t) (sizeof(t))
|
||||
+#endif
|
||||
+
|
||||
#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
|
||||
#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
|
||||
#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
|
|
@ -1,7 +1,8 @@
|
|||
diff -up linux-2.6.30.noarch/drivers/input/misc/pcspkr.c.jx linux-2.6.30.noarch/drivers/input/misc/pcspkr.c
|
||||
--- linux-2.6.30.noarch/drivers/input/misc/pcspkr.c.jx 2009-07-28 16:54:44.000000000 -0400
|
||||
+++ linux-2.6.30.noarch/drivers/input/misc/pcspkr.c 2009-07-28 16:59:36.000000000 -0400
|
||||
@@ -23,7 +23,6 @@
|
||||
diff --git a/drivers/input/misc/pcspkr.c b/drivers/input/misc/pcspkr.c
|
||||
index 34f4d2e..3e40c70 100644
|
||||
--- a/drivers/input/misc/pcspkr.c
|
||||
+++ b/drivers/input/misc/pcspkr.c
|
||||
@@ -24,7 +24,6 @@
|
||||
MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
|
||||
MODULE_DESCRIPTION("PC Speaker beeper driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
>From 56fb161a9ca0129f8e266e4dbe79346552ff8089 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=C3=89ric=20Piel?= <eric.piel@tremplin-utc.net>
|
||||
Date: Thu, 3 Nov 2011 16:22:40 +0100
|
||||
Subject: [PATCH] lis3: Improve handling of null rate
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
When obtaining a rate of 0, we would disable the device supposely
|
||||
because it seems to behave incorectly. It actually only comes from the
|
||||
fact that the device is off and on lis3dc it's reflected in the rate.
|
||||
So handle this nicely by just waiting a safe time, and then using the
|
||||
device as normally.
|
||||
|
||||
Signed-off-by: ??ric Piel <eric.piel@tremplin-utc.net>
|
||||
---
|
||||
drivers/misc/lis3lv02d/lis3lv02d.c | 16 ++++++++--------
|
||||
1 files changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/misc/lis3lv02d/lis3lv02d.c b/drivers/misc/lis3lv02d/lis3lv02d.c
|
||||
index 35c67e0..42dce2a 100644
|
||||
--- a/drivers/misc/lis3lv02d/lis3lv02d.c
|
||||
+++ b/drivers/misc/lis3lv02d/lis3lv02d.c
|
||||
@@ -188,7 +188,8 @@ static void lis3lv02d_get_xyz(struct lis3lv02d *lis3, int *x, int *y, int *z)
|
||||
/* conversion btw sampling rate and the register values */
|
||||
static int lis3_12_rates[4] = {40, 160, 640, 2560};
|
||||
static int lis3_8_rates[2] = {100, 400};
|
||||
-static int lis3_3dc_rates[16] = {0, 1, 10, 25, 50, 100, 200, 400, 1600, 5000};
|
||||
+/* LIS3DC: 0 = power off, above 9 = undefined */
|
||||
+static int lis3_3dc_rates[16] = {0, 1, 10, 25, 50, 100, 200, 400, 1600, 5000, -1, -1, -1, -1, -1, -1};
|
||||
|
||||
/* ODR is Output Data Rate */
|
||||
static int lis3lv02d_get_odr(struct lis3lv02d *lis3)
|
||||
@@ -202,12 +203,11 @@ static int lis3lv02d_get_odr(struct lis3lv02d *lis3)
|
||||
return lis3->odrs[(ctrl >> shift)];
|
||||
}
|
||||
|
||||
-static int lis3lv02d_get_pwron_wait(struct lis3lv02d *lis3)
|
||||
+static int lis3lv02d_wait_pwron(struct lis3lv02d *lis3)
|
||||
{
|
||||
int div = lis3lv02d_get_odr(lis3);
|
||||
-
|
||||
- if (WARN_ONCE(div == 0, "device returned spurious data"))
|
||||
- return -ENXIO;
|
||||
+ if (div <= 0)
|
||||
+ div = 1; /* maximum delay */
|
||||
|
||||
/* LIS3 power on delay is quite long */
|
||||
msleep(lis3->pwron_delay / div);
|
||||
@@ -274,7 +274,7 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
|
||||
|
||||
lis3->read(lis3, ctlreg, ®);
|
||||
lis3->write(lis3, ctlreg, (reg | selftest));
|
||||
- ret = lis3lv02d_get_pwron_wait(lis3);
|
||||
+ ret = lis3lv02d_wait_pwron(lis3);
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
@@ -285,7 +285,7 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
|
||||
|
||||
/* back to normal settings */
|
||||
lis3->write(lis3, ctlreg, reg);
|
||||
- ret = lis3lv02d_get_pwron_wait(lis3);
|
||||
+ ret = lis3lv02d_wait_pwron(lis3);
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
@@ -397,7 +397,7 @@ int lis3lv02d_poweron(struct lis3lv02d *lis3)
|
||||
lis3->write(lis3, CTRL_REG2, reg);
|
||||
}
|
||||
|
||||
- err = lis3lv02d_get_pwron_wait(lis3);
|
||||
+ err = lis3lv02d_wait_pwron(lis3);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
--
|
||||
1.7.7.1
|
||||
|
|
@ -0,0 +1,132 @@
|
|||
Do not scan on no-IBSS and disabled channels in IBSS mode. Doing this
|
||||
can trigger Microcode errors on iwlwifi and iwlegacy drivers.
|
||||
|
||||
Also rename ieee80211_request_internal_scan() function since it is only
|
||||
used in IBSS mode and simplify calling it from ieee80211_sta_find_ibss().
|
||||
|
||||
This patch should address:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=883414
|
||||
https://bugzilla.kernel.org/show_bug.cgi?id=49411
|
||||
|
||||
Reported-by: Jesse Kahtava <jesse_kahtava@f-m.fm>
|
||||
Reported-by: Mikko Rapeli <mikko.rapeli@iki.fi>
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
---
|
||||
net/mac80211/ibss.c | 9 ++++-----
|
||||
net/mac80211/ieee80211_i.h | 6 +++---
|
||||
net/mac80211/scan.c | 34 ++++++++++++++++++++++++----------
|
||||
3 files changed, 31 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
|
||||
index c21e33d..d9df6b8 100644
|
||||
--- a/net/mac80211/ibss.c
|
||||
+++ b/net/mac80211/ibss.c
|
||||
@@ -678,8 +678,8 @@ static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata)
|
||||
sdata_info(sdata,
|
||||
"No active IBSS STAs - trying to scan for other IBSS networks with same SSID (merge)\n");
|
||||
|
||||
- ieee80211_request_internal_scan(sdata,
|
||||
- ifibss->ssid, ifibss->ssid_len, NULL);
|
||||
+ ieee80211_request_ibss_scan(sdata, ifibss->ssid, ifibss->ssid_len,
|
||||
+ NULL);
|
||||
}
|
||||
|
||||
static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata)
|
||||
@@ -777,9 +777,8 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
|
||||
IEEE80211_SCAN_INTERVAL)) {
|
||||
sdata_info(sdata, "Trigger new scan to find an IBSS to join\n");
|
||||
|
||||
- ieee80211_request_internal_scan(sdata,
|
||||
- ifibss->ssid, ifibss->ssid_len,
|
||||
- ifibss->fixed_channel ? ifibss->channel : NULL);
|
||||
+ ieee80211_request_ibss_scan(sdata, ifibss->ssid,
|
||||
+ ifibss->ssid_len, chan);
|
||||
} else {
|
||||
int interval = IEEE80211_SCAN_INTERVAL;
|
||||
|
||||
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
|
||||
index 156e583..bc48d4d 100644
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -1247,9 +1247,9 @@ void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
/* scan/BSS handling */
|
||||
void ieee80211_scan_work(struct work_struct *work);
|
||||
-int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
|
||||
- const u8 *ssid, u8 ssid_len,
|
||||
- struct ieee80211_channel *chan);
|
||||
+int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
|
||||
+ const u8 *ssid, u8 ssid_len,
|
||||
+ struct ieee80211_channel *chan);
|
||||
int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
|
||||
struct cfg80211_scan_request *req);
|
||||
void ieee80211_scan_cancel(struct ieee80211_local *local);
|
||||
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
|
||||
index 43e60b5..fab706f 100644
|
||||
--- a/net/mac80211/scan.c
|
||||
+++ b/net/mac80211/scan.c
|
||||
@@ -819,9 +819,9 @@ int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
|
||||
return res;
|
||||
}
|
||||
|
||||
-int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
|
||||
- const u8 *ssid, u8 ssid_len,
|
||||
- struct ieee80211_channel *chan)
|
||||
+int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
|
||||
+ const u8 *ssid, u8 ssid_len,
|
||||
+ struct ieee80211_channel *chan)
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
int ret = -EBUSY;
|
||||
@@ -835,22 +835,36 @@ int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
/* fill internal scan request */
|
||||
if (!chan) {
|
||||
- int i, nchan = 0;
|
||||
+ int i, max_n;
|
||||
+ int n_ch = 0;
|
||||
|
||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
|
||||
if (!local->hw.wiphy->bands[band])
|
||||
continue;
|
||||
- for (i = 0;
|
||||
- i < local->hw.wiphy->bands[band]->n_channels;
|
||||
- i++) {
|
||||
- local->int_scan_req->channels[nchan] =
|
||||
+
|
||||
+ max_n = local->hw.wiphy->bands[band]->n_channels;
|
||||
+ for (i = 0; i < max_n; i++) {
|
||||
+ struct ieee80211_channel *tmp_ch =
|
||||
&local->hw.wiphy->bands[band]->channels[i];
|
||||
- nchan++;
|
||||
+
|
||||
+ if (tmp_ch->flags & (IEEE80211_CHAN_NO_IBSS |
|
||||
+ IEEE80211_CHAN_DISABLED))
|
||||
+ continue;
|
||||
+
|
||||
+ local->int_scan_req->channels[n_ch] = tmp_ch;
|
||||
+ n_ch++;
|
||||
}
|
||||
}
|
||||
|
||||
- local->int_scan_req->n_channels = nchan;
|
||||
+ if (WARN_ON_ONCE(n_ch == 0))
|
||||
+ goto unlock;
|
||||
+
|
||||
+ local->int_scan_req->n_channels = n_ch;
|
||||
} else {
|
||||
+ if (WARN_ON_ONCE(chan->flags & (IEEE80211_CHAN_NO_IBSS |
|
||||
+ IEEE80211_CHAN_DISABLED)))
|
||||
+ goto unlock;
|
||||
+
|
||||
local->int_scan_req->channels[0] = chan;
|
||||
local->int_scan_req->n_channels = 1;
|
||||
}
|
||||
--
|
||||
1.7.1
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
|
@ -0,0 +1,47 @@
|
|||
Since:
|
||||
|
||||
commit 816c04fe7ef01dd9649f5ccfe796474db8708be5
|
||||
Author: Christian Lamparter <chunkeey@googlemail.com>
|
||||
Date: Sat Apr 30 15:24:30 2011 +0200
|
||||
|
||||
mac80211: consolidate MIC failure report handling
|
||||
|
||||
is possible to that we dereference rx->key == NULL when driver set
|
||||
RX_FLAG_MMIC_STRIPPED and not RX_FLAG_IV_STRIPPED and we are in
|
||||
promiscuous mode. This happen with rt73usb and rt61pci at least.
|
||||
|
||||
Before the commit we always check rx->key against NULL, so I assume
|
||||
fix should be done in mac80211 (also mic_fail path has similar check).
|
||||
|
||||
References:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=769766
|
||||
http://rt2x00.serialmonkey.com/pipermail/users_rt2x00.serialmonkey.com/2012-January/004395.html
|
||||
|
||||
Cc: stable@vger.kernel.org # 3.0+
|
||||
Reported-by: Stuart D Gathman <stuart@gathman.org>
|
||||
Reported-by: Kai Wohlfahrt <kai.scorpio@gmail.com>
|
||||
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
---
|
||||
net/mac80211/wpa.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c
|
||||
index 93aab07..422b798 100644
|
||||
--- a/net/mac80211/wpa.c
|
||||
+++ b/net/mac80211/wpa.c
|
||||
@@ -106,7 +106,7 @@ ieee80211_rx_h_michael_mic_verify(struct ieee80211_rx_data *rx)
|
||||
if (status->flag & RX_FLAG_MMIC_ERROR)
|
||||
goto mic_fail;
|
||||
|
||||
- if (!(status->flag & RX_FLAG_IV_STRIPPED))
|
||||
+ if (!(status->flag & RX_FLAG_IV_STRIPPED) && rx->key)
|
||||
goto update_iv;
|
||||
|
||||
return RX_CONTINUE;
|
||||
--
|
||||
1.7.1
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
|
@ -1,24 +0,0 @@
|
|||
diff --git a/arch/x86/kernel/microcode_intel.c b/arch/x86/kernel/microcode_intel.c
|
||||
index ebd193e..c57024a 100644
|
||||
--- a/arch/x86/kernel/microcode_intel.c
|
||||
+++ b/arch/x86/kernel/microcode_intel.c
|
||||
@@ -453,9 +453,18 @@ static void microcode_fini_cpu(int cpu)
|
||||
uci->mc = NULL;
|
||||
}
|
||||
|
||||
+/* we don't ship the broken out files...
|
||||
+ * instead, we'll just fail here, and load it with microcode_ctl
|
||||
+ */
|
||||
+static enum ucode_state noop_request_microcode_fw(int cpu,
|
||||
+ struct device *device)
|
||||
+{
|
||||
+ return UCODE_NFOUND;
|
||||
+}
|
||||
+
|
||||
static struct microcode_ops microcode_intel_ops = {
|
||||
.request_microcode_user = request_microcode_user,
|
||||
- .request_microcode_fw = request_microcode_fw,
|
||||
+ .request_microcode_fw = noop_request_microcode_fw,
|
||||
.collect_cpu_info = collect_cpu_info,
|
||||
.apply_microcode = apply_microcode,
|
||||
.microcode_fini_cpu = microcode_fini_cpu,
|
|
@ -0,0 +1,47 @@
|
|||
>From e540f21852043a4d8e8cf5e505607909d0ab0f51 Mon Sep 17 00:00:00 2001
|
||||
From: Tim Gardner <tim.gardner@canonical.com>
|
||||
Date: Thu, 29 Mar 2012 06:21:01 -0600
|
||||
Subject: [PATCH] UBUNTU: SAUCE: disable_nx should not be in __cpuinitdata
|
||||
section for X86_32
|
||||
|
||||
I noticed a section mismatch warning while building 3.2.0-20.33 for X86_32.
|
||||
|
||||
AR arch/x86/lib/lib.a
|
||||
LD vmlinux.o
|
||||
MODPOST vmlinux.o
|
||||
WARNING: vmlinux.o(.text+0x187833): Section mismatch in reference from the function load_elf_binary() to the variable .cpuinit.data:disable_nx
|
||||
The function load_elf_binary() references
|
||||
the variable __cpuinitdata disable_nx.
|
||||
This is often because load_elf_binary lacks a __cpuinitdata
|
||||
annotation or the annotation of disable_nx is wrong.
|
||||
|
||||
load_elf_binary() is definitely called after initialization.
|
||||
|
||||
This code was added by 'UBUNTU: ubuntu: nx-emu - i386: NX emulation', so
|
||||
this is not an upstream problem.
|
||||
|
||||
Reported-by: Tetsuo Handa <from-ubuntu@I-love.SAKURA.ne.jp>
|
||||
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
|
||||
---
|
||||
arch/x86/mm/setup_nx.c | 4 ++++
|
||||
1 files changed, 4 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/mm/setup_nx.c b/arch/x86/mm/setup_nx.c
|
||||
index 90c9eff3..89fd946 100644
|
||||
--- a/arch/x86/mm/setup_nx.c
|
||||
+++ b/arch/x86/mm/setup_nx.c
|
||||
@@ -6,7 +6,11 @@
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/proto.h>
|
||||
|
||||
+#ifdef CONFIG_X86_32
|
||||
+int disable_nx; /* referenced by load_elf_binary() */
|
||||
+#else
|
||||
int disable_nx __cpuinitdata;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* noexec = on|off
|
||||
--
|
||||
1.7.9.1
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
|
||||
index 404f21a..2704a9c 100644
|
||||
--- a/arch/x86/pci/acpi.c
|
||||
+++ b/arch/x86/pci/acpi.c
|
||||
@@ -24,6 +24,12 @@ static int __init set_use_crs(const struct dmi_system_id *id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int __init set_nouse_crs(const struct dmi_system_id *id)
|
||||
+{
|
||||
+ pci_use_crs = false;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static const struct dmi_system_id pci_use_crs_table[] __initconst = {
|
||||
/* http://bugzilla.kernel.org/show_bug.cgi?id=14183 */
|
||||
{
|
||||
@@ -54,6 +60,18 @@ static const struct dmi_system_id pci_use_crs_table[] __initconst = {
|
||||
DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."),
|
||||
},
|
||||
},
|
||||
+
|
||||
+ /* Now for the blacklist.. */
|
||||
+
|
||||
+ /* https://bugzilla.redhat.com/show_bug.cgi?id=770308 */
|
||||
+ {
|
||||
+ .callback = set_nouse_crs,
|
||||
+ .ident = "Dell Studio 1536",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_BOARD_VENDOR, "Dell Inc."),
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "0M273C"),
|
||||
+ },
|
||||
+ },
|
||||
{}
|
||||
};
|
||||
|
||||
--- linux-3.1.noarch/arch/x86/pci/acpi.c~ 2011-12-30 14:42:43.495717907 -0500
|
||||
+++ linux-3.1.noarch/arch/x86/pci/acpi.c 2011-12-30 14:45:09.296198024 -0500
|
||||
@@ -72,6 +72,16 @@ static const struct dmi_system_id pci_us
|
||||
DMI_MATCH(DMI_BOARD_NAME, "0M273C"),
|
||||
},
|
||||
},
|
||||
+ /* https://bugzilla.redhat.com/show_bug.cgi?id=769657 */
|
||||
+ {
|
||||
+ .callback = set_nouse_crs,
|
||||
+ .ident = "Thinkpad SL510",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "2847DFG"),
|
||||
+ DMI_MATCH(DMI_BIOS_VERSION, "6JET85WW (1.43 )"),
|
||||
+ },
|
||||
+ },
|
||||
{}
|
||||
};
|
||||
|
||||
--- linux-3.1.noarch/arch/x86/pci/acpi.c~ 2012-01-04 11:19:36.783664477 -0500
|
||||
+++ linux-3.1.noarch/arch/x86/pci/acpi.c 2012-01-04 11:23:42.403666272 -0500
|
||||
@@ -75,6 +75,16 @@ static const struct dmi_system_id pci_us
|
||||
/* https://bugzilla.redhat.com/show_bug.cgi?id=769657 */
|
||||
{
|
||||
.callback = set_nouse_crs,
|
||||
+ .ident = "Dell Studio 1557",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_BOARD_VENDOR, "Dell Inc."),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1557"),
|
||||
+ DMI_MATCH(DMI_BIOS_VERSION, "A09"),
|
||||
+ },
|
||||
+ },
|
||||
+ /* https://bugzilla.redhat.com/show_bug.cgi?id=769657 */
|
||||
+ {
|
||||
+ .callback = set_nouse_crs,
|
||||
.ident = "Thinkpad SL510",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
|
@ -0,0 +1,13 @@
|
|||
diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c
|
||||
index a46bd38..416dd12 100644
|
||||
--- a/arch/x86/kernel/apm_32.c
|
||||
+++ b/arch/x86/kernel/apm_32.c
|
||||
@@ -903,7 +903,7 @@ static void apm_cpu_idle(void)
|
||||
unsigned int jiffies_since_last_check = jiffies - last_jiffies;
|
||||
unsigned int bucket;
|
||||
|
||||
- WARN_ONCE(1, "deprecated apm_cpu_idle will be deleted in 2012");
|
||||
+ printk_once(KERN_INFO "deprecated apm_cpu_idle will be deleted in 2012");
|
||||
recalc:
|
||||
if (jiffies_since_last_check > IDLE_CALC_LIMIT) {
|
||||
use_apm_idle = 0;
|
|
@ -1,138 +0,0 @@
|
|||
From 141d0d01ab292d4ea3a6d5e96b4048e10e68c1d3 Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@mcmartin.ca>
|
||||
Date: Mon, 24 Jan 2011 13:01:57 -0500
|
||||
Subject: [PATCH] runtime_pm_fixups
|
||||
|
||||
---
|
||||
drivers/acpi/bus.c | 3 ++-
|
||||
drivers/acpi/pci_bind.c | 6 ++++++
|
||||
drivers/acpi/power.c | 5 ++++-
|
||||
drivers/acpi/sleep.c | 2 +-
|
||||
drivers/acpi/wakeup.c | 2 +-
|
||||
drivers/pci/pci-acpi.c | 2 +-
|
||||
include/acpi/acpi_bus.h | 2 +-
|
||||
7 files changed, 16 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
|
||||
index 7ced61f..e4e0114 100644
|
||||
--- a/drivers/acpi/bus.c
|
||||
+++ b/drivers/acpi/bus.c
|
||||
@@ -256,7 +256,8 @@ static int __acpi_bus_set_power(struct acpi_device *device, int state)
|
||||
* a lower-powered state.
|
||||
*/
|
||||
if (state < device->power.state) {
|
||||
- if (device->power.flags.power_resources) {
|
||||
+ if (device->power.flags.power_resources &&
|
||||
+ !device->wakeup.run_wake_count) {
|
||||
result = acpi_power_transition(device, state);
|
||||
if (result)
|
||||
goto end;
|
||||
diff --git a/drivers/acpi/pci_bind.c b/drivers/acpi/pci_bind.c
|
||||
index 2ef0409..4b0bb68 100644
|
||||
--- a/drivers/acpi/pci_bind.c
|
||||
+++ b/drivers/acpi/pci_bind.c
|
||||
@@ -32,6 +32,8 @@
|
||||
#include <acpi/acpi_bus.h>
|
||||
#include <acpi/acpi_drivers.h>
|
||||
|
||||
+#include "internal.h"
|
||||
+
|
||||
#define _COMPONENT ACPI_PCI_COMPONENT
|
||||
ACPI_MODULE_NAME("pci_bind");
|
||||
|
||||
@@ -65,6 +67,7 @@ static int acpi_pci_bind(struct acpi_device *device)
|
||||
acpi_handle handle;
|
||||
struct pci_bus *bus;
|
||||
struct pci_dev *dev;
|
||||
+ int state;
|
||||
|
||||
dev = acpi_get_pci_dev(device->handle);
|
||||
if (!dev)
|
||||
@@ -87,6 +90,9 @@ static int acpi_pci_bind(struct acpi_device *device)
|
||||
device->ops.unbind = acpi_pci_unbind;
|
||||
}
|
||||
|
||||
+ acpi_power_get_inferred_state(device, &state);
|
||||
+ acpi_power_transition(device, state);
|
||||
+
|
||||
/*
|
||||
* Evaluate and parse _PRT, if exists. This code allows parsing of
|
||||
* _PRT objects within the scope of non-bridge devices. Note that
|
||||
diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c
|
||||
index 9ac2a9f..cd6a8df 100644
|
||||
--- a/drivers/acpi/power.c
|
||||
+++ b/drivers/acpi/power.c
|
||||
@@ -412,7 +412,7 @@ int acpi_enable_wakeup_device_power(struct acpi_device *dev, int sleep_state)
|
||||
* State Wake) for the device, if present
|
||||
* 2. Shutdown down the power resources
|
||||
*/
|
||||
-int acpi_disable_wakeup_device_power(struct acpi_device *dev)
|
||||
+int acpi_disable_wakeup_device_power(struct acpi_device *dev, int sleep_state)
|
||||
{
|
||||
int i, err = 0;
|
||||
|
||||
@@ -435,6 +435,9 @@ int acpi_disable_wakeup_device_power(struct acpi_device *dev)
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
+ if (sleep_state == ACPI_STATE_S0)
|
||||
+ goto out;
|
||||
+
|
||||
/* Close power resource */
|
||||
for (i = 0; i < dev->wakeup.resources.count; i++) {
|
||||
int ret = acpi_power_off(dev->wakeup.resources.handles[i]);
|
||||
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
|
||||
index d6a8cd1..5d68dc0 100644
|
||||
--- a/drivers/acpi/sleep.c
|
||||
+++ b/drivers/acpi/sleep.c
|
||||
@@ -697,7 +697,7 @@ int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
|
||||
|
||||
error = enable ?
|
||||
acpi_enable_wakeup_device_power(adev, acpi_target_sleep_state) :
|
||||
- acpi_disable_wakeup_device_power(adev);
|
||||
+ acpi_disable_wakeup_device_power(adev, acpi_target_sleep_state);
|
||||
if (!error)
|
||||
dev_info(dev, "wake-up capability %s by ACPI\n",
|
||||
enable ? "enabled" : "disabled");
|
||||
diff --git a/drivers/acpi/wakeup.c b/drivers/acpi/wakeup.c
|
||||
index ed65014..a0cabc3 100644
|
||||
--- a/drivers/acpi/wakeup.c
|
||||
+++ b/drivers/acpi/wakeup.c
|
||||
@@ -73,7 +73,7 @@ void acpi_disable_wakeup_devices(u8 sleep_state)
|
||||
ACPI_GPE_DISABLE);
|
||||
|
||||
if (device_may_wakeup(&dev->dev))
|
||||
- acpi_disable_wakeup_device_power(dev);
|
||||
+ acpi_disable_wakeup_device_power(dev, sleep_state);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
|
||||
index 6fe0772..819fa7a 100644
|
||||
--- a/drivers/pci/pci-acpi.c
|
||||
+++ b/drivers/pci/pci-acpi.c
|
||||
@@ -302,7 +302,7 @@ static int acpi_dev_run_wake(struct device *phys_dev, bool enable)
|
||||
if (!--dev->wakeup.run_wake_count) {
|
||||
acpi_disable_gpe(dev->wakeup.gpe_device,
|
||||
dev->wakeup.gpe_number);
|
||||
- acpi_disable_wakeup_device_power(dev);
|
||||
+ acpi_disable_wakeup_device_power(dev, ACPI_STATE_S0);
|
||||
}
|
||||
} else {
|
||||
error = -EALREADY;
|
||||
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
|
||||
index 78ca429..92d6e86 100644
|
||||
--- a/include/acpi/acpi_bus.h
|
||||
+++ b/include/acpi/acpi_bus.h
|
||||
@@ -379,7 +379,7 @@ struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle);
|
||||
#define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->archdata.acpi_handle))
|
||||
|
||||
int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state);
|
||||
-int acpi_disable_wakeup_device_power(struct acpi_device *dev);
|
||||
+int acpi_disable_wakeup_device_power(struct acpi_device *dev, int state);
|
||||
|
||||
#ifdef CONFIG_PM_OPS
|
||||
int acpi_pm_device_sleep_state(struct device *, int *);
|
||||
--
|
||||
1.7.3.5
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
VER=$(make verrel)
|
||||
VER=$(fedpkg verrel)
|
||||
ver=$(echo $VER | sed -e 's/-/ /g' | awk '{print $2}')
|
||||
rev=$(echo $VER | sed -e 's/-/ /g' | awk '{print $3}')
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
--- a/drivers/scsi/sd.c
|
||||
+++ a/drivers/scsi/sd.c
|
||||
@@ -2362,13 +2362,18 @@ static int sd_try_extended_inquiry(struct scsi_device *sdp)
|
||||
static int sd_revalidate_disk(struct gendisk *disk)
|
||||
{
|
||||
struct scsi_disk *sdkp = scsi_disk(disk);
|
||||
- struct scsi_device *sdp = sdkp->device;
|
||||
+ struct scsi_device *sdp;
|
||||
unsigned char *buffer;
|
||||
unsigned flush = 0;
|
||||
|
||||
SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp,
|
||||
"sd_revalidate_disk\n"));
|
||||
|
||||
+ if (WARN_ONCE((!sdkp), "Invalid scsi_disk from %p\n", disk))
|
||||
+ goto out;
|
||||
+
|
||||
+ sdp = sdkp->device;
|
||||
+
|
||||
/*
|
||||
* If the device is offline, don't try and read capacity or any
|
||||
* of the other niceties.
|
|
@ -0,0 +1,69 @@
|
|||
diff -uNrp kernel-3.2.fc16.orig/arch/x86/mm/mmap.c kernel-3.2.fc16.new/arch/x86/mm/mmap.c
|
||||
--- kernel-3.2.fc16.orig/arch/x86/mm/mmap.c 2012-03-19 16:47:03.495169091 -0400
|
||||
+++ kernel-3.2.fc16.new/arch/x86/mm/mmap.c 2012-03-19 16:50:03.574168052 -0400
|
||||
@@ -106,6 +106,10 @@ static unsigned long mmap_legacy_base(vo
|
||||
return TASK_UNMAPPED_BASE + mmap_rnd();
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_X86_32
|
||||
+ #define SHLIB_BASE 0x00111000
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* This function, called very early during the creation of a new
|
||||
* process VM image, sets up which VM layout function to use:
|
||||
@@ -126,8 +126,10 @@ void arch_pick_mmap_layout(struct mm_str
|
||||
#ifdef CONFIG_X86_32
|
||||
if (!(current->personality & READ_IMPLIES_EXEC)
|
||||
&& !(__supported_pte_mask & _PAGE_NX)
|
||||
- && mmap_is_ia32())
|
||||
+ && mmap_is_ia32()) {
|
||||
+ mm->shlib_base = SHLIB_BASE + mmap_rnd();
|
||||
mm->get_unmapped_exec_area = arch_get_unmapped_exec_area;
|
||||
+ }
|
||||
#endif
|
||||
mm->unmap_area = arch_unmap_area_topdown;
|
||||
}
|
||||
diff -uNrp kernel-3.2.fc16.orig/include/linux/mm_types.h kernel-3.2.fc16.new/include/linux/mm_types.h
|
||||
--- kernel-3.2.fc16.orig/include/linux/mm_types.h 2012-03-19 16:46:47.382169153 -0400
|
||||
+++ kernel-3.2.fc16.new/include/linux/mm_types.h 2012-03-19 16:50:40.738168219 -0400
|
||||
@@ -300,6 +300,7 @@ struct mm_struct {
|
||||
void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
|
||||
#endif
|
||||
unsigned long mmap_base; /* base of mmap area */
|
||||
+ unsigned long shlib_base; /* base of lib map area (ASCII armour)*/
|
||||
unsigned long task_size; /* size of task vm space */
|
||||
unsigned long cached_hole_size; /* if non-zero, the largest hole below free_area_cache */
|
||||
unsigned long free_area_cache; /* first hole of size cached_hole_size or larger */
|
||||
diff -uNrp kernel-3.2.fc16.orig/mm/mmap.c kernel-3.2.fc16.new/mm/mmap.c
|
||||
--- kernel-3.2.fc16.orig/mm/mmap.c 2012-03-19 16:46:15.791169274 -0400
|
||||
+++ kernel-3.2.fc16.new/mm/mmap.c 2012-03-19 16:51:37.351166875 -0400
|
||||
@@ -1594,8 +1594,6 @@ static bool should_randomize(void)
|
||||
!(current->personality & ADDR_NO_RANDOMIZE);
|
||||
}
|
||||
|
||||
-#define SHLIB_BASE 0x00110000
|
||||
-
|
||||
unsigned long
|
||||
arch_get_unmapped_exec_area(struct file *filp, unsigned long addr0,
|
||||
unsigned long len0, unsigned long pgoff, unsigned long flags)
|
||||
@@ -1612,8 +1610,8 @@ arch_get_unmapped_exec_area(struct file
|
||||
return addr;
|
||||
|
||||
if (!addr)
|
||||
- addr = !should_randomize() ? SHLIB_BASE :
|
||||
- randomize_range(SHLIB_BASE, 0x01000000, len);
|
||||
+ addr = !should_randomize() ? mm->shlib_base :
|
||||
+ randomize_range(mm->shlib_base, 0x01000000, len);
|
||||
|
||||
if (addr) {
|
||||
addr = PAGE_ALIGN(addr);
|
||||
@@ -1623,7 +1621,7 @@ arch_get_unmapped_exec_area(struct file
|
||||
return addr;
|
||||
}
|
||||
|
||||
- addr = SHLIB_BASE;
|
||||
+ addr = mm->shlib_base;
|
||||
for (vma = find_vma(mm, addr); ; vma = vma->vm_next) {
|
||||
/* At this point: (!vma || addr < vma->vm_end). */
|
||||
if (TASK_SIZE - len < addr)
|
|
@ -0,0 +1,11 @@
|
|||
--- linux-3.6.noarch/arch/x86/kernel/apic/ipi.c~ 2013-01-23 10:48:14.716069615 -0500
|
||||
+++ linux-3.6.noarch/arch/x86/kernel/apic/ipi.c 2013-01-23 10:48:26.217046545 -0500
|
||||
@@ -106,7 +106,7 @@ void default_send_IPI_mask_logical(const
|
||||
unsigned long mask = cpumask_bits(cpumask)[0];
|
||||
unsigned long flags;
|
||||
|
||||
- if (WARN_ONCE(!mask, "empty IPI mask"))
|
||||
+ if (!mask)
|
||||
return;
|
||||
|
||||
local_irq_save(flags);
|
|
@ -0,0 +1,50 @@
|
|||
commit 94777fc51b3ad85ff9f705ddf7cdd0eb3bbad5a6
|
||||
Author: Dimitri Sivanich <sivanich@sgi.com>
|
||||
Date: Tue Oct 16 07:50:21 2012 -0500
|
||||
|
||||
x86/irq/ioapic: Check for valid irq_cfg pointer in smp_irq_move_cleanup_interrupt
|
||||
|
||||
Posting this patch to fix an issue concerning sparse irq's that
|
||||
I raised a while back. There was discussion about adding
|
||||
refcounting to sparse irqs (to fix other potential race
|
||||
conditions), but that does not appear to have been addressed
|
||||
yet. This covers the only issue of this type that I've
|
||||
encountered in this area.
|
||||
|
||||
A NULL pointer dereference can occur in
|
||||
smp_irq_move_cleanup_interrupt() if we haven't yet setup the
|
||||
irq_cfg pointer in the irq_desc.irq_data.chip_data.
|
||||
|
||||
In create_irq_nr() there is a window where we have set
|
||||
vector_irq in __assign_irq_vector(), but not yet called
|
||||
irq_set_chip_data() to set the irq_cfg pointer.
|
||||
|
||||
Should an IRQ_MOVE_CLEANUP_VECTOR hit the cpu in question during
|
||||
this time, smp_irq_move_cleanup_interrupt() will attempt to
|
||||
process the aforementioned irq, but panic when accessing
|
||||
irq_cfg.
|
||||
|
||||
Only continue processing the irq if irq_cfg is non-NULL.
|
||||
|
||||
Signed-off-by: Dimitri Sivanich <sivanich@sgi.com>
|
||||
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
|
||||
Cc: Joerg Roedel <joerg.roedel@amd.com>
|
||||
Cc: Yinghai Lu <yinghai@kernel.org>
|
||||
Cc: Alexander Gordeev <agordeev@redhat.com>
|
||||
Link: http://lkml.kernel.org/r/20121016125021.GA22935@sgi.com
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
|
||||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
|
||||
index c265593..1817fa9 100644
|
||||
--- a/arch/x86/kernel/apic/io_apic.c
|
||||
+++ b/arch/x86/kernel/apic/io_apic.c
|
||||
@@ -2257,6 +2257,9 @@ asmlinkage void smp_irq_move_cleanup_interrupt(void)
|
||||
continue;
|
||||
|
||||
cfg = irq_cfg(irq);
|
||||
+ if (!cfg)
|
||||
+ continue;
|
||||
+
|
||||
raw_spin_lock(&desc->lock);
|
||||
|
||||
/*
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue