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,2 +1,6 @@
|
|||
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
|
||||
|
|
@ -0,0 +1,204 @@
|
|||
# Makefile for source rpm: kernel
|
||||
SPECFILE := kernel.spec
|
||||
|
||||
# use noarch for make prep instead of the current CPU
|
||||
# noarch creates and checks all config files not just the current one,
|
||||
# in addition "i386" isn't a valid kernel target
|
||||
PREPARCH = noarch
|
||||
|
||||
# we only check the .sign signatures
|
||||
UPSTREAM_CHECKS = sign
|
||||
|
||||
.PHONY: help
|
||||
help:
|
||||
%:
|
||||
@echo "Try fedpkg $@ or something like that"
|
||||
@exit 1
|
||||
|
||||
include Makefile.config
|
||||
|
||||
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
|
||||
|
||||
debug:
|
||||
@perl -pi -e 's/# CONFIG_SLUB_DEBUG_ON is not set/CONFIG_SLUB_DEBUG_ON=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_LOCK_STAT is not set/CONFIG_LOCK_STAT=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_STACK_USAGE is not set/CONFIG_DEBUG_STACK_USAGE=y/' config-nodebug
|
||||
@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_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_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
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_WRITECOUNT is not set/CONFIG_DEBUG_WRITECOUNT=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS is not set/CONFIG_DEBUG_OBJECTS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_FREE is not set/CONFIG_DEBUG_OBJECTS_FREE=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_TIMERS is not set/CONFIG_DEBUG_OBJECTS_TIMERS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_WORK is not set/CONFIG_DEBUG_OBJECTS_WORK=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set/CONFIG_DEBUG_OBJECTS_RCU_HEAD=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_X86_PTDUMP is not set/CONFIG_X86_PTDUMP=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_CAN_DEBUG_DEVICES is not set/CONFIG_CAN_DEBUG_DEVICES=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_MODULE_FORCE_UNLOAD is not set/CONFIG_MODULE_FORCE_UNLOAD=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_SYSCTL_SYSCALL_CHECK is not set/CONFIG_SYSCTL_SYSCALL_CHECK=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_NOTIFIERS is not set/CONFIG_DEBUG_NOTIFIERS=y/' config-nodebug
|
||||
@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_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
|
||||
@perl -pi -e 's/CONFIG_STRIP_ASM_SYMS=y/# CONFIG_STRIP_ASM_SYMS is not set/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_CREDENTIALS is not set/CONFIG_DEBUG_CREDENTIALS=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set/CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_ACPI_DEBUG is not set/CONFIG_ACPI_DEBUG=y/' config-nodebug
|
||||
@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_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_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
|
||||
@perl -pi -e 's/# CONFIG_QUOTA_DEBUG is not set/CONFIG_QUOTA_DEBUG=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_KGDB_KDB is not set/CONFIG_KGDB_KDB=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_KDB_KEYBOARD is not set/CONFIG_KDB_KEYBOARD=y/' config-nodebug
|
||||
@perl -pi -e 's/# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set/CONFIG_CPU_NOTIFIER_ERROR_INJECT=m/' config-nodebug
|
||||
@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_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_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
|
||||
|
||||
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
|
||||
@perl -pi -e 's/CONFIG_DEBUG_STACK_USAGE=y/# CONFIG_DEBUG_STACK_USAGE is not set/' config-nodebug
|
||||
@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_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_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
|
||||
@perl -pi -e 's/CONFIG_DEBUG_WRITECOUNT=y/# CONFIG_DEBUG_WRITECOUNT is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS=y/# CONFIG_DEBUG_OBJECTS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_FREE=y/# CONFIG_DEBUG_OBJECTS_FREE is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_TIMERS=y/# CONFIG_DEBUG_OBJECTS_TIMERS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_WORK=y/# CONFIG_DEBUG_OBJECTS_WORK is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_RCU_HEAD=y/# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_X86_PTDUMP=y/# CONFIG_X86_PTDUMP is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_CAN_DEBUG_DEVICES=y/# CONFIG_CAN_DEBUG_DEVICES is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_MODULE_FORCE_UNLOAD=y/# CONFIG_MODULE_FORCE_UNLOAD is not set/' config-nodebug
|
||||
@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_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
|
||||
@perl -pi -e 's/# CONFIG_STRIP_ASM_SYMS is not set/CONFIG_STRIP_ASM_SYMS=y/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_CREDENTIALS=y/# CONFIG_DEBUG_CREDENTIALS is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y/# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_ACPI_DEBUG=y/# CONFIG_ACPI_DEBUG is not set/' config-nodebug
|
||||
@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_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_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
|
||||
@perl -pi -e 's/CONFIG_QUOTA_DEBUG=y/# CONFIG_QUOTA_DEBUG is not set/' config-nodebug
|
||||
@perl -pi -e 's/CONFIG_CPU_NOTIFIER_ERROR_INJECT=m/# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set/' config-nodebug
|
||||
#@perl -pi -e 's/CONFIG_KGDB_KDB=y/# CONFIG_KGDB_KDB is not set/' config-nodebug
|
||||
#@perl -pi -e 's/CONFIG_KDB_KEYBOARD=y/# CONFIG_KDB_KEYBOARD is not set/' config-nodebug
|
||||
@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
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
|
||||
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
|
||||
|
||||
ifeq ($(MAKECMDGOALS),me a sandwich)
|
||||
.PHONY: me a sandwich
|
||||
me a:
|
||||
@:
|
||||
|
||||
sandwich:
|
||||
@[ `id -u` -ne 0 ] && echo "What? Make it yourself." || echo Okay.
|
||||
endif
|
|
@ -0,0 +1,101 @@
|
|||
# Make rules for configuration files.
|
||||
#
|
||||
# $Id$
|
||||
|
||||
CFG = kernel-$(VERSION)
|
||||
|
||||
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)-ppc.config $(CFG)-ppc-smp.config \
|
||||
$(CFG)-sparc64.config \
|
||||
$(CFG)-ppc64.config $(CFG)-ppc64-debug.config
|
||||
|
||||
PLATFORMS = x86 x86_64 powerpc powerpc32 powerpc64 s390x sparc64
|
||||
TEMPFILES = $(addprefix temp-, $(addsuffix -generic, $(PLATFORMS)))
|
||||
|
||||
configs: $(CONFIGFILES)
|
||||
@rm -f kernel-*-config
|
||||
@rm -f $(TEMPFILES)
|
||||
@rm -f temp-generic temp-*-generic temp-*-generic-tmp
|
||||
|
||||
# Augment the clean target to clean up our own cruft
|
||||
clean ::
|
||||
@rm -fv $(CONFIGFILES) $(TEMPFILES) temp-generic kernel-$(VERSION)*config
|
||||
|
||||
temp-generic: config-generic
|
||||
cat config-generic config-nodebug > temp-generic
|
||||
|
||||
temp-debug-generic: config-generic
|
||||
cat config-generic config-debug > temp-debug-generic
|
||||
|
||||
temp-x86-32: config-x86-32-generic config-x86-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-x86-32-generic: temp-x86-32 temp-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-x86-debug-generic: temp-x86-32 temp-debug-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
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
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-powerpc-generic: config-powerpc-generic temp-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-powerpc-debug-generic: config-powerpc-generic temp-debug-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-powerpc32-generic: config-powerpc32-generic temp-powerpc-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
temp-s390-generic: config-s390x temp-generic
|
||||
perl merge.pl $^ > $@
|
||||
|
||||
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-32-generic
|
||||
perl merge.pl $^ i386 > $@
|
||||
|
||||
kernel-$(VERSION)-i686-debug.config: /dev/null temp-x86-debug-generic
|
||||
perl merge.pl $^ i386 > $@
|
||||
|
||||
kernel-$(VERSION)-x86_64.config: /dev/null temp-x86_64-generic
|
||||
perl merge.pl $^ x86_64 > $@
|
||||
|
||||
kernel-$(VERSION)-x86_64-debug.config: /dev/null temp-x86_64-debug-generic
|
||||
perl merge.pl $^ x86_64 > $@
|
||||
|
||||
kernel-$(VERSION)-sparc64.config: /dev/null temp-sparc64-generic
|
||||
perl merge.pl $^ sparc64 > $@
|
||||
|
||||
kernel-$(VERSION)-ppc64.config: config-powerpc64 temp-powerpc-generic
|
||||
perl merge.pl $^ powerpc > $@
|
||||
|
||||
kernel-$(VERSION)-ppc64-debug.config: config-powerpc64 temp-powerpc-debug-generic
|
||||
perl merge.pl $^ powerpc > $@
|
||||
|
||||
kernel-$(VERSION)-s390x.config: config-s390x temp-s390-generic
|
||||
perl merge.pl $^ s390 > $@
|
||||
|
||||
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 > $@
|
|
@ -1,45 +0,0 @@
|
|||
RHEL_MAJOR = 8
|
||||
RHEL_MINOR = 99
|
||||
|
||||
#
|
||||
# RHEL_RELEASE
|
||||
# -------------
|
||||
#
|
||||
# Represents build number in 'release' part of RPM's name-version-release.
|
||||
# name is <package_name>, e.g. kernel
|
||||
# version is upstream kernel version this kernel is based on, e.g. 4.18.0
|
||||
# release is <RHEL_RELEASE>.<dist_tag>[<buildid>], e.g. 100.el8
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
RHEL_RELEASE = 122
|
||||
|
||||
#
|
||||
# Early y+1 numbering
|
||||
# --------------------
|
||||
#
|
||||
# In early y+1 process, RHEL_RELEASE consists of 2 numbers: x.y
|
||||
# First is RHEL_RELEASE inherited/merged from y as-is, second number
|
||||
# is incremented with each build starting from 1. After merge from y,
|
||||
# it resets back to 1. This way y+1 nvr reflects status of last merge.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# rhel8.0 rhel-8.1
|
||||
# kernel-4.18.0-58.el8 --> kernel-4.18.0-58.1.el8
|
||||
# kernel-4.18.0-58.2.el8
|
||||
# kernel-4.18.0-59.el8 kernel-4.18.0-59.1.el8
|
||||
# kernel-4.18.0-60.el8
|
||||
# kernel-4.18.0-61.el8 --> kernel-4.18.0-61.1.el8
|
||||
#
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
EARLY_YSTREAM ?= no
|
||||
EARLY_YBUILD:=
|
||||
EARLY_YRELEASE:=
|
||||
ifneq ("$(ZSTREAM)", "yes")
|
||||
ifeq ("$(EARLY_YSTREAM)","yes")
|
||||
RHEL_RELEASE:=$(RHEL_RELEASE).$(EARLY_YRELEASE)
|
||||
endif
|
||||
endif
|
|
@ -1,228 +0,0 @@
|
|||
https://gitlab.com/cki-project/kernel-ark/-/commit/8773e8c6039ff74d1426cc80de30de759cd0c2a2
|
||||
8773e8c6039ff74d1426cc80de30de759cd0c2a2 irq: export irq_check_status_bit
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/e187313e5f0086538fefe0925ef84480f99616d8
|
||||
e187313e5f0086538fefe0925ef84480f99616d8 gcc-plugins: fix gcc 11 indigestion with plugins...
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/0c84b348e33ab9d7df5c3c5acc7fbc07fd96fafc
|
||||
0c84b348e33ab9d7df5c3c5acc7fbc07fd96fafc Fix up bad merge with efi: generalize efi_get_secureboot
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/364788093bdf437c33753d327136c363be8f756c
|
||||
364788093bdf437c33753d327136c363be8f756c Fix up a merge issue with rxe.c
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/a4d554ce883e24df77cce42bc2deec527028c213
|
||||
a4d554ce883e24df77cce42bc2deec527028c213 Filter out LTO build options from the perl ccopts
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/17b0f7f1d49df30661b517d668715ff5ee1bab09
|
||||
17b0f7f1d49df30661b517d668715ff5ee1bab09 Fixes "acpi: prefer booting with ACPI over DTS" to be RHEL only
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/e7c009cd91ababdbb5f726ef592c7800f0682d3a
|
||||
e7c009cd91ababdbb5f726ef592c7800f0682d3a arch/x86: Remove vendor specific CPU ID checks
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/7120b2a26fc4c7954fd0395973dc6739c110e091
|
||||
7120b2a26fc4c7954fd0395973dc6739c110e091 redhat: Replace hardware.redhat.com link in Unsupported message
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/7a28e2fde653a161913abb8eee943cdacb5ff2ae
|
||||
7a28e2fde653a161913abb8eee943cdacb5ff2ae x86: Fix compile issues with rh_check_supported()
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/45f64c1a24e73af7987cffec3ea941e29364f87f
|
||||
45f64c1a24e73af7987cffec3ea941e29364f87f e1000e: bump up timeout to wait when ME un-configure ULP mode
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/6c14763b1ce98698949ff45135c15e333aa6416d
|
||||
6c14763b1ce98698949ff45135c15e333aa6416d drm/sun4i: sun6i_mipi_dsi: fix horizontal timing calculation
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/67a19b16012b12cffba0b515c6503e5f8cdbb798
|
||||
67a19b16012b12cffba0b515c6503e5f8cdbb798 drm: panel: add Xingbangda XBD599 panel
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/d220dbf98cef820367b5a2a2eeaacebee958bdd4
|
||||
d220dbf98cef820367b5a2a2eeaacebee958bdd4 dt-bindings: panel: add binding for Xingbangda XBD599 panel
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/80660062260dec4bdca9540922577542c16145e8
|
||||
80660062260dec4bdca9540922577542c16145e8 ARM: fix __get_user_check() in case uaccess_* calls are not inlined
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/24d8743613b2a6a585fc68cfe95078d9a3d5b389
|
||||
24d8743613b2a6a585fc68cfe95078d9a3d5b389 mm/kmemleak: skip late_init if not skip disable
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/b697ff5e26974fee8fcd31a1e221e9dd41515efc
|
||||
b697ff5e26974fee8fcd31a1e221e9dd41515efc KEYS: Make use of platform keyring for module signature verify
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/081d2185e22479b449586c4e9843602ca0d49806
|
||||
081d2185e22479b449586c4e9843602ca0d49806 Drop that for now
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/5ef51389cf6673a0e9e004909c7be1dc785050b2
|
||||
5ef51389cf6673a0e9e004909c7be1dc785050b2 Input: rmi4 - remove the need for artificial IRQ in case of HID
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/c1788012ebf8de46e9dc80d18051ed0c77c811b6
|
||||
c1788012ebf8de46e9dc80d18051ed0c77c811b6 ARM: tegra: usb no reset
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/577365feaa909db4c0949eabfcda7e4a972b8e54
|
||||
577365feaa909db4c0949eabfcda7e4a972b8e54 arm: make CONFIG_HIGHPTE optional without CONFIG_EXPERT
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/331be9c5a436057ee852075c102d9d90a9046a30
|
||||
331be9c5a436057ee852075c102d9d90a9046a30 redhat: rh_kabi: deduplication friendly structs
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/34d79fbfb327f732ebf3ece4db21a14f81fedf03
|
||||
34d79fbfb327f732ebf3ece4db21a14f81fedf03 redhat: rh_kabi add a comment with warning about RH_KABI_EXCLUDE usage
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/93a4b5f12d5a1c2d62cf1d7c440b31d9847eab07
|
||||
93a4b5f12d5a1c2d62cf1d7c440b31d9847eab07 redhat: rh_kabi: introduce RH_KABI_EXTEND_WITH_SIZE
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/8e5c06356457f5351289e9f687b991189d163dae
|
||||
8e5c06356457f5351289e9f687b991189d163dae redhat: rh_kabi: Indirect EXTEND macros so nesting of other macros will resolve.
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/212cbccda77cc81fcb60123907eabdac8ad5adb7
|
||||
212cbccda77cc81fcb60123907eabdac8ad5adb7 redhat: rh_kabi: Fix RH_KABI_SET_SIZE to use dereference operator
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/6f7744b412e1fb86a67d8761e64df69cf891b4ad
|
||||
6f7744b412e1fb86a67d8761e64df69cf891b4ad redhat: rh_kabi: Add macros to size and extend structs
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/049623d33998be30d79692c69b34acb502c496e3
|
||||
049623d33998be30d79692c69b34acb502c496e3 Removing Obsolete hba pci-ids from rhel8
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/43ef1d631ecfe84084db3572c9ed1bedbdceb0f8
|
||||
43ef1d631ecfe84084db3572c9ed1bedbdceb0f8 mptsas: pci-id table changes
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/e5726695109dd1a73da92487b75de6a51d54c015
|
||||
e5726695109dd1a73da92487b75de6a51d54c015 mptsas: Taint kernel if mptsas is loaded
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/ee4dcd6f04ca76ad35ab0f38c436ab2f7de53f16
|
||||
ee4dcd6f04ca76ad35ab0f38c436ab2f7de53f16 mptspi: pci-id table changes
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/bd305f716d8b64be1926bc7aebe02468ac6bf599
|
||||
bd305f716d8b64be1926bc7aebe02468ac6bf599 qla2xxx: Remove PCI IDs of deprecated adapter
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/803ff9a2c660c094e14d246ef05019bf6008d503
|
||||
803ff9a2c660c094e14d246ef05019bf6008d503 be2iscsi: remove unsupported device IDs
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/2cb24399321f555f18b0804d3fe02cf53949fba1
|
||||
2cb24399321f555f18b0804d3fe02cf53949fba1 mptspi: Taint kernel if mptspi is loaded
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/ad1740551ff4af49f1ef10a130783d9369e955a0
|
||||
ad1740551ff4af49f1ef10a130783d9369e955a0 hpsa: remove old cciss-based smartarray pci ids
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/4197ba3e766656eea9175c11ed05903620d98a28
|
||||
4197ba3e766656eea9175c11ed05903620d98a28 qla4xxx: Remove deprecated PCI IDs from RHEL 8
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/7e285aec22ab1213639afda877902db363473cb0
|
||||
7e285aec22ab1213639afda877902db363473cb0 aacraid: Remove depreciated device and vendor PCI id's
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/846109a16be92155e69731c36dde48761d375153
|
||||
846109a16be92155e69731c36dde48761d375153 megaraid_sas: remove deprecated pci-ids
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/6fd2019d01cee7ff36dc047d3ecdb504b968f222
|
||||
6fd2019d01cee7ff36dc047d3ecdb504b968f222 mpt*: remove certain deprecated pci-ids
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/dddcd5c1129b275ff160324036a662739db51fc3
|
||||
dddcd5c1129b275ff160324036a662739db51fc3 kernel: add SUPPORT_REMOVED kernel taint
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/08d77161dba915d1ed0d9fede658085440ab4474
|
||||
08d77161dba915d1ed0d9fede658085440ab4474 Rename RH_DISABLE_DEPRECATED to RHEL_DIFFERENCES
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/e2dc2ca6a25a445bf22ceb6a8e38e02706605341
|
||||
e2dc2ca6a25a445bf22ceb6a8e38e02706605341 Add option of 13 for FORCE_MAX_ZONEORDER
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/2384646bf71d8c282cf49bb20321fdf802c61cce
|
||||
2384646bf71d8c282cf49bb20321fdf802c61cce s390: Lock down the kernel when the IPL secure flag is set
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/5850c93175b9d2e1081873f4bbe08dead202cb08
|
||||
5850c93175b9d2e1081873f4bbe08dead202cb08 efi: Lock down the kernel if booted in secure boot mode
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/53250b991f841be025fa4d264850dadc0fae2861
|
||||
53250b991f841be025fa4d264850dadc0fae2861 efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/72223fd1241cc5c70b96a491db14d54c83beadd8
|
||||
72223fd1241cc5c70b96a491db14d54c83beadd8 security: lockdown: expose a hook to lock the kernel down
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/7ba28f03674fa9346610c3fea7fc93bc58f06d2a
|
||||
7ba28f03674fa9346610c3fea7fc93bc58f06d2a Make get_cert_list() use efi_status_to_str() to print error messages.
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/2ae9082db0b54d831a9b3782c049d9917e37d89f
|
||||
2ae9082db0b54d831a9b3782c049d9917e37d89f Add efi_status_to_str() and rework efi_status_to_err().
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/cee1461ada1b7e4b92cd154e7ec241119afcd644
|
||||
cee1461ada1b7e4b92cd154e7ec241119afcd644 Add support for deprecating processors
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/2420149f8f5fa9dd1e2dc793765b498022922a81
|
||||
2420149f8f5fa9dd1e2dc793765b498022922a81 arm: aarch64: Drop the EXPERT setting from ARM64_FORCE_52BIT
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/1d69b30b98b60aff639351f5788d20a3b17f6e27
|
||||
1d69b30b98b60aff639351f5788d20a3b17f6e27 iommu/arm-smmu: workaround DMA mode issues
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/6b2e73e508e7a117b1db91596097c00e5570f64a
|
||||
6b2e73e508e7a117b1db91596097c00e5570f64a rh_kabi: introduce RH_KABI_EXCLUDE
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/ecb9206bce179eb600c52642a6753012a69ce4a2
|
||||
ecb9206bce179eb600c52642a6753012a69ce4a2 ipmi: do not configure ipmi for HPE m400
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/473be59fe72afa9969cf8d10609ef3f14f594631
|
||||
473be59fe72afa9969cf8d10609ef3f14f594631 IB/rxe: Mark Soft-RoCE Transport driver as tech-preview
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/b94117795261f9c074a7addca2252238871b5081
|
||||
b94117795261f9c074a7addca2252238871b5081 scsi: smartpqi: add inspur advantech ids
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/cae871558c333880c1687cab6f2a71accf40d105
|
||||
cae871558c333880c1687cab6f2a71accf40d105 ice: mark driver as tech-preview
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/7d9cb007404211ea6638bde4a28dd0fbe8d95de0
|
||||
7d9cb007404211ea6638bde4a28dd0fbe8d95de0 kABI: Add generic kABI macros to use for kABI workarounds
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/bd353e9aae8877dd490e6c92b67849e0dcfbab25
|
||||
bd353e9aae8877dd490e6c92b67849e0dcfbab25 add pci_hw_vendor_status()
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/41a259999969bbdfe9f556ce71f2c3c07d7454f4
|
||||
41a259999969bbdfe9f556ce71f2c3c07d7454f4 ahci: thunderx2: Fix for errata that affects stop engine
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/2a107343529ce648c11bff62e9f72bbeec738f3f
|
||||
2a107343529ce648c11bff62e9f72bbeec738f3f Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/03e48a48f400a51a182a1254cf22ff0c08706d76
|
||||
03e48a48f400a51a182a1254cf22ff0c08706d76 bpf: Add tech preview taint for syscall
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/607f0e89af7ef5682f79f2eea0a99638a1bc0c4f
|
||||
607f0e89af7ef5682f79f2eea0a99638a1bc0c4f bpf: set unprivileged_bpf_disabled to 1 by default, add a boot parameter
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/31da227877eb734ddb484bc519aae85ce200802e
|
||||
31da227877eb734ddb484bc519aae85ce200802e add Red Hat-specific taint flags
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/7a2e2c83be0230667756cccb5bc3687419dfbb8b
|
||||
7a2e2c83be0230667756cccb5bc3687419dfbb8b kdump: fix a grammar issue in a kernel message
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/d345d54d33e7d496c9d845e4723550dd37cb3f88
|
||||
d345d54d33e7d496c9d845e4723550dd37cb3f88 tags.sh: Ignore redhat/rpm
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/5c67dc1eb0783a5c4ca4eb5c545ff6fe05facff0
|
||||
5c67dc1eb0783a5c4ca4eb5c545ff6fe05facff0 put RHEL info into generated headers
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/ce12884c009ec3bed11100c9d19f6d97628cf8ae
|
||||
ce12884c009ec3bed11100c9d19f6d97628cf8ae kdump: add support for crashkernel=auto
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/18fb1389afccdc5535977a10669b49a37829b55a
|
||||
18fb1389afccdc5535977a10669b49a37829b55a kdump: round up the total memory size to 128M for crashkernel reservation
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/5fb9821441cc0b77101ad9c0dfaa747957a4cce4
|
||||
5fb9821441cc0b77101ad9c0dfaa747957a4cce4 acpi: prefer booting with ACPI over DTS
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/0cf21a40db6fca5d89cf3d65808117c8c14e524e
|
||||
0cf21a40db6fca5d89cf3d65808117c8c14e524e aarch64: acpi scan: Fix regression related to X-Gene UARTs
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/de13e14cc2388478d9a2c68c5d90affd92098f11
|
||||
de13e14cc2388478d9a2c68c5d90affd92098f11 ACPI / irq: Workaround firmware issue on X-Gene based m400
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/71c098f4afa38a15a95495c14f71fb087ab27308
|
||||
71c098f4afa38a15a95495c14f71fb087ab27308 modules: add rhelversion MODULE_INFO tag
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/3247f9c838f4aa91aa5d08c152b385d61554d4b5
|
||||
3247f9c838f4aa91aa5d08c152b385d61554d4b5 ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/e80982feaa68226ff60d2f83dace2016c35270d3
|
||||
e80982feaa68226ff60d2f83dace2016c35270d3 Add Red Hat tainting
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/2987f9a606df106f5bdfa4113eb55356a21085a6
|
||||
2987f9a606df106f5bdfa4113eb55356a21085a6 Introduce CONFIG_RH_DISABLE_DEPRECATED
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/a99885a5e77af594dfdce586cc83e5911d8401ce
|
||||
a99885a5e77af594dfdce586cc83e5911d8401ce Pull the RHEL version defines out of the Makefile
|
||||
|
||||
https://gitlab.com/cki-project/kernel-ark/-/commit/cd3a5d30570279538623ea8a1255db0ee4b728f7
|
||||
cd3a5d30570279538623ea8a1255db0ee4b728f7 [initial commit] Add Red Hat variables in the top level makefile
|
||||
|
25
README.rst
25
README.rst
|
@ -1,25 +0,0 @@
|
|||
===================
|
||||
The Kernel dist-git
|
||||
===================
|
||||
|
||||
The kernel is maintained in a `source tree`_ rather than directly in dist-git.
|
||||
The specfile is maintained as a `template`_ in the source tree along with a set
|
||||
of build scripts to generate configurations, (S)RPMs, and to populate the
|
||||
dist-git repository.
|
||||
|
||||
The `documentation`_ for the source tree covers how to contribute and maintain
|
||||
the tree.
|
||||
|
||||
If you're looking for the downstream patch set it's available in the source
|
||||
tree with "git log master..ark-patches" or
|
||||
`online`_.
|
||||
|
||||
Each release in dist-git is tagged in the source repository so you can easily
|
||||
check out the source tree for a build. The tags are in the format
|
||||
name-version-release, but note release doesn't contain the dist tag since the
|
||||
source can be built in different build roots (Fedora, CentOS, etc.)
|
||||
|
||||
.. _source tree: https://gitlab.com/cki-project/kernel-ark.git
|
||||
.. _template: https://gitlab.com/cki-project/kernel-ark/-/blob/os-build/redhat/kernel.spec.template
|
||||
.. _documentation: https://gitlab.com/cki-project/kernel-ark/-/wikis/home
|
||||
.. _online: https://gitlab.com/cki-project/kernel-ark/-/commits/ark-patches
|
|
@ -0,0 +1,67 @@
|
|||
|
||||
Kernel package tips & tricks.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The kernel is one of the more complicated packages in the distro, and
|
||||
for the newcomer, some of the voodoo in the spec file can be somewhat scary.
|
||||
This file attempts to document some of the magic.
|
||||
|
||||
|
||||
Speeding up make prep
|
||||
---------------------
|
||||
The kernel is nearly 500MB of source code, and as such, 'make prep'
|
||||
takes a while. The spec file employs some trickery so that repeated
|
||||
invocations of make prep don't take as long. Ordinarily the %prep
|
||||
phase of a package will delete the tree it is about to untar/patch.
|
||||
The kernel %prep keeps around an unpatched version of the tree,
|
||||
and makes a symlink tree clone of that clean tree and than applies
|
||||
the patches listed in the spec to the symlink tree.
|
||||
This makes a huge difference if you're doing multiple make preps a day.
|
||||
As an added bonus, doing a diff between the clean tree and the symlink
|
||||
tree is slightly faster than it would be doing two proper copies of the tree.
|
||||
|
||||
|
||||
build logs.
|
||||
-----------
|
||||
There's a convenience helper script in scripts/grab-logs.sh
|
||||
that will grab the build logs from koji for the kernel version reported
|
||||
by make verrel
|
||||
|
||||
|
||||
config heirarchy.
|
||||
-----------------
|
||||
Instead of having to maintain a config file for every arch variant we build on,
|
||||
the kernel spec uses a nested system of configs. At the top level, is
|
||||
config-generic. Add options here that should be present in every possible
|
||||
config on all architectures.
|
||||
Beneath this are per-arch overrides. For example config-x86-generic add
|
||||
additional x86 specific options, and also _override_ any options that were
|
||||
set in config-generic.
|
||||
There exist two additional overrides, config-debug, and config-nodebug,
|
||||
which override -generic, and the per-arch overrides. It is documented
|
||||
further below.
|
||||
|
||||
debug options.
|
||||
--------------
|
||||
This is a little complicated, as the purpose & meaning of this changes
|
||||
depending on where we are in the release cycle.
|
||||
If we are building for a current stable release, 'make release' has
|
||||
typically been run already, which sets up the following..
|
||||
- Two builds occur, a 'kernel' and a 'kernel-debug' flavor.
|
||||
- kernel-debug will get various heavyweight debugging options like
|
||||
lockdep etc turned on.
|
||||
|
||||
If we are building for rawhide, 'make debug' has been run, which changes
|
||||
the status quo to:
|
||||
- We only build one kernel 'kernel'
|
||||
- The debug options from 'config-debug' are always turned on.
|
||||
This is done to increase coverage testing, as not many people actually
|
||||
run kernel-debug.
|
||||
|
||||
To add new debug options, add an option to _both_ config-debug and config-nodebug,
|
||||
and also new stanzas to the Makefile 'debug' and 'release' targets.
|
||||
|
||||
Sometimes debug options get added to config-generic, or per-arch overrides
|
||||
instead of config-[no]debug. In this instance, the options should have no
|
||||
discernable performance impact, otherwise they belong in the debug files.
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
# Put stuff likely to go upstream (in decreasing likelyhood) at the top.
|
||||
|
||||
* linux-2.6-compile-fixes.patch
|
||||
Empty
|
||||
|
||||
* linux-2.6-debug-taint-vm.patch
|
||||
TODO: Push upstream
|
||||
|
||||
* linux-2.6-acpi-video-dos.patch
|
||||
* linux-2.6-defaults-acpi-video.patch
|
||||
* linux-2.6-defaults-aspm.patch
|
||||
Fedora policy decisions
|
||||
Turn into CONFIG_ options and upstream ?
|
||||
|
||||
* linux-2.6-input-kill-stupid-messages.patch
|
||||
* linux-2.6-silence-acpi-blacklist.patch
|
||||
* linux-2.6-silence-fbcon-logo.patch
|
||||
* linux-2.6-silence-noise.patch
|
||||
Fedora local 'hush' patches. (Some will go upstream next time)
|
||||
|
||||
* linux-2.6-makefile-after_link.patch
|
||||
Rolandware that is used by the debuginfo generation.
|
||||
Possibly upstreamable ?
|
||||
|
||||
* linux-2.6-v4l-dvb-uvcvideo-update.patch
|
||||
Responsible: Hans.
|
||||
|
||||
* linux-2.6-serial-460800.patch
|
||||
Probably not upstreamable.
|
||||
http://marc.theaimsgroup.com/?l=linux-kernel&m=112687270832687&w=2
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=126403
|
||||
http://lkml.org/lkml/2006/8/2/208
|
||||
|
||||
* linux-2.6-crash-driver.patch
|
||||
Unlikely to go upstream.
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=492803
|
||||
|
||||
* linux-2.6-32bit-mmap-exec-randomization.patch
|
||||
One half of the remaining exec-shield diff.
|
||||
davej bugged Ingo again on Jun 17 2011 about upstreaming.
|
||||
|
||||
* linux-2.6-acpi-debug-infinite-loop.patch
|
||||
Responsible: mjg59
|
||||
|
||||
* linux-2.6-v4l-dvb-experimental.patch
|
||||
* linux-2.6-v4l-dvb-fixes.patch
|
||||
* linux-2.6-v4l-dvb-update.patch
|
||||
Empty.
|
||||
|
||||
* fix_xen_guest_on_old_EC2.patch
|
||||
Ugly for upstream. It's a hack to make old HV's work optimally.
|
||||
Eventually we can drop it, but probably not until fixed HV's
|
||||
are commonplace. (When?)
|
||||
Responsible: Justin.
|
||||
|
||||
* linux-2.6-i386-nx-emulation.patch
|
||||
The ugly segment hack part of exec-shield that Linus hates.
|
||||
Unlikely to ever go upstream.
|
||||
|
||||
* linux-2.6-e1000-ich9-montevina.patch
|
||||
Intel hates it. Davej has an SDV that needs it.
|
||||
Low maintenence, and worth hanging onto until it gets replaced
|
||||
with something that fails in a different way.
|
||||
|
||||
--------
|
||||
currently undocumented:
|
||||
|
||||
add-appleir-usb-driver.patch
|
||||
die-floppy-die.patch
|
||||
disable-i8042-check-on-apple-mac.patch
|
||||
dmar-disable-when-ricoh-multifunction.patch
|
||||
drm-intel-make-lvds-work.patch
|
||||
drm-intel-next.patch
|
||||
drm-nouveau-updates.patch
|
||||
hda_intel-prealloc-4mb-dmabuffer.patch
|
||||
linux-2.6.30-no-pcspkr-modalias.patch
|
||||
linux-2.6-input-kill-stupid-messages.patch
|
||||
linux-2.6-intel-iommu-igfx.patch
|
||||
linux-2.6-upstream-reverts.patch
|
||||
linux-3.0-fix-uts-release.patch
|
||||
neuter_intel_microcode_load.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;
|
|
@ -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"),
|
|
@ -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
149
check-kabi
149
check-kabi
|
@ -1,149 +0,0 @@
|
|||
#!/usr/bin/python3
|
||||
#
|
||||
# check-kabi - Red Hat kABI reference checking tool
|
||||
#
|
||||
# We use this script to check against reference Module.kabi files.
|
||||
#
|
||||
# Author: Jon Masters <jcm@redhat.com>
|
||||
# Copyright (C) 2007-2009 Red Hat, Inc.
|
||||
#
|
||||
# This software may be freely redistributed under the terms of the GNU
|
||||
# General Public License (GPL).
|
||||
|
||||
# Changelog:
|
||||
#
|
||||
# 2018/06/01 - Update for python3 by Petr Oros.
|
||||
# 2009/08/15 - Updated for use in RHEL6.
|
||||
# 2007/06/13 - Initial rewrite in python by Jon Masters.
|
||||
|
||||
__author__ = "Jon Masters <jcm@redhat.com>"
|
||||
__version__ = "2.0"
|
||||
__date__ = "2009/08/15"
|
||||
__copyright__ = "Copyright (C) 2007-2009 Red Hat, Inc"
|
||||
__license__ = "GPL"
|
||||
|
||||
import getopt
|
||||
import string
|
||||
import sys
|
||||
|
||||
true = 1
|
||||
false = 0
|
||||
|
||||
|
||||
def load_symvers(symvers, filename):
|
||||
"""Load a Module.symvers file."""
|
||||
|
||||
symvers_file = open(filename, "r")
|
||||
|
||||
while true:
|
||||
in_line = symvers_file.readline()
|
||||
if in_line == "":
|
||||
break
|
||||
if in_line == "\n":
|
||||
continue
|
||||
checksum, symbol, directory, type = in_line.split()
|
||||
|
||||
symvers[symbol] = in_line[0:-1]
|
||||
|
||||
|
||||
def load_kabi(kabi, filename):
|
||||
"""Load a Module.kabi file."""
|
||||
|
||||
kabi_file = open(filename, "r")
|
||||
|
||||
while true:
|
||||
in_line = kabi_file.readline()
|
||||
if in_line == "":
|
||||
break
|
||||
if in_line == "\n":
|
||||
continue
|
||||
checksum, symbol, directory, type = in_line.split()
|
||||
|
||||
kabi[symbol] = in_line[0:-1]
|
||||
|
||||
|
||||
def check_kabi(symvers, kabi):
|
||||
"""Check Module.kabi and Module.symvers files."""
|
||||
|
||||
fail = 0
|
||||
warn = 0
|
||||
changed_symbols = []
|
||||
moved_symbols = []
|
||||
|
||||
for symbol in kabi:
|
||||
abi_hash, abi_sym, abi_dir, abi_type = kabi[symbol].split()
|
||||
if symbol in symvers:
|
||||
sym_hash, sym_sym, sym_dir, sym_type = symvers[symbol].split()
|
||||
if abi_hash != sym_hash:
|
||||
fail = 1
|
||||
changed_symbols.append(symbol)
|
||||
|
||||
if abi_dir != sym_dir:
|
||||
warn = 1
|
||||
moved_symbols.append(symbol)
|
||||
else:
|
||||
fail = 1
|
||||
changed_symbols.append(symbol)
|
||||
|
||||
if fail:
|
||||
print("*** ERROR - ABI BREAKAGE WAS DETECTED ***")
|
||||
print("")
|
||||
print("The following symbols have been changed (this will cause an ABI breakage):")
|
||||
print("")
|
||||
for symbol in changed_symbols:
|
||||
print(symbol)
|
||||
print("")
|
||||
|
||||
if warn:
|
||||
print("*** WARNING - ABI SYMBOLS MOVED ***")
|
||||
print("")
|
||||
print("The following symbols moved (typically caused by moving a symbol from being")
|
||||
print("provided by the kernel vmlinux out to a loadable module):")
|
||||
print("")
|
||||
for symbol in moved_symbols:
|
||||
print(symbol)
|
||||
print("")
|
||||
|
||||
"""Halt the build, if we got errors and/or warnings. In either case,
|
||||
double-checkig is required to avoid introducing / concealing
|
||||
KABI inconsistencies."""
|
||||
if fail or warn:
|
||||
sys.exit(1)
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def usage():
|
||||
print("""
|
||||
check-kabi: check Module.kabi and Module.symvers files.
|
||||
|
||||
check-kabi [ -k Module.kabi ] [ -s Module.symvers ]
|
||||
|
||||
""")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
symvers_file = ""
|
||||
kabi_file = ""
|
||||
|
||||
opts, args = getopt.getopt(sys.argv[1:], 'hk:s:')
|
||||
|
||||
for o, v in opts:
|
||||
if o == "-s":
|
||||
symvers_file = v
|
||||
if o == "-h":
|
||||
usage()
|
||||
sys.exit(0)
|
||||
if o == "-k":
|
||||
kabi_file = v
|
||||
|
||||
if (symvers_file == "") or (kabi_file == ""):
|
||||
usage()
|
||||
sys.exit(1)
|
||||
|
||||
symvers = {}
|
||||
kabi = {}
|
||||
|
||||
load_symvers(symvers, symvers_file)
|
||||
load_kabi(kabi, kabi_file)
|
||||
check_kabi(symvers, kabi)
|
|
@ -0,0 +1,115 @@
|
|||
CONFIG_SND_VERBOSE_PRINTK=y
|
||||
CONFIG_SND_DEBUG=y
|
||||
CONFIG_SND_PCM_XRUN_DEBUG=y
|
||||
|
||||
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
||||
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_DEBUG_LOCK_ALLOC=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_DEBUG_VM=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
# CONFIG_PROVE_RCU_REPEATEDLY is not set
|
||||
CONFIG_DEBUG_PER_CPU_MAPS=y
|
||||
CONFIG_CPUMASK_OFFSTACK=y
|
||||
|
||||
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
|
||||
|
||||
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_FAIL_MMC_REQUEST=y
|
||||
|
||||
CONFIG_SLUB_DEBUG_ON=y
|
||||
|
||||
CONFIG_LOCK_STAT=y
|
||||
|
||||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
|
||||
CONFIG_ACPI_DEBUG=y
|
||||
# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
|
||||
|
||||
CONFIG_DEBUG_SG=y
|
||||
|
||||
# CONFIG_DEBUG_PAGEALLOC is not set
|
||||
|
||||
CONFIG_DEBUG_WRITECOUNT=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
# 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_ENABLE_DEFAULT=1
|
||||
|
||||
CONFIG_X86_PTDUMP=y
|
||||
|
||||
CONFIG_CAN_DEBUG_DEVICES=y
|
||||
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
|
||||
CONFIG_DEBUG_NOTIFIERS=y
|
||||
|
||||
CONFIG_DMA_API_DEBUG=y
|
||||
|
||||
CONFIG_MMIOTRACE=y
|
||||
|
||||
CONFIG_DEBUG_CREDENTIALS=y
|
||||
|
||||
CONFIG_EXT4_DEBUG=y
|
||||
|
||||
CONFIG_DEBUG_PERF_USE_VMALLOC=y
|
||||
|
||||
# off in both production debug and nodebug builds,
|
||||
# on in rawhide nodebug builds
|
||||
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
||||
|
||||
CONFIG_JBD2_DEBUG=y
|
||||
|
||||
CONFIG_DEBUG_BLK_CGROUP=y
|
||||
|
||||
CONFIG_DRBD_FAULT_INJECTION=y
|
||||
|
||||
CONFIG_ATH_DEBUG=y
|
||||
CONFIG_CARL9170_DEBUGFS=y
|
||||
CONFIG_IWLWIFI_DEVICE_TRACING=y
|
||||
|
||||
CONFIG_DEBUG_OBJECTS_WORK=y
|
||||
|
||||
CONFIG_DMADEVICES_DEBUG=y
|
||||
CONFIG_DMADEVICES_VDEBUG=y
|
||||
|
||||
CONFIG_PM_ADVANCED_DEBUG=y
|
||||
|
||||
CONFIG_CEPH_LIB_PRETTYDEBUG=y
|
||||
CONFIG_QUOTA_DEBUG=y
|
||||
|
||||
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_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
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,9 @@
|
|||
# CONFIG_HIGHMEM4G is not set
|
||||
CONFIG_HIGHMEM64G=y
|
||||
# CONFIG_OLPC_OPENFIRMWARE is not set
|
||||
|
||||
CONFIG_XEN_DEV_EVTCHN=m
|
||||
CONFIG_XEN_SYS_HYPERVISOR=y
|
||||
|
||||
# I2O only works on non-PAE 32-bit x86
|
||||
# CONFIG_I2O is not set
|
|
@ -0,0 +1,110 @@
|
|||
CONFIG_SND_VERBOSE_PRINTK=y
|
||||
CONFIG_SND_DEBUG=y
|
||||
CONFIG_SND_PCM_XRUN_DEBUG=y
|
||||
|
||||
# CONFIG_DEBUG_ATOMIC_SLEEP is not set
|
||||
|
||||
# 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 is not set
|
||||
# CONFIG_PROVE_RCU is not set
|
||||
# CONFIG_PROVE_RCU_REPEATEDLY is not set
|
||||
# CONFIG_DEBUG_PER_CPU_MAPS is not set
|
||||
CONFIG_CPUMASK_OFFSTACK=y
|
||||
|
||||
# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set
|
||||
|
||||
# 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 is not set
|
||||
|
||||
# CONFIG_LOCK_STAT is not set
|
||||
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
|
||||
# CONFIG_ACPI_DEBUG is not set
|
||||
# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
|
||||
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
|
||||
# CONFIG_DEBUG_PAGEALLOC is not set
|
||||
|
||||
# CONFIG_DEBUG_WRITECOUNT is not set
|
||||
# CONFIG_DEBUG_OBJECTS is not set
|
||||
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
|
||||
# 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 is not set
|
||||
|
||||
# CONFIG_CAN_DEBUG_DEVICES is not set
|
||||
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
|
||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
|
||||
# CONFIG_DMA_API_DEBUG is not set
|
||||
|
||||
# CONFIG_MMIOTRACE is not set
|
||||
|
||||
# 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 is not set
|
||||
|
||||
# CONFIG_EXT4_DEBUG is not set
|
||||
|
||||
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
|
||||
|
||||
# CONFIG_JBD2_DEBUG is not set
|
||||
|
||||
# CONFIG_DEBUG_BLK_CGROUP is not set
|
||||
|
||||
# CONFIG_DRBD_FAULT_INJECTION is not set
|
||||
|
||||
# CONFIG_ATH_DEBUG is not set
|
||||
# CONFIG_CARL9170_DEBUGFS is not set
|
||||
# CONFIG_IWLWIFI_DEVICE_TRACING is not set
|
||||
|
||||
# CONFIG_DEBUG_OBJECTS_WORK is not set
|
||||
|
||||
# CONFIG_DMADEVICES_DEBUG is not set
|
||||
# CONFIG_DMADEVICES_VDEBUG is not set
|
||||
|
||||
CONFIG_PM_ADVANCED_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 is not set
|
||||
# CONFIG_TEST_LIST_SORT is not set
|
||||
|
||||
# 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
|
|
@ -0,0 +1,371 @@
|
|||
# Most PowerPC kernels we build are SMP
|
||||
CONFIG_SMP=y
|
||||
CONFIG_IRQ_ALL_CPUS=y
|
||||
CONFIG_PPC=y
|
||||
CONFIG_WATCHDOG_RTAS=m
|
||||
CONFIG_DEBUGGER=y
|
||||
CONFIG_GENERIC_NVRAM=y
|
||||
CONFIG_ALTIVEC=y
|
||||
|
||||
CONFIG_TAU=y
|
||||
# CONFIG_TAU_INT is not set
|
||||
CONFIG_TAU_AVERAGE=y
|
||||
|
||||
CONFIG_SECCOMP=y
|
||||
|
||||
CONFIG_PM=y
|
||||
|
||||
CONFIG_PM_STD_PARTITION=""
|
||||
|
||||
CONFIG_SUSPEND=y
|
||||
CONFIG_HIBERNATION=y
|
||||
# CONFIG_RTC is not set
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
CONFIG_RTC_DRV_GENERIC=y
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
|
||||
CONFIG_ADB=y
|
||||
CONFIG_ADB_PMU=y
|
||||
CONFIG_WINDFARM=y
|
||||
CONFIG_WINDFARM_PM112=y
|
||||
CONFIG_I2C_POWERMAC=y
|
||||
CONFIG_APPLE_AIRPORT=m
|
||||
CONFIG_SERIAL_PMACZILOG=m
|
||||
# CONFIG_SERIAL_PMACZILOG_TTYS is not set
|
||||
CONFIG_AGP_UNINORTH=y
|
||||
CONFIG_FB_OF=y
|
||||
# CONFIG_FB_CONTROL is not set
|
||||
CONFIG_FB_IBM_GXT4500=y
|
||||
CONFIG_FB_MATROX=y
|
||||
# CONFIG_FB_VGA16 is not set
|
||||
CONFIG_FB_ATY128_BACKLIGHT=y
|
||||
CONFIG_FB_ATY_BACKLIGHT=y
|
||||
CONFIG_FB_RIVA_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
|
||||
CONFIG_SND_AOA=m
|
||||
CONFIG_SND_AOA_SOUNDBUS=m
|
||||
CONFIG_SND_AOA_FABRIC_LAYOUT=m
|
||||
CONFIG_SND_AOA_ONYX=m
|
||||
CONFIG_SND_AOA_TAS=m
|
||||
CONFIG_SND_AOA_TOONIE=m
|
||||
CONFIG_SND_AOA_SOUNDBUS_I2S=m
|
||||
|
||||
CONFIG_XMON=y
|
||||
# CONFIG_XMON_DEFAULT is not set
|
||||
CONFIG_XMON_DISASSEMBLY=y
|
||||
|
||||
CONFIG_BOOTX_TEXT=y
|
||||
CONFIG_MAC_EMUMOUSEBTN=y
|
||||
CONFIG_CAPI_EICON=y
|
||||
|
||||
CONFIG_NVRAM=y
|
||||
|
||||
# CONFIG_PCMCIA_M8XX is not set
|
||||
# CONFIG_SCSI_AHA1542 is not set
|
||||
# CONFIG_SCSI_IN2000 is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
# CONFIG_NI52 is not set
|
||||
# CONFIG_NI65 is not set
|
||||
# CONFIG_LANCE is not set
|
||||
# CONFIG_3C515 is not set
|
||||
# CONFIG_ELPLUS is not set
|
||||
|
||||
CONFIG_MEMORY_HOTPLUG=y
|
||||
|
||||
# Stuff which wants bus_to_virt() or virt_to_bus()
|
||||
# CONFIG_BLK_CPQ_DA is not set
|
||||
# CONFIG_VIDEO_STRADIS is not set
|
||||
# CONFIG_VIDEO_ZORAN is not set
|
||||
# CONFIG_ATM_HORIZON is not set
|
||||
# CONFIG_ATM_FIRESTREAM is not set
|
||||
# CONFIG_ATM_AMBASSADOR is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
|
||||
|
||||
# CONFIG_PPC_EARLY_DEBUG is not set
|
||||
|
||||
# CONFIG_PMAC_BACKLIGHT_LEGACY is not set
|
||||
CONFIG_LEDS_TRIGGER_TIMER=m
|
||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
|
||||
CONFIG_LEDS_TRIGGER_GPIO=m
|
||||
|
||||
# FIXME: Should depend on IA64/x86
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
|
||||
CONFIG_PPC_EFIKA=y
|
||||
CONFIG_PPC_MEDIA5200=y
|
||||
|
||||
# CONFIG_PPC_LITE5200 is not set
|
||||
CONFIG_PPC_BESTCOMM=y
|
||||
CONFIG_PMAC_RACKMETER=m
|
||||
CONFIG_USB_OHCI_HCD_PPC_SOC=y
|
||||
CONFIG_USB_OHCI_HCD_PCI=y
|
||||
CONFIG_USB_OHCI_HCD_PPC_OF=y
|
||||
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
|
||||
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
|
||||
|
||||
CONFIG_SERIAL_UARTLITE=m
|
||||
CONFIG_SERIAL_UARTLITE_CONSOLE=y
|
||||
|
||||
CONFIG_SENSORS_AMS=m
|
||||
CONFIG_SENSORS_AMS_PMU=y
|
||||
CONFIG_SENSORS_AMS_I2C=y
|
||||
|
||||
CONFIG_IDE=y
|
||||
CONFIG_BLK_DEV_IDE=y
|
||||
|
||||
#
|
||||
# Please see Documentation/ide.txt for help/info on IDE drives
|
||||
#
|
||||
# CONFIG_BLK_DEV_IDE_SATA is not set
|
||||
# CONFIG_BLK_DEV_IDECS is not set
|
||||
CONFIG_BLK_DEV_IDECD=m
|
||||
# CONFIG_BLK_DEV_IDETAPE is not set
|
||||
CONFIG_IDE_TASK_IOCTL=y
|
||||
#
|
||||
# IDE chipset support/bugfixes
|
||||
#
|
||||
# CONFIG_IDE_GENERIC is not set
|
||||
# CONFIG_BLK_DEV_IDEPNP is not set
|
||||
# CONFIG_BLK_DEV_IDEPCI is not set
|
||||
# CONFIG_BLK_DEV_AEC62XX is not set
|
||||
# CONFIG_BLK_DEV_ALI15X3 is not set
|
||||
# CONFIG_BLK_DEV_AMD74XX is not set
|
||||
# CONFIG_BLK_DEV_CMD64X is not set
|
||||
# CONFIG_BLK_DEV_TRIFLEX is not set
|
||||
# CONFIG_BLK_DEV_CY82C693 is not set
|
||||
# CONFIG_BLK_DEV_CS5520 is not set
|
||||
# CONFIG_BLK_DEV_CS5530 is not set
|
||||
# CONFIG_BLK_DEV_HPT366 is not set
|
||||
# CONFIG_BLK_DEV_JMICRON is not set
|
||||
# CONFIG_BLK_DEV_SC1200 is not set
|
||||
# CONFIG_BLK_DEV_PIIX is not set
|
||||
# CONFIG_BLK_DEV_IT821X is not set
|
||||
# CONFIG_BLK_DEV_NS87415 is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
|
||||
# CONFIG_BLK_DEV_SVWKS is not set
|
||||
# CONFIG_BLK_DEV_SIIMAGE is not set
|
||||
# CONFIG_BLK_DEV_SL82C105 is not set
|
||||
# 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=m
|
||||
CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
|
||||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
# CONFIG_BLK_DEV_HD is not set
|
||||
# CONFIG_USB_STORAGE_ISD200 is not set
|
||||
CONFIG_MTD_PHYSMAP_OF=m
|
||||
CONFIG_IDE_PROC_FS=y
|
||||
CONFIG_MACINTOSH_DRIVERS=y
|
||||
|
||||
CONFIG_PPC_PASEMI_MDIO=m
|
||||
CONFIG_SPU_FS_64K_LS=y
|
||||
CONFIG_PPC_PASEMI_CPUFREQ=y
|
||||
CONFIG_PMAC_APM_EMU=m
|
||||
CONFIG_HW_RANDOM_PASEMI=m
|
||||
|
||||
CONFIG_EDAC=y
|
||||
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 is not set
|
||||
# CONFIG_OPROFILE_CELL is not set
|
||||
|
||||
CONFIG_SUSPEND_FREEZER=y
|
||||
# CONFIG_IDEPCI_PCIBUS_ORDER is not set
|
||||
CONFIG_PATA_PLATFORM=m
|
||||
CONFIG_PATA_OF_PLATFORM=m
|
||||
CONFIG_USB_EHCI_HCD_PPC_OF=y
|
||||
|
||||
# CONFIG_MPC5121_ADS is not set
|
||||
# CONFIG_MPC5121_GENERIC is not set
|
||||
CONFIG_MTD_OF_PARTS=y
|
||||
# CONFIG_MTD_NAND_FSL_ELBC is not set
|
||||
CONFIG_THERMAL=y
|
||||
|
||||
# CONFIG_MEMORY_HOTREMOVE is not set
|
||||
|
||||
CONFIG_DMADEVICES=y
|
||||
# CONFIG_FSL_DMA is not set
|
||||
|
||||
CONFIG_SND_PPC=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
|
||||
|
||||
# CONFIG_MATH_EMULATION is not set
|
||||
# CONFIG_RAPIDIO is not set
|
||||
# CONFIG_FS_ENET is not set
|
||||
# CONFIG_UCC_GETH is not set
|
||||
# CONFIG_KEYBOARD_MATRIX is not set
|
||||
# CONFIG_SERIAL_CPM is not set
|
||||
# CONFIG_SERIAL_QE is not set
|
||||
# CONFIG_I2C_CPM is not set
|
||||
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
|
||||
# CONFIG_SERIO_XILINX_XPS_PS2 is not set
|
||||
|
||||
# CONFIG_PPC_SMLPAR is not set
|
||||
|
||||
# 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 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 is not set
|
||||
|
||||
# CONFIG_GPIO_XILINX is not set
|
||||
|
||||
CONFIG_PMIC_DA903X=y
|
||||
CONFIG_BACKLIGHT_DA903X=m
|
||||
CONFIG_LEDS_DA903X=m
|
||||
|
||||
CONFIG_MSI_BITMAP_SELFTEST=y
|
||||
|
||||
CONFIG_RELOCATABLE=y
|
||||
|
||||
# CONFIG_HVC_UDBG is not set
|
||||
CONFIG_PRINT_STACK_DEPTH=64
|
||||
|
||||
CONFIG_BATTERY_DA9030=m
|
||||
# CONFIG_TWL4030_CORE is not set
|
||||
|
||||
CONFIG_BLK_DEV_IT8172=m
|
||||
CONFIG_TOUCHSCREEN_DA9034=m
|
||||
|
||||
CONFIG_SIMPLE_GPIO=y
|
||||
|
||||
# CONFIG_FSL_PQ_MDIO is not set
|
||||
|
||||
# CONFIG_PS3_VRAM is not set
|
||||
CONFIG_MDIO_GPIO=m
|
||||
# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
|
||||
# CONFIG_DEBUG_GPIO is not set
|
||||
CONFIG_GPIO_PCA953X=m
|
||||
CONFIG_GPIO_PCF857X=m
|
||||
|
||||
# CONFIG_USB_FHCI_HCD is not set
|
||||
# CONFIG_FHCI_DEBUG is not set
|
||||
|
||||
# CONFIG_AMIGAONE is not set
|
||||
|
||||
CONFIG_PPC_OF_BOOT_TRAMPOLINE=y
|
||||
|
||||
CONFIG_DTL=y
|
||||
|
||||
CONFIG_MMC_SDHCI_OF=m
|
||||
|
||||
# CONFIG_CONSISTENT_SIZE_BOOL is not set
|
||||
|
||||
CONFIG_CAN_SJA1000_OF_PLATFORM=m
|
||||
|
||||
CONFIG_PPC_EMULATED_STATS=y
|
||||
|
||||
CONFIG_SWIOTLB=y
|
||||
|
||||
# CONFIG_RDS is not set
|
||||
|
||||
CONFIG_PPC_DISABLE_WERROR=y
|
||||
|
||||
# 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 is not set
|
||||
|
||||
CONFIG_NR_IRQS=512
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
|
||||
# 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 is not set
|
||||
|
||||
CONFIG_KVM_GUEST=y
|
||||
|
||||
CONFIG_I2C_MPC=m
|
||||
|
||||
# CONFIG_IMA is not set
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
CONFIG_RFKILL_GPIO=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
|
|
@ -0,0 +1,185 @@
|
|||
# CONFIG_SMP is not set
|
||||
CONFIG_PPC32=y
|
||||
# CONFIG_PPC64 is not set
|
||||
# CONFIG_RTAS_PROC is not set
|
||||
# CONFIG_PCMCIA_M8XX is not set
|
||||
# CONFIG_HOTPLUG_PCI is not set
|
||||
CONFIG_CPU_FREQ_PMAC=y
|
||||
CONFIG_PPC_CHRP=y
|
||||
CONFIG_PPC_PMAC=y
|
||||
# CONFIG_PPC_MPC52xx is not set
|
||||
CONFIG_PPC_PREP=y
|
||||
|
||||
# CONFIG_PPC_MPC5200_SIMPLE is not set
|
||||
# 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 is not set
|
||||
|
||||
CONFIG_PMAC_APM_EMU=y
|
||||
CONFIG_PMAC_BACKLIGHT=y
|
||||
|
||||
CONFIG_HIGHMEM=y
|
||||
# CONFIG_HIGHMEM_START_BOOL is not set
|
||||
# CONFIG_LOWMEM_SIZE_BOOL is not set
|
||||
# CONFIG_TASK_SIZE_BOOL is not set
|
||||
# CONFIG_KERNEL_START_BOOL is not set
|
||||
# CONFIG_PPC601_SYNC_FIX is not set
|
||||
CONFIG_ADVANCED_OPTIONS=y
|
||||
CONFIG_SCSI_MESH=m
|
||||
CONFIG_SCSI_MESH_SYNC_RATE=5
|
||||
CONFIG_SCSI_MESH_RESET_DELAY_MS=4000
|
||||
|
||||
CONFIG_SCSI_MAC53C94=m
|
||||
CONFIG_ADB_CUDA=y
|
||||
CONFIG_ADB_MACIO=y
|
||||
CONFIG_INPUT_ADBHID=y
|
||||
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
|
||||
CONFIG_MV643XX_ETH=m
|
||||
CONFIG_I2C_HYDRA=m
|
||||
CONFIG_I2C_MPC=m
|
||||
CONFIG_THERM_WINDTUNNEL=m
|
||||
CONFIG_THERM_ADT746X=m
|
||||
# CONFIG_ANSLCD is not set
|
||||
|
||||
CONFIG_FB_PLATINUM=y
|
||||
CONFIG_FB_VALKYRIE=y
|
||||
CONFIG_FB_CT65550=y
|
||||
# CONFIG_BDI_SWITCH is not set
|
||||
|
||||
CONFIG_MAC_FLOPPY=m
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
|
||||
CONFIG_FB_ATY128=y
|
||||
CONFIG_FB_ATY=y
|
||||
CONFIG_FB_MATROX=y
|
||||
# CONFIG_KEXEC is not set
|
||||
|
||||
# CONFIG_HVC_RTAS is not set
|
||||
|
||||
# CONFIG_UDBG_RTAS_CONSOLE is not set
|
||||
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 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 is not set
|
||||
# CONFIG_MPC5200_WDT is not set
|
||||
CONFIG_8xxx_WDT=m
|
||||
CONFIG_GEF_WDT=m
|
||||
|
||||
# CONFIG_PPC_MPC5200_BUGFIX is not set
|
||||
# CONFIG_NET_VENDOR_FREESCALE is not set
|
||||
#CHECK: This may later become a tristate.
|
||||
CONFIG_MDIO_GPIO=m
|
||||
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
|
||||
# CONFIG_EMBEDDED6xx is not set
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
|
||||
# CONFIG_BLK_DEV_PLATFORM is not set
|
||||
# CONFIG_BLK_DEV_4DRIVES is not set
|
||||
# CONFIG_BLK_DEV_ALI14XX is not set
|
||||
# CONFIG_BLK_DEV_DTC2278 is not set
|
||||
# CONFIG_BLK_DEV_HT6560B is not set
|
||||
# CONFIG_BLK_DEV_QD65XX is not set
|
||||
# CONFIG_BLK_DEV_UMC8672 is not set
|
||||
|
||||
# CONFIG_VIRQ_DEBUG is not set
|
||||
|
||||
CONFIG_PPC_BESTCOMM_ATA=m
|
||||
CONFIG_PPC_BESTCOMM_FEC=m
|
||||
CONFIG_PPC_BESTCOMM_GEN_BD=m
|
||||
|
||||
CONFIG_FORCE_MAX_ZONEORDER=11
|
||||
# CONFIG_PAGE_OFFSET_BOOL is not set
|
||||
# CONFIG_FB_FSL_DIU is not set
|
||||
CONFIG_IRQSTACKS=y
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
|
||||
# CONFIG_DEBUG_GPIO is not set
|
||||
# CONFIG_GPIO_PCA953X is not set
|
||||
# CONFIG_GPIO_PCF857X is not set
|
||||
# CONFIG_HTC_EGPIO is not set
|
||||
|
||||
# CONFIG_TIFM_CORE is not set
|
||||
|
||||
# CONFIG_BLK_CPQ_CISS_DA is not set
|
||||
# CONFIG_CISS_SCSI_TAPE is not set
|
||||
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
|
||||
# CONFIG_SND_INTEL8X0 is not set
|
||||
# CONFIG_SND_INTEL8X0M is not set
|
||||
|
||||
# CONFIG_MEMSTICK is not set
|
||||
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
|
||||
# PPC gets sad with debug alloc (bz 448598)
|
||||
# CONFIG_DEBUG_PAGEALLOC is not set
|
||||
|
||||
CONFIG_SND_ISA=y
|
||||
CONFIG_CRYPTO_DEV_TALITOS=m
|
||||
|
||||
# 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
|
||||
|
||||
# busted in 2.6.27
|
||||
# drivers/mtd/maps/sbc8240.c: In function 'init_sbc8240_mtd':
|
||||
# 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_RCU_FANOUT=32
|
||||
|
||||
CONFIG_PERF_COUNTERS=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
CONFIG_EVENT_PROFILE=y
|
||||
|
||||
CONFIG_KVM_BOOK3S_32=m
|
||||
|
||||
# CONFIG_SCSI_QLA_ISCSI is not set
|
||||
|
||||
CONFIG_BATTERY_PMU=m
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
CONFIG_SMP=y
|
||||
# CONFIG_HOTPLUG_CPU is not set
|
||||
CONFIG_NR_CPUS=4
|
||||
# CONFIG_BATTERY_PMU is not set
|
|
@ -0,0 +1,170 @@
|
|||
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 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_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 is not set
|
||||
# CONFIG_PPC_CELLEB is not set
|
||||
# CONFIG_PPC_CELL_QPACE is not set
|
||||
CONFIG_PMAC_RACKMETER=m
|
||||
CONFIG_IBMEBUS=y
|
||||
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
|
||||
CONFIG_SCSI_IBMVSCSI=m
|
||||
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
||||
CONFIG_HOTPLUG_PCI_SHPC=m
|
||||
CONFIG_HOTPLUG_PCI_RPA=m
|
||||
CONFIG_HOTPLUG_PCI_RPA_DLPAR=y
|
||||
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_HVC_RTAS=y
|
||||
CONFIG_HVC_ISERIES=y
|
||||
CONFIG_HVC_OPAL=y
|
||||
|
||||
# iSeries device drivers
|
||||
#
|
||||
CONFIG_ISERIES_VETH=m
|
||||
CONFIG_VIODASD=m
|
||||
CONFIG_VIOCD=m
|
||||
CONFIG_VIOTAPE=m
|
||||
|
||||
CONFIG_PASEMI_MAC=m
|
||||
CONFIG_SERIAL_OF_PLATFORM=m
|
||||
|
||||
CONFIG_SERIAL_TXX9=y
|
||||
CONFIG_SERIAL_TXX9_NR_UARTS=6
|
||||
CONFIG_SERIAL_TXX9_CONSOLE=y
|
||||
|
||||
CONFIG_HVC_BEAT=y
|
||||
|
||||
CONFIG_PPC_PMI=m
|
||||
|
||||
CONFIG_PATA_SCC=m
|
||||
|
||||
CONFIG_APM_EMULATION=m
|
||||
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_NR_CPUS=1024
|
||||
# CONFIG_FB_PLATINUM is not set
|
||||
# CONFIG_FB_VALKYRIE is not set
|
||||
# CONFIG_FB_CT65550 is not set
|
||||
# CONFIG_FB_VGA16 is not set
|
||||
# CONFIG_FB_ATY128 is not set
|
||||
# CONFIG_FB_ATY is not set
|
||||
|
||||
# CONFIG_POWER4_ONLY is not set
|
||||
|
||||
CONFIG_RTAS_PROC=y
|
||||
CONFIG_IOMMU_VMERGE=y
|
||||
CONFIG_NUMA=y
|
||||
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
|
||||
# CONFIG_INPUT_PCSPKR is not set
|
||||
|
||||
CONFIG_EHEA=m
|
||||
CONFIG_INFINIBAND_EHCA=m
|
||||
|
||||
# CONFIG_HCALL_STATS is not set
|
||||
|
||||
CONFIG_XMON_DISASSEMBLY=y
|
||||
|
||||
CONFIG_SCSI_IBMVSCSIS=m
|
||||
|
||||
CONFIG_SECCOMP=y
|
||||
|
||||
# CONFIG_TUNE_CELL is not set
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
# CONFIG_BLK_DEV_PLATFORM is not set
|
||||
|
||||
# CONFIG_VIRQ_DEBUG is not set
|
||||
|
||||
CONFIG_EDAC_CPC925=m
|
||||
CONFIG_FRAME_WARN=2048
|
||||
|
||||
CONFIG_PHYP_DUMP=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=9
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
|
||||
CONFIG_VSX=y
|
||||
|
||||
CONFIG_SCSI_IBMVFC=m
|
||||
# CONFIG_SCSI_IBMVFC_TRACE is not set
|
||||
CONFIG_IBM_BSR=m
|
||||
|
||||
CONFIG_CRASH_DUMP=y
|
||||
CONFIG_RELOCATABLE=y
|
||||
|
||||
CONFIG_RCU_FANOUT=64
|
||||
|
||||
CONFIG_PERF_COUNTERS=y
|
||||
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
|
||||
#-- active memory sharing
|
||||
CONFIG_PPC_SMLPAR=y
|
||||
CONFIG_CMM=y
|
||||
#-- DLPAR memory remove
|
||||
CONFIG_SPARSEMEM_VMEMMAP=y
|
||||
|
||||
# CONFIG_COMPACTION is not set
|
||||
|
||||
CONFIG_PSERIES_ENERGY=m
|
||||
|
||||
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
|
|
@ -0,0 +1,203 @@
|
|||
# CONFIG_ISA is not set
|
||||
# CONFIG_ISAPNP is not set
|
||||
# CONFIG_I2C_PCA_ISA is not set
|
||||
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_INIA100 is not set
|
||||
# CONFIG_SCSI_ADVANSYS is not set
|
||||
# CONFIG_SCSI_AHA1542 is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_IN2000 is not set
|
||||
# CONFIG_SCSI_QLOGIC_FAS is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_DEV_APPLETALK is not set
|
||||
# CONFIG_LTPC is not set
|
||||
# CONFIG_COPS is not set
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_IPDDP is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_PLIP is not set
|
||||
|
||||
# CONFIG_PCMCIA_AHA152X is not set
|
||||
# CONFIG_PCMCIA_NINJA_SCSI is not set
|
||||
# CONFIG_PCMCIA_QLOGIC is not set
|
||||
# CONFIG_PCMCIA_SYM53C500 is not set
|
||||
|
||||
# CONFIG_EL2 is not set
|
||||
# CONFIG_ELPLUS is not set
|
||||
# CONFIG_WD80x3 is not set
|
||||
# CONFIG_I82092 is not set
|
||||
# CONFIG_YELLOWFIN is not set
|
||||
# CONFIG_SUNDANCE is not set
|
||||
# CONFIG_ULTRA is not set
|
||||
# CONFIG_SKFP is not set
|
||||
# CONFIG_DE600 is not set
|
||||
# CONFIG_DE620 is not set
|
||||
# CONFIG_CS89x0 is not set
|
||||
# CONFIG_AC3200 is not set
|
||||
# CONFIG_NI52 is not set
|
||||
# CONFIG_NI65 is not set
|
||||
# CONFIG_LANCE is not set
|
||||
# CONFIG_EL16 is not set
|
||||
# CONFIG_EL3 is not set
|
||||
# CONFIG_3C515 is not set
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_HP100 is not set
|
||||
# CONFIG_EQUALIZER is not set
|
||||
# CONFIG_NET_SB1000 is not set
|
||||
# CONFIG_DEPCA is not set
|
||||
# CONFIG_ATP is not set
|
||||
|
||||
# CONFIG_TR is not set
|
||||
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
# CONFIG_SND_AD1816A is not set
|
||||
# CONFIG_SND_AD1848 is not set
|
||||
# CONFIG_SND_CS4231 is not set
|
||||
# CONFIG_SND_CS4236 is not set
|
||||
# CONFIG_SND_ES968 is not set
|
||||
# CONFIG_SND_ES1688 is not set
|
||||
# CONFIG_SND_ES18XX is not set
|
||||
# CONFIG_SND_GUSCLASSIC is not set
|
||||
# CONFIG_SND_GUSEXTREME is not set
|
||||
# CONFIG_SND_GUSMAX is not set
|
||||
# CONFIG_SND_INTERWAVE is not set
|
||||
# CONFIG_SND_INTERWAVE_STB is not set
|
||||
# CONFIG_SND_OPTI92X_AD1848 is not set
|
||||
# CONFIG_SND_OPTI92X_CS4231 is not set
|
||||
# CONFIG_SND_OPTI93X is not set
|
||||
# CONFIG_SND_MIRO is not set
|
||||
# CONFIG_SND_SB8 is not set
|
||||
# CONFIG_SND_SB16 is not set
|
||||
# CONFIG_SND_SBAWE is not set
|
||||
# CONFIG_SND_SB16_CSP is not set
|
||||
# CONFIG_SND_WAVEFRONT is not set
|
||||
# CONFIG_SND_ALS100 is not set
|
||||
# CONFIG_SND_AZT2320 is not set
|
||||
# CONFIG_SND_CMI8330 is not set
|
||||
# CONFIG_SND_DT019X is not set
|
||||
# CONFIG_SND_OPL3SA2 is not set
|
||||
# CONFIG_SND_SGALAXY is not set
|
||||
# CONFIG_SND_SSCAPE is not set
|
||||
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
# CONFIG_BINFMT_AOUT is not set
|
||||
|
||||
# CONFIG_DRM_TDFX is not set
|
||||
# CONFIG_DRM_SIS is not set
|
||||
|
||||
# CONFIG_BLK_DEV_UMEM is not set
|
||||
# CONFIG_BLK_DEV_NBD is not set
|
||||
# CONFIG_BLK_DEV_DAC960 is not set
|
||||
|
||||
# CONFIG_I2O is not set
|
||||
|
||||
# CONFIG_MWAVE is not set
|
||||
|
||||
# CONFIG_ROCKETPORT is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
||||
# CONFIG_JOYSTICK_ANALOG is not set
|
||||
# CONFIG_JOYSTICK_A3D is not set
|
||||
# CONFIG_JOYSTICK_ADI is not set
|
||||
# CONFIG_JOYSTICK_COBRA is not set
|
||||
# CONFIG_JOYSTICK_GF2K is not set
|
||||
# CONFIG_JOYSTICK_GRIP is not set
|
||||
# CONFIG_JOYSTICK_GRIP_MP is not set
|
||||
# CONFIG_JOYSTICK_GUILLEMOT is not set
|
||||
# CONFIG_JOYSTICK_INTERACT is not set
|
||||
# CONFIG_JOYSTICK_SIDEWINDER is not set
|
||||
# CONFIG_JOYSTICK_TMDC is not set
|
||||
# CONFIG_JOYSTICK_IFORCE is not set
|
||||
# CONFIG_JOYSTICK_WARRIOR is not set
|
||||
# CONFIG_JOYSTICK_MAGELLAN is not set
|
||||
# CONFIG_JOYSTICK_SPACEORB is not set
|
||||
# CONFIG_JOYSTICK_SPACEBALL is not set
|
||||
# CONFIG_JOYSTICK_STINGER is not set
|
||||
# CONFIG_JOYSTICK_DB9 is not set
|
||||
# CONFIG_JOYSTICK_GAMECON is not set
|
||||
# CONFIG_JOYSTICK_TURBOGRAFX is not set
|
||||
|
||||
# CONFIG_RADIO_CADET is not set
|
||||
# CONFIG_RADIO_RTRACK is not set
|
||||
# CONFIG_RADIO_RTRACK2 is not set
|
||||
# CONFIG_RADIO_AZTECH is not set
|
||||
# CONFIG_RADIO_GEMTEK is not set
|
||||
# CONFIG_RADIO_GEMTEK_PCI is not set
|
||||
# CONFIG_RADIO_MAXIRADIO is not set
|
||||
# CONFIG_RADIO_MAESTRO is not set
|
||||
# CONFIG_RADIO_MIROPCM20 is not set
|
||||
# CONFIG_RADIO_SF16FMI is not set
|
||||
# CONFIG_RADIO_SF16FMR2 is not set
|
||||
# CONFIG_RADIO_TERRATEC is not set
|
||||
# CONFIG_RADIO_TRUST is not set
|
||||
# CONFIG_RADIO_TYPHOON is not set
|
||||
# CONFIG_RADIO_ZOLTRIX is not set
|
||||
|
||||
|
||||
# CONFIG_VIDEO_PMS is not set
|
||||
# CONFIG_VIDEO_BWQCAM is not set
|
||||
# CONFIG_VIDEO_CQCAM is not set
|
||||
# CONFIG_VIDEO_W9966 is not set
|
||||
# CONFIG_VIDEO_CPIA is not set
|
||||
# CONFIG_VIDEO_CPIA_PP is not set
|
||||
# CONFIG_VIDEO_CPIA_USB is not set
|
||||
# CONFIG_VIDEO_SAA5249 is not set
|
||||
# CONFIG_VIDEO_STRADIS is not set
|
||||
# CONFIG_VIDEO_ZORAN is not set
|
||||
# CONFIG_VIDEO_ZORAN_BUZ is not set
|
||||
# CONFIG_VIDEO_ZORAN_DC10 is not set
|
||||
# CONFIG_VIDEO_ZORAN_DC30 is not set
|
||||
# CONFIG_VIDEO_ZORAN_LML33 is not set
|
||||
# CONFIG_VIDEO_ZORAN_LML33R10 is not set
|
||||
# CONFIG_VIDEO_MEYE is not set
|
||||
# CONFIG_VIDEO_SAA7134 is not set
|
||||
# CONFIG_VIDEO_MXB is not set
|
||||
# CONFIG_VIDEO_HEXIUM_ORION is not set
|
||||
# CONFIG_VIDEO_HEXIUM_GEMINI is not set
|
||||
# CONFIG_VIDEO_CX88 is not set
|
||||
# CONFIG_VIDEO_SAA5246A is not set
|
||||
|
||||
# CONFIG_INFTL is not set
|
||||
# CONFIG_MTD_DOC2000 is not set
|
||||
# CONFIG_MTD_DOC2001PLUS is not set
|
||||
# CONFIG_MTD_PMC551 is not set
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
# CONFIG_MTD_PCI is not set
|
||||
|
||||
# CONFIG_FB_MATROX is not set
|
||||
# CONFIG_FB_3DFX is not set
|
||||
# CONFIG_FB_HGA is not set
|
||||
# CONFIG_FB_ATY is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_ATY128 is not set
|
||||
# CONFIG_FB_RADEON is not set
|
||||
# CONFIG_FB_NEOMAGIC is not set
|
||||
# CONFIG_FB_ASILIANT is not set
|
||||
# CONFIG_FB_HGA_ACCEL is not set
|
||||
# CONFIG_FB_3DFX_ACCEL is not set
|
||||
|
||||
# CONFIG_JFS_FS is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_AFFS_FS is not set
|
||||
# CONFIG_BEFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_HFS_FS is not set
|
||||
# CONFIG_HFSPLUS_FS is not set
|
||||
|
|
@ -0,0 +1,243 @@
|
|||
CONFIG_64BIT=y
|
||||
# CONFIG_MARCH_G5 is not set
|
||||
# CONFIG_MARCH_Z900 is not set
|
||||
CONFIG_MARCH_Z9_109=y
|
||||
# CONFIG_MARCH_Z990 is not set
|
||||
|
||||
CONFIG_NR_CPUS=64
|
||||
CONFIG_COMPAT=y
|
||||
|
||||
# See bug 496596
|
||||
CONFIG_HZ_100=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
# See bug 496605
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
|
||||
CONFIG_MMU=y
|
||||
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_NO_IDLE_HZ=y
|
||||
|
||||
CONFIG_SMP=y
|
||||
|
||||
#
|
||||
# I/O subsystem configuration
|
||||
#
|
||||
CONFIG_QDIO=m
|
||||
|
||||
#
|
||||
# Misc
|
||||
#
|
||||
CONFIG_IPL=y
|
||||
# CONFIG_IPL_TAPE is not set
|
||||
CONFIG_IPL_VM=y
|
||||
# CONFIG_PROCESS_DEBUG is not set
|
||||
CONFIG_PFAULT=y
|
||||
CONFIG_SHARED_KERNEL=y
|
||||
CONFIG_CMM=m
|
||||
CONFIG_CMM_PROC=y
|
||||
# CONFIG_NETIUCV is not set
|
||||
CONFIG_SMSGIUCV=m
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
CONFIG_ZFCP=m
|
||||
CONFIG_ZFCPDUMP=y
|
||||
CONFIG_CCW=y
|
||||
|
||||
#
|
||||
# S/390 block device drivers
|
||||
#
|
||||
CONFIG_DCSSBLK=m
|
||||
CONFIG_BLK_DEV_XPRAM=m
|
||||
CONFIG_DASD=m
|
||||
CONFIG_DASD_PROFILE=y
|
||||
CONFIG_DASD_ECKD=m
|
||||
CONFIG_DASD_FBA=m
|
||||
CONFIG_DASD_DIAG=m
|
||||
CONFIG_DASD_EER=y
|
||||
|
||||
#
|
||||
# S/390 character device drivers
|
||||
#
|
||||
CONFIG_TN3270=y
|
||||
CONFIG_TN3270_CONSOLE=y
|
||||
CONFIG_TN3215=y
|
||||
CONFIG_TN3215_CONSOLE=y
|
||||
CONFIG_CCW_CONSOLE=y
|
||||
CONFIG_SCLP_TTY=y
|
||||
CONFIG_SCLP_CONSOLE=y
|
||||
CONFIG_SCLP_VT220_TTY=y
|
||||
CONFIG_SCLP_VT220_CONSOLE=y
|
||||
CONFIG_SCLP_CPI=m
|
||||
CONFIG_SCLP_ASYNC=m
|
||||
CONFIG_S390_TAPE=m
|
||||
CONFIG_S390_TAPE_3590=m
|
||||
|
||||
CONFIG_APPLDATA_BASE=y
|
||||
CONFIG_APPLDATA_MEM=m
|
||||
CONFIG_APPLDATA_OS=m
|
||||
CONFIG_APPLDATA_NET_SUM=m
|
||||
CONFIG_TN3270_TTY=y
|
||||
CONFIG_TN3270_FS=m
|
||||
|
||||
|
||||
#
|
||||
# S/390 tape interface support
|
||||
#
|
||||
CONFIG_S390_TAPE_BLOCK=y
|
||||
|
||||
#
|
||||
# S/390 tape hardware support
|
||||
#
|
||||
CONFIG_S390_TAPE_34XX=m
|
||||
|
||||
# CONFIG_PPP is not set
|
||||
# CONFIG_SLIP is not set
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
#
|
||||
CONFIG_TR=y
|
||||
CONFIG_NETCONSOLE=m
|
||||
|
||||
#
|
||||
# Wan interfaces
|
||||
#
|
||||
# CONFIG_WAN is not set
|
||||
|
||||
#
|
||||
# S/390 network device drivers
|
||||
#
|
||||
CONFIG_LCS=m
|
||||
CONFIG_CTC=m
|
||||
CONFIG_IUCV=m
|
||||
CONFIG_QETH=m
|
||||
CONFIG_QETH_IPV6=y
|
||||
CONFIG_CCWGROUP=m
|
||||
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_WIRELESS_EXT is not set
|
||||
# CONFIG_MAC80211 is not set
|
||||
# CONFIG_B44 is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
#
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
# CONFIG_OSF_PARTITION is not set
|
||||
CONFIG_IBM_PARTITION=y
|
||||
# CONFIG_MAC_PARTITION is not set
|
||||
CONFIG_MSDOS_PARTITION=y
|
||||
# CONFIG_SGI_PARTITION is not set
|
||||
# CONFIG_SUN_PARTITION is not set
|
||||
|
||||
|
||||
#
|
||||
# S390 crypto hw
|
||||
#
|
||||
CONFIG_CRYPTO_SHA1_S390=m
|
||||
CONFIG_CRYPTO_SHA256_S390=m
|
||||
CONFIG_CRYPTO_DES_S390=m
|
||||
CONFIG_CRYPTO_AES_S390=m
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
|
||||
#
|
||||
# S390 specific stack options; needs gcc 3.5 so off for now
|
||||
#
|
||||
CONFIG_PACK_STACK=y
|
||||
CONFIG_CHECK_STACK=y
|
||||
# CONFIG_WARN_STACK is not set
|
||||
# CONFIG_SMALL_STACK is not set
|
||||
|
||||
CONFIG_ZVM_WATCHDOG=m
|
||||
CONFIG_VMLOGRDR=m
|
||||
CONFIG_MONREADER=m
|
||||
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
|
||||
# CONFIG_CLAW is not set
|
||||
|
||||
# CONFIG_ATMEL is not set
|
||||
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
# CONFIG_MII is not set
|
||||
|
||||
|
||||
CONFIG_STACK_GUARD=256
|
||||
CONFIG_CMM_IUCV=y
|
||||
|
||||
# CONFIG_DETECT_SOFTLOCKUP is not set
|
||||
|
||||
CONFIG_S390_HYPFS_FS=y
|
||||
|
||||
CONFIG_MONWRITER=m
|
||||
CONFIG_ZCRYPT=m
|
||||
CONFIG_ZCRYPT_MONOLITHIC=y
|
||||
|
||||
CONFIG_S390_EXEC_PROTECT=y
|
||||
CONFIG_AFIUCV=m
|
||||
CONFIG_S390_PRNG=m
|
||||
|
||||
CONFIG_S390_VMUR=m
|
||||
|
||||
# CONFIG_THERMAL is not set
|
||||
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_CTCM=m
|
||||
CONFIG_QETH_L2=m
|
||||
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
|
||||
|
||||
|
||||
CONFIG_MEMORY_HOTPLUG=y
|
||||
CONFIG_MEMORY_HOTREMOVE=y
|
||||
CONFIG_CHSC_SCH=m
|
||||
|
||||
# drivers/isdn/hardware/mISDN/hfcmulti.c:5255:2: error: #error "not running on big endian machines now"
|
||||
# CONFIG_MISDN_HFCMULTI is not set
|
||||
|
||||
CONFIG_HVC_IUCV=y
|
||||
|
||||
CONFIG_RCU_FANOUT=64
|
||||
CONFIG_RCU_FANOUT_LEAF=8
|
||||
|
||||
CONFIG_SECCOMP=y
|
||||
|
||||
CONFIG_PM=y
|
||||
CONFIG_HIBERNATION=y
|
||||
CONFIG_PM_STD_PARTITION="/dev/jokes"
|
||||
|
||||
CONFIG_PERF_COUNTERS=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
CONFIG_EVENT_PROFILE=y
|
||||
|
||||
CONFIG_SMSGIUCV_EVENT=m
|
||||
|
||||
# CONFIG_PREEMPT_TRACER is not set
|
||||
|
||||
CONFIG_VMCP=y
|
||||
|
||||
CONFIG_ZFCP_DIF=y
|
||||
|
||||
CONFIG_SCHED_MC=y
|
||||
CONFIG_SCHED_BOOK=y
|
||||
|
||||
CONFIG_STRICT_DEVMEM=y
|
||||
|
||||
# CONFIG_WARN_DYNAMIC_STACK is not set
|
||||
|
||||
CONFIG_CRYPTO_GHASH_S390=m
|
||||
CONFIG_NET_CORE=y
|
||||
CONFIG_ETHERNET=y
|
|
@ -0,0 +1,202 @@
|
|||
CONFIG_SMP=y
|
||||
CONFIG_SPARC=y
|
||||
CONFIG_SPARC64=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_HZ_100=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
CONFIG_HZ=100
|
||||
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
|
||||
CONFIG_US3_FREQ=m
|
||||
CONFIG_US2E_FREQ=m
|
||||
|
||||
CONFIG_SUN_LDOMS=y
|
||||
CONFIG_SCHED_SMT=y
|
||||
CONFIG_SCHED_MC=y
|
||||
CONFIG_64BIT=y
|
||||
# CONFIG_BBC_I2C is not set
|
||||
CONFIG_HUGETLB_PAGE_SIZE_4MB=y
|
||||
# CONFIG_HUGETLB_PAGE_SIZE_512K is not set
|
||||
# CONFIG_HUGETLB_PAGE_SIZE_64K is not set
|
||||
CONFIG_NR_CPUS=256
|
||||
CONFIG_US3_FREQ=m
|
||||
CONFIG_US2E_FREQ=m
|
||||
CONFIG_SUN_OPENPROMFS=m
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_UID16=y
|
||||
CONFIG_BINFMT_ELF32=y
|
||||
CONFIG_ENVCTRL=m
|
||||
CONFIG_DISPLAY7SEG=m
|
||||
CONFIG_WATCHDOG_CP1XXX=m
|
||||
CONFIG_WATCHDOG_RIO=m
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
# CONFIG_PARPORT is not set
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_LIRC_PARALLEL is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_SIMTEC is not set
|
||||
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
|
||||
# CONFIG_FB_MATROX is not set
|
||||
# CONFIG_FB_RADEON is not set
|
||||
CONFIG_FB_ATY=y
|
||||
# CONFIG_FB_S3 is not set
|
||||
# CONFIG_FB_SAVAGE is not set
|
||||
# CONFIG_FB_SIS is not set
|
||||
# CONFIG_FB_NEOMAGIC is not set
|
||||
# CONFIG_FB_3DFX is not set
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
CONFIG_FB_SBUS=y
|
||||
CONFIG_FB_FFB=y
|
||||
# CONFIG_FB_TCX is not set
|
||||
# CONFIG_FB_CG14 is not set
|
||||
CONFIG_FB_PM2=y
|
||||
CONFIG_FB_P9100=y
|
||||
# CONFIG_FB_LEO is not set
|
||||
CONFIG_FB_XVR500=y
|
||||
CONFIG_FB_XVR2500=y
|
||||
# CONFIG_VGASTATE is not set
|
||||
# CONFIG_FB_DDC is not set
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
# CONFIG_FB_ATY128 is not set
|
||||
# CONFIG_FB_KYRO is not set
|
||||
# CONFIG_AGP is not set
|
||||
# CONFIG_DRM_NOUVEAU is not set
|
||||
# CONFIG_MDA_CONSOLE is not set
|
||||
CONFIG_FONTS=y
|
||||
# CONFIG_FONT_8x8 is not set
|
||||
# CONFIG_FONT_8x16 is not set
|
||||
# CONFIG_FONT_7x14 is not set
|
||||
# CONFIG_FONT_10x18 is not set
|
||||
# CONFIG_FONT_6x11 is not set
|
||||
# CONFIG_FONT_SUN12x22 is not set
|
||||
# CONFIG_FONT_PEARL_8x8 is not set
|
||||
# CONFIG_FONT_ACORN_8x8 is not set
|
||||
CONFIG_FONT_SUN8x16=y
|
||||
CONFIG_FONT_SUN12x22=y
|
||||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||
# CONFIG_SERIAL_8250 is not set
|
||||
CONFIG_SERIAL_SUNZILOG=y
|
||||
CONFIG_SERIAL_SUNZILOG_CONSOLE=y
|
||||
CONFIG_SERIAL_SUNSU=y
|
||||
CONFIG_SERIAL_SUNSU_CONSOLE=y
|
||||
CONFIG_SERIAL_SUNSAB=y
|
||||
CONFIG_SERIAL_SUNSAB_CONSOLE=y
|
||||
CONFIG_SERIAL_SUNHV=y
|
||||
CONFIG_SUN_OPENPROMIO=y
|
||||
CONFIG_OBP_FLASH=m
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
CONFIG_BLK_DEV_FD=y
|
||||
CONFIG_SUNVDC=m
|
||||
CONFIG_SUNVNET=m
|
||||
# CONFIG_BLK_DEV_AEC62XX is not set
|
||||
# CONFIG_BLK_DEV_HPT366 is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
|
||||
# CONFIG_BLK_DEV_SIIMAGE is not set
|
||||
# CONFIG_BLK_DEV_SLC90E66 is not set
|
||||
# CONFIG_BLK_DEV_VIA82CXXX is not set
|
||||
# CONFIG_SCSI_ADVANSYS is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
# CONFIG_SCSI_GDTH is not set
|
||||
# CONFIG_SCSI_AIC7XXX is not set
|
||||
# CONFIG_SCSI_AIC79XX is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
CONFIG_SCSI_QLOGICPTI=m
|
||||
CONFIG_SCSI_SUNESP=m
|
||||
CONFIG_SUNLANCE=m
|
||||
CONFIG_SUNBMAC=m
|
||||
CONFIG_SUNQE=m
|
||||
# CONFIG_DM9102 is not set
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_R8169 is not set
|
||||
CONFIG_ATM_FORE200E_USE_TASKLET=y
|
||||
CONFIG_ATM_FORE200E_DEBUG=0
|
||||
CONFIG_ATM_FORE200E_TX_RETRY=16
|
||||
# CONFIG_DRM_TDFX is not set
|
||||
CONFIG_KEYBOARD_ATKBD=y
|
||||
CONFIG_KEYBOARD_SUNKBD=y
|
||||
# CONFIG_INPUT_PCSPKR is not set
|
||||
CONFIG_INPUT_SPARCSPKR=m
|
||||
# CONFIG_SOUND_PRIME is not set
|
||||
# CONFIG_SND_SUN_AMD7930 is not set
|
||||
CONFIG_SND_SUN_CS4231=m
|
||||
# CONFIG_SND_SUN_DBRI is not set
|
||||
CONFIG_PARPORT_SUNBPP=m
|
||||
CONFIG_LOGO_SUN_CLUT224=y
|
||||
CONFIG_MTD_SUN_UFLASH=m
|
||||
CONFIG_MYRI_SBUS=m
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
# CONFIG_VIDEO_ZORAN is not set
|
||||
# CONFIG_VIDEO_STRADIS is not set
|
||||
# CONFIG_IEEE1394_SBP2 is not set
|
||||
# CONFIG_USB_NET2280 is not set
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
# CONFIG_DEBUG_DCFLUSH is not set
|
||||
# CONFIG_DEBUG_BOOTMEM is not set
|
||||
# CONFIG_DEBUG_LOCK_ALLOC is not set
|
||||
# CONFIG_PROVE_LOCKING is not set
|
||||
# CONFIG_LOCK_STAT is not set
|
||||
# CONFIG_LOCKDEP is not set
|
||||
# CONFIG_STACK_DEBUG is not set
|
||||
|
||||
CONFIG_SPARSEMEM_VMEMMAP=y
|
||||
|
||||
# CONFIG_THERMAL is not set
|
||||
|
||||
CONFIG_FRAME_WARN=2048
|
||||
|
||||
CONFIG_NUMA=y
|
||||
|
||||
CONFIG_SND_SPARC=y
|
||||
|
||||
CONFIG_HW_RANDOM_N2RNG=m
|
||||
|
||||
# drivers/isdn/hardware/mISDN/hfcmulti.c:5255:2: error: #error "not running on big endian machines now"
|
||||
# CONFIG_MISDN_HFCMULTI is not set
|
||||
|
||||
CONFIG_US3_MC=y
|
||||
CONFIG_SENSORS_ULTRA45=m
|
||||
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
|
||||
CONFIG_USB_GSPCA_SN9C20X=m
|
||||
CONFIG_USB_GSPCA_SN9C20X_EVDEV=y
|
||||
CONFIG_LSM_MMAP_MIN_ADDR=65536
|
||||
|
||||
CONFIG_PERF_COUNTERS=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
CONFIG_EVENT_PROFILE=y
|
||||
|
||||
CONFIG_EARLYFB=y
|
||||
CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
|
||||
|
||||
CONFIG_GRETH=m
|
||||
CONFIG_FB_XVR1000=y
|
||||
|
||||
CONFIG_CRYPTO_DEV_NIAGARA2=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
|
||||
|
|
@ -0,0 +1,419 @@
|
|||
CONFIG_UID16=y
|
||||
|
||||
CONFIG_X86_EXTENDED_PLATFORM=y
|
||||
|
||||
CONFIG_SMP=y
|
||||
|
||||
CONFIG_X86_GENERIC=y
|
||||
|
||||
CONFIG_HPET=y
|
||||
CONFIG_HPET_TIMER=y
|
||||
# CONFIG_HPET_MMAP is not set
|
||||
|
||||
CONFIG_I8K=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_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_INTEL_IOMMU=y
|
||||
CONFIG_DMAR_BROKEN_GFX_WA=y
|
||||
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
|
||||
# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
|
||||
CONFIG_SCSI_ADVANSYS=m
|
||||
|
||||
CONFIG_SECCOMP=y
|
||||
|
||||
CONFIG_CAPI_EICON=y
|
||||
|
||||
#
|
||||
# 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_BATTERY=y
|
||||
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_PROCFS=y
|
||||
CONFIG_ACPI_SBS=m
|
||||
CONFIG_ACPI_SLEEP=y
|
||||
CONFIG_ACPI_THERMAL=y
|
||||
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_PROCESSOR_AGGREGATOR=m
|
||||
CONFIG_ACPI_HED=m
|
||||
CONFIG_ACPI_APEI=y
|
||||
CONFIG_ACPI_APEI_PCIEAER=y
|
||||
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_K8=y
|
||||
CONFIG_X86_P4_CLOCKMOD=y
|
||||
# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
|
||||
|
||||
#
|
||||
# various x86 specific drivers
|
||||
#
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_CRYPTO_DEV_PADLOCK=m
|
||||
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
|
||||
CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
|
||||
|
||||
CONFIG_GENERIC_ISA_DMA=y
|
||||
|
||||
CONFIG_SUSPEND=y
|
||||
CONFIG_HIBERNATION=y
|
||||
CONFIG_PM_STD_PARTITION=""
|
||||
|
||||
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
|
||||
|
||||
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_BLK_DEV_AMD74XX=y
|
||||
|
||||
CONFIG_I2C_AMD756=m
|
||||
CONFIG_I2C_AMD756_S4882=m
|
||||
CONFIG_I2C_AMD8111=m
|
||||
CONFIG_I2C_I801=m
|
||||
CONFIG_I2C_ISCH=m
|
||||
CONFIG_I2C_NFORCE2=m
|
||||
CONFIG_I2C_NFORCE2_S4985=m
|
||||
CONFIG_I2C_PIIX4=m
|
||||
CONFIG_I2C_SIS96X=m
|
||||
CONFIG_I2C_VIA=m
|
||||
CONFIG_I2C_VIAPRO=m
|
||||
|
||||
CONFIG_DELL_RBU=m
|
||||
CONFIG_DCDBAS=m
|
||||
|
||||
CONFIG_EDAC=y
|
||||
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_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
|
||||
|
||||
CONFIG_SND_ISA=y
|
||||
CONFIG_SND_ES18XX=m
|
||||
|
||||
CONFIG_TCG_INFINEON=m
|
||||
|
||||
CONFIG_HW_RANDOM_INTEL=m
|
||||
CONFIG_HW_RANDOM_AMD=m
|
||||
CONFIG_HW_RANDOM_VIA=m
|
||||
|
||||
# CONFIG_COMPAT_VDSO 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_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_TOPSTAR_LAPTOP=m
|
||||
CONFIG_FUJITSU_TABLET=m
|
||||
CONFIG_AMILO_RFKILL=m
|
||||
|
||||
|
||||
CONFIG_ACPI_WMI=m
|
||||
CONFIG_ACER_WMI=m
|
||||
CONFIG_ACERHDF=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_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_VIA_WDT=m
|
||||
CONFIG_IE6XX_WDT=m
|
||||
|
||||
CONFIG_CRASH_DUMP=y
|
||||
CONFIG_PROC_VMCORE=y
|
||||
CONFIG_CRASH=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 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_XEN=y
|
||||
# CONFIG_XEN_DEBUG is not set
|
||||
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_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_BACKEND=y
|
||||
CONFIG_XEN_BLKDEV_BACKEND=m
|
||||
CONFIG_XEN_DEBUG_FS=y
|
||||
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_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_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_MACINTOSH_DRIVERS=y
|
||||
|
||||
CONFIG_DMIID=y
|
||||
CONFIG_DMI_SYSFS=y
|
||||
|
||||
CONFIG_ISCSI_IBFT_FIND=y
|
||||
CONFIG_ISCSI_IBFT=m
|
||||
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
|
||||
CONFIG_SENSORS_I5K_AMB=m
|
||||
CONFIG_SENSORS_FAM15H_POWER=m
|
||||
CONFIG_SENSORS_ACPI_POWER=m
|
||||
|
||||
# CONFIG_CPA_DEBUG is not set
|
||||
|
||||
CONFIG_HP_WATCHDOG=m
|
||||
CONFIG_NV_TCO=m
|
||||
CONFIG_SP5100_TCO=m
|
||||
|
||||
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_HP_ILO=m
|
||||
|
||||
CONFIG_BACKLIGHT_APPLE=m
|
||||
|
||||
|
||||
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
|
||||
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
|
||||
|
||||
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
|
||||
|
||||
|
||||
# CONFIG_IOMMU_STRESS is not set
|
||||
|
||||
CONFIG_PERF_COUNTERS=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
|
||||
CONFIG_X86_MCE=y
|
||||
CONFIG_X86_MCE_INTEL=y
|
||||
CONFIG_X86_MCE_AMD=y
|
||||
# CONFIG_X86_MCE_INJECT is not set
|
||||
|
||||
CONFIG_SFI=y
|
||||
|
||||
CONFIG_I2C_SCMI=m
|
||||
CONFIG_SBC_FITPC2_WATCHDOG=m
|
||||
|
||||
CONFIG_X86_DECODER_SELFTEST=y
|
||||
|
||||
CONFIG_ACPI_CMPC=m
|
||||
CONFIG_MSI_WMI=m
|
||||
CONFIG_TOSHIBA_BT_RFKILL=m
|
||||
|
||||
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_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_INTEL_IPS=m
|
||||
# CONFIG_IBM_RTL is not set
|
||||
|
||||
CONFIG_VIDEO_VIA_CAMERA=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_TRANSPARENT_HUGEPAGE=y
|
||||
|
||||
CONFIG_CRYPTO_AES_NI_INTEL=y
|
||||
CONFIG_CRYPTO_SERPENT_SSE2_586=m
|
||||
|
||||
CONFIG_HP_ACCEL=m
|
||||
|
||||
# CONFIG_RAPIDIO 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
|
|
@ -0,0 +1,129 @@
|
|||
CONFIG_64BIT=y
|
||||
|
||||
# CONFIG_X86_X32 is not set
|
||||
# CONFIG_MK8 is not set
|
||||
# CONFIG_MPSC is not set
|
||||
CONFIG_GENERIC_CPU=y
|
||||
|
||||
# CONFIG_X86_VSMP is not set
|
||||
# CONFIG_X86_UV is not set
|
||||
CONFIG_NUMA=y
|
||||
CONFIG_K8_NUMA=y
|
||||
CONFIG_AMD_NUMA=y
|
||||
CONFIG_X86_64_ACPI_NUMA=y
|
||||
# CONFIG_NUMA_EMU is not set
|
||||
# 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_SWIOTLB=y
|
||||
# CONFIG_CALGARY_IOMMU is not set
|
||||
|
||||
CONFIG_KEXEC_JUMP=y
|
||||
|
||||
CONFIG_ACPI_BLACKLIST_YEAR=0
|
||||
CONFIG_ACPI_HOTPLUG_MEMORY=m
|
||||
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
|
||||
# SHPC has half-arsed PCI probing, which makes it load on too many systems
|
||||
CONFIG_HOTPLUG_PCI_SHPC=m
|
||||
|
||||
CONFIG_PNP=y
|
||||
|
||||
# Really ? not 32bit only ?
|
||||
CONFIG_BLK_DEV_AMD74XX=y
|
||||
|
||||
CONFIG_CRYPTO_AES_X86_64=y
|
||||
CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m
|
||||
CONFIG_CRYPTO_TWOFISH_X86_64=m
|
||||
CONFIG_CRYPTO_SALSA20_X86_64=m
|
||||
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_SIS5595 is not set
|
||||
# CONFIG_I2C_SIS630 is not set
|
||||
|
||||
CONFIG_EDAC_AMD64=m
|
||||
# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set
|
||||
CONFIG_EDAC_SBRIDGE=m
|
||||
|
||||
# CONFIG_PC8736x_GPIO is not set
|
||||
|
||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||
CONFIG_SPARSEMEM_MANUAL=y
|
||||
CONFIG_SPARSEMEM=y
|
||||
CONFIG_HAVE_MEMORY_PRESENT=y
|
||||
CONFIG_SPARSEMEM_EXTREME=y
|
||||
CONFIG_SPARSEMEM_VMEMMAP=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
|
||||
# CONFIG_BLK_DEV_TRIFLEX is not set
|
||||
# CONFIG_BLK_DEV_CS5520 is not set
|
||||
# CONFIG_BLK_DEV_CS5530 is not set
|
||||
# CONFIG_BLK_DEV_CS5535 is not set
|
||||
|
||||
CONFIG_SGI_IOC4=m
|
||||
CONFIG_SGI_XP=m
|
||||
CONFIG_SGI_GRU=m
|
||||
# CONFIG_SGI_GRU_DEBUG is not set
|
||||
|
||||
# CONFIG_VIDEO_CAFE_CCIC is not set
|
||||
|
||||
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_MCE_LOG is not set
|
||||
|
||||
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
|
||||
|
||||
CONFIG_FRAME_WARN=2048
|
||||
|
||||
CONFIG_NODES_SHIFT=9
|
||||
|
||||
CONFIG_DIRECT_GBPAGES=y
|
||||
|
||||
CONFIG_X86_MPPARSE=y
|
||||
|
||||
CONFIG_I7300_IDLE=m
|
||||
CONFIG_IRQ_REMAP=y
|
||||
|
||||
CONFIG_X86_X2APIC=y
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
|
||||
CONFIG_RCU_FANOUT=64
|
||||
|
||||
CONFIG_INTEL_TXT=y
|
||||
|
||||
CONFIG_GPIO_LANGWELL=y
|
||||
|
||||
CONFIG_FUNCTION_GRAPH_TRACER=y
|
||||
|
||||
CONFIG_I7300_IDLE=m
|
||||
|
||||
CONFIG_BPF_JIT=y
|
||||
|
||||
# Should be 32bit only, but lacks KConfig depends
|
||||
# CONFIG_XO15_EBOOK is not set
|
||||
|
|
@ -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,30 @@
|
|||
From 4ff58b642f80dedb20533978123d89b5ac9b1ed5 Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@phobos.i.jkkm.org>
|
||||
Date: Tue, 30 Mar 2010 00:04:29 -0400
|
||||
Subject: die-floppy-die
|
||||
|
||||
Kill the floppy.ko pnp modalias. We were surviving just fine without
|
||||
autoloading floppy drivers, tyvm.
|
||||
|
||||
Please feel free to register all complaints in the wastepaper bin.
|
||||
---
|
||||
drivers/block/floppy.c | 3 +--
|
||||
1 files changed, 1 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
|
||||
index 90c4038..f4a0b90 100644
|
||||
--- a/drivers/block/floppy.c
|
||||
+++ b/drivers/block/floppy.c
|
||||
@@ -4619,8 +4619,7 @@ static const struct pnp_device_id floppy_pnpids[] = {
|
||||
{"PNP0700", 0},
|
||||
{}
|
||||
};
|
||||
-
|
||||
-MODULE_DEVICE_TABLE(pnp, floppy_pnpids);
|
||||
+/* MODULE_DEVICE_TABLE(pnp, floppy_pnpids); */
|
||||
|
||||
#else
|
||||
|
||||
--
|
||||
1.7.0.1
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
From 2a79554c864ac58fa2ad982f0fcee2cc2aa33eb5 Mon Sep 17 00:00:00 2001
|
||||
From: Bastien Nocera <hadess@hadess.net>
|
||||
Date: Thu, 20 May 2010 10:30:31 -0400
|
||||
Subject: Disable i8042 checks on Intel Apple Macs
|
||||
|
||||
As those computers never had any i8042 controllers, and the
|
||||
current lookup code could potentially lock up/hang/wait for
|
||||
timeout for long periods of time.
|
||||
|
||||
Fixes intermittent hangs on boot on a MacbookAir1,1
|
||||
|
||||
Signed-off-by: Bastien Nocera <hadess@hadess.net>
|
||||
---
|
||||
drivers/input/serio/i8042.c | 22 ++++++++++++++++++++++
|
||||
1 files changed, 22 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
|
||||
index 6440a8f..4d7cf98 100644
|
||||
--- a/drivers/input/serio/i8042.c
|
||||
+++ b/drivers/input/serio/i8042.c
|
||||
@@ -1451,6 +1451,22 @@ static struct platform_driver i8042_driver = {
|
||||
.shutdown = i8042_shutdown,
|
||||
};
|
||||
|
||||
+#ifdef CONFIG_DMI
|
||||
+static struct dmi_system_id __initdata dmi_system_table[] = {
|
||||
+ {
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_BIOS_VENDOR, "Apple Computer, Inc.")
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_BIOS_VENDOR, "Apple Inc.")
|
||||
+ },
|
||||
+ },
|
||||
+ {}
|
||||
+};
|
||||
+#endif /*CONFIG_DMI*/
|
||||
+
|
||||
static int __init i8042_init(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
@@ -1458,6 +1474,12 @@ static int __init i8042_init(void)
|
||||
|
||||
dbg_init();
|
||||
|
||||
+#ifdef CONFIG_DMI
|
||||
+ /* Intel Apple Macs never have an i8042 controller */
|
||||
+ if (dmi_check_system(dmi_system_table) > 0)
|
||||
+ return -ENODEV;
|
||||
+#endif /*CONFIG_DMI*/
|
||||
+
|
||||
err = i8042_platform_init();
|
||||
if (err)
|
||||
return err;
|
||||
--
|
||||
1.7.0.1
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
From da7662784dcced04a5b7a3a5b2bbb8276d699522 Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@mcmartin.ca>
|
||||
Date: Sun, 17 Oct 2010 15:55:32 -0400
|
||||
Subject: [PATCH] dmar: disable if ricoh multifunction detected
|
||||
|
||||
---
|
||||
drivers/pci/intel-iommu.c | 10 ++++++++++
|
||||
1 files changed, 10 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
|
||||
index 4789f8e..5923914 100644
|
||||
--- a/drivers/iommu/intel-iommu.c
|
||||
+++ b/drivers/iommu/intel-iommu.c
|
||||
@@ -3784,6 +3784,16 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0044, quirk_calpella_no_shadow_g
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0062, quirk_calpella_no_shadow_gtt);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x006a, quirk_calpella_no_shadow_gtt);
|
||||
|
||||
+/* https://bugzilla.redhat.com/show_bug.cgi?id=605888 */
|
||||
+static void __devinit quirk_ricoh_multifunction(struct pci_dev *dev)
|
||||
+{
|
||||
+ dmar_disabled = 1;
|
||||
+}
|
||||
+DECLARE_PCI_FIXUP_HEADER(0x1180, 0xe822, quirk_ricoh_multifunction);
|
||||
+DECLARE_PCI_FIXUP_HEADER(0x1180, 0xe230, quirk_ricoh_multifunction);
|
||||
+DECLARE_PCI_FIXUP_HEADER(0x1180, 0xe832, quirk_ricoh_multifunction);
|
||||
+DECLARE_PCI_FIXUP_HEADER(0x1180, 0xe476, quirk_ricoh_multifunction);
|
||||
+
|
||||
/* On Tylersburg chipsets, some BIOSes have been known to enable the
|
||||
ISOCH DMAR unit for the Azalia sound device, but not give it any
|
||||
TLB entries, which causes it to deadlock. Check for that. We do
|
||||
--
|
||||
1.7.3.1
|
||||
|
|
@ -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);
|
|
@ -0,0 +1 @@
|
|||
empty
|
|
@ -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);
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
# This is the aarch64 override file for the core/drivers package split. The
|
||||
# module directories listed here and in the generic list in filter-modules.sh
|
||||
# will be moved to the resulting kernel-modules package for this arch.
|
||||
# Anything not listed in those files will be in the kernel-core package.
|
||||
#
|
||||
# Please review the default list in filter-modules.sh before making
|
||||
# modifications to the overrides below. If something should be removed across
|
||||
# all arches, remove it in the default instead of per-arch.
|
||||
|
||||
driverdirs="atm auxdisplay bcma bluetooth firewire fmc fpga infiniband isdn leds media memstick message mmc mtd nfc ntb pcmcia power ssb soundwire staging tty uio uwb w1"
|
||||
|
||||
ethdrvs="3com adaptec arc alteon atheros broadcom cadence calxeda chelsio cisco dec dlink emulex icplus marvell micrel myricom neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis smsc stmicro sun tehuti ti via wiznet xircom"
|
||||
|
||||
drmdrvs="amd arm bridge ast exynos hisilicon i2c imx mgag200 meson msm nouveau panel pl111 radeon rockchip tegra sun4i sun4i-drm-hdmi tinydrm vc4"
|
||||
|
||||
singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls rnbd-client rnbd-server mlx5_vdpa"
|
|
@ -1,18 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
# This is the aarch64 override file for the core/drivers package split. The
|
||||
# module directories listed here and in the generic list in filter-modules.sh
|
||||
# will be moved to the resulting kernel-modules package for this arch.
|
||||
# Anything not listed in those files will be in the kernel-core package.
|
||||
#
|
||||
# Please review the default list in filter-modules.sh before making
|
||||
# modifications to the overrides below. If something should be removed across
|
||||
# all arches, remove it in the default instead of per-arch.
|
||||
|
||||
driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1"
|
||||
|
||||
ethdrvs="3com adaptec arc alteon atheros broadcom cadence calxeda chelsio cisco dec dlink emulex icplus marvell micrel myricom neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis smsc stmicro sun tehuti ti via wiznet xircom"
|
||||
|
||||
drmdrvs="amd arm bridge ast exynos hisilicon i2c imx mgag200 meson msm nouveau panel radeon rockchip tegra sun4i tinydrm vc4"
|
||||
|
||||
singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls"
|
|
@ -1,18 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
# This is the armv7hl override file for the core/drivers package split. The
|
||||
# module directories listed here and in the generic list in filter-modules.sh
|
||||
# will be moved to the resulting kernel-modules package for this arch.
|
||||
# Anything not listed in those files will be in the kernel-core package.
|
||||
#
|
||||
# Please review the default list in filter-modules.sh before making
|
||||
# modifications to the overrides below. If something should be removed across
|
||||
# all arches, remove it in the default instead of per-arch.
|
||||
|
||||
driverdirs="atm auxdisplay bcma bluetooth firewire fmc fpga infiniband isdn media memstick message nfc ntb pcmcia ssb soundwire staging tty uio uwb w1"
|
||||
|
||||
ethdrvs="3com adaptec alteon altera amd atheros broadcom cadence chelsio cisco dec dlink emulex icplus mellanox micrel myricom natsemi neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis sun tehuti via wiznet xircom"
|
||||
|
||||
drmdrvs="amd arm armada bridge ast exynos etnaviv hisilicon i2c imx meson mgag200 msm nouveau omapdrm panel pl111 radeon rockchip sti stm sun4i sun4i-drm-hdmi tegra tilcdc tinydrm vc4"
|
||||
|
||||
singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls bq27xxx_battery_hdq mlx5_vdpa"
|
|
@ -1,14 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
# This is the i686 override file for the core/drivers package split. The
|
||||
# module directories listed here and in the generic list in filter-modules.sh
|
||||
# will be moved to the resulting kernel-modules package for this arch.
|
||||
# Anything not listed in those files will be in the kernel-core package.
|
||||
#
|
||||
# Please review the default list in filter-modules.sh before making
|
||||
# modifications to the overrides below. If something should be removed across
|
||||
# all arches, remove it in the default instead of per-arch.
|
||||
|
||||
driverdirs="atm auxdisplay bcma bluetooth firewire fmc fpga infiniband isdn leds media memstick mfd mmc mtd nfc ntb pcmcia platform power ssb soundwire staging tty uio uwb w1"
|
||||
|
||||
singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub hid-sensor-magn-3d hid-sensor-incl-3d hid-sensor-gyro-3d hid-sensor-iio-common hid-sensor-accel-3d hid-sensor-trigger hid-sensor-als hid-sensor-rotation hid-sensor-temperature hid-sensor-humidity target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls parport_serial regmap-sdw hid-asus"
|
|
@ -1,170 +0,0 @@
|
|||
#! /bin/bash
|
||||
#
|
||||
# Called as filter-modules.sh list-of-modules Arch
|
||||
|
||||
# This script filters the modules into the kernel-core and kernel-modules
|
||||
# subpackages. We list out subsystems/subdirs to prune from the installed
|
||||
# module directory. What is left is put into the kernel-core package. What is
|
||||
# pruned is contained in the kernel-modules package.
|
||||
#
|
||||
# This file contains the default subsys/subdirs to prune from all architectures.
|
||||
# If an architecture needs to differ, we source a per-arch filter-<arch>.sh file
|
||||
# that contains the set of override lists to be used instead. If a module or
|
||||
# subsys should be in kernel-modules on all arches, please change the defaults
|
||||
# listed here.
|
||||
|
||||
# Overrides is individual modules which need to remain in kernel-core due to deps.
|
||||
overrides="cec"
|
||||
|
||||
# Set the default dirs/modules to filter out
|
||||
driverdirs="atm auxdisplay bcma bluetooth firewire fmc fpga infiniband isdn leds media memstick mfd mmc mtd nfc ntb pcmcia platform power ssb soundwire staging tty uio uwb w1"
|
||||
|
||||
chardrvs="mwave pcmcia"
|
||||
|
||||
netdrvs="appletalk can dsa hamradio ieee802154 irda ppp slip usb wireless"
|
||||
|
||||
ethdrvs="3com adaptec alteon amd aquantia atheros broadcom cadence calxeda chelsio cisco dec dlink emulex icplus marvell mellanox neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis smsc stmicro sun tehuti ti wiznet xircom"
|
||||
|
||||
inputdrvs="gameport tablet touchscreen"
|
||||
|
||||
scsidrvs="aacraid advansys aic7xxx aic94xx be2iscsi bfa bnx2i bnx2fc csiostor cxgbi esas2r fcoe fnic isci libsas lpfc megaraid mpt2sas mpt3sas mvsas pm8001 qla2xxx qla4xxx sym53c8xx_2 ufs qedf wd719x"
|
||||
|
||||
usbdrvs="atm image misc serial wusbcore"
|
||||
|
||||
fsdrvs="affs befs coda cramfs dlm ecryptfs hfs hfsplus jfs jffs2 minix ncpfs nilfs2 ocfs2 reiserfs romfs squashfs sysv ubifs ufs"
|
||||
|
||||
netprots="6lowpan appletalk atm ax25 batman-adv bluetooth can dccp dsa ieee802154 irda l2tp mac80211 mac802154 mpls netrom nfc rds rfkill rose sctp smc wireless"
|
||||
|
||||
drmdrvs="amd ast bridge gma500 i2c i915 mgag200 nouveau panel radeon"
|
||||
|
||||
iiodrvs="accel adc afe common dac gyro health humidity light magnetometer multiplexer orientation potentiometer potentiostat pressure temperature"
|
||||
|
||||
singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls parport_serial regmap-sdw hid-asus iTCO_wdt rnbd-client rnbd-server mlx5_vdpa"
|
||||
|
||||
# Grab the arch-specific filter list overrides
|
||||
source ./filter-$2.sh
|
||||
|
||||
filter_dir() {
|
||||
filelist=$1
|
||||
dir=$2
|
||||
|
||||
grep -v -e "${dir}/" ${filelist} > ${filelist}.tmp
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "Couldn't remove ${dir}. Skipping."
|
||||
else
|
||||
grep -e "${dir}/" ${filelist} >> k-d.list
|
||||
mv ${filelist}.tmp $filelist
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
filter_ko() {
|
||||
filelist=$1
|
||||
mod=$2
|
||||
|
||||
grep -v -e "${mod}.ko" ${filelist} > ${filelist}.tmp
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "Couldn't remove ${mod}.ko Skipping."
|
||||
else
|
||||
grep -e "${mod}.ko" ${filelist} >> k-d.list
|
||||
mv ${filelist}.tmp $filelist
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Filter the drivers/ subsystems
|
||||
for subsys in ${driverdirs}
|
||||
do
|
||||
filter_dir $1 drivers/${subsys}
|
||||
done
|
||||
|
||||
# Filter the networking drivers
|
||||
for netdrv in ${netdrvs}
|
||||
do
|
||||
filter_dir $1 drivers/net/${netdrv}
|
||||
done
|
||||
|
||||
# Filter the char drivers
|
||||
for char in ${chardrvs}
|
||||
do
|
||||
filter_dir $1 drivers/char/${input}
|
||||
done
|
||||
|
||||
# Filter the ethernet drivers
|
||||
for eth in ${ethdrvs}
|
||||
do
|
||||
filter_dir $1 drivers/net/ethernet/${eth}
|
||||
done
|
||||
|
||||
# SCSI
|
||||
for scsi in ${scsidrvs}
|
||||
do
|
||||
filter_dir $1 drivers/scsi/${scsi}
|
||||
done
|
||||
|
||||
# Input
|
||||
for input in ${inputdrvs}
|
||||
do
|
||||
filter_dir $1 drivers/input/${input}
|
||||
done
|
||||
|
||||
# USB
|
||||
for usb in ${usbdrvs}
|
||||
do
|
||||
filter_dir $1 drivers/usb/${usb}
|
||||
done
|
||||
|
||||
# Filesystems
|
||||
for fs in ${fsdrvs}
|
||||
do
|
||||
filter_dir $1 fs/${fs}
|
||||
done
|
||||
|
||||
# Network protocols
|
||||
for prot in ${netprots}
|
||||
do
|
||||
filter_dir $1 kernel/net/${prot}
|
||||
done
|
||||
|
||||
# DRM
|
||||
for drm in ${drmdrvs}
|
||||
do
|
||||
filter_dir $1 drivers/gpu/drm/${drm}
|
||||
done
|
||||
|
||||
# Just kill sound.
|
||||
filter_dir $1 kernel/sound
|
||||
|
||||
# Now go through and filter any single .ko files that might have deps on the
|
||||
# things we filtered above
|
||||
for mod in ${singlemods}
|
||||
do
|
||||
filter_ko $1 ${mod}
|
||||
done
|
||||
|
||||
# Now process the override list to bring those modules back into core
|
||||
for mod in ${overrides}
|
||||
do
|
||||
grep -v -e "/${mod}.ko" k-d.list > k-d.list.tmp
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "Couldn't save ${mod}.ko Skipping."
|
||||
else
|
||||
grep -e "/${mod}.ko" k-d.list >> $filelist
|
||||
mv k-d.list.tmp k-d.list
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
# Go through our generated drivers list and remove the .ko files. We'll
|
||||
# restore them later.
|
||||
for mod in `cat k-d.list`
|
||||
do
|
||||
rm -rf $mod
|
||||
done
|
|
@ -1,168 +0,0 @@
|
|||
#! /bin/bash
|
||||
#
|
||||
# Called as filter-modules.sh list-of-modules Arch
|
||||
|
||||
# This script filters the modules into the kernel-core and kernel-modules
|
||||
# subpackages. We list out subsystems/subdirs to prune from the installed
|
||||
# module directory. What is left is put into the kernel-core package. What is
|
||||
# pruned is contained in the kernel-modules package.
|
||||
#
|
||||
# This file contains the default subsys/subdirs to prune from all architectures.
|
||||
# If an architecture needs to differ, we source a per-arch filter-<arch>.sh file
|
||||
# that contains the set of override lists to be used instead. If a module or
|
||||
# subsys should be in kernel-modules on all arches, please change the defaults
|
||||
# listed here.
|
||||
|
||||
# Overrides is individual modules which need to remain in kernel-core due to deps.
|
||||
overrides="cec"
|
||||
|
||||
# Set the default dirs/modules to filter out
|
||||
driverdirs="atm auxdisplay bcma bluetooth firewire fmc iio infiniband isdn leds media memstick mfd mmc mtd nfc ntb pcmcia platform power ssb staging tty uio uwb w1"
|
||||
|
||||
chardrvs="mwave pcmcia"
|
||||
|
||||
netdrvs="appletalk can dsa hamradio ieee802154 irda ppp slip usb wireless"
|
||||
|
||||
ethdrvs="3com adaptec alteon amd aquantia atheros broadcom cadence calxeda chelsio cisco dec dlink emulex icplus marvell neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis smsc stmicro sun tehuti ti wiznet xircom"
|
||||
|
||||
inputdrvs="gameport tablet touchscreen"
|
||||
|
||||
scsidrvs="aacraid aic7xxx aic94xx be2iscsi bfa bnx2i bnx2fc csiostor cxgbi esas2r fcoe fnic hisi_sas isci libsas lpfc megaraid mpt2sas mpt3sas mvsas pm8001 qla2xxx qla4xxx sym53c8xx_2 ufs qedf"
|
||||
|
||||
usbdrvs="atm image misc serial wusbcore"
|
||||
|
||||
fsdrvs="affs befs coda cramfs ecryptfs hfs hfsplus jfs minix ncpfs nilfs2 ocfs2 reiserfs romfs squashfs sysv ubifs ufs"
|
||||
|
||||
netprots="6lowpan appletalk atm ax25 batman-adv bluetooth can dccp dsa ieee802154 irda l2tp mac80211 mac802154 mpls netrom nfc rds rfkill rose sctp smc wireless"
|
||||
|
||||
drmdrvs="amd ast gma500 i2c i915 mgag200 nouveau radeon via "
|
||||
|
||||
singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls parport_serial ism hid-asus"
|
||||
|
||||
# Grab the arch-specific filter list overrides
|
||||
source ./filter-$2.sh
|
||||
|
||||
filter_dir() {
|
||||
filelist=$1
|
||||
dir=$2
|
||||
|
||||
grep -v -e "${dir}/" ${filelist} > ${filelist}.tmp
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "Couldn't remove ${dir}. Skipping."
|
||||
else
|
||||
grep -e "${dir}/" ${filelist} >> k-d.list
|
||||
mv ${filelist}.tmp $filelist
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
filter_ko() {
|
||||
filelist=$1
|
||||
mod=$2
|
||||
|
||||
grep -v -e "${mod}.ko" ${filelist} > ${filelist}.tmp
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "Couldn't remove ${mod}.ko Skipping."
|
||||
else
|
||||
grep -e "${mod}.ko" ${filelist} >> k-d.list
|
||||
mv ${filelist}.tmp $filelist
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Filter the drivers/ subsystems
|
||||
for subsys in ${driverdirs}
|
||||
do
|
||||
filter_dir $1 drivers/${subsys}
|
||||
done
|
||||
|
||||
# Filter the networking drivers
|
||||
for netdrv in ${netdrvs}
|
||||
do
|
||||
filter_dir $1 drivers/net/${netdrv}
|
||||
done
|
||||
|
||||
# Filter the char drivers
|
||||
for char in ${chardrvs}
|
||||
do
|
||||
filter_dir $1 drivers/char/${input}
|
||||
done
|
||||
|
||||
# Filter the ethernet drivers
|
||||
for eth in ${ethdrvs}
|
||||
do
|
||||
filter_dir $1 drivers/net/ethernet/${eth}
|
||||
done
|
||||
|
||||
# SCSI
|
||||
for scsi in ${scsidrvs}
|
||||
do
|
||||
filter_dir $1 drivers/scsi/${scsi}
|
||||
done
|
||||
|
||||
# Input
|
||||
for input in ${inputdrvs}
|
||||
do
|
||||
filter_dir $1 drivers/input/${input}
|
||||
done
|
||||
|
||||
# USB
|
||||
for usb in ${usbdrvs}
|
||||
do
|
||||
filter_dir $1 drivers/usb/${usb}
|
||||
done
|
||||
|
||||
# Filesystems
|
||||
for fs in ${fsdrvs}
|
||||
do
|
||||
filter_dir $1 fs/${fs}
|
||||
done
|
||||
|
||||
# Network protocols
|
||||
for prot in ${netprots}
|
||||
do
|
||||
filter_dir $1 kernel/net/${prot}
|
||||
done
|
||||
|
||||
# DRM
|
||||
for drm in ${drmdrvs}
|
||||
do
|
||||
filter_dir $1 drivers/gpu/drm/${drm}
|
||||
done
|
||||
|
||||
# Just kill sound.
|
||||
filter_dir $1 kernel/sound
|
||||
|
||||
# Now go through and filter any single .ko files that might have deps on the
|
||||
# things we filtered above
|
||||
for mod in ${singlemods}
|
||||
do
|
||||
filter_ko $1 ${mod}
|
||||
done
|
||||
|
||||
# Now process the override list to bring those modules back into core
|
||||
for mod in ${overrides}
|
||||
do
|
||||
grep -v -e "/${mod}.ko" k-d.list > k-d.list.tmp
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "Couldn't save ${mod}.ko Skipping."
|
||||
else
|
||||
grep -e "/${mod}.ko" k-d.list >> $filelist
|
||||
mv k-d.list.tmp k-d.list
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
# Go through our generated drivers list and remove the .ko files. We'll
|
||||
# restore them later.
|
||||
for mod in `cat k-d.list`
|
||||
do
|
||||
rm -rf $mod
|
||||
done
|
|
@ -1,14 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
# This is the ppc64le override file for the core/drivers package split. The
|
||||
# module directories listed here and in the generic list in filter-modules.sh
|
||||
# will be moved to the resulting kernel-modules package for this arch.
|
||||
# Anything not listed in those files will be in the kernel-core package.
|
||||
#
|
||||
# Please review the default list in filter-modules.sh before making
|
||||
# modifications to the overrides below. If something should be removed across
|
||||
# all arches, remove it in the default instead of per-arch.
|
||||
|
||||
driverdirs="atm auxdisplay bcma bluetooth firewire fmc fpga infiniband isdn leds media memstick message mmc mtd nfc ntb pcmcia platform power ssb staging tty uio uwb w1"
|
||||
|
||||
singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls rnbd-client rnbd-server mlx5_vdpa"
|
|
@ -1,14 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
# This is the ppc64le override file for the core/drivers package split. The
|
||||
# module directories listed here and in the generic list in filter-modules.sh
|
||||
# will be moved to the resulting kernel-modules package for this arch.
|
||||
# Anything not listed in those files will be in the kernel-core package.
|
||||
#
|
||||
# Please review the default list in filter-modules.sh before making
|
||||
# modifications to the overrides below. If something should be removed across
|
||||
# all arches, remove it in the default instead of per-arch.
|
||||
|
||||
driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1"
|
||||
|
||||
singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls"
|
|
@ -1,12 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
# This is the s390x override file for the core/drivers package split. The
|
||||
# module directories listed here and in the generic list in filter-modules.sh
|
||||
# will be moved to the resulting kernel-modules package for this arch.
|
||||
# Anything not listed in those files will be in the kernel-core package.
|
||||
#
|
||||
# Please review the default list in filter-modules.sh before making
|
||||
# modifications to the overrides below. If something should be removed across
|
||||
# all arches, remove it in the default instead of per-arch.
|
||||
|
||||
# Defaults work so no need to override
|
|
@ -1,12 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
# This is the s390x override file for the core/drivers package split. The
|
||||
# module directories listed here and in the generic list in filter-modules.sh
|
||||
# will be moved to the resulting kernel-modules package for this arch.
|
||||
# Anything not listed in those files will be in the kernel-core package.
|
||||
#
|
||||
# Please review the default list in filter-modules.sh before making
|
||||
# modifications to the overrides below. If something should be removed across
|
||||
# all arches, remove it in the default instead of per-arch.
|
||||
|
||||
# Defaults work so no need to override
|
|
@ -1,12 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
# This is the x86_64 override file for the core/drivers package split. The
|
||||
# module directories listed here and in the generic list in filter-modules.sh
|
||||
# will be moved to the resulting kernel-modules package for this arch.
|
||||
# Anything not listed in those files will be in the kernel-core package.
|
||||
#
|
||||
# Please review the default list in filter-modules.sh before making
|
||||
# modifications to the overrides below. If something should be removed across
|
||||
# all arches, remove it in the default instead of per-arch.
|
||||
|
||||
# Defaults work so no need to override
|
|
@ -1,12 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
# This is the x86_64 override file for the core/drivers package split. The
|
||||
# module directories listed here and in the generic list in filter-modules.sh
|
||||
# will be moved to the resulting kernel-modules package for this arch.
|
||||
# Anything not listed in those files will be in the kernel-core package.
|
||||
#
|
||||
# Please review the default list in filter-modules.sh before making
|
||||
# modifications to the overrides below. If something should be removed across
|
||||
# all arches, remove it in the default instead of per-arch.
|
||||
|
||||
# Defaults work so no need to override
|
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# find-provides: munge the provides dependencies from the kabideps file
|
||||
#
|
||||
# This software may be freely redistributed under the terms of the GNU
|
||||
# General Public License (GPL).
|
||||
#
|
||||
# Takes a directory prefix, then outputs the kabideps file contents.
|
||||
|
||||
__author__ = "Jon Masters <jcm@redhat.com>"
|
||||
__version__ = "1.0"
|
||||
__date__ = "Tue 25 Jul 2006 04:00 GMT"
|
||||
__copyright__ = "Copyright (C) 2006 Red Hat, Inc"
|
||||
__license__ = "GPL"
|
||||
|
||||
import os
|
||||
import re
|
||||
import string
|
||||
import sys
|
||||
|
||||
false = 0
|
||||
true = 1
|
||||
|
||||
kabideps=""
|
||||
|
||||
p = re.compile('^(.*)/symvers-(.*).gz$')
|
||||
while true:
|
||||
foo = sys.stdin.readline()
|
||||
if foo == "":
|
||||
break
|
||||
string.split(foo)
|
||||
m = p.match(foo)
|
||||
if m:
|
||||
kabideps=sys.argv[1] + "/kernel-" + m.group(2) + "-kabideps"
|
||||
|
||||
if kabideps == "":
|
||||
sys.exit(0)
|
||||
|
||||
if not (os.path.isfile(kabideps)):
|
||||
sys.stderr.write(sys.argv[0] + ": cannot locate kabideps file: " + kabideps + "\n")
|
||||
sys.exit(1)
|
||||
|
||||
sys.stderr.write(sys.argv[0] + ": processing kABI: " + kabideps)
|
||||
os.system("cat " + kabideps)
|
|
@ -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
|
||||
|
|
@ -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)
|
|
@ -1,40 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Adjusts the configuration options to build the variants correctly
|
||||
#
|
||||
# arg1: configuration to go in the primary variant
|
||||
# arg2: are we only generating debug configs
|
||||
|
||||
|
||||
PRIMARY=$1
|
||||
DEBUGBUILDSENABLED=$2
|
||||
|
||||
if [ -z "$2" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$PRIMARY" ]; then
|
||||
PRIMARY=rhel
|
||||
fi
|
||||
|
||||
if [ "$PRIMARY" = "fedora" ]; then
|
||||
SECONDARY=rhel
|
||||
else
|
||||
SECONDARY=fedora
|
||||
fi
|
||||
|
||||
for i in kernel-*-"$PRIMARY".config; do
|
||||
NEW=kernel-"$VERSION"-$(echo "$i" | cut -d - -f2- | sed s/-"$PRIMARY"//)
|
||||
#echo $NEW
|
||||
mv "$i" "$NEW"
|
||||
done
|
||||
|
||||
rm -f kernel-*-"$SECONDARY".config
|
||||
|
||||
if [ "$DEBUGBUILDSENABLED" -eq 0 ]; then
|
||||
for i in kernel-*debug*.config; do
|
||||
base=$(echo "$i" | sed -r s/-?debug//g)
|
||||
NEW=kernel-$(echo "$base" | cut -d - -f2-)
|
||||
mv "$i" "$NEW"
|
||||
done
|
||||
fi
|
|
@ -1,35 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
. /etc/os-release
|
||||
|
||||
kernelver=$1 && shift
|
||||
rootfs=$1 && shift
|
||||
variant=$1 && shift
|
||||
|
||||
output="${rootfs}/lib/modules/${kernelver}/bls.conf"
|
||||
date=$(date -u +%Y%m%d%H%M%S)
|
||||
|
||||
if [ "${variant:-5}" = "debug" ]; then
|
||||
debugname=" with debugging"
|
||||
debugid="-debug"
|
||||
else
|
||||
debugname=""
|
||||
debugid=""
|
||||
fi
|
||||
|
||||
# shellcheck will complain about bootprefix being referenced but not assigned,
|
||||
# but that is perfectly OK here.
|
||||
# shellcheck disable=SC2154
|
||||
cat > "$output" <<EOF
|
||||
title ${NAME} (${kernelver}) ${VERSION}${debugname}
|
||||
version ${kernelver}${debugid}
|
||||
linux ${bootprefix}/vmlinuz-${kernelver}
|
||||
initrd ${bootprefix}/initramfs-${kernelver}.img
|
||||
options \$kernelopts
|
||||
id ${ID}-${date}-${kernelver}${debugid}
|
||||
grub_users \$grub_users
|
||||
grub_arg --unrestricted
|
||||
grub_class kernel${variant}
|
||||
EOF
|
|
@ -0,0 +1,7 @@
|
|||
%pubring kernel.pub
|
||||
%secring kernel.sec
|
||||
Key-Type: DSA
|
||||
Key-Length: 512
|
||||
Name-Real: Red Hat, Inc.
|
||||
Name-Comment: Kernel Module GPG key
|
||||
%commit
|
|
@ -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
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue