Compare commits
857 Commits
v2.0RC
..
core_yedek
| Author | SHA1 | Date | |
|---|---|---|---|
| 168de76bbc | |||
| 2858f4f138 | |||
| b80e8a0dac | |||
| 2238851e6d | |||
| 7068326e66 | |||
| c05db01e35 | |||
| 3265602a72 | |||
| 266c7a7b1b | |||
| 3d569db746 | |||
| fc8ddeeeb9 | |||
| 2820e72f73 | |||
| eb02fbfe34 | |||
| dda738dec7 | |||
| a2425ba4e1 | |||
| 7068dd7675 | |||
| b0b68186d2 | |||
| 591677447c | |||
| 4d86888c65 | |||
| cb3a884d0c | |||
| 9d58e7c89d | |||
| 6e6051ddbb | |||
| 231dbc7c66 | |||
| 6b33a1a00b | |||
| 9dce069e8b | |||
| a5aeff76a1 | |||
| ce019ee06e | |||
| efd429838d | |||
| 5e92ca7f33 | |||
| d5a8e1fd8c | |||
| a58fc89c4c | |||
| f29b34de8a | |||
| a4a0cf88b0 | |||
| 91672c07f7 | |||
| 0d995ead67 | |||
| f19fd26fa8 | |||
| f211df1c9d | |||
| 90daf6f2d5 | |||
| eb9248e0d6 | |||
| 166a3b1bb7 | |||
| 92fbca9156 | |||
| c62591d26f | |||
| 9b01fc0eb2 | |||
| 0473bef1c0 | |||
| f4cc0fe5fd | |||
| 121d7ec173 | |||
| 09d44c1697 | |||
| 8fbeb27183 | |||
| 0a891ce4c0 | |||
| 5e6e346476 | |||
| 533768b514 | |||
| 16edc8fe0f | |||
| 223783c39a | |||
| 1626f290f5 | |||
| a411322144 | |||
| ad005eaff9 | |||
| a02f13843c | |||
| 27bebca35a | |||
| 0396fc74c0 | |||
| b80994f032 | |||
| 978dd85a0c | |||
| c49984b9e0 | |||
| 01d2fb10a0 | |||
| 4c156d88fa | |||
| 8e22789061 | |||
| ab979771b4 | |||
| 1f0ceb6560 | |||
| 7912d368a3 | |||
| 5cd2e5e975 | |||
| d5c8bdd4dc | |||
| 682ae89c79 | |||
| 1450224825 | |||
| a969516cff | |||
| c717661549 | |||
| 204090d7e2 | |||
| f192398967 | |||
| 2ff747ebe5 | |||
| ea4fd8ea14 | |||
| 5bdb250045 | |||
| 2a0f526883 | |||
| f358a5c1c6 | |||
| c4ec7c41fb | |||
| 7f197e6b6a | |||
| 23e2660f78 | |||
| e384642c55 | |||
| 9a6546660f | |||
| 11eb4e1c3d | |||
| 1977da2b5e | |||
| 564756367b | |||
| 465844abd7 | |||
| 4012c3841b | |||
| 9cc089d117 | |||
| 163f95eeff | |||
| de76acf929 | |||
| 43471abf4d | |||
| 42d6464539 | |||
| 28c962dab7 | |||
| 8f27119308 | |||
| 282f0cd384 | |||
| c755e0a1ab | |||
| 3740de0ad9 | |||
| c20a063f6a | |||
| fab757280a | |||
| ff6916d27e | |||
| 712a3bdd41 | |||
| f3b16b7141 | |||
| 74400d8700 | |||
| f76de670e7 | |||
| ba4322cad4 | |||
| 32af02f0c2 | |||
| 7cfe9147f0 | |||
| 5a42aa648f | |||
| dc9baa9b1d | |||
| 79990d4a0d | |||
| b978670a20 | |||
| f1659fe67b | |||
| 1778e6189a | |||
| 2161b54cf5 | |||
| 09c53d36b8 | |||
| b7473f1574 | |||
| c47ffc166f | |||
| 6ecc019aea | |||
| 723a9446b7 | |||
| feee484bbd | |||
| ac5d7ddde2 | |||
| 3a49c2daaf | |||
| c2b47ad25b | |||
| 2505fcb178 | |||
| 855a46e187 | |||
| 680a3bda40 | |||
| 526e0dd740 | |||
| 24cb59e626 | |||
| e7e7ec0c67 | |||
| b897d7783e | |||
| df1eb84d90 | |||
| e68dcde544 | |||
| 59f7ff7c12 | |||
| b376a222ae | |||
| 49999633e1 | |||
| 96d9e2646d | |||
| 93c0aa9838 | |||
| f8cb2856ed | |||
| d6b9a612f0 | |||
| b4a3a2e376 | |||
| 217420121f | |||
| 6eee9bdbb2 | |||
| 89b5076295 | |||
| d5f9065961 | |||
| 9d868df42b | |||
| cf053c3b90 | |||
| 41229e6b4a | |||
| 8008a68682 | |||
| 4659f7d81e | |||
| 3dc2acf92a | |||
| 8618d0fd83 | |||
| 0de347a26b | |||
| c899604561 | |||
| 7541047394 | |||
| 60dafbe84c | |||
| 9eef4d447b | |||
| 36f3fe26a1 | |||
| 5486d10245 | |||
| c171050050 | |||
| dec8a3b8af | |||
| c70d3b568d | |||
| 9b9f7677fc | |||
| 19c0bf30a9 | |||
| 0516287b93 | |||
| 03c61a7c12 | |||
| 9d2a0bab12 | |||
| 561d397685 | |||
| 96896e6779 | |||
| eb23668e59 | |||
| eacbb0aed1 | |||
| 1ab1a2709a | |||
| 0b3b009a1f | |||
| 93ef000dcf | |||
| 74a2cd1fbc | |||
| 27e1c32c2f | |||
| f06962ff49 | |||
| e72c33ea1c | |||
| 72bcb3a4f0 | |||
| 38b471accf | |||
| 3d9a91e47b | |||
| cacc184bec | |||
| 2009f47d35 | |||
| b09f32bb89 | |||
| 04b4284e1f | |||
| ca2e85e618 | |||
| 9d1a1293cf | |||
| 85834afa5e | |||
| ddc4a84da4 | |||
| b2c5c58798 | |||
| 230f92a697 | |||
| c1a0a3eb9c | |||
| 34bf329046 | |||
| 759640c053 | |||
| 96016a5e8a | |||
| d35751f97a | |||
| bc0523930c | |||
| 7ee3069f2b | |||
| 366c33d22d | |||
| 826277ad5b | |||
| afce404101 | |||
| 392cd3a3e1 | |||
| b14ed80451 | |||
| 6576345561 | |||
| ac864a549e | |||
| 529e0aca4d | |||
| fb4bd0c1bb | |||
| 1067bd92b6 | |||
| f2eca7caf5 | |||
| 9cd217f3b3 | |||
| c08fa8900d | |||
| 107697f81d | |||
| 05ef08671c | |||
| a48f5cc0a5 | |||
| 9030c2b7a2 | |||
| d63d6b28ce | |||
| ff34565b46 | |||
| d39aca7cd6 | |||
| f03ee49f25 | |||
| 043a194f72 | |||
| 0410599eee | |||
| 75b3405d6b | |||
| b5a9e65b7e | |||
| bfa32c4f21 | |||
| e57f4d9b18 | |||
| 1ea1de241e | |||
| ea23f46b39 | |||
| 2736eaffb7 | |||
| c822fa01d6 | |||
| 55ea0fb002 | |||
| 37c6ebb67f | |||
| e57725a2d9 | |||
| 799cde4423 | |||
| 899baa7d2d | |||
| 122f73b1c3 | |||
| 24e930e12a | |||
| e7aea5284d | |||
| 0ae9008f02 | |||
| b14b646274 | |||
| 63745a38f8 | |||
| 36eb7494e9 | |||
| df05c19922 | |||
| fb645b5490 | |||
| 0a69476d7f | |||
| 397a92e514 | |||
| 30fdcf68ff | |||
| 5b84a62198 | |||
| aa2da80110 | |||
| 8072c2d0ab | |||
| 47d36dde4f | |||
| 52123bad72 | |||
| 3b5b099107 | |||
| 26a1a5e336 | |||
| 0dfb15dad0 | |||
| 2314eca4bc | |||
| 1b0a21e604 | |||
| 841f2bda8d | |||
| 83ede2cde1 | |||
| e7a52c144f | |||
| e58511274c | |||
| f4240ab51f | |||
| 8c13db4903 | |||
| f9d2ac2a16 | |||
| 1725db6e49 | |||
| 4cadf9b10c | |||
| 88b7914ba3 | |||
| e9aafdafe7 | |||
| 2c40dd6bd2 | |||
| 687e794e00 | |||
| 6725c49e10 | |||
| 760685570b | |||
| fc76627d69 | |||
| 2a0318f72a | |||
| ef0fd409db | |||
| 70bca8f75e | |||
| d3bf6c2cba | |||
| 71cf376842 | |||
| 388ab401f9 | |||
| 6f2fb3eda9 | |||
| 9fc1fb2f59 | |||
| d55f54d30d | |||
| 0e5d6be90a | |||
| 1fd1c7b457 | |||
| db22e9cbed | |||
| 2d2e3a53b9 | |||
| 3bad90c8f4 | |||
| 58f7f2768e | |||
| 848099b342 | |||
| 936a1dbdff | |||
| 9d061dabb3 | |||
| 3f16483167 | |||
| 846151e2ab | |||
| e028f31d80 | |||
| c5cf773c78 | |||
| a9cccb1ac4 | |||
| fb1e547993 | |||
| e00e8e34f0 | |||
| 05f38fd481 | |||
| 8d4f42b6ea | |||
| 77747e64c2 | |||
| 45ee6cac8e | |||
| 5bd40321bb | |||
| ebebc1db9c | |||
| f5e63f1ea4 | |||
| b3b6b51230 | |||
| 047ad44ce2 | |||
| 97d20c5866 | |||
| 2889d59927 | |||
| 16fcd9e4c9 | |||
| fa5936ecbc | |||
| eeb929e473 | |||
| b830ec4abe | |||
| b448940c2b | |||
| aea3123153 | |||
| eb4bfd2b19 | |||
| 40056d1594 | |||
| ca760b6e91 | |||
| ee8b22e226 | |||
| a2c8db4b88 | |||
| c6a319b054 | |||
| f603c87d70 | |||
| d1e9bfce97 | |||
| 1ef0cdce3d | |||
| 63f0c793b2 | |||
| 0f16a88e45 | |||
| 87ddc8dc71 | |||
| 5c098ddfad | |||
| 7cb750dfd0 | |||
| c366d3dd8f | |||
| ee222422f9 | |||
| 1891eca7f0 | |||
| 9fefc8f40b | |||
| 65b7795002 | |||
| 600e1bcdc6 | |||
| e7aa0b692b | |||
| fcd4306a29 | |||
| 82a3c3fe0a | |||
| 4026194016 | |||
| d0266358ec | |||
| 59667fddcd | |||
| eb6721206b | |||
| abb6b08216 | |||
| 9e8a6a7144 | |||
| b7ead3442b | |||
| 88cbb9d22e | |||
| 21b1c7fe11 | |||
| 651cbfc6b1 | |||
| a2d78e4696 | |||
| 907ad47fe4 | |||
| ad50ce10b1 | |||
| 286e2674cf | |||
| 7466089959 | |||
| 0a445560f9 | |||
| 0d25d690a6 | |||
| eccd5b171f | |||
| 8ecbde63c1 | |||
| 1e979178fd | |||
| 8dd8e2aa11 | |||
| 24f0e24010 | |||
| 352b8b0607 | |||
| 81b4bec146 | |||
| 8476a50e89 | |||
| 233f136790 | |||
| 25c9b415c9 | |||
| 5d15ad1d98 | |||
| d9cffdc00c | |||
| 4966905b59 | |||
| 7bf49b6bf1 | |||
| 0789f494e5 | |||
| 206d2588ec | |||
| 4b9cac02fb | |||
| bccb454286 | |||
| f6df3676ac | |||
| 3587f8929a | |||
| 15381934a5 | |||
| 23c4e9de7f | |||
| 6e24f4aa0f | |||
| 1e8d0e7115 | |||
| 064dc43a01 | |||
| 33738806a6 | |||
| 8c7dbe7b06 | |||
| 56fc7e6c68 | |||
| ce84efe74e | |||
| ff5654805d | |||
| b242d73402 | |||
| 1f4e1652d3 | |||
| 3ce1f3303b | |||
| e59db9eaa8 | |||
| 90666ee590 | |||
| a936144e9b | |||
| c9d09700ff | |||
| 9518671062 | |||
| 3c577bf575 | |||
| 2506051933 | |||
| 072b672ce0 | |||
| 5135fde627 | |||
| f7e4b2d642 | |||
| 90f11052f1 | |||
| 4637bb3cf3 | |||
| d64a13221b | |||
| 694e3a88dd | |||
| c90882c562 | |||
| 91c16e8549 | |||
| fb66afc45a | |||
| 73c98f91c3 | |||
| 13aee35ff0 | |||
| a73e67649e | |||
| 96a9ee620d | |||
| 65218ec990 | |||
| cccc65a201 | |||
| e5c4308f1b | |||
| 18ae5ae719 | |||
| 95a514a20d | |||
| 63b8444286 | |||
| 73d9195d84 | |||
| 4989e3ee8f | |||
| ca08ad00cc | |||
| f1766c4f92 | |||
| 1f2d7cdc54 | |||
| 9a7c8386db | |||
| 60539fedc0 | |||
| 350df35b8d | |||
| 96a9cd64ae | |||
| ccf36ab2b3 | |||
| a459dba350 | |||
| 8967ea2e43 | |||
| 3f0f569d5c | |||
| cfb1a0c7f7 | |||
| ff7f59c9c7 | |||
| 1b6652fcd3 | |||
| 4d6d004693 | |||
| 592f36cddf | |||
| 714828a4be | |||
| 455734a482 | |||
| 49b75494a3 | |||
| 0e1bfd60b1 | |||
| 7c06649ce7 | |||
| 83655488c2 | |||
| 522ca9b8d0 | |||
| dc3b1df0db | |||
| 8b4b52af82 | |||
| 2d45aa85a7 | |||
| d8635e66ea | |||
| 18400c207b | |||
| c58b08d473 | |||
| d3ca0bae1b | |||
| 955ae107dd | |||
| 3ba8cfa37d | |||
| 4a1de37f8c | |||
| 8615e750a9 | |||
| 123c555b7f | |||
| 799c34bb3b | |||
| df083a4ce0 | |||
| b71d980b52 | |||
| 94fd884aba | |||
| 6f77189809 | |||
| 45578c883b | |||
| eea1a3bf4f | |||
| 4dd5be6315 | |||
| 9413267978 | |||
| dcddb6f1d3 | |||
| d5c56720fe | |||
| 8a452c41da | |||
| 66ee19231a | |||
| 7ebf784b27 | |||
| 048c3dd7d4 | |||
| 1d094bf577 | |||
| c1364f0c43 | |||
| e55cde128f | |||
| b75207df79 | |||
| a96a4a91cb | |||
| f21eda6dc0 | |||
| 20e0753aa5 | |||
| 88a2d6d04c | |||
| 57f9732197 | |||
| 5e76efce82 | |||
| cb75a76876 | |||
| f7e1781370 | |||
| 00e6a9ccda | |||
| 01693fc119 | |||
| ad34710ff7 | |||
| b0787429d5 | |||
| 52cd16181c | |||
| d65b80eb10 | |||
| ad21a5499d | |||
| ce57105826 | |||
| b690bdbc72 | |||
| 26b0cc46b5 | |||
| 77a8ac4d5d | |||
| d33d1bc2d4 | |||
| 64455a10f1 | |||
| 62e9dbd364 | |||
| 10a32352fb | |||
| cff7f4506d | |||
| 01dd3fbc85 | |||
| 84b97c6583 | |||
| 4e06ea3d09 | |||
| 9cf2323de8 | |||
| 3777291ad0 | |||
| 39df221e0c | |||
| f2d7fcd5c1 | |||
| 7d86197940 | |||
| dc836f07c7 | |||
| fae9cb4366 | |||
| bf6a150ef4 | |||
| 0bfa3bffe3 | |||
| 9f90607a5e | |||
| 61e8469f7a | |||
| 652bde1847 | |||
| d494226e74 | |||
| a7c04bb83c | |||
| 80593e8db7 | |||
| 39feff04ad | |||
| 787e14b03c | |||
| 2487d00613 | |||
| ba04fc07c1 | |||
| e17fba2005 | |||
| 79ceb0e077 | |||
| 4776d3c53c | |||
| 55fcd47625 | |||
| 55babc93c9 | |||
| 9d4831fd4c | |||
| 5cf22583ea | |||
| 04dd540b94 | |||
| ea4e68e572 | |||
| 2c4e1f5135 | |||
| edba4f052e | |||
| 982a2bc731 | |||
| 761327443d | |||
| 54d5d21831 | |||
| 2ef79cde60 | |||
| 4663cfb966 | |||
| 894385775a | |||
| 3374e62529 | |||
| f6c14ed355 | |||
| 8959506b11 | |||
| 9fa8825470 | |||
| 782118c7f5 | |||
| b7f888064c | |||
| 13288814cd | |||
| f3082e05fd | |||
| 708a870ff2 | |||
| d9d7577e2f | |||
| b1a39bdffd | |||
| 51666d9724 | |||
| d59cc98703 | |||
| 83c1846dc7 | |||
| 0184a57304 | |||
| 6a29f1794a | |||
| fe8ed795d0 | |||
| 0ff80a13b7 | |||
| d9cb7624a3 | |||
| 1aad132954 | |||
| e9a7b160bc | |||
| dc48a1ae8d | |||
| 883cced078 | |||
| ac0ef35a1f | |||
| 1d9d18545f | |||
| 4527468f55 | |||
| 34ace5f71f | |||
| d18f26c159 | |||
| f647ad5ad3 | |||
| 05dc1d586b | |||
| e3f06314ae | |||
| 802774330a | |||
| fd7b319386 | |||
| 3312a44e16 | |||
| c0632865b2 | |||
| 727d79dd1d | |||
| 929f7ea189 | |||
| 7a8242dd27 | |||
| 4e4529dad2 | |||
| 6bb551c02b | |||
| 7a0006dd76 | |||
| 6b93486833 | |||
| bda46a66bb | |||
| 77d2015a9e | |||
| 12a0ea73f5 | |||
| 196dcaa6e1 | |||
| 0340b692a5 | |||
| 04d1170057 | |||
| 6f358c8ccb | |||
| a46fbe6606 | |||
| 4ece081e77 | |||
| a8ead9c178 | |||
| 81bd33b812 | |||
| 2fb021b829 | |||
| 754c71e34e | |||
| e66f1d4136 | |||
| 804504505a | |||
| 1e65142e17 | |||
| 199b4304d2 | |||
| d2b6e15a2e | |||
| 665ecfceac | |||
| aa37b5a012 | |||
| e2d36abad5 | |||
| f1b6dc6350 | |||
| 0e8e8be278 | |||
| e3db07a5f4 | |||
| f52ec4a8e2 | |||
| 469c20a175 | |||
| c1ca056967 | |||
| f7de25197e | |||
| ec3287c24b | |||
| e67de669e4 | |||
| 8618bcbe65 | |||
| 132bd5bc39 | |||
| b297748bbe | |||
| 045acff959 | |||
| c4a2170e7f | |||
| 3ae8137a67 | |||
| d2417e61cb | |||
| f69867b4b4 | |||
| eed033f508 | |||
| ef114aad8a | |||
| 8c2b0f789a | |||
| 87599d0ae8 | |||
| 15c77e83a5 | |||
| 478da3c1e2 | |||
| 3591cafc99 | |||
| 4befbd31df | |||
| 7953b5de59 | |||
| 8370fda1da | |||
| 44791ea5b0 | |||
| 80d19760c3 | |||
| 7c95b19d47 | |||
| 872e5ae0d4 | |||
| fda8d899c3 | |||
| 070bff7267 | |||
| 89afc1291c | |||
| 6b60cbef49 | |||
| 8ca6d9fc27 | |||
| 64babcb67b | |||
| 7a9396617b | |||
| 6f30ae8cae | |||
| 3a1dbed578 | |||
| 8470501c7e | |||
| f1e1ec917c | |||
| 5aa85b4b71 | |||
| e33b509b47 | |||
| b8dba167d6 | |||
| becbc3ca51 | |||
| aae4a7310e | |||
| d922905840 | |||
| 212a809865 | |||
| 25096f11d3 | |||
| eef7b6f639 | |||
| fe97579bf7 | |||
| 877d3d8fd3 | |||
| a880efa8a5 | |||
| 2603f7d752 | |||
| e237d02b1e | |||
| eeb2286c8e | |||
| edb50afaaa | |||
| 9fe5969b2c | |||
| 3374d843b1 | |||
| 93514b2529 | |||
| ab05d7420b | |||
| 954cc571f7 | |||
| 6082cbeb1c | |||
| e7762db422 | |||
| 148324e2f9 | |||
| 6ca76d7193 | |||
| 3ada5ee987 | |||
| 1839597aff | |||
| 50ce3fdabd | |||
| af182d5f7e | |||
| a42aff062c | |||
| 5eadefaf39 | |||
| ea3dc82ba1 | |||
| da405e19b8 | |||
| b814fe1a05 | |||
| aac4e73ea3 | |||
| f9d6b7ccf6 | |||
| 3432d6bbf0 | |||
| e8617f821c | |||
| d044ee5655 | |||
| 8db848b193 | |||
| 51d5043d59 | |||
| bba75072da | |||
| f58cf22fe3 | |||
| 486924c984 | |||
| b01c25971d | |||
| 8f693052e9 | |||
| 7b391f2634 | |||
| 29bf478af3 | |||
| 774a6f57df | |||
| 21d65144e7 | |||
| 17cb6a5c9e | |||
| 5a1c63c189 | |||
| 6efdb0f8b7 | |||
| e6b25fa6b0 | |||
| 9287aa1907 | |||
| cab1e51b69 | |||
| 44ffbc2982 | |||
| 8e0c5c7437 | |||
| c607c127eb | |||
| f8931527cf | |||
| f50b035682 | |||
| 1ceae85a66 | |||
| 50528e4c5c | |||
| 54f35aaf47 | |||
| bdfda4b8dd | |||
| 038eb594b6 | |||
| 8e84ec91ec | |||
| 6f8191a62f | |||
| 11569bc2b9 | |||
| 4b9d2fcd3b | |||
| 9d05286d31 | |||
| a39dca7ee2 | |||
| a6668dc527 | |||
| 7f4bb56e71 | |||
| f3a456c1a5 | |||
| 2ac9d59a1f | |||
| cb62a9a02c | |||
| d5e3434b71 | |||
| f7f5ccbad3 | |||
| d35c6aef19 | |||
| ec05d84305 | |||
| 1aeeaf31b2 | |||
| 893d57ccc0 | |||
| 7f7774c265 | |||
| e4a1c4d3d1 | |||
| cc950d8fe7 | |||
| cb80312f09 | |||
| 7ff787ea84 | |||
| 0873e735b9 | |||
| bc174f29c9 | |||
| 1007258b34 | |||
| f113008446 | |||
| 8c6aa2e7f6 | |||
| 365b788ecd | |||
| 251151ad9a | |||
| c6b4ed48f7 | |||
| 1e97f454a2 | |||
| ad64e1e8d7 | |||
| 135f53bce5 | |||
| 65732469e8 | |||
| a22fd7e052 | |||
| ca55de2bf5 | |||
| fbec32928f | |||
| 8e1d88b958 | |||
| 2b7efc6d7f | |||
| b7c0628ad5 | |||
| 852adaeccb | |||
| 06265f8ac8 | |||
| b9b598143a | |||
| 8e95a280da | |||
| 44bc3aa470 | |||
| 7efc61b8df | |||
| 9a607f3724 | |||
| 83480c5a86 | |||
| 1b2e99c75e | |||
| 1cfc1f561f | |||
| be7396b644 | |||
| 6d1f20ee0c | |||
| 2d8c7a0316 | |||
| 95183e9855 | |||
| 232d7b6f4d | |||
| 22a3ceef70 | |||
| d62b919128 | |||
| 2ce7aab89a | |||
| cebaa1b292 | |||
| 175e4ba528 | |||
| 5750182a99 | |||
| 1e053b6cb6 | |||
| 16eab1533a | |||
| ac79245d33 | |||
| a6035afaca | |||
| b472701380 | |||
| 2d9b961b2e | |||
| 88f753efee | |||
| eb870d0481 | |||
| 9b858b7c75 | |||
| ff6739a1a2 | |||
| 4673311ad3 | |||
| 7be68e8927 | |||
| d2b6a036f4 | |||
| a20a3550c0 | |||
| 1d040a585a | |||
| d0af373397 | |||
| ae73299320 | |||
| a296f5e3fd | |||
| b2d6fe0440 | |||
| c3cb514e23 | |||
| 393b70a138 | |||
| 821cff2f12 | |||
| fa3fbed4c9 | |||
| 6b674976fb | |||
| 22ba7820ab | |||
| d89a7f2fba | |||
| 6226510e1d | |||
| e75de0ff00 | |||
| 32ac4b25ac | |||
| 849cd39ce4 | |||
| f387e29e3e | |||
| 9acf8a4cf2 | |||
| f63656c27d | |||
| 8ee551749f | |||
| 2259a24269 | |||
| 6428dc3a75 | |||
| 1a5e8fea9c | |||
| 0699040219 | |||
| 2e2e1a07ae | |||
| 3eae1a6f9e | |||
| 1a5d9c5b02 | |||
| db327e54b6 | |||
| 2dfc7476c0 | |||
| a5fa85812d | |||
| be409c18a4 | |||
| 229a51ba56 | |||
| c0c9e19083 | |||
| e7109fce59 | |||
| 6aa0a6874d | |||
| 638b3bf5f3 | |||
| 021eac0899 | |||
| 3ae4f5e123 | |||
| 47a41f8076 | |||
| 58cbfea1fb | |||
| a3ed187b6d | |||
| 457e24f26b | |||
| c44d596eeb | |||
| 0dbdf5c1e7 | |||
| cf52121cde | |||
| 1fec10c0d7 | |||
| fe793ca1bd | |||
| 9d60e4643e | |||
| 38ad05bf7c | |||
| 5181efbb16 | |||
| 2d8b8fb27d | |||
| 93d2bf8094 | |||
| f1ec59394b | |||
| 64786ad892 | |||
| 33e17f8d9c | |||
| 424eaeb69c | |||
| a0a6e4b768 | |||
| 9b4306b76a | |||
| 079547e662 | |||
| f41d211a96 | |||
| c570cbeeca | |||
| 1fc4bc3255 | |||
| 878f508448 | |||
| 11f695eee7 | |||
| 3842cba361 | |||
| 306316ba49 | |||
| 6f90d0861b | |||
| 618f68d441 | |||
| 8d634eded9 | |||
| 97a2df58bc | |||
| cf24bc6658 | |||
| 242f3fb142 | |||
| 0efa7d4b3a | |||
| a4f763b806 | |||
| efcca6c817 | |||
| 136f09029d |
@@ -10,7 +10,7 @@ Paketleme Kuralları;
|
||||
|
||||
1. Core kaynak deposunda minimum X bağımlılığı hedeflenmiştir.
|
||||
|
||||
1. configure seçeneklerinde belge oluşturmaya yönelik seçenekler açılmamalı, bağımlılıklar yazılamalıdır.
|
||||
1. configure seçeneklerinde belge oluşturmaya yönelik seçenekler açılmamalı, bağımlılıklar yazılmalıdır.
|
||||
|
||||
1. configure seçeneklerinde pakete yeni bağımlılık getirecek değişiklikler için mutlaka issue açılmalı, tartışılmadan pull request istenmemelidir.
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
2016-04-27 /system/boot/busybox-mkinitcpio/pspec.xml
|
||||
2016-04-27 /kernel/tools/mkinitcpio/pspec.xml
|
||||
@@ -11,7 +11,8 @@ from pisi.actionsapi import get
|
||||
|
||||
def setup():
|
||||
autotools.configure("--disable-static \
|
||||
--with-harfbuzz=no")
|
||||
--with-harfbuzz=no \
|
||||
--enable-freetype-config")
|
||||
|
||||
def build():
|
||||
autotools.make()
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<PISI>
|
||||
<Source>
|
||||
<Name>freetype</Name>
|
||||
<Homepage>http://www.freetype.org/</Homepage>
|
||||
<Homepage>https://www.freetype.org/</Homepage>
|
||||
<Packager>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admins@pisilinux.org</Email>
|
||||
@@ -13,7 +13,7 @@
|
||||
<IsA>library</IsA>
|
||||
<Summary>A high-quality and portable font engine</Summary>
|
||||
<Description>FreeType 2 is a software font engine that is designed to be small, efficient, highly customizable, and portable while capable of producing high-quality output. It can be used in graphics libraries, display servers, font conversion tools, text image generation tools, and many other products as well.</Description>
|
||||
<Archive sha1sum="4d08a9a6567c6332d58e9a5f9a7e9e3fbce66789" type="tarbz2">mirrors://sourceforge/freetype/freetype-2.7.1.tar.bz2</Archive>
|
||||
<Archive sha1sum="79874ef4eaa52025126b71d836453b8279bdd331" type="tarxz">mirrors://sourceforge/freetype/freetype-2.10.1.tar.xz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency>zlib-devel</Dependency>
|
||||
<Dependency>bzip2</Dependency>
|
||||
@@ -46,8 +46,8 @@
|
||||
<Files>
|
||||
<Path fileType="executable">/usr/bin</Path>
|
||||
<Path fileType="header">/usr/include</Path>
|
||||
<Path fileType="data">/usr/lib/pkgconfig</Path>
|
||||
<Path fileType="data">/usr/lib32/pkgconfig</Path>
|
||||
<Path fileType="library">/usr/lib/pkgconfig</Path>
|
||||
<Path fileType="library">/usr/lib32/pkgconfig</Path>
|
||||
<Path fileType="data">/usr/share/aclocal</Path>
|
||||
</Files>
|
||||
</Package>
|
||||
@@ -72,6 +72,34 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="7">
|
||||
<Date>2019-08-01</Date>
|
||||
<Version>2.10.1</Version>
|
||||
<Comment>Version bump</Comment>
|
||||
<Name>Idris Kalp</Name>
|
||||
<Email>idriskalp@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="6">
|
||||
<Date>2019-06-09</Date>
|
||||
<Version>2.10.0</Version>
|
||||
<Comment>Version bump</Comment>
|
||||
<Name>Idris Kalp</Name>
|
||||
<Email>idriskalp@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="5">
|
||||
<Date>2018-07-23</Date>
|
||||
<Version>2.9</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="4">
|
||||
<Date>2018-04-17</Date>
|
||||
<Version>2.9</Version>
|
||||
<Comment>Version Bump</Comment>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="3">
|
||||
<Date>2017-02-02</Date>
|
||||
<Version>2.7.1</Version>
|
||||
|
||||
@@ -15,7 +15,7 @@ import lzma
|
||||
|
||||
import piksemel
|
||||
|
||||
pisirepouri = "http://ciftlik.pisilinux.org/2.0-Beta.1/pisi-index.xml.xz"
|
||||
pisirepouri = "file:///home/ertugerata/Works/2.0-Beta.1/pisi-index.xml.xz"
|
||||
svnrepouri = "https://github.com/ertugerata/core/raw/master/pisi-index.xml.xz"
|
||||
|
||||
def getIndex(uri):
|
||||
|
||||
@@ -35,6 +35,13 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="4">
|
||||
<Date>2018-07-23</Date>
|
||||
<Version>9</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="3">
|
||||
<Date>2017-02-07</Date>
|
||||
<Version>9</Version>
|
||||
|
||||
@@ -189,6 +189,13 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="4">
|
||||
<Date>2018-07-23</Date>
|
||||
<Version>2.02.167</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="3">
|
||||
<Date>2017-01-29</Date>
|
||||
<Version>2.02.167</Version>
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
diff -Nuar a/crc32c.c b/crc32c.c
|
||||
--- a/crc32c.c 2016-01-28 08:14:56.000000000 +0200
|
||||
+++ b/crc32c.c 2018-10-01 21:34:33.000000000 +0300
|
||||
@@ -27,6 +27,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
+#include <sys/sysmacros.h>
|
||||
#include <asm/types.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
diff -Nuar a/mdadm.h b/mdadm.h
|
||||
--- a/mdadm.h 2016-01-28 08:14:56.000000000 +0200
|
||||
+++ b/mdadm.h 2018-10-01 21:35:23.000000000 +0300
|
||||
@@ -34,6 +34,7 @@
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
+#include <sys/sysmacros.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
diff -Nuar a/mdmon.c b/mdmon.c
|
||||
--- a/mdmon.c 2016-01-28 08:14:56.000000000 +0200
|
||||
+++ b/mdmon.c 2018-10-01 21:35:42.000000000 +0300
|
||||
@@ -46,6 +46,7 @@
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
+#include <sys/sysmacros.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
diff -Nuar a/msg.c b/msg.c
|
||||
--- a/msg.c 2016-01-28 08:14:56.000000000 +0200
|
||||
+++ b/msg.c 2018-10-01 21:35:57.000000000 +0300
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
+#include <sys/sysmacros.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
#include "mdadm.h"
|
||||
diff -Nuar a/platform-intel.c b/platform-intel.c
|
||||
--- a/platform-intel.c 2016-01-28 08:14:56.000000000 +0200
|
||||
+++ b/platform-intel.c 2018-10-01 21:36:16.000000000 +0300
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/types.h>
|
||||
+#include <sys/sysmacros.h>
|
||||
#include <sys/stat.h>
|
||||
#include <limits.h>
|
||||
|
||||
diff -Nuar a/probe_roms.c b/probe_roms.c
|
||||
--- a/probe_roms.c 2016-01-28 08:14:56.000000000 +0200
|
||||
+++ b/probe_roms.c 2018-10-01 21:36:27.000000000 +0300
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
+#include <sys/sysmacros.h>
|
||||
#include <asm/types.h>
|
||||
|
||||
static void *rom_mem = MAP_FAILED;
|
||||
diff -Nuar a/sha1.h b/sha1.h
|
||||
--- a/sha1.h 2016-01-28 08:14:56.000000000 +0200
|
||||
+++ b/sha1.h 2018-10-01 21:36:43.000000000 +0300
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <sys/types.h>
|
||||
+#include <sys/sysmacros.h>
|
||||
typedef u_int32_t sha1_uint32;
|
||||
typedef uintptr_t sha1_uintptr;
|
||||
#else
|
||||
@@ -16,6 +16,9 @@
|
||||
<BuildDependencies>
|
||||
<Dependency>dietlibc</Dependency>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<Patch level="1">sysmacros.patch</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
<Package>
|
||||
@@ -54,6 +57,20 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="5">
|
||||
<Date>2018-10-02</Date>
|
||||
<Version>3.4</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="4">
|
||||
<Date>2018-07-19</Date>
|
||||
<Version>3.4</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="3">
|
||||
<Date>2017-01-29</Date>
|
||||
<Version>3.4</Version>
|
||||
|
||||
@@ -27,6 +27,13 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="4">
|
||||
<Date>2018-07-15</Date>
|
||||
<Version>4.0.18</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="3">
|
||||
<Date>2017-01-29</Date>
|
||||
<Version>4.0.18</Version>
|
||||
|
||||
Binary file not shown.
@@ -17,16 +17,16 @@
|
||||
<IsA>data</IsA>
|
||||
<Summary>Firmware files used by the Linux kernel</Summary>
|
||||
<Description>linux-firmware contains different firmware files required for some devices to operate correctly.</Description>
|
||||
<!-- linux-firmware commit: 3ef7857d511ce6a91c5ce609da76c4702651cfa5 2016-06-24 -->
|
||||
<Archive sha1sum="06c03884d5e2540d0bb4918c1f348a7c46f6a496" type="tarbz2">https://sourceforge.net/projects/pisilinux/files/source/linux-firmware-20170113.tar.bz2</Archive>
|
||||
<Archive sha1sum="dd685266f7bc0acb0d455462637d23e3e895bc96" type="tarxz" target="linux-firmware/mix">http://source.pisilinux.org/erdinc/common-fw.tar.xz</Archive>
|
||||
<Archive sha1sum="b2bb7fce3ea67d131f543a48134f7a65f2a8d834" type="tarxz" target="linux-firmware/mix">http://source.pisilinux.org/erdinc/firmware-ipw.tar.xz</Archive>
|
||||
<Archive sha1sum="a5a616a9f765cf9cbb224deb7ccefdc82a7fe4d9" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/erdinc/firmware/firmware-nonfreebox-2-tar.bz2</Archive>
|
||||
<Archive sha1sum="6c18b28e62637fb809eaff89fff623ae1d470500" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/erdinc/firmware/ar9170.tar.bz2</Archive>
|
||||
<Archive sha1sum="aa3b414c2948be5f226a25fa5f37e56fd659a3bb" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/erdinc/firmware/ipw2x00-firmware.tar.bz2</Archive>
|
||||
<Archive sha1sum="f7ecf5412b7818871fa2798f1b314f8ddddb494e" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/erdinc/firmware/aic94xx-seq.tar.bz2</Archive>
|
||||
<Archive sha1sum="16d5f4dcc90f978732a9a5b3b0347672a6cc4c36" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/erdinc/firmware/accessrunner-firmware.tar.bz2</Archive>
|
||||
<Archive sha1sum="e40729d30ad6d7a6c88b90ee7bc5fbaeb9458cb7" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/erdinc/firmware/rtl8192se-firmware.tar.bz2</Archive>
|
||||
<!-- linux-firmware commit: 711d3297bac870af42088a467459a0634c1970ca 2019-05-14 -->
|
||||
<Archive sha1sum="4711d2c3125580edf46161694439a2eef4fc0cec" type="tarxz">https://sourceforge.net/projects/pisilinux/files/source/linux-firmware-20190514.tar.xz</Archive>
|
||||
<Archive sha1sum="dd685266f7bc0acb0d455462637d23e3e895bc96" type="tarxz" target="linux-firmware/mix">http://source.pisilinux.org/common-fw/common-fw.tar.xz</Archive>
|
||||
<Archive sha1sum="b2bb7fce3ea67d131f543a48134f7a65f2a8d834" type="tarxz" target="linux-firmware/mix">http://source.pisilinux.org/firmware-ipw/firmware-ipw.tar.xz</Archive>
|
||||
<Archive sha1sum="a5a616a9f765cf9cbb224deb7ccefdc82a7fe4d9" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/firmware-nonfreebox/firmware-nonfreebox-2-tar.bz2</Archive>
|
||||
<Archive sha1sum="6c18b28e62637fb809eaff89fff623ae1d470500" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/ar9170/ar9170.tar.bz2</Archive>
|
||||
<Archive sha1sum="aa3b414c2948be5f226a25fa5f37e56fd659a3bb" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/ipw2x00-firmware/ipw2x00-firmware.tar.bz2</Archive>
|
||||
<Archive sha1sum="f7ecf5412b7818871fa2798f1b314f8ddddb494e" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/aic94xx/aic94xx-seq.tar.bz2</Archive>
|
||||
<Archive sha1sum="16d5f4dcc90f978732a9a5b3b0347672a6cc4c36" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/accessrunner/accessrunner-firmware.tar.bz2</Archive>
|
||||
<Archive sha1sum="e40729d30ad6d7a6c88b90ee7bc5fbaeb9458cb7" type="tarbz2" target="linux-firmware/mix">http://source.pisilinux.org/rtl8192se/rtl8192se-firmware.tar.bz2</Archive>
|
||||
<Archive sha1sum="ff9e7f4b120476a90cd3fb69d76240166c4ff2a5" type="tarbz2" target="linux-firmware/mix">http://sourceforge.net/projects/pisilinux/files/source/zd12x1.tar.bz2</Archive>
|
||||
<Archive sha1sum="3239212ae7c5f60baa749764dcb8f5189e1e2f13" type="tarxz" target="linux-firmware/mix">http://sourceforge.net/projects/pisilinux/files/source/nouveau-340-32.tar.xz</Archive>
|
||||
<AdditionalFiles>
|
||||
@@ -49,6 +49,34 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="8">
|
||||
<Date>2019-06-05</Date>
|
||||
<Version>20190514</Version>
|
||||
<Comment>Update</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="7">
|
||||
<Date>2018-07-29</Date>
|
||||
<Version>20180722</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="6">
|
||||
<Date>2018-07-15</Date>
|
||||
<Version>20171123</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="5">
|
||||
<Date>2017-11-23</Date>
|
||||
<Version>20171123</Version>
|
||||
<Comment>Release Bump</Comment>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="4">
|
||||
<Date>2017-02-11</Date>
|
||||
<Version>20170113</Version>
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright 2019 TUBITAK/UEKAE
|
||||
# Licensed under the GNU General Public License, version 2.
|
||||
# See the file http://www.gnu.org/copyleft/gpl.txt.
|
||||
|
||||
from pisi.actionsapi import pisitools
|
||||
|
||||
def install():
|
||||
pisitools.insinto("/usr/lib/crda/", "regulatory.bin")
|
||||
pisitools.insinto("/lib/firmware", "regulatory.db*")
|
||||
pisitools.insinto("/etc/wireless-regdb/pubkeys", "sforshee.key.pub.pem")
|
||||
|
||||
pisitools.doman("regulatory.db.5")
|
||||
|
||||
pisitools.dodoc("LICENSE", "README", "CONTRIBUTING")
|
||||
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" ?>
|
||||
<!DOCTYPE PISI SYSTEM "http://www.pardus.org.tr/projeler/pisi/pisi-spec.dtd">
|
||||
<PISI>
|
||||
<Source>
|
||||
<Name>wireless-regdb</Name>
|
||||
<Homepage>https://wireless.wiki.kernel.org/en/developers/Regulatory</Homepage>
|
||||
<Packager>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Packager>
|
||||
<License>ISC</License>
|
||||
<Icon>wireless-regdb</Icon>
|
||||
<IsA>app:console</IsA>
|
||||
<Summary>This package contains the wireless regulatory database used by all cfg80211 based Linux wireless drivers</Summary>
|
||||
<Description>This package contains the wireless regulatory database used by all cfg80211 based Linux wireless drivers</Description>
|
||||
<Archive sha1sum="a4a541f4ef81985e919b15477253f16df997e8d9" type="tarxz">https://mirrors.edge.kernel.org/pub/software/network/wireless-regdb/wireless-regdb-2018.10.24.tar.xz</Archive>
|
||||
</Source>
|
||||
|
||||
<Package>
|
||||
<Name>wireless-regdb</Name>
|
||||
<Files>
|
||||
<Path fileType="conf">/etc/wireless-regdb</Path>
|
||||
<Path fileType="data">/usr/lib/crda</Path>
|
||||
<Path fileType="data">/lib/firmware</Path>
|
||||
<Path fileType="man">/usr/share/man</Path>
|
||||
<Path fileType="doc">/usr/share/doc</Path>
|
||||
</Files>
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="1">
|
||||
<Date>2019-01-15</Date>
|
||||
<Version>2018.10.24</Version>
|
||||
<Comment>First release</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
</History>
|
||||
</PISI>
|
||||
@@ -1,17 +1,19 @@
|
||||
<?xml version="1.0" ?>
|
||||
<!DOCTYPE PISI SYSTEM "http://www.pisilinux.org/projeler/pisi/pisi-spec.dtd">
|
||||
<PISI>
|
||||
<Source>
|
||||
<Name>module-bbswitch</Name>
|
||||
<Homepage>https://github.com/Bumblebee-Project/bbswitch</Homepage>
|
||||
<Packager>
|
||||
<Name>Serdar Soytetir</Name>
|
||||
<Email>kaptan@pisilinux.org</Email>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Packager>
|
||||
<License>GPL</License>
|
||||
<IsA>app:gui</IsA>
|
||||
<Summary>Kernel module allowing to switch dedicated graphics card on Optimus laptops</Summary>
|
||||
<Description>kernel module allowing to switch dedicated graphics card on Optimus laptops</Description>
|
||||
<BuildDependencies>
|
||||
<Dependency version="4.9.6">kernel-module-headers</Dependency>
|
||||
<Dependency version="4.19.56">kernel-module-headers</Dependency>
|
||||
</BuildDependencies>
|
||||
<Archive sha1sum="e282ee682d794e3962baa4dead01917c42571e78" type="targz">https://github.com/Bumblebee-Project/bbswitch/archive/v0.8.tar.gz</Archive>
|
||||
<Patches>
|
||||
@@ -20,7 +22,7 @@
|
||||
<Package>
|
||||
<Name>module-bbswitch</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency version="4.9.6">kernel</Dependency>
|
||||
<Dependency version="4.19.56">kernel</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="library" permanent="true">/lib/modules</Path>
|
||||
@@ -34,6 +36,132 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="26">
|
||||
<Date>2019-06-26</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="25">
|
||||
<Date>2019-05-11</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="24">
|
||||
<Date>2019-04-06</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="23">
|
||||
<Date>2019-01-20</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="22">
|
||||
<Date>2018-12-22</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="21">
|
||||
<Date>2018-10-05</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="20">
|
||||
<Date>2018-07-07</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="19">
|
||||
<Date>2018-07-15</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="18">
|
||||
<Date>2018-07-12</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Version bump</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="17">
|
||||
<Date>2018-04-28</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Version bump</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="16">
|
||||
<Date>2018-03-11</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="15">
|
||||
<Date>2018-03-03</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="14">
|
||||
<Date>2018-01-06</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="13">
|
||||
<Date>2017-12-20</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="12">
|
||||
<Date>2017-12-04</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="11">
|
||||
<Date>2017-11-19</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="10">
|
||||
<Date>2017-08-21</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="9">
|
||||
<Date>2017-07-04</Date>
|
||||
<Version>0.8</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="8">
|
||||
<Date>2017-02-01</Date>
|
||||
<Version>0.8</Version>
|
||||
@@ -91,4 +219,4 @@
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
</History>
|
||||
</PISI>
|
||||
</PISI>
|
||||
|
||||
Regular → Executable
+1
-1
@@ -20,4 +20,4 @@ def build():
|
||||
def install():
|
||||
pisitools.insinto("/lib/modules/%s/extra" % KDIR, "wl.ko")
|
||||
|
||||
pisitools.dodoc("lib/LICENSE.txt")
|
||||
pisitools.dodoc("lib/LICENSE.txt")
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
@@ -0,0 +1,52 @@
|
||||
diff --git a/src/wl/sys/wl_cfg80211_hybrid.c b/src/wl/sys/wl_cfg80211_hybrid.c
|
||||
index a9671e2..da36405 100644
|
||||
--- a/src/wl/sys/wl_cfg80211_hybrid.c
|
||||
+++ b/src/wl/sys/wl_cfg80211_hybrid.c
|
||||
@@ -30,6 +30,9 @@
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/ieee80211.h>
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
|
||||
+#include <linux/sched/signal.h>
|
||||
+#endif
|
||||
#include <net/cfg80211.h>
|
||||
#include <linux/nl80211.h>
|
||||
#include <net/rtnetlink.h>
|
||||
diff --git a/src/wl/sys/wl_linux.c b/src/wl/sys/wl_linux.c
|
||||
index 489c9f5..f8278ad 100644
|
||||
--- a/src/wl/sys/wl_linux.c
|
||||
+++ b/src/wl/sys/wl_linux.c
|
||||
@@ -117,6 +117,9 @@ int wl_found = 0;
|
||||
|
||||
typedef struct priv_link {
|
||||
wl_if_t *wlif;
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
|
||||
+ unsigned long last_rx;
|
||||
+#endif
|
||||
} priv_link_t;
|
||||
|
||||
#define WL_DEV_IF(dev) ((wl_if_t*)((priv_link_t*)DEV_PRIV(dev))->wlif)
|
||||
@@ -2450,6 +2453,9 @@ wl_monitor(wl_info_t *wl, wl_rxsts_t *rxsts, void *p)
|
||||
{
|
||||
struct sk_buff *oskb = (struct sk_buff *)p;
|
||||
struct sk_buff *skb;
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
|
||||
+ priv_link_t *priv_link;
|
||||
+#endif
|
||||
uchar *pdata;
|
||||
uint len;
|
||||
|
||||
@@ -2916,7 +2922,13 @@ wl_monitor(wl_info_t *wl, wl_rxsts_t *rxsts, void *p)
|
||||
if (skb == NULL) return;
|
||||
|
||||
skb->dev = wl->monitor_dev;
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
|
||||
+ priv_link = MALLOC(wl->osh, sizeof(priv_link_t));
|
||||
+ priv_link = netdev_priv(skb->dev);
|
||||
+ priv_link->last_rx = jiffies;
|
||||
+#else
|
||||
skb->dev->last_rx = jiffies;
|
||||
+#endif
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
|
||||
skb_reset_mac_header(skb);
|
||||
#else
|
||||
@@ -0,0 +1,64 @@
|
||||
diff -ru work.orig/src/wl/sys/wl_cfg80211_hybrid.c work.patched/src/wl/sys/wl_cfg80211_hybrid.c
|
||||
--- work.orig/src/wl/sys/wl_cfg80211_hybrid.c 2017-06-10 15:50:27.328823384 -0700
|
||||
+++ work.patched/src/wl/sys/wl_cfg80211_hybrid.c 2017-06-10 15:52:40.540809187 -0700
|
||||
@@ -52,8 +52,13 @@
|
||||
u32 wl_dbg_level = WL_DBG_ERR;
|
||||
#endif
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
|
||||
+static s32 wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
|
||||
+ enum nl80211_iftype type, struct vif_params *params);
|
||||
+#else
|
||||
static s32 wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
|
||||
enum nl80211_iftype type, u32 *flags, struct vif_params *params);
|
||||
+#endif
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)
|
||||
static s32
|
||||
wl_cfg80211_scan(struct wiphy *wiphy,
|
||||
@@ -466,7 +471,11 @@
|
||||
|
||||
static s32
|
||||
wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
|
||||
+ enum nl80211_iftype type,
|
||||
+#else
|
||||
enum nl80211_iftype type, u32 *flags,
|
||||
+#endif
|
||||
struct vif_params *params)
|
||||
{
|
||||
struct wl_cfg80211_priv *wl = wiphy_to_wl(wiphy);
|
||||
@@ -2361,12 +2370,26 @@
|
||||
const wl_event_msg_t *e, void *data)
|
||||
{
|
||||
struct wl_cfg80211_connect_info *conn_info = wl_to_conn(wl);
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
|
||||
+ struct cfg80211_roam_info roam_info = {};
|
||||
+#endif
|
||||
s32 err = 0;
|
||||
|
||||
wl_get_assoc_ies(wl);
|
||||
memcpy(wl->profile->bssid, &e->addr, ETHER_ADDR_LEN);
|
||||
memcpy(&wl->bssid, &e->addr, ETHER_ADDR_LEN);
|
||||
wl_update_bss_info(wl);
|
||||
+
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
|
||||
+ roam_info.channel = &wl->conf->channel,
|
||||
+ roam_info.bssid = (u8 *)&wl->bssid,
|
||||
+ roam_info.req_ie = conn_info->req_ie,
|
||||
+ roam_info.req_ie_len = conn_info->req_ie_len,
|
||||
+ roam_info.resp_ie = conn_info->resp_ie,
|
||||
+ roam_info.resp_ie_len = conn_info->resp_ie_len,
|
||||
+
|
||||
+ cfg80211_roamed(ndev, &roam_info, GFP_KERNEL);
|
||||
+#else
|
||||
cfg80211_roamed(ndev,
|
||||
#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39)
|
||||
&wl->conf->channel,
|
||||
@@ -2374,6 +2397,7 @@
|
||||
(u8 *)&wl->bssid,
|
||||
conn_info->req_ie, conn_info->req_ie_len,
|
||||
conn_info->resp_ie, conn_info->resp_ie_len, GFP_KERNEL);
|
||||
+#endif
|
||||
WL_DBG(("Report roaming result\n"));
|
||||
|
||||
set_bit(WL_STATUS_CONNECTED, &wl->status);
|
||||
@@ -0,0 +1,63 @@
|
||||
diff --git a/src/wl/sys/wl_linux.c b/src/wl/sys/wl_linux.c
|
||||
index 489c9f5..f8278ad 100644
|
||||
--- a/src/wl/sys/wl_linux.c
|
||||
+++ b/src/wl/sys/wl_linux.c
|
||||
@@ -93,7 +93,11 @@
|
||||
|
||||
#include <wlc_wowl.h>
|
||||
|
||||
+#ifdef HAVE_TIMER_SETUP
|
||||
+static void wl_timer(struct timer_list *list);
|
||||
+#else
|
||||
static void wl_timer(ulong data);
|
||||
+#endif
|
||||
static void _wl_timer(wl_timer_t *t);
|
||||
static struct net_device *wl_alloc_linux_if(wl_if_t *wlif);
|
||||
|
||||
@@ -2296,12 +2300,17 @@
|
||||
|
||||
atomic_dec(&t->wl->callbacks);
|
||||
}
|
||||
-
|
||||
+#ifdef HAVE_TIMER_SETUP
|
||||
+static void
|
||||
+wl_timer(struct timer_list *list)
|
||||
+{
|
||||
+ wl_timer_t *t = from_timer(t,list,timer);
|
||||
+#else
|
||||
static void
|
||||
wl_timer(ulong data)
|
||||
{
|
||||
wl_timer_t *t = (wl_timer_t *)data;
|
||||
-
|
||||
+#endif
|
||||
if (!WL_ALL_PASSIVE_ENAB(t->wl))
|
||||
_wl_timer(t);
|
||||
else
|
||||
@@ -2351,10 +2360,13 @@
|
||||
}
|
||||
|
||||
bzero(t, sizeof(wl_timer_t));
|
||||
-
|
||||
+#ifdef HAVE_TIMER_SETUP
|
||||
+ timer_setup(&t->timer, wl_timer,0);
|
||||
+#else
|
||||
init_timer(&t->timer);
|
||||
t->timer.data = (ulong) t;
|
||||
t->timer.function = wl_timer;
|
||||
+#endif
|
||||
t->wl = wl;
|
||||
t->fn = fn;
|
||||
t->arg = arg;
|
||||
diff --git a/src/wl/sys/wl_linux.h b/src/wl/sys/wl_linux.h
|
||||
index 489c9f5..f8278ad 100644
|
||||
--- a/src/wl/sys/wl_linux.h
|
||||
+++ b/src/wl/sys/wl_linux.h
|
||||
@@ -190,3 +190,7 @@
|
||||
extern struct net_device * wl_netdev_get(wl_info_t *wl);
|
||||
|
||||
#endif
|
||||
+
|
||||
+#if defined(timer_setup) && defined(from_timer)
|
||||
+#define HAVE_TIMER_SETUP
|
||||
+#endif
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+126
-4
@@ -5,8 +5,8 @@
|
||||
<Name>module-broadcom-wl</Name>
|
||||
<Homepage>http://www.broadcom.com/support/802.11/linux_sta.php</Homepage>
|
||||
<Packager>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Packager>
|
||||
<License>freedist</License>
|
||||
<IsA>driver</IsA>
|
||||
@@ -15,20 +15,23 @@
|
||||
<Archive sha1sum="8acbdbb4ab4ab4123d1773b616904798fbef9277" type="targz" target="i686">https://docs.broadcom.com/docs-and-downloads/docs/linux_sta/hybrid-v35-nodebug-pcoem-6_30_223_271.tar.gz</Archive>
|
||||
<Archive sha1sum="1f568bb989d175813c5631c6629d9479eae6f3be" type="targz" target="x86_64">https://docs.broadcom.com/docs-and-downloads/docs/linux_sta/hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency version="4.9.6">kernel-module-headers</Dependency>
|
||||
<Dependency version="4.19.56">kernel-module-headers</Dependency>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<Patch level="1">patch/license.patch</Patch>
|
||||
<Patch level="1">patch/wl_linux.c.patch</Patch>
|
||||
<Patch level="1">patch/linux47.patch</Patch>
|
||||
<Patch level="1">patch/linux48.patch</Patch>
|
||||
<Patch level="1">linux-4.11.patch</Patch>
|
||||
<Patch level="1">linux-4.12.patch</Patch>
|
||||
<Patch level="1">linux-4.15.patch</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
<Package>
|
||||
<Name>module-broadcom-wl</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency version="4.9.6">kernel</Dependency>
|
||||
<Dependency version="4.19.56">kernel</Dependency>
|
||||
<Dependency release="current">module-broadcom-wl-userspace</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
@@ -57,6 +60,125 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="25">
|
||||
<Date>2019-06-26</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="24">
|
||||
<Date>2019-05-11</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="23">
|
||||
<Date>2019-01-20</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="22">
|
||||
<Date>2018-12-22</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="21">
|
||||
<Date>2018-10-05</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="20">
|
||||
<Date>2018-08-07</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="19">
|
||||
<Date>2018-07-15</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="18">
|
||||
<Date>2018-07-12</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="17">
|
||||
<Date>2018-04-28</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="16">
|
||||
<Date>2018-03-11</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="15">
|
||||
<Date>2018-03-03</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="14">
|
||||
<Date>2018-01-06</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="13">
|
||||
<Date>2017-12-20</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="12">
|
||||
<Date>2017-12-04</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="11">
|
||||
<Date>2017-11-19</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="10">
|
||||
<Date>2017-08-21</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="9">
|
||||
<Date>2017-07-04</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="8">
|
||||
<Date>2017-02-01</Date>
|
||||
<Version>6.30.223.271</Version>
|
||||
|
||||
Regular → Executable
@@ -11,6 +11,7 @@ KDIR = kerneltools.getKernelVersion()
|
||||
|
||||
def build():
|
||||
autotools.make("KERN_DIR=/lib/modules/%s/build" % KDIR)
|
||||
#autotools.make("-C vboxsf KERN_DIR=/lib/modules/%s/build" % KDIR)
|
||||
autotools.make("-C vboxvideo KERN_DIR=/lib/modules/%s/build" % KDIR)
|
||||
|
||||
def install():
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
diff -Nuar a/Makefile b/Makefile
|
||||
--- a/Makefile 2018-10-15 17:25:07.000000000 +0300
|
||||
+++ b/Makefile 2018-08-14 14:38:32.000000000 +0300
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
KBUILD_VERBOSE =
|
||||
|
||||
-vboxguest:
|
||||
+all:
|
||||
@echo "=== Building 'vboxguest' module ==="
|
||||
@$(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C vboxguest
|
||||
@if [ -f vboxguest/vboxguest.ko ]; then \
|
||||
@@ -34,8 +34,6 @@
|
||||
cp vboxguest/vboxguest.o .; \
|
||||
fi
|
||||
@echo
|
||||
-
|
||||
-vboxsf: vboxguest
|
||||
@if [ -d vboxsf ]; then \
|
||||
if [ -f vboxguest/Module.symvers ]; then \
|
||||
cp vboxguest/Module.symvers vboxsf; \
|
||||
@@ -49,8 +47,6 @@
|
||||
fi; \
|
||||
echo; \
|
||||
fi
|
||||
-
|
||||
-vboxvideo:
|
||||
@if [ -d vboxvideo ]; then \
|
||||
if [ -f vboxguest/Module.symvers ]; then \
|
||||
cp vboxguest/Module.symvers vboxvideo; \
|
||||
@@ -65,8 +61,6 @@
|
||||
echo; \
|
||||
fi
|
||||
|
||||
-all: vboxguest vboxsf vboxvideo
|
||||
-
|
||||
install:
|
||||
@$(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C vboxguest install
|
||||
@if [ -d vboxsf ]; then \
|
||||
@@ -3,7 +3,7 @@
|
||||
<PISI>
|
||||
<Source>
|
||||
<Name>module-virtualbox-guest</Name>
|
||||
<Homepage>http://www.virtualbox.org</Homepage>
|
||||
<Homepage>https://www.virtualbox.org</Homepage>
|
||||
<Packager>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
@@ -12,16 +12,19 @@
|
||||
<IsA>driver</IsA>
|
||||
<Summary>Kernel modules for VirtualBox guest machines</Summary>
|
||||
<Description>This package provides the kernel modules needed for mouse integration and shared folder support between VirtualBox host and guest systems.</Description>
|
||||
<Archive sha1sum="87b355193a306ed5516e8d348f7eb83854e08ac1" type="tarxz">https://sourceforge.net/projects/pisilinux/files/source/module-virtualbox-guest-5.1.14.tar.xz</Archive>
|
||||
<Archive sha1sum="474ced834f7ce95ae9db5fec8a924f9285077bc3" type="tarxz">https://sourceforge.net/projects/pisilinux/files/source/module-virtualbox-guest-6.0.12.tar.xz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency version="4.9.6">kernel-module-headers</Dependency>
|
||||
<Dependency version="4.19.56">kernel-module-headers</Dependency>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<!-- <Patch>vboxsf-make.patch</Patch> -->
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
<Package>
|
||||
<Name>module-virtualbox-guest</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency version="4.9.6">kernel</Dependency>
|
||||
<Dependency version="4.19.56">kernel</Dependency>
|
||||
<Dependency>baselayout</Dependency>
|
||||
<Dependency version="current">module-virtualbox-guest-userspace</Dependency>
|
||||
</RuntimeDependencies>
|
||||
@@ -52,6 +55,223 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="45">
|
||||
<Date>2019-09-29</Date>
|
||||
<Version>6.0.12</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="44">
|
||||
<Date>2019-08-04</Date>
|
||||
<Version>6.0.10</Version>
|
||||
<Comment>Version Bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="43">
|
||||
<Date>2019-06-26</Date>
|
||||
<Version>6.0.8</Version>
|
||||
<Comment>Rebuild drivers</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="42">
|
||||
<Date>2019-05-17</Date>
|
||||
<Version>6.0.8</Version>
|
||||
<Comment>Version Bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="41">
|
||||
<Date>2019-05-11</Date>
|
||||
<Version>6.0.6</Version>
|
||||
<Comment>Rebuild drivers</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="40">
|
||||
<Date>2019-04-20</Date>
|
||||
<Version>6.0.6</Version>
|
||||
<Comment>Version Bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="39">
|
||||
<Date>2019-04-06</Date>
|
||||
<Version>6.0.4</Version>
|
||||
<Comment>Version Bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="38">
|
||||
<Date>2019-01-29</Date>
|
||||
<Version>6.0.4</Version>
|
||||
<Comment>Version Bump</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="37">
|
||||
<Date>2019-01-20</Date>
|
||||
<Version>6.0.2</Version>
|
||||
<Comment>Version Bump</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="36">
|
||||
<Date>2019-01-16</Date>
|
||||
<Version>6.0.2</Version>
|
||||
<Comment>Version Bump</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="35">
|
||||
<Date>2018-12-22</Date>
|
||||
<Version>6.0.0</Version>
|
||||
<Comment>Version Bump</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="34">
|
||||
<Date>2018-11-23</Date>
|
||||
<Version>5.2.22</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="33">
|
||||
<Date>2018-10-05</Date>
|
||||
<Version>5.2.18</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="32">
|
||||
<Date>2018-09-16</Date>
|
||||
<Version>5.2.18</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="31">
|
||||
<Date>2018-08-17</Date>
|
||||
<Version>5.2.16</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="30">
|
||||
<Date>2018-08-06</Date>
|
||||
<Version>5.2.12</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="29">
|
||||
<Date>2018-07-15</Date>
|
||||
<Version>5.2.12</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="28">
|
||||
<Date>2018-07-12</Date>
|
||||
<Version>5.2.12</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="27">
|
||||
<Date>2018-05-10</Date>
|
||||
<Version>5.2.12</Version>
|
||||
<Comment>Version bump</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="26">
|
||||
<Date>2018-04-28</Date>
|
||||
<Version>5.2.10</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="25">
|
||||
<Date>2018-04-18</Date>
|
||||
<Version>5.2.10</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="24">
|
||||
<Date>2018-03-15</Date>
|
||||
<Version>5.2.8</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="23">
|
||||
<Date>2018-03-11</Date>
|
||||
<Version>5.2.8</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="22">
|
||||
<Date>2018-03-03</Date>
|
||||
<Version>5.2.8</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="21">
|
||||
<Date>2018-01-06</Date>
|
||||
<Version>5.2.2</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="20">
|
||||
<Date>2017-12-20</Date>
|
||||
<Version>5.2.2</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="19">
|
||||
<Date>2017-12-04</Date>
|
||||
<Version>5.2.2</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="18">
|
||||
<Date>2017-11-25</Date>
|
||||
<Version>5.2.2</Version>
|
||||
<Comment>Version bump</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="17">
|
||||
<Date>2017-11-19</Date>
|
||||
<Version>5.1.14</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="16">
|
||||
<Date>2017-08-21</Date>
|
||||
<Version>5.1.14</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="15">
|
||||
<Date>2017-07-04</Date>
|
||||
<Version>5.1.14</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="14">
|
||||
<Date>2017-02-01</Date>
|
||||
<Version>5.1.14</Version>
|
||||
@@ -151,4 +371,4 @@
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
</History>
|
||||
</PISI>
|
||||
</PISI>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<PISI>
|
||||
<Source>
|
||||
<Name>module-virtualbox</Name>
|
||||
<Homepage>http://www.virtualbox.org</Homepage>
|
||||
<Homepage>https://www.virtualbox.org</Homepage>
|
||||
<Packager>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
@@ -12,9 +12,9 @@
|
||||
<IsA>driver</IsA>
|
||||
<Summary>Kernel modules for VirtualBox</Summary>
|
||||
<Description>This package provides the kernel support for VirtualBox.</Description>
|
||||
<Archive sha1sum="7489ae3b501407d5ca2826e6ef1d5b2000e06154" type="tarxz">https://sourceforge.net/projects/pisilinux/files/source/module-virtualbox-5.1.14.tar.xz</Archive>
|
||||
<Archive sha1sum="5c9309d901ed24e4cd484dfd9b79367973df8151" type="tarxz">https://sourceforge.net/projects/pisilinux/files/source/module-virtualbox-6.0.12.tar.xz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency version="4.9.6">kernel-module-headers</Dependency>
|
||||
<Dependency version="4.19.56">kernel-module-headers</Dependency>
|
||||
</BuildDependencies>
|
||||
<!--Patches>
|
||||
<Patch>vbox_linux-4.3.diff</Patch>
|
||||
@@ -24,7 +24,7 @@
|
||||
<Package>
|
||||
<Name>module-virtualbox</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency version="4.9.6">kernel</Dependency>
|
||||
<Dependency version="4.19.56">kernel</Dependency>
|
||||
<Dependency version="current">module-virtualbox-userspace</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
@@ -50,6 +50,223 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="45">
|
||||
<Date>2019-09-29</Date>
|
||||
<Version>6.0.12</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="44">
|
||||
<Date>2019-08-04</Date>
|
||||
<Version>6.0.10</Version>
|
||||
<Comment>Version Bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="43">
|
||||
<Date>2019-06-26</Date>
|
||||
<Version>6.0.8</Version>
|
||||
<Comment>Rebuild drivers</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="42">
|
||||
<Date>2019-05-17</Date>
|
||||
<Version>6.0.8</Version>
|
||||
<Comment>Version Bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="41">
|
||||
<Date>2019-05-11</Date>
|
||||
<Version>6.0.6</Version>
|
||||
<Comment>Rebuild drivers</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="40">
|
||||
<Date>2019-04-20</Date>
|
||||
<Version>6.0.6</Version>
|
||||
<Comment>Version Bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="39">
|
||||
<Date>2019-04-06</Date>
|
||||
<Version>6.0.4</Version>
|
||||
<Comment>Version Bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="38">
|
||||
<Date>2019-01-29</Date>
|
||||
<Version>6.0.4</Version>
|
||||
<Comment>Version Bump</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="37">
|
||||
<Date>2019-01-20</Date>
|
||||
<Version>6.0.2</Version>
|
||||
<Comment>Version Bump</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="36">
|
||||
<Date>2019-01-16</Date>
|
||||
<Version>6.0.2</Version>
|
||||
<Comment>Version Bump</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="35">
|
||||
<Date>2018-12-22</Date>
|
||||
<Version>6.0.0</Version>
|
||||
<Comment>Version Bump</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="34">
|
||||
<Date>2018-11-23</Date>
|
||||
<Version>5.2.22</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="33">
|
||||
<Date>2018-10-05</Date>
|
||||
<Version>5.2.18</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="32">
|
||||
<Date>2018-09-16</Date>
|
||||
<Version>5.2.18</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="31">
|
||||
<Date>2018-08-17</Date>
|
||||
<Version>5.2.16</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="30">
|
||||
<Date>2018-08-06</Date>
|
||||
<Version>5.2.12</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="29">
|
||||
<Date>2018-07-15</Date>
|
||||
<Version>5.2.12</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="28">
|
||||
<Date>2018-07-12</Date>
|
||||
<Version>5.2.12</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="27">
|
||||
<Date>2018-05-10</Date>
|
||||
<Version>5.2.12</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="26">
|
||||
<Date>2018-04-28</Date>
|
||||
<Version>5.2.10</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="25">
|
||||
<Date>2018-04-18</Date>
|
||||
<Version>5.2.10</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="24">
|
||||
<Date>2018-03-15</Date>
|
||||
<Version>5.2.8</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="23">
|
||||
<Date>2018-03-11</Date>
|
||||
<Version>5.2.8</Version>
|
||||
<Comment>Rebuild for new kernel</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="22">
|
||||
<Date>2018-03-03</Date>
|
||||
<Version>5.2.8</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="21">
|
||||
<Date>2018-01-06</Date>
|
||||
<Version>5.2.2</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="20">
|
||||
<Date>2017-12-20</Date>
|
||||
<Version>5.2.2</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="19">
|
||||
<Date>2017-12-04</Date>
|
||||
<Version>5.2.2</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="18">
|
||||
<Date>2017-11-25</Date>
|
||||
<Version>5.2.2</Version>
|
||||
<Comment>Version bump</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="17">
|
||||
<Date>2017-11-19</Date>
|
||||
<Version>5.1.14</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="16">
|
||||
<Date>2017-08-21</Date>
|
||||
<Version>5.1.14</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="15">
|
||||
<Date>2017-07-04</Date>
|
||||
<Version>5.1.14</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="14">
|
||||
<Date>2017-02-01</Date>
|
||||
<Version>5.1.14</Version>
|
||||
@@ -149,4 +366,4 @@
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
</History>
|
||||
</PISI>
|
||||
</PISI>
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
commit fa2aeeccd5366378ca2eb83c6daee64b511fe792
|
||||
Author: Felix Yan <felixonmars@archlinux.org>
|
||||
Date: Tue May 16 01:32:56 2017 +0800
|
||||
|
||||
Add support for Linux 4.11+
|
||||
|
||||
diff --git a/ndiswrapper/driver/ndis.c b/ndiswrapper/driver/ndis.c
|
||||
index c1913a05..2ab4dd21 100644
|
||||
--- a/ndiswrapper/driver/ndis.c
|
||||
+++ b/ndiswrapper/driver/ndis.c
|
||||
@@ -2258,7 +2258,9 @@ wstdcall void NdisMIndicateReceivePacket(struct ndis_mp_block *nmb,
|
||||
WARNING("empty packet ignored");
|
||||
continue;
|
||||
}
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
|
||||
wnd->net_dev->last_rx = jiffies;
|
||||
+#endif
|
||||
/* get total number of bytes in packet */
|
||||
NdisGetFirstBufferFromPacketSafe(packet, &buffer, &virt,
|
||||
&length, &total_length,
|
||||
@@ -2346,7 +2348,9 @@ wstdcall void EthRxIndicateHandler(struct ndis_mp_block *nmb, void *rx_ctx,
|
||||
ERROR("nmb is NULL");
|
||||
EXIT3(return);
|
||||
}
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
|
||||
wnd->net_dev->last_rx = jiffies;
|
||||
+#endif
|
||||
|
||||
if (look_ahead_size < packet_size) {
|
||||
struct ndis_packet *packet;
|
||||
@@ -2461,7 +2465,9 @@ wstdcall void NdisMTransferDataComplete(struct ndis_mp_block *nmb,
|
||||
WARNING("illegal packet");
|
||||
EXIT3(return);
|
||||
}
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
|
||||
wnd->net_dev->last_rx = jiffies;
|
||||
+#endif
|
||||
oob_data = NDIS_PACKET_OOB_DATA(packet);
|
||||
skb_size = sizeof(oob_data->header) + oob_data->look_ahead_size +
|
||||
bytes_txed;
|
||||
diff --git a/ndiswrapper/driver/ntoskernel.h b/ndiswrapper/driver/ntoskernel.h
|
||||
index 3c4c6ff0..f1c52e51 100644
|
||||
--- a/ndiswrapper/driver/ntoskernel.h
|
||||
+++ b/ndiswrapper/driver/ntoskernel.h
|
||||
@@ -296,6 +296,10 @@ static inline void (INIT_WORK)(struct work_struct *work, work_func_t func)
|
||||
#define add_taint(flag, lockdep_ok) add_taint(flag)
|
||||
#endif
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
|
||||
+#include <linux/sched/signal.h>
|
||||
+#endif
|
||||
+
|
||||
#include "winnt_types.h"
|
||||
#include "ndiswrapper.h"
|
||||
#include "pe_linker.h"
|
||||
@@ -0,0 +1,27 @@
|
||||
commit eeac7ab831b3097005dadc64dd323f54ade30323
|
||||
Author: Felix Yan <felixonmars@archlinux.org>
|
||||
Date: Mon Sep 11 12:52:36 2017 +0800
|
||||
|
||||
Add support for linux 4.13+
|
||||
|
||||
diff --git a/ndiswrapper/driver/ntoskernel.h b/ndiswrapper/driver/ntoskernel.h
|
||||
index f1c52e51..1422bd4d 100644
|
||||
--- a/ndiswrapper/driver/ntoskernel.h
|
||||
+++ b/ndiswrapper/driver/ntoskernel.h
|
||||
@@ -119,9 +119,16 @@ static cpumask_t cpumasks[NR_CPUS];
|
||||
*/
|
||||
#include <asm/dma-mapping.h>
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)
|
||||
#define PCI_DMA_ALLOC_COHERENT(pci_dev,size,dma_handle) \
|
||||
dma_alloc_coherent(&pci_dev->dev,size,dma_handle, \
|
||||
GFP_KERNEL | __GFP_REPEAT)
|
||||
+#else
|
||||
+#define PCI_DMA_ALLOC_COHERENT(pci_dev,size,dma_handle) \
|
||||
+ dma_alloc_coherent(&pci_dev->dev,size,dma_handle, \
|
||||
+ GFP_KERNEL | __GFP_RETRY_MAYFAIL)
|
||||
+#endif
|
||||
+
|
||||
#define PCI_DMA_FREE_COHERENT(pci_dev,size,cpu_addr,dma_handle) \
|
||||
dma_free_coherent(&pci_dev->dev,size,cpu_addr,dma_handle)
|
||||
#define PCI_DMA_MAP_SINGLE(pci_dev,addr,size,direction) \
|
||||
@@ -0,0 +1,199 @@
|
||||
From: Seth Forshee <seth.forshee@canonical.com>
|
||||
Date: Wed, 13 Dec 2017 15:53:31 -0600
|
||||
Subject: [PATCH] Build fixes for Linux 4.15
|
||||
|
||||
Fixes two build issues for 4.15:
|
||||
|
||||
- init_timer() was eliminated in 4.15, and all callers were
|
||||
converted to using timer_setup(). The callback prototype has
|
||||
also changed to pass a timer_list argument instead of callback
|
||||
data, and from_timer() must be used to get to the object in
|
||||
which the timer is embedded.
|
||||
|
||||
- usb_get_status() was changed to take an additional argument,
|
||||
and usb_get_std_status() was added as a wrapper for callers to
|
||||
use as a replacment. Call the wrapper in 4.15 and later.
|
||||
|
||||
LP: #1737749
|
||||
---
|
||||
driver/ntoskernel.c | 19 ++++++++++++++++++-
|
||||
driver/usb.c | 10 ++++++++--
|
||||
driver/wrapndis.c | 28 ++++++++++++++++++++++++++++
|
||||
3 files changed, 54 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/driver/ntoskernel.c b/driver/ntoskernel.c
|
||||
index 4fe0dc1..156c688 100644
|
||||
--- a/driver/ntoskernel.c
|
||||
+++ b/driver/ntoskernel.c
|
||||
@@ -77,7 +77,6 @@ u64 wrap_ticks_to_boot;
|
||||
#if defined(CONFIG_X86_64)
|
||||
static struct timer_list shared_data_timer;
|
||||
struct kuser_shared_data kuser_shared_data;
|
||||
-static void update_user_shared_data_proc(unsigned long data);
|
||||
#endif
|
||||
|
||||
WIN_SYMBOL_MAP("KeTickCount", &jiffies)
|
||||
@@ -91,7 +90,11 @@ DEFINE_PER_CPU(struct irql_info, irql_info);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_X86_64)
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
static void update_user_shared_data_proc(unsigned long data)
|
||||
+#else
|
||||
+static void update_user_shared_data_proc(struct timer_list *t)
|
||||
+#endif
|
||||
{
|
||||
/* timer is supposed to be scheduled every 10ms, but bigger
|
||||
* intervals seem to work (tried up to 50ms) */
|
||||
@@ -407,9 +410,15 @@ static void initialize_object(struct dispatcher_header *dh, enum dh_type type,
|
||||
InitializeListHead(&dh->wait_blocks);
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
static void timer_proc(unsigned long data)
|
||||
{
|
||||
struct wrap_timer *wrap_timer = (struct wrap_timer *)data;
|
||||
+#else
|
||||
+static void timer_proc(struct timer_list *t)
|
||||
+{
|
||||
+ struct wrap_timer *wrap_timer = from_timer(wrap_timer, t, timer);
|
||||
+#endif
|
||||
struct nt_timer *nt_timer;
|
||||
struct kdpc *kdpc;
|
||||
|
||||
@@ -452,9 +461,13 @@ void wrap_init_timer(struct nt_timer *nt_timer, enum timer_type type,
|
||||
return;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
init_timer(&wrap_timer->timer);
|
||||
wrap_timer->timer.data = (unsigned long)wrap_timer;
|
||||
wrap_timer->timer.function = timer_proc;
|
||||
+#else
|
||||
+ timer_setup(&wrap_timer->timer, timer_proc, 0);
|
||||
+#endif
|
||||
wrap_timer->nt_timer = nt_timer;
|
||||
#ifdef TIMER_DEBUG
|
||||
wrap_timer->wrap_timer_magic = WRAP_TIMER_MAGIC;
|
||||
@@ -2559,9 +2572,13 @@ int ntoskernel_init(void)
|
||||
#if defined(CONFIG_X86_64)
|
||||
memset(&kuser_shared_data, 0, sizeof(kuser_shared_data));
|
||||
*((ULONG64 *)&kuser_shared_data.system_time) = ticks_1601();
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
init_timer(&shared_data_timer);
|
||||
shared_data_timer.function = update_user_shared_data_proc;
|
||||
shared_data_timer.data = 0;
|
||||
+#else
|
||||
+ timer_setup(&shared_data_timer, update_user_shared_data_proc, 0);
|
||||
+#endif
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
diff --git a/driver/usb.c b/driver/usb.c
|
||||
index 3e7021a..e55c2c6 100644
|
||||
--- a/driver/usb.c
|
||||
+++ b/driver/usb.c
|
||||
@@ -750,6 +750,12 @@ static USBD_STATUS wrap_set_clear_feature(struct usb_device *udev,
|
||||
USBEXIT(return NT_URB_STATUS(nt_urb));
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
+#define wrap_usb_get_status usb_get_status
|
||||
+#else
|
||||
+#define wrap_usb_get_status usb_get_std_status
|
||||
+#endif
|
||||
+
|
||||
static USBD_STATUS wrap_get_status_request(struct usb_device *udev,
|
||||
struct irp *irp)
|
||||
{
|
||||
@@ -776,8 +782,8 @@ static USBD_STATUS wrap_get_status_request(struct usb_device *udev,
|
||||
return NT_URB_STATUS(nt_urb);
|
||||
}
|
||||
assert(status_req->transfer_buffer_length == sizeof(u16));
|
||||
- ret = usb_get_status(udev, type, status_req->index,
|
||||
- status_req->transfer_buffer);
|
||||
+ ret = wrap_usb_get_status(udev, type, status_req->index,
|
||||
+ status_req->transfer_buffer);
|
||||
if (ret >= 0) {
|
||||
assert(ret <= status_req->transfer_buffer_length);
|
||||
status_req->transfer_buffer_length = ret;
|
||||
diff --git a/driver/wrapndis.c b/driver/wrapndis.c
|
||||
index 870e4c2..f653440 100644
|
||||
--- a/driver/wrapndis.c
|
||||
+++ b/driver/wrapndis.c
|
||||
@@ -1093,9 +1093,15 @@ send_assoc_event:
|
||||
EXIT2(return);
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
static void iw_stats_timer_proc(unsigned long data)
|
||||
{
|
||||
struct ndis_device *wnd = (struct ndis_device *)data;
|
||||
+#else
|
||||
+static void iw_stats_timer_proc(struct timer_list *t)
|
||||
+{
|
||||
+ struct ndis_device *wnd = from_timer(wnd, t, iw_stats_timer);
|
||||
+#endif
|
||||
|
||||
ENTER2("%d", wnd->iw_stats_interval);
|
||||
if (wnd->iw_stats_interval > 0) {
|
||||
@@ -1111,8 +1117,12 @@ static void add_iw_stats_timer(struct ndis_device *wnd)
|
||||
return;
|
||||
if (wnd->iw_stats_interval < 0)
|
||||
wnd->iw_stats_interval *= -1;
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
wnd->iw_stats_timer.data = (unsigned long)wnd;
|
||||
wnd->iw_stats_timer.function = iw_stats_timer_proc;
|
||||
+#else
|
||||
+ timer_setup(&wnd->iw_stats_timer, iw_stats_timer_proc, 0);
|
||||
+#endif
|
||||
mod_timer(&wnd->iw_stats_timer, jiffies + wnd->iw_stats_interval);
|
||||
}
|
||||
|
||||
@@ -1124,9 +1134,15 @@ static void del_iw_stats_timer(struct ndis_device *wnd)
|
||||
EXIT2(return);
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
static void hangcheck_proc(unsigned long data)
|
||||
{
|
||||
struct ndis_device *wnd = (struct ndis_device *)data;
|
||||
+#else
|
||||
+static void hangcheck_proc(struct timer_list *t)
|
||||
+{
|
||||
+ struct ndis_device *wnd = from_timer(wnd, t, hangcheck_timer);
|
||||
+#endif
|
||||
|
||||
ENTER3("%d", wnd->hangcheck_interval);
|
||||
if (wnd->hangcheck_interval > 0) {
|
||||
@@ -1147,8 +1163,12 @@ void hangcheck_add(struct ndis_device *wnd)
|
||||
wnd->hangcheck_interval = hangcheck_interval * HZ;
|
||||
if (wnd->hangcheck_interval < 0)
|
||||
wnd->hangcheck_interval *= -1;
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
wnd->hangcheck_timer.data = (unsigned long)wnd;
|
||||
wnd->hangcheck_timer.function = hangcheck_proc;
|
||||
+#else
|
||||
+ timer_setup(&wnd->hangcheck_timer, hangcheck_proc, 0);
|
||||
+#endif
|
||||
mod_timer(&wnd->hangcheck_timer, jiffies + wnd->hangcheck_interval);
|
||||
EXIT2(return);
|
||||
}
|
||||
@@ -2138,9 +2158,17 @@ static NTSTATUS ndis_add_device(struct driver_object *drv_obj,
|
||||
wnd->dma_map_count = 0;
|
||||
wnd->dma_map_addr = NULL;
|
||||
wnd->nick[0] = 0;
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
init_timer(&wnd->hangcheck_timer);
|
||||
+#else
|
||||
+ timer_setup(&wnd->hangcheck_timer, NULL, 0);
|
||||
+#endif
|
||||
wnd->scan_timestamp = 0;
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
init_timer(&wnd->iw_stats_timer);
|
||||
+#else
|
||||
+ timer_setup(&wnd->iw_stats_timer, NULL, 0);
|
||||
+#endif
|
||||
wnd->iw_stats_interval = 10 * HZ;
|
||||
wnd->ndis_pending_work = 0;
|
||||
memset(&wnd->essid, 0, sizeof(wnd->essid));
|
||||
@@ -5,27 +5,29 @@
|
||||
<Name>ndiswrapper</Name>
|
||||
<Homepage>http://ndiswrapper.sourceforge.net/</Homepage>
|
||||
<Packager>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admins@pisilinux.org</Email>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Packager>
|
||||
<License>GPLv2</License>
|
||||
<IsA>app:console</IsA>
|
||||
<IsA>driver</IsA>
|
||||
<Summary>A network driver wrapper</Summary>
|
||||
<Description>module-ndiswrapper allows you to use Windows XP drivers for WLAN cards without proper Linux drivers.</Description>
|
||||
<Archive sha1sum="20998237cf6d37b86391dc8736c10031110db578" type="targz">http://download.sourceforge.net/ndiswrapper/ndiswrapper-1.60.tar.gz</Archive>
|
||||
<Archive sha1sum="d98b97ff7e88d39b7966b4a3e7b7deeb7dc6e192" type="targz">http://download.sourceforge.net/ndiswrapper/ndiswrapper-1.62.tar.gz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency version="4.9.6">kernel-module-headers</Dependency>
|
||||
<Dependency version="4.19.56">kernel-module-headers</Dependency>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<Patch>upstream.patch</Patch>
|
||||
</Patches>
|
||||
<!--Patches>
|
||||
<Patch>linux-4.11.patch</Patch>
|
||||
<Patch>linux-4.13.patch</Patch>
|
||||
<Patch>linux-4.15.patch</Patch>
|
||||
</Patches-->
|
||||
</Source>
|
||||
|
||||
<Package>
|
||||
<Name>ndiswrapper</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency version="4.9.6">kernel</Dependency>
|
||||
<Dependency version="4.19.56">kernel</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="library" permanent="true">/lib/modules</Path>
|
||||
@@ -41,6 +43,139 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="26">
|
||||
<Date>2019-06-26</Date>
|
||||
<Version>1.62</Version>
|
||||
<Comment>Rebuild drivers</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="25">
|
||||
<Date>2019-05-11</Date>
|
||||
<Version>1.62</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="24">
|
||||
<Date>2019-05-11</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="23">
|
||||
<Date>2019-04-06</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="22">
|
||||
<Date>2019-01-20</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="21">
|
||||
<Date>2018-12-22</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="20">
|
||||
<Date>2018-10-05</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="19">
|
||||
<Date>2018-08-07</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="18">
|
||||
<Date>2018-07-15</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="17">
|
||||
<Date>2018-07-12</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="16">
|
||||
<Date>2018-04-28</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="15">
|
||||
<Date>2018-03-11</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Version bump</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="14">
|
||||
<Date>2018-03-03</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="13">
|
||||
<Date>2018-01-06</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="12">
|
||||
<Date>2017-12-20</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="11">
|
||||
<Date>2017-12-04</Date>
|
||||
<Version>1.61</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="10">
|
||||
<Date>2017-11-19</Date>
|
||||
<Version>1.60</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="9">
|
||||
<Date>2017-08-21</Date>
|
||||
<Version>1.60</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="8">
|
||||
<Date>2017-07-04</Date>
|
||||
<Version>1.60</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="7">
|
||||
<Date>2017-02-07</Date>
|
||||
<Version>1.60</Version>
|
||||
|
||||
@@ -24,8 +24,12 @@ def setup():
|
||||
def build():
|
||||
kerneltools.build(debugSymbols=False)
|
||||
|
||||
|
||||
def install():
|
||||
kerneltools.install()
|
||||
|
||||
# add objtool for external module building and enabled VALIDATION_STACK option
|
||||
pisitools.insinto("/usr/src/linux-headers-%s/tools/objtool" % get.srcVERSION(), "%s/tools/objtool/objtool" % get.curDIR())
|
||||
|
||||
# Install kernel headers needed for out-of-tree module compilation
|
||||
kerneltools.installHeaders()
|
||||
@@ -35,13 +39,10 @@ def install():
|
||||
# Generate some module lists to use within mkinitramfs
|
||||
shelltools.system("./generate-module-list %s/lib/modules/%s" % (get.installDIR(), kerneltools.__getSuffix()))
|
||||
|
||||
|
||||
|
||||
#mkinitcpio default config
|
||||
pisitools.dodir("/etc/mkinitcpio.d")
|
||||
shelltools.touch("linux.preset")
|
||||
|
||||
|
||||
|
||||
shelltools.echo("linux.preset", "# mkinitcpio preset file for the 'linux' package\n" +
|
||||
|
||||
'ALL_config="/etc/mkinitcpio.conf"\n'+
|
||||
@@ -49,7 +50,6 @@ def install():
|
||||
'ALL_kver="/boot/kernel-%s"\n\n'% get.srcVERSION() +
|
||||
"PRESETS=('default' 'fallback') \n\n" +
|
||||
'#default_config="/etc/mkinitcpio.conf"\n' +
|
||||
|
||||
'default_image="/boot/initramfs-%s.img"\n'% get.srcVERSION() +
|
||||
|
||||
'#default_options=""\n\n' +
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,86 @@
|
||||
diff -Nuar linux-4.9.orig/fs/aufs/posix_acl.c linux-4.9/fs/aufs/posix_acl.c
|
||||
--- linux-4.9.orig/fs/aufs/posix_acl.c 2017-04-09 09:33:00.155052337 +0300
|
||||
+++ linux-4.9/fs/aufs/posix_acl.c 2017-04-09 09:34:03.760053849 +0300
|
||||
@@ -1,5 +1,18 @@
|
||||
/*
|
||||
* Copyright (C) 2014-2016 Junjiro R. Okajima
|
||||
+ *
|
||||
+ * This program, aufs is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -36,6 +49,8 @@
|
||||
|
||||
/* always topmost only */
|
||||
acl = get_acl(h_inode, type);
|
||||
+ if (!IS_ERR_OR_NULL(acl))
|
||||
+ set_cached_acl(inode, type, acl);
|
||||
|
||||
out:
|
||||
ii_read_unlock(inode);
|
||||
@@ -77,8 +92,10 @@
|
||||
ssz = au_sxattr(dentry, inode, &arg);
|
||||
dput(dentry);
|
||||
err = ssz;
|
||||
- if (ssz >= 0)
|
||||
+ if (ssz >= 0) {
|
||||
err = 0;
|
||||
+ set_cached_acl(inode, type, acl);
|
||||
+ }
|
||||
|
||||
out:
|
||||
return err;
|
||||
diff -Nuar linux-4.9.orig/fs/aufs/xattr.c linux-4.9/fs/aufs/xattr.c
|
||||
--- linux-4.9.orig/fs/aufs/xattr.c 2017-04-09 09:33:00.160052337 +0300
|
||||
+++ linux-4.9/fs/aufs/xattr.c 2017-04-09 09:34:08.757053967 +0300
|
||||
@@ -1,11 +1,26 @@
|
||||
/*
|
||||
* Copyright (C) 2014-2016 Junjiro R. Okajima
|
||||
+ *
|
||||
+ * This program, aufs is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* handling xattr functions
|
||||
*/
|
||||
|
||||
+#include <linux/fs.h>
|
||||
+#include <linux/posix_acl_xattr.h>
|
||||
#include <linux/xattr.h>
|
||||
#include "aufs.h"
|
||||
|
||||
@@ -309,7 +324,11 @@
|
||||
};
|
||||
|
||||
static const struct xattr_handler *au_xattr_handlers[] = {
|
||||
- &au_xattr_handler,
|
||||
+#ifdef CONFIG_FS_POSIX_ACL
|
||||
+ &posix_acl_access_xattr_handler,
|
||||
+ &posix_acl_default_xattr_handler,
|
||||
+#endif
|
||||
+ &au_xattr_handler, /* must be last */
|
||||
NULL
|
||||
};
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -83,10 +83,10 @@ diff -Nurp linux-4.2.2/Makefile linux-4.2.2-3rd/Makefile
|
||||
net-y := net/
|
||||
libs-y := lib/
|
||||
core-y := usr/
|
||||
diff -Nurp linux-4.9/scripts/kconfig/Makefile linux-4.9-3rd/scripts/kconfig/Makefile
|
||||
--- linux-4.9/scripts/kconfig/Makefile
|
||||
+++ linux-4.9-3rd/scripts/kconfig/Makefile
|
||||
@@ -18,28 +18,28 @@ endif
|
||||
diff -Nurp linux-4.14/scripts/kconfig/Makefile linux-4.14-3rd/scripts/kconfig/Makefile
|
||||
--- linux-4.14/scripts/kconfig/Makefile
|
||||
+++ linux-4.14-3rd/scripts/kconfig/Makefile
|
||||
@@ -19,28 +19,28 @@ endif
|
||||
# We need this, in case the user has it in its environment
|
||||
unexport CONFIG_
|
||||
|
||||
@@ -122,7 +122,7 @@ diff -Nurp linux-4.9/scripts/kconfig/Makefile linux-4.9-3rd/scripts/kconfig/Make
|
||||
$(Q)mkdir -p include/config include/generated
|
||||
$(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config
|
||||
$(Q)if [ -f .config ]; then \
|
||||
@@ -82,7 +82,7 @@ simple-targets := oldconfig allnoconfig
|
||||
@@ -83,7 +83,7 @@ simple-targets := oldconfig allnoconfig
|
||||
alldefconfig randconfig listnewconfig olddefconfig
|
||||
PHONY += $(simple-targets)
|
||||
|
||||
@@ -131,7 +131,7 @@ diff -Nurp linux-4.9/scripts/kconfig/Makefile linux-4.9-3rd/scripts/kconfig/Make
|
||||
$< $(silent) --$@ $(Kconfig)
|
||||
|
||||
PHONY += oldnoconfig savedefconfig defconfig
|
||||
@@ -90,12 +90,12 @@ PHONY += oldnoconfig savedefconfig defco
|
||||
@@ -91,12 +91,12 @@ PHONY += oldnoconfig savedefconfig defco
|
||||
# oldnoconfig is an alias of olddefconfig, because people already are dependent
|
||||
# on its behavior (sets new symbols to their default value but not 'n') with the
|
||||
# counter-intuitive name.
|
||||
@@ -147,7 +147,7 @@ diff -Nurp linux-4.9/scripts/kconfig/Makefile linux-4.9-3rd/scripts/kconfig/Make
|
||||
ifeq ($(KBUILD_DEFCONFIG),)
|
||||
$< $(silent) --defconfig $(Kconfig)
|
||||
else
|
||||
@@ -108,26 +108,26 @@ else
|
||||
@@ -109,26 +109,26 @@ else
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -179,7 +179,7 @@ diff -Nurp linux-4.9/scripts/kconfig/Makefile linux-4.9-3rd/scripts/kconfig/Make
|
||||
$(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config
|
||||
|
||||
# Help text used by make help
|
||||
@@ -190,6 +190,9 @@ gconf-objs := gconf.o zconf.tab.o
|
||||
@@ -191,6 +191,9 @@ gconf-objs := gconf.o zconf.tab.o
|
||||
|
||||
hostprogs-y := conf nconf mconf kxgettext qconf gconf
|
||||
|
||||
@@ -187,5 +187,5 @@ diff -Nurp linux-4.9/scripts/kconfig/Makefile linux-4.9-3rd/scripts/kconfig/Make
|
||||
+ pushd $(srctree)/3rdparty ; $(PERL) ./mkbuild.pl ; popd
|
||||
+
|
||||
clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck
|
||||
clean-files += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
|
||||
clean-files += zconf.tab.c zconf.lex.c gconf.glade.h
|
||||
clean-files += config.pot linux.pot
|
||||
|
||||
+126
-118
@@ -1,6 +1,6 @@
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/crt.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/crt.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/crt.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/crt.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/crt.c linux-4.12.4-3rd/3rdparty/ndiswrapper/crt.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/crt.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/crt.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,589 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -591,9 +591,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/crt.c linux-4.6-rc6-ndis/3rdparty/
|
||||
+ printk(KERN_DEBUG "%s: %p: %s\n", ctx, from, buf);
|
||||
+ kfree(buf);
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/divdi3.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/divdi3.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/divdi3.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/divdi3.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/divdi3.c linux-4.12.4-3rd/3rdparty/ndiswrapper/divdi3.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/divdi3.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/divdi3.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,329 @@
|
||||
+/* 64-bit multiplication and division
|
||||
+ Copyright (C) 1989, 1992-1999, 2000, 2001, 2002, 2003
|
||||
@@ -924,9 +924,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/divdi3.c linux-4.6-rc6-ndis/3rdpar
|
||||
+ __udivmoddi4 (u, v, &w);
|
||||
+ return w;
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/hal.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/hal.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/hal.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/hal.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/hal.c linux-4.12.4-3rd/3rdparty/ndiswrapper/hal.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/hal.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/hal.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,157 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -1085,9 +1085,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/hal.c linux-4.6-rc6-ndis/3rdparty/
|
||||
+#endif
|
||||
+ nt_spin_unlock(lock);
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/iw_ndis.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/iw_ndis.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/iw_ndis.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/iw_ndis.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/iw_ndis.c linux-4.12.4-3rd/3rdparty/ndiswrapper/iw_ndis.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/iw_ndis.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/iw_ndis.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,2001 @@
|
||||
+ /*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -3090,9 +3090,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/iw_ndis.c linux-4.6-rc6-ndis/3rdpa
|
||||
+};
|
||||
+
|
||||
+#endif
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/iw_ndis.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/iw_ndis.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/iw_ndis.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/iw_ndis.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/iw_ndis.h linux-4.12.4-3rd/3rdparty/ndiswrapper/iw_ndis.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/iw_ndis.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/iw_ndis.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,194 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -3288,9 +3288,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/iw_ndis.h linux-4.6-rc6-ndis/3rdpa
|
||||
+ KEY_MGMT_802_1X_NO_WPA, KEY_MGMT_WPA_NONE };
|
||||
+
|
||||
+#endif // IW_NDIS_H
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/lin2win.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/lin2win.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/lin2win.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/lin2win.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/lin2win.h linux-4.12.4-3rd/3rdparty/ndiswrapper/lin2win.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/lin2win.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/lin2win.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,111 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2006 Giridhar Pemmasani
|
||||
@@ -3403,9 +3403,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/lin2win.h linux-4.6-rc6-ndis/3rdpa
|
||||
+})
|
||||
+
|
||||
+#endif // CONFIG_X86_64
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/lin2win.S linux-4.6-rc6-ndis/3rdparty/ndiswrapper/lin2win.S
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/lin2win.S 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/lin2win.S 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/lin2win.S linux-4.12.4-3rd/3rdparty/ndiswrapper/lin2win.S
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/lin2win.S 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/lin2win.S 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,138 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2011 Pavel Roskin
|
||||
@@ -3545,9 +3545,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/lin2win.S linux-4.6-rc6-ndis/3rdpa
|
||||
+lin2win lin2win4, 4
|
||||
+lin2win lin2win5, 5
|
||||
+lin2win lin2win6, 6
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/loader.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/loader.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/loader.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/loader.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/loader.c linux-4.12.4-3rd/3rdparty/ndiswrapper/loader.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/loader.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/loader.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,967 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -4516,10 +4516,10 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/loader.c linux-4.6-rc6-ndis/3rdpar
|
||||
+ mutex_unlock(&loader_mutex);
|
||||
+ EXIT1(return);
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/loader.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/loader.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/loader.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/loader.h 2016-05-01 18:25:43.000000000 +0300
|
||||
@@ -0,0 +1,112 @@
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/loader.h linux-4.12.4-3rd/3rdparty/ndiswrapper/loader.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/loader.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/loader.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,108 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
+ *
|
||||
@@ -4538,10 +4538,6 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/loader.h linux-4.6-rc6-ndis/3rdpar
|
||||
+#ifndef _LOADER_H_
|
||||
+#define _LOADER_H_
|
||||
+
|
||||
+#if LINUX_VERSION_CODE > KERNEL_VERSION(4,0,0)
|
||||
+#include <linux/vmalloc.h>
|
||||
+#endif
|
||||
+
|
||||
+#include "ndiswrapper.h"
|
||||
+
|
||||
+#ifndef __KERNEL__
|
||||
@@ -4632,9 +4628,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/loader.h linux-4.6-rc6-ndis/3rdpar
|
||||
+#endif
|
||||
+
|
||||
+#endif /* LOADER_H */
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/longlong.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/longlong.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/longlong.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/longlong.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/longlong.h linux-4.12.4-3rd/3rdparty/ndiswrapper/longlong.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/longlong.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/longlong.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,1333 @@
|
||||
+/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
|
||||
+ Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
||||
@@ -5969,9 +5965,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/longlong.h linux-4.6-rc6-ndis/3rdp
|
||||
+#ifndef UDIV_NEEDS_NORMALIZATION
|
||||
+#define UDIV_NEEDS_NORMALIZATION 0
|
||||
+#endif
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/Makefile linux-4.6-rc6-ndis/3rdparty/ndiswrapper/Makefile
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/Makefile 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/Makefile 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/Makefile linux-4.12.4-3rd/3rdparty/ndiswrapper/Makefile
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/Makefile 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/Makefile 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,213 @@
|
||||
+# Name of the module
|
||||
+MODNAME = ndiswrapper
|
||||
@@ -6186,9 +6182,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/Makefile linux-4.6-rc6-ndis/3rdpar
|
||||
+ done
|
||||
+
|
||||
+.PHONY: all modules clean install config_check dist
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/mkexport.sh linux-4.6-rc6-ndis/3rdparty/ndiswrapper/mkexport.sh
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/mkexport.sh 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/mkexport.sh 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/mkexport.sh linux-4.12.4-3rd/3rdparty/ndiswrapper/mkexport.sh
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/mkexport.sh 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/mkexport.sh 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,42 @@
|
||||
+#! /bin/sh
|
||||
+
|
||||
@@ -6232,9 +6228,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/mkexport.sh linux-4.6-rc6-ndis/3rd
|
||||
+
|
||||
+echo " {NULL, NULL}"
|
||||
+echo "};"
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/mkstubs.sh linux-4.6-rc6-ndis/3rdparty/ndiswrapper/mkstubs.sh
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/mkstubs.sh 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/mkstubs.sh 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/mkstubs.sh linux-4.12.4-3rd/3rdparty/ndiswrapper/mkstubs.sh
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/mkstubs.sh 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/mkstubs.sh 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,12 @@
|
||||
+#! /bin/sh
|
||||
+
|
||||
@@ -6248,9 +6244,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/mkstubs.sh linux-4.6-rc6-ndis/3rdp
|
||||
+ win2lin(\1, \2)/p' \
|
||||
+ $file | sed -e 's/[ \t ]\+//' | sort -u; \
|
||||
+done
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ndis.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ndis.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/ndis.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ndis.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/ndis.c linux-4.12.4-3rd/3rdparty/ndiswrapper/ndis.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/ndis.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/ndis.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,3025 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -9277,9 +9273,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ndis.c linux-4.6-rc6-ndis/3rdparty
|
||||
+ destroy_workqueue(ndis_wq);
|
||||
+ EXIT1(return);
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ndis.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ndis.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/ndis.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ndis.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/ndis.h linux-4.12.4-3rd/3rdparty/ndiswrapper/ndis.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/ndis.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/ndis.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,1309 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -10590,9 +10586,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ndis.h linux-4.6-rc6-ndis/3rdparty
|
||||
+}
|
||||
+
|
||||
+#endif /* NDIS_H */
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ndiswrapper.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ndiswrapper.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/ndiswrapper.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ndiswrapper.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/ndiswrapper.h linux-4.12.4-3rd/3rdparty/ndiswrapper/ndiswrapper.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/ndiswrapper.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/ndiswrapper.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,219 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -10612,7 +10608,7 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ndiswrapper.h linux-4.6-rc6-ndis/3
|
||||
+#ifndef _NDISWRAPPER_H_
|
||||
+#define _NDISWRAPPER_H_
|
||||
+
|
||||
+#define DRIVER_VERSION "1.60"
|
||||
+#define DRIVER_VERSION "1.61"
|
||||
+#define UTILS_VERSION "1.9"
|
||||
+
|
||||
+#define DRIVER_NAME "ndiswrapper"
|
||||
@@ -10813,9 +10809,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ndiswrapper.h linux-4.6-rc6-ndis/3
|
||||
+#endif // __KERNEL__
|
||||
+
|
||||
+#endif // NDISWRAPPER_H
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ntoskernel.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ntoskernel.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/ntoskernel.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ntoskernel.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/ntoskernel.c linux-4.12.4-3rd/3rdparty/ndiswrapper/ntoskernel.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/ntoskernel.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/ntoskernel.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,2677 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -13494,10 +13490,10 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ntoskernel.c linux-4.6-rc6-ndis/3r
|
||||
+
|
||||
+ EXIT2(return);
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ntoskernel.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ntoskernel.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/ntoskernel.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ntoskernel.h 2016-05-01 18:25:43.000000000 +0300
|
||||
@@ -0,0 +1,1090 @@
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/ntoskernel.h linux-4.12.4-3rd/3rdparty/ndiswrapper/ntoskernel.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/ntoskernel.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/ntoskernel.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,1102 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
+ *
|
||||
@@ -13546,6 +13542,8 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ntoskernel.h linux-4.6-rc6-ndis/3r
|
||||
+#include <linux/percpu.h>
|
||||
+#include <linux/kthread.h>
|
||||
+#include <linux/workqueue.h>
|
||||
+#include <linux/vmalloc.h>
|
||||
+
|
||||
+
|
||||
+#if !defined(CONFIG_X86) && !defined(CONFIG_X86_64)
|
||||
+#error "this module is for x86 or x86_64 architectures only"
|
||||
@@ -13858,8 +13856,18 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ntoskernel.h linux-4.6-rc6-ndis/3r
|
||||
+#define prandom_seed(seed) net_srandom(seed)
|
||||
+#endif
|
||||
+
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)
|
||||
+#define strncasecmp strnicmp
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
|
||||
+static int strncasecmp(const char *s1, const char *s2, size_t n)
|
||||
+{
|
||||
+ strnicmp(s1, s2, n);
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0)
|
||||
+static inline void netif_trans_update(struct net_device *dev)
|
||||
+{
|
||||
+ dev->trans_start = jiffies;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+/* TICK is 100ns */
|
||||
@@ -14588,9 +14596,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ntoskernel.h linux-4.6-rc6-ndis/3r
|
||||
+#endif
|
||||
+
|
||||
+#endif // _NTOSKERNEL_H_
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ntoskernel_io.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ntoskernel_io.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/ntoskernel_io.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/ntoskernel_io.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/ntoskernel_io.c linux-4.12.4-3rd/3rdparty/ndiswrapper/ntoskernel_io.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/ntoskernel_io.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/ntoskernel_io.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,1161 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -15753,9 +15761,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/ntoskernel_io.c linux-4.6-rc6-ndis
|
||||
+ IOTRACE("LowLimit: 0x%lx, HighLimit: 0x%lx", *LowLimit, *HighLimit);
|
||||
+ IOEXIT(return);
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/pe_linker.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/pe_linker.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/pe_linker.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/pe_linker.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/pe_linker.c linux-4.12.4-3rd/3rdparty/ndiswrapper/pe_linker.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/pe_linker.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/pe_linker.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,600 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -16357,9 +16365,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/pe_linker.c linux-4.6-rc6-ndis/3rd
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/pe_linker.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/pe_linker.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/pe_linker.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/pe_linker.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/pe_linker.h linux-4.12.4-3rd/3rdparty/ndiswrapper/pe_linker.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/pe_linker.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/pe_linker.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,992 @@
|
||||
+/*
|
||||
+ * This file is an excerpt of winnt.h from WINE, which bears the
|
||||
@@ -17353,9 +17361,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/pe_linker.h linux-4.6-rc6-ndis/3rd
|
||||
+ WORD Length;
|
||||
+ CHAR NameString[ 1 ];
|
||||
+} IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/pnp.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/pnp.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/pnp.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/pnp.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/pnp.c linux-4.12.4-3rd/3rdparty/ndiswrapper/pnp.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/pnp.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/pnp.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,697 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005 Giridhar Pemmasani
|
||||
@@ -18054,9 +18062,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/pnp.c linux-4.6-rc6-ndis/3rdparty/
|
||||
+}
|
||||
+
|
||||
+#endif // USB
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/pnp.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/pnp.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/pnp.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/pnp.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/pnp.h linux-4.12.4-3rd/3rdparty/ndiswrapper/pnp.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/pnp.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/pnp.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,36 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005 Giridhar Pemmasani
|
||||
@@ -18094,9 +18102,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/pnp.h linux-4.6-rc6-ndis/3rdparty/
|
||||
+int wrap_pnp_resume_usb_device(struct usb_interface *intf);
|
||||
+
|
||||
+#endif
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/proc.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/proc.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/proc.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/proc.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/proc.c linux-4.12.4-3rd/3rdparty/ndiswrapper/proc.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/proc.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/proc.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,588 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -18686,9 +18694,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/proc.c linux-4.6-rc6-ndis/3rdparty
|
||||
+ remove_proc_entry("debug", wrap_procfs_entry);
|
||||
+ proc_remove(wrap_procfs_entry);
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/rtl.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/rtl.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/rtl.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/rtl.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/rtl.c linux-4.12.4-3rd/3rdparty/ndiswrapper/rtl.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/rtl.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/rtl.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,715 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -19405,9 +19413,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/rtl.c linux-4.6-rc6-ndis/3rdparty/
|
||||
+ TRACE1("version: %d", version);
|
||||
+ return TRUE;
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/usb.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/usb.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/usb.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/usb.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/usb.c linux-4.12.4-3rd/3rdparty/ndiswrapper/usb.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/usb.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/usb.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,1496 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2004 Jan Kiszka
|
||||
@@ -20905,9 +20913,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/usb.c linux-4.6-rc6-ndis/3rdparty/
|
||||
+ kill_all_urbs(wd, 0);
|
||||
+ USBEXIT(return);
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/usb.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/usb.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/usb.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/usb.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/usb.h linux-4.12.4-3rd/3rdparty/ndiswrapper/usb.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/usb.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/usb.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,360 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2004 Jan Kiszka
|
||||
@@ -21269,9 +21277,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/usb.h linux-4.6-rc6-ndis/3rdparty/
|
||||
+ struct io_stack_location *irp_sl);
|
||||
+
|
||||
+#endif /* USB_H */
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/win2lin_stubs.S linux-4.6-rc6-ndis/3rdparty/ndiswrapper/win2lin_stubs.S
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/win2lin_stubs.S 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/win2lin_stubs.S 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/win2lin_stubs.S linux-4.12.4-3rd/3rdparty/ndiswrapper/win2lin_stubs.S
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/win2lin_stubs.S 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/win2lin_stubs.S 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,253 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005 Karl Vogel, Giridhar Pemmasani
|
||||
@@ -21526,9 +21534,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/win2lin_stubs.S linux-4.6-rc6-ndis
|
||||
+#include "win2lin_stubs.h"
|
||||
+
|
||||
+#endif /* CONFIG_X86_64 */
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/winnt_types.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/winnt_types.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/winnt_types.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/winnt_types.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/winnt_types.h linux-4.12.4-3rd/3rdparty/ndiswrapper/winnt_types.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/winnt_types.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/winnt_types.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,1701 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -23231,9 +23239,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/winnt_types.h linux-4.6-rc6-ndis/3
|
||||
+
|
||||
+
|
||||
+#endif /* WINNT_TYPES_H */
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/workqueue.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/workqueue.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/workqueue.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/workqueue.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/workqueue.c linux-4.12.4-3rd/3rdparty/ndiswrapper/workqueue.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/workqueue.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/workqueue.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,279 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2006 Giridhar Pemmasani
|
||||
@@ -23514,9 +23522,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/workqueue.c linux-4.6-rc6-ndis/3rd
|
||||
+ wrap_destroy_wq_on(workq, i);
|
||||
+ kfree(workq);
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapmem.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapmem.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/wrapmem.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapmem.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/wrapmem.c linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapmem.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/wrapmem.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapmem.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,366 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2006 Giridhar Pemmasani
|
||||
@@ -23884,9 +23892,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapmem.c linux-4.6-rc6-ndis/3rdpa
|
||||
+#endif
|
||||
+ return;
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapmem.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapmem.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/wrapmem.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapmem.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/wrapmem.h linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapmem.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/wrapmem.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapmem.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,97 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2006 Giridhar Pemmasani
|
||||
@@ -23985,9 +23993,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapmem.h linux-4.6-rc6-ndis/3rdpa
|
||||
+#endif // ALLOC_DEBUG
|
||||
+
|
||||
+#endif
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapndis.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapndis.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/wrapndis.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapndis.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/wrapndis.c linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapndis.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/wrapndis.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapndis.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,2186 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -24695,7 +24703,7 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapndis.c linux-4.6-rc6-ndis/3rdp
|
||||
+ n = wnd->max_tx_packets;
|
||||
+ n = mp_tx_packets(wnd, wnd->tx_ring_start, n);
|
||||
+ if (n) {
|
||||
+ wnd->net_dev->trans_start = jiffies;
|
||||
+ netif_trans_update(wnd->net_dev);
|
||||
+ wnd->tx_ring_start =
|
||||
+ (wnd->tx_ring_start + n) % TX_RING_SIZE;
|
||||
+ wnd->is_tx_ring_full = 0;
|
||||
@@ -26175,9 +26183,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapndis.c linux-4.6-rc6-ndis/3rdp
|
||||
+ if (wrapndis_wq)
|
||||
+ destroy_workqueue(wrapndis_wq);
|
||||
+}
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapndis.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapndis.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/wrapndis.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapndis.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/wrapndis.h linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapndis.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/wrapndis.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapndis.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,86 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -26265,9 +26273,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapndis.h linux-4.6-rc6-ndis/3rdp
|
||||
+struct iw_statistics *get_iw_stats(struct net_device *dev);
|
||||
+
|
||||
+#endif
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapper.c linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapper.c
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/wrapper.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapper.c 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/wrapper.c linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapper.c
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/wrapper.c 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapper.c 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,111 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -26380,9 +26388,9 @@ diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapper.c linux-4.6-rc6-ndis/3rdpa
|
||||
+
|
||||
+module_init(wrapper_init);
|
||||
+module_exit(wrapper_exit);
|
||||
diff -Nurp linux-4.6-rc6/3rdparty/ndiswrapper/wrapper.h linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapper.h
|
||||
--- linux-4.6-rc6/3rdparty/ndiswrapper/wrapper.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.6-rc6-ndis/3rdparty/ndiswrapper/wrapper.h 2016-05-01 18:25:43.000000000 +0300
|
||||
diff -Nurp linux-4.12.4/3rdparty/ndiswrapper/wrapper.h linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapper.h
|
||||
--- linux-4.12.4/3rdparty/ndiswrapper/wrapper.h 1970-01-01 02:00:00.000000000 +0200
|
||||
+++ linux-4.12.4-3rd/3rdparty/ndiswrapper/wrapper.h 2016-10-09 18:45:08.027226096 +0300
|
||||
@@ -0,0 +1,24 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
|
||||
@@ -0,0 +1,43 @@
|
||||
|
||||
last_rx is gone, most drivers does not really need/use it anyway.
|
||||
|
||||
Also, include signal.h to fix implicit deklaration of function ”signal_pending”
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
--- linux/3rdparty/ndiswrapper/ndis.c.orig 2016-10-09 18:45:08.027226096 +0300
|
||||
+++ linux/3rdparty/ndiswrapper/ndis.c 2017-08-04 00:09:49.264110609 +0300
|
||||
@@ -2258,7 +2258,6 @@ wstdcall void NdisMIndicateReceivePacket
|
||||
WARNING("empty packet ignored");
|
||||
continue;
|
||||
}
|
||||
- wnd->net_dev->last_rx = jiffies;
|
||||
/* get total number of bytes in packet */
|
||||
NdisGetFirstBufferFromPacketSafe(packet, &buffer, &virt,
|
||||
&length, &total_length,
|
||||
@@ -2346,7 +2345,6 @@ wstdcall void EthRxIndicateHandler(struc
|
||||
ERROR("nmb is NULL");
|
||||
EXIT3(return);
|
||||
}
|
||||
- wnd->net_dev->last_rx = jiffies;
|
||||
|
||||
if (look_ahead_size < packet_size) {
|
||||
struct ndis_packet *packet;
|
||||
@@ -2461,7 +2459,6 @@ wstdcall void NdisMTransferDataComplete(
|
||||
WARNING("illegal packet");
|
||||
EXIT3(return);
|
||||
}
|
||||
- wnd->net_dev->last_rx = jiffies;
|
||||
oob_data = NDIS_PACKET_OOB_DATA(packet);
|
||||
skb_size = sizeof(oob_data->header) + oob_data->look_ahead_size +
|
||||
bytes_txed;
|
||||
--- linux/3rdparty/ndiswrapper/ntoskernel.h.orig 2017-08-03 23:52:29.015367906 +0300
|
||||
+++ linux/3rdparty/ndiswrapper/ntoskernel.h 2017-08-04 00:17:41.334914691 +0300
|
||||
@@ -33,6 +33,7 @@
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/sched.h>
|
||||
+#include <linux/sched/signal.h>
|
||||
#include <linux/usb.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <asm/mman.h>
|
||||
@@ -0,0 +1,16 @@
|
||||
|
||||
__GFP_REPEAT is now __GFP_RETRY_MAYFAIL
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
--- linux/3rdparty/ndiswrapper/ntoskernel.h.orig 2017-10-15 01:11:56.041892449 +0300
|
||||
+++ linux/3rdparty/ndiswrapper/ntoskernel.h 2017-10-15 01:11:06.159204294 +0300
|
||||
@@ -122,7 +122,7 @@ static cpumask_t cpumasks[NR_CPUS];
|
||||
|
||||
#define PCI_DMA_ALLOC_COHERENT(pci_dev,size,dma_handle) \
|
||||
dma_alloc_coherent(&pci_dev->dev,size,dma_handle, \
|
||||
- GFP_KERNEL | __GFP_REPEAT)
|
||||
+ GFP_KERNEL | __GFP_RETRY_MAYFAIL)
|
||||
#define PCI_DMA_FREE_COHERENT(pci_dev,size,cpu_addr,dma_handle) \
|
||||
dma_free_coherent(&pci_dev->dev,size,cpu_addr,dma_handle)
|
||||
#define PCI_DMA_MAP_SINGLE(pci_dev,addr,size,direction) \
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+34
@@ -0,0 +1,34 @@
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Subject: [PATCH 2/2] PCI: Add function 1 DMA alias quirk for Highpoint RocketRAID 644L
|
||||
Date: Fri, 2 Mar 2018 11:36:33 +0100
|
||||
|
||||
The Highpoint RocketRAID 644L uses a Marvel 88SE9235 controller, as with
|
||||
other Marvel controllers this needs a function 1 DMA alias quirk.
|
||||
|
||||
Note the RocketRAID 642L uses the same Marvel 88SE9235 controller and
|
||||
already is listed with a function 1 DMA alias quirk.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1534106
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/pci/quirks.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
||||
index 8b14bd326d4a..46d47bd6ca1f 100644
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -3908,6 +3908,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9230,
|
||||
quirk_dma_func1_alias);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TTI, 0x0642,
|
||||
quirk_dma_func1_alias);
|
||||
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TTI, 0x0645,
|
||||
+ quirk_dma_func1_alias);
|
||||
/* https://bugs.gentoo.org/show_bug.cgi?id=497630 */
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_JMICRON,
|
||||
PCI_DEVICE_ID_JMICRON_JMB388_ESD,
|
||||
--
|
||||
2.14.3
|
||||
|
||||
|
||||
-70
@@ -1,70 +0,0 @@
|
||||
From ca45663819accf038291dbe2d67ed66dc48d714c Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Backlund <tmb@mageia.org>
|
||||
Date: Sun, 29 Nov 2015 14:44:22 +0200
|
||||
Subject: [PATCH] Revert "x86/mm/mtrr: Remove kernel internal MTRR interfaces:
|
||||
unexport mtrr_add() and mtrr_del()"
|
||||
|
||||
This reverts commit 2baa891e42d84159b693eadd44f6fe1486285bdc.
|
||||
|
||||
It currently breaks nvidia304 driver.
|
||||
|
||||
Signed-of-by: Thomas Backlund <tmb@mageia.org>
|
||||
---
|
||||
Documentation/x86/mtrr.txt | 20 ++++----------------
|
||||
arch/x86/kernel/cpu/mtrr/main.c | 2 ++
|
||||
2 files changed, 6 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/Documentation/x86/mtrr.txt b/Documentation/x86/mtrr.txt
|
||||
index dc3e703..860bc3a 100644
|
||||
--- a/Documentation/x86/mtrr.txt
|
||||
+++ b/Documentation/x86/mtrr.txt
|
||||
@@ -6,22 +6,10 @@ Luis R. Rodriguez <mcgrof@do-not-panic.com> - April 9, 2015
|
||||
===============================================================================
|
||||
Phasing out MTRR use
|
||||
|
||||
-MTRR use is replaced on modern x86 hardware with PAT. Direct MTRR use by
|
||||
-drivers on Linux is now completely phased out, device drivers should use
|
||||
-arch_phys_wc_add() in combination with ioremap_wc() to make MTRR effective on
|
||||
-non-PAT systems while a no-op but equally effective on PAT enabled systems.
|
||||
-
|
||||
-Even if Linux does not use MTRRs directly, some x86 platform firmware may still
|
||||
-set up MTRRs early before booting the OS. They do this as some platform
|
||||
-firmware may still have implemented access to MTRRs which would be controlled
|
||||
-and handled by the platform firmware directly. An example of platform use of
|
||||
-MTRRs is through the use of SMI handlers, one case could be for fan control,
|
||||
-the platform code would need uncachable access to some of its fan control
|
||||
-registers. Such platform access does not need any Operating System MTRR code in
|
||||
-place other than mtrr_type_lookup() to ensure any OS specific mapping requests
|
||||
-are aligned with platform MTRR setup. If MTRRs are only set up by the platform
|
||||
-firmware code though and the OS does not make any specific MTRR mapping
|
||||
-requests mtrr_type_lookup() should always return MTRR_TYPE_INVALID.
|
||||
+MTRR use is replaced on modern x86 hardware with PAT. Over time the only type
|
||||
+of effective MTRR that is expected to be supported will be for write-combining.
|
||||
+As MTRR use is phased out device drivers should use arch_phys_wc_add() to make
|
||||
+MTRR effective on non-PAT systems while a no-op on PAT enabled systems.
|
||||
|
||||
For details refer to Documentation/x86/pat.txt.
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
|
||||
index f891b47..e7ed0d8 100644
|
||||
--- a/arch/x86/kernel/cpu/mtrr/main.c
|
||||
+++ b/arch/x86/kernel/cpu/mtrr/main.c
|
||||
@@ -448,6 +448,7 @@ int mtrr_add(unsigned long base, unsigned long size, unsigned int type,
|
||||
return mtrr_add_page(base >> PAGE_SHIFT, size >> PAGE_SHIFT, type,
|
||||
increment);
|
||||
}
|
||||
+EXPORT_SYMBOL(mtrr_add);
|
||||
|
||||
/**
|
||||
* mtrr_del_page - delete a memory type region
|
||||
@@ -536,6 +537,7 @@ int mtrr_del(int reg, unsigned long base, unsigned long size)
|
||||
return -EINVAL;
|
||||
return mtrr_del_page(reg, base >> PAGE_SHIFT, size >> PAGE_SHIFT);
|
||||
}
|
||||
+EXPORT_SYMBOL(mtrr_del);
|
||||
|
||||
/**
|
||||
* arch_phys_wc_add - add a WC MTRR and handle errors if PAT is unavailable
|
||||
--
|
||||
2.3.10
|
||||
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
||||
Subject: [PATCH] ACPI / EC: Restore polling during noirq suspend/resume phases
|
||||
Date: Fri, 09 Feb 2018 22:55:28 +0100
|
||||
|
||||
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
|
||||
Commit 662591461c4b (ACPI / EC: Drop EC noirq hooks to fix a
|
||||
regression) modified the ACPI EC driver so that it doesn't switch
|
||||
over to busy polling mode during noirq stages of system suspend and
|
||||
resume in an attempt to fix an issue resulting from that behavior.
|
||||
|
||||
However, that modification introduced a system resume regression on
|
||||
Thinkpad X240, so make the EC driver switch over to the polling mode
|
||||
during noirq stages of system suspend and resume again, which
|
||||
effectively reverts the problematic commit.
|
||||
|
||||
Fixes: 662591461c4b (ACPI / EC: Drop EC noirq hooks to fix a regression)
|
||||
Link: https://bugzilla.kernel.org/show_bug.cgi?id=197863
|
||||
Reported-by: Markus Demleitner <m@tfiu.de>
|
||||
Tested-by: Markus Demleitner <m@tfiu.de>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/ec.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
Index: linux-pm/drivers/acpi/ec.c
|
||||
===================================================================
|
||||
--- linux-pm.orig/drivers/acpi/ec.c
|
||||
+++ linux-pm/drivers/acpi/ec.c
|
||||
@@ -1927,6 +1927,9 @@ static int acpi_ec_suspend_noirq(struct
|
||||
ec->reference_count >= 1)
|
||||
acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_DISABLE);
|
||||
|
||||
+ if (acpi_sleep_no_ec_events())
|
||||
+ acpi_ec_enter_noirq(ec);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1934,6 +1937,9 @@ static int acpi_ec_resume_noirq(struct d
|
||||
{
|
||||
struct acpi_ec *ec = acpi_driver_data(to_acpi_device(dev));
|
||||
|
||||
+ if (acpi_sleep_no_ec_events())
|
||||
+ acpi_ec_leave_noirq(ec);
|
||||
+
|
||||
if (ec_no_wakeup && test_bit(EC_FLAGS_STARTED, &ec->flags) &&
|
||||
ec->reference_count >= 1)
|
||||
acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_ENABLE);
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
From 863204cfdae98626a92535ac928ad79f4d6b74ff Mon Sep 17 00:00:00 2001
|
||||
From: Arnd Bergmann <arnd@arndb.de>
|
||||
Date: Wed, 6 Dec 2017 14:17:17 +0100
|
||||
Subject: [PATCH] ARM: omap2: hide omap3_save_secure_ram on non-OMAP3 builds
|
||||
|
||||
In configurations without CONFIG_OMAP3 but with secure RAM support,
|
||||
we now run into a link failure:
|
||||
|
||||
arch/arm/mach-omap2/omap-secure.o: In function `omap3_save_secure_ram':
|
||||
omap-secure.c:(.text+0x130): undefined reference to `save_secure_ram_context'
|
||||
|
||||
The omap3_save_secure_ram() function is only called from the OMAP34xx
|
||||
power management code, so we can simply hide that function in the
|
||||
appropriate #ifdef.
|
||||
|
||||
Fixes: d09220a887f7 ("ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context")
|
||||
Acked-by: Tony Lindgren <tony@atomide.com>
|
||||
Tested-by: Dan Murphy <dmurphy@ti.com>
|
||||
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
|
||||
---
|
||||
arch/arm/mach-omap2/omap-secure.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c
|
||||
index 9ff92050053c..fa7f308c9027 100644
|
||||
--- a/arch/arm/mach-omap2/omap-secure.c
|
||||
+++ b/arch/arm/mach-omap2/omap-secure.c
|
||||
@@ -73,6 +73,7 @@ phys_addr_t omap_secure_ram_mempool_base(void)
|
||||
return omap_secure_memblock_base;
|
||||
}
|
||||
|
||||
+#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
|
||||
u32 omap3_save_secure_ram(void __iomem *addr, int size)
|
||||
{
|
||||
u32 ret;
|
||||
@@ -91,6 +92,7 @@ u32 omap3_save_secure_ram(void __iomem *addr, int size)
|
||||
|
||||
return ret;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/**
|
||||
* rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
|
||||
--
|
||||
2.16.2
|
||||
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Subject: [PATCH 1/2] ahci: Add PCI-id for the Highpoint Rocketraid 644L card
|
||||
Date: Fri, 2 Mar 2018 11:36:32 +0100
|
||||
|
||||
Like the Highpoint Rocketraid 642L and cards using a Marvel 88SE9235
|
||||
controller in general, this RAID card also supports AHCI mode and short
|
||||
of a custom driver, this is the only way to make it work under Linux.
|
||||
|
||||
Note that even though the card is called to 644L, it has a product-id
|
||||
of 0x0645.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1534106
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/ata/ahci.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
|
||||
index 355a95a83a34..1ff17799769d 100644
|
||||
--- a/drivers/ata/ahci.c
|
||||
+++ b/drivers/ata/ahci.c
|
||||
@@ -550,7 +550,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||
.driver_data = board_ahci_yes_fbs },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9230),
|
||||
.driver_data = board_ahci_yes_fbs },
|
||||
- { PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0642),
|
||||
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0642), /* highpoint rocketraid 642L */
|
||||
+ .driver_data = board_ahci_yes_fbs },
|
||||
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0645), /* highpoint rocketraid 644L */
|
||||
.driver_data = board_ahci_yes_fbs },
|
||||
|
||||
/* Promise */
|
||||
--
|
||||
2.14.3
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+107
@@ -0,0 +1,107 @@
|
||||
From 614822f81f606e0064acdae11d9ec1efd3db4190 Mon Sep 17 00:00:00 2001
|
||||
From: Luca Miccio <lucmiccio@gmail.com>
|
||||
Date: Mon, 13 Nov 2017 07:34:08 +0100
|
||||
Subject: [PATCH] block, bfq: add missing invocations of
|
||||
bfqg_stats_update_io_add/remove
|
||||
|
||||
bfqg_stats_update_io_add and bfqg_stats_update_io_remove are to be
|
||||
invoked, respectively, when an I/O request enters and when an I/O
|
||||
request exits the scheduler. Unfortunately, bfq does not fully comply
|
||||
with this scheme, because it does not invoke these functions for
|
||||
requests that are inserted into or extracted from its priority
|
||||
dispatch list. This commit fixes this mistake.
|
||||
|
||||
Tested-by: Lee Tibbert <lee.tibbert@gmail.com>
|
||||
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Luca Miccio <lucmiccio@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 21 ++++++++++++++++++---
|
||||
1 file changed, 18 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 889a8549d97f..91703eba63f0 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -1359,7 +1359,6 @@ static void bfq_bfqq_handle_idle_busy_switch(struct bfq_data *bfqd,
|
||||
bfqq->ttime.last_end_request +
|
||||
bfqd->bfq_slice_idle * 3;
|
||||
|
||||
- bfqg_stats_update_io_add(bfqq_group(RQ_BFQQ(rq)), bfqq, rq->cmd_flags);
|
||||
|
||||
/*
|
||||
* bfqq deserves to be weight-raised if:
|
||||
@@ -1633,7 +1632,6 @@ static void bfq_remove_request(struct request_queue *q,
|
||||
if (rq->cmd_flags & REQ_META)
|
||||
bfqq->meta_pending--;
|
||||
|
||||
- bfqg_stats_update_io_remove(bfqq_group(bfqq), rq->cmd_flags);
|
||||
}
|
||||
|
||||
static bool bfq_bio_merge(struct blk_mq_hw_ctx *hctx, struct bio *bio)
|
||||
@@ -1746,6 +1744,7 @@ static void bfq_requests_merged(struct request_queue *q, struct request *rq,
|
||||
bfqq->next_rq = rq;
|
||||
|
||||
bfq_remove_request(q, next);
|
||||
+ bfqg_stats_update_io_remove(bfqq_group(bfqq), next->cmd_flags);
|
||||
|
||||
spin_unlock_irq(&bfqq->bfqd->lock);
|
||||
end:
|
||||
@@ -3700,6 +3699,9 @@ static struct request *bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
spin_lock_irq(&bfqd->lock);
|
||||
|
||||
rq = __bfq_dispatch_request(hctx);
|
||||
+ if (rq && RQ_BFQQ(rq))
|
||||
+ bfqg_stats_update_io_remove(bfqq_group(RQ_BFQQ(rq)),
|
||||
+ rq->cmd_flags);
|
||||
spin_unlock_irq(&bfqd->lock);
|
||||
|
||||
return rq;
|
||||
@@ -4224,6 +4226,7 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
{
|
||||
struct request_queue *q = hctx->queue;
|
||||
struct bfq_data *bfqd = q->elevator->elevator_data;
|
||||
+ struct bfq_queue *bfqq = RQ_BFQQ(rq);
|
||||
|
||||
spin_lock_irq(&bfqd->lock);
|
||||
if (blk_mq_sched_try_insert_merge(q, rq)) {
|
||||
@@ -4243,6 +4246,12 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
list_add_tail(&rq->queuelist, &bfqd->dispatch);
|
||||
} else {
|
||||
__bfq_insert_request(bfqd, rq);
|
||||
+ /*
|
||||
+ * Update bfqq, because, if a queue merge has occurred
|
||||
+ * in __bfq_insert_request, then rq has been
|
||||
+ * redirected into a new queue.
|
||||
+ */
|
||||
+ bfqq = RQ_BFQQ(rq);
|
||||
|
||||
if (rq_mergeable(rq)) {
|
||||
elv_rqhash_add(q, rq);
|
||||
@@ -4251,6 +4260,9 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
}
|
||||
}
|
||||
|
||||
+ if (bfqq)
|
||||
+ bfqg_stats_update_io_add(bfqq_group(bfqq), bfqq, rq->cmd_flags);
|
||||
+
|
||||
spin_unlock_irq(&bfqd->lock);
|
||||
}
|
||||
|
||||
@@ -4428,8 +4440,11 @@ static void bfq_finish_request(struct request *rq)
|
||||
* lock is held.
|
||||
*/
|
||||
|
||||
- if (!RB_EMPTY_NODE(&rq->rb_node))
|
||||
+ if (!RB_EMPTY_NODE(&rq->rb_node)) {
|
||||
bfq_remove_request(rq->q, rq);
|
||||
+ bfqg_stats_update_io_remove(bfqq_group(bfqq),
|
||||
+ rq->cmd_flags);
|
||||
+ }
|
||||
bfq_put_rq_priv_body(bfqq);
|
||||
}
|
||||
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
From 05e90283561648301e30232fe0c91bd345ceba03 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Wed, 20 Dec 2017 12:38:31 +0100
|
||||
Subject: [PATCH] block, bfq: add missing rq_pos_tree update on rq removal
|
||||
|
||||
If two processes do I/O close to each other, then BFQ merges the
|
||||
bfq_queues associated with these processes, to get a more sequential
|
||||
I/O, and thus a higher throughput. In this respect, to detect whether
|
||||
two processes are doing I/O close to each other, BFQ keeps a list of
|
||||
the head-of-line I/O requests of all active bfq_queues. The list is
|
||||
ordered by initial sectors, and implemented through a red-black tree
|
||||
(rq_pos_tree).
|
||||
|
||||
Unfortunately, the update of the rq_pos_tree was incomplete, because
|
||||
the tree was not updated on the removal of the head-of-line I/O
|
||||
request of a bfq_queue, in case the queue did not remain empty. This
|
||||
commit adds the missing update.
|
||||
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 0f48583b9380..fa395a260a23 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -1627,6 +1627,8 @@ static void bfq_remove_request(struct request_queue *q,
|
||||
rb_erase(&bfqq->pos_node, bfqq->pos_root);
|
||||
bfqq->pos_root = NULL;
|
||||
}
|
||||
+ } else {
|
||||
+ bfq_pos_tree_add_move(bfqd, bfqq);
|
||||
}
|
||||
|
||||
if (rq->cmd_flags & REQ_META)
|
||||
--
|
||||
2.15.1
|
||||
|
||||
@@ -0,0 +1,224 @@
|
||||
From a7877390614770965a6925dfed79cbd3eeeb61e0 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Wed, 7 Feb 2018 22:19:20 +0100
|
||||
Subject: [PATCH] block, bfq: add requeue-request hook
|
||||
|
||||
Commit 'a6a252e64914 ("blk-mq-sched: decide how to handle flush rq via
|
||||
RQF_FLUSH_SEQ")' makes all non-flush re-prepared requests for a device
|
||||
be re-inserted into the active I/O scheduler for that device. As a
|
||||
consequence, I/O schedulers may get the same request inserted again,
|
||||
even several times, without a finish_request invoked on that request
|
||||
before each re-insertion.
|
||||
|
||||
This fact is the cause of the failure reported in [1]. For an I/O
|
||||
scheduler, every re-insertion of the same re-prepared request is
|
||||
equivalent to the insertion of a new request. For schedulers like
|
||||
mq-deadline or kyber, this fact causes no harm. In contrast, it
|
||||
confuses a stateful scheduler like BFQ, which keeps state for an I/O
|
||||
request, until the finish_request hook is invoked on the request. In
|
||||
particular, BFQ may get stuck, waiting forever for the number of
|
||||
request dispatches, of the same request, to be balanced by an equal
|
||||
number of request completions (while there will be one completion for
|
||||
that request). In this state, BFQ may refuse to serve I/O requests
|
||||
from other bfq_queues. The hang reported in [1] then follows.
|
||||
|
||||
However, the above re-prepared requests undergo a requeue, thus the
|
||||
requeue_request hook of the active elevator is invoked for these
|
||||
requests, if set. This commit then addresses the above issue by
|
||||
properly implementing the hook requeue_request in BFQ.
|
||||
|
||||
[1] https://marc.info/?l=linux-block&m=151211117608676
|
||||
|
||||
Reported-by: Ivan Kozik <ivan@ludios.org>
|
||||
Reported-by: Alban Browaeys <alban.browaeys@gmail.com>
|
||||
Tested-by: Mike Galbraith <efault@gmx.de>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Serena Ziviani <ziviani.serena@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 107 ++++++++++++++++++++++++++++++++++++++++------------
|
||||
1 file changed, 82 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 47e6ec7427c4..aeca22d91101 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -3823,24 +3823,26 @@ static struct request *__bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
}
|
||||
|
||||
/*
|
||||
- * We exploit the bfq_finish_request hook to decrement
|
||||
- * rq_in_driver, but bfq_finish_request will not be
|
||||
- * invoked on this request. So, to avoid unbalance,
|
||||
- * just start this request, without incrementing
|
||||
- * rq_in_driver. As a negative consequence,
|
||||
- * rq_in_driver is deceptively lower than it should be
|
||||
- * while this request is in service. This may cause
|
||||
- * bfq_schedule_dispatch to be invoked uselessly.
|
||||
+ * We exploit the bfq_finish_requeue_request hook to
|
||||
+ * decrement rq_in_driver, but
|
||||
+ * bfq_finish_requeue_request will not be invoked on
|
||||
+ * this request. So, to avoid unbalance, just start
|
||||
+ * this request, without incrementing rq_in_driver. As
|
||||
+ * a negative consequence, rq_in_driver is deceptively
|
||||
+ * lower than it should be while this request is in
|
||||
+ * service. This may cause bfq_schedule_dispatch to be
|
||||
+ * invoked uselessly.
|
||||
*
|
||||
* As for implementing an exact solution, the
|
||||
- * bfq_finish_request hook, if defined, is probably
|
||||
- * invoked also on this request. So, by exploiting
|
||||
- * this hook, we could 1) increment rq_in_driver here,
|
||||
- * and 2) decrement it in bfq_finish_request. Such a
|
||||
- * solution would let the value of the counter be
|
||||
- * always accurate, but it would entail using an extra
|
||||
- * interface function. This cost seems higher than the
|
||||
- * benefit, being the frequency of non-elevator-private
|
||||
+ * bfq_finish_requeue_request hook, if defined, is
|
||||
+ * probably invoked also on this request. So, by
|
||||
+ * exploiting this hook, we could 1) increment
|
||||
+ * rq_in_driver here, and 2) decrement it in
|
||||
+ * bfq_finish_requeue_request. Such a solution would
|
||||
+ * let the value of the counter be always accurate,
|
||||
+ * but it would entail using an extra interface
|
||||
+ * function. This cost seems higher than the benefit,
|
||||
+ * being the frequency of non-elevator-private
|
||||
* requests very low.
|
||||
*/
|
||||
goto start_rq;
|
||||
@@ -4515,6 +4517,8 @@ static inline void bfq_update_insert_stats(struct request_queue *q,
|
||||
unsigned int cmd_flags) {}
|
||||
#endif
|
||||
|
||||
+static void bfq_prepare_request(struct request *rq, struct bio *bio);
|
||||
+
|
||||
static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
bool at_head)
|
||||
{
|
||||
@@ -4541,6 +4545,18 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
else
|
||||
list_add_tail(&rq->queuelist, &bfqd->dispatch);
|
||||
} else {
|
||||
+ if (WARN_ON_ONCE(!bfqq)) {
|
||||
+ /*
|
||||
+ * This should never happen. Most likely rq is
|
||||
+ * a requeued regular request, being
|
||||
+ * re-inserted without being first
|
||||
+ * re-prepared. Do a prepare, to avoid
|
||||
+ * failure.
|
||||
+ */
|
||||
+ bfq_prepare_request(rq, rq->bio);
|
||||
+ bfqq = RQ_BFQQ(rq);
|
||||
+ }
|
||||
+
|
||||
idle_timer_disabled = __bfq_insert_request(bfqd, rq);
|
||||
/*
|
||||
* Update bfqq, because, if a queue merge has occurred
|
||||
@@ -4697,22 +4713,44 @@ static void bfq_completed_request(struct bfq_queue *bfqq, struct bfq_data *bfqd)
|
||||
bfq_schedule_dispatch(bfqd);
|
||||
}
|
||||
|
||||
-static void bfq_finish_request_body(struct bfq_queue *bfqq)
|
||||
+static void bfq_finish_requeue_request_body(struct bfq_queue *bfqq)
|
||||
{
|
||||
bfqq->allocated--;
|
||||
|
||||
bfq_put_queue(bfqq);
|
||||
}
|
||||
|
||||
-static void bfq_finish_request(struct request *rq)
|
||||
+/*
|
||||
+ * Handle either a requeue or a finish for rq. The things to do are
|
||||
+ * the same in both cases: all references to rq are to be dropped. In
|
||||
+ * particular, rq is considered completed from the point of view of
|
||||
+ * the scheduler.
|
||||
+ */
|
||||
+static void bfq_finish_requeue_request(struct request *rq)
|
||||
{
|
||||
- struct bfq_queue *bfqq;
|
||||
+ struct bfq_queue *bfqq = RQ_BFQQ(rq);
|
||||
struct bfq_data *bfqd;
|
||||
|
||||
- if (!rq->elv.icq)
|
||||
+ /*
|
||||
+ * Requeue and finish hooks are invoked in blk-mq without
|
||||
+ * checking whether the involved request is actually still
|
||||
+ * referenced in the scheduler. To handle this fact, the
|
||||
+ * following two checks make this function exit in case of
|
||||
+ * spurious invocations, for which there is nothing to do.
|
||||
+ *
|
||||
+ * First, check whether rq has nothing to do with an elevator.
|
||||
+ */
|
||||
+ if (unlikely(!(rq->rq_flags & RQF_ELVPRIV)))
|
||||
+ return;
|
||||
+
|
||||
+ /*
|
||||
+ * rq either is not associated with any icq, or is an already
|
||||
+ * requeued request that has not (yet) been re-inserted into
|
||||
+ * a bfq_queue.
|
||||
+ */
|
||||
+ if (!rq->elv.icq || !bfqq)
|
||||
return;
|
||||
|
||||
- bfqq = RQ_BFQQ(rq);
|
||||
bfqd = bfqq->bfqd;
|
||||
|
||||
if (rq->rq_flags & RQF_STARTED)
|
||||
@@ -4727,13 +4765,14 @@ static void bfq_finish_request(struct request *rq)
|
||||
spin_lock_irqsave(&bfqd->lock, flags);
|
||||
|
||||
bfq_completed_request(bfqq, bfqd);
|
||||
- bfq_finish_request_body(bfqq);
|
||||
+ bfq_finish_requeue_request_body(bfqq);
|
||||
|
||||
spin_unlock_irqrestore(&bfqd->lock, flags);
|
||||
} else {
|
||||
/*
|
||||
* Request rq may be still/already in the scheduler,
|
||||
- * in which case we need to remove it. And we cannot
|
||||
+ * in which case we need to remove it (this should
|
||||
+ * never happen in case of requeue). And we cannot
|
||||
* defer such a check and removal, to avoid
|
||||
* inconsistencies in the time interval from the end
|
||||
* of this function to the start of the deferred work.
|
||||
@@ -4748,9 +4787,26 @@ static void bfq_finish_request(struct request *rq)
|
||||
bfqg_stats_update_io_remove(bfqq_group(bfqq),
|
||||
rq->cmd_flags);
|
||||
}
|
||||
- bfq_finish_request_body(bfqq);
|
||||
+ bfq_finish_requeue_request_body(bfqq);
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * Reset private fields. In case of a requeue, this allows
|
||||
+ * this function to correctly do nothing if it is spuriously
|
||||
+ * invoked again on this same request (see the check at the
|
||||
+ * beginning of the function). Probably, a better general
|
||||
+ * design would be to prevent blk-mq from invoking the requeue
|
||||
+ * or finish hooks of an elevator, for a request that is not
|
||||
+ * referred by that elevator.
|
||||
+ *
|
||||
+ * Resetting the following fields would break the
|
||||
+ * request-insertion logic if rq is re-inserted into a bfq
|
||||
+ * internal queue, without a re-preparation. Here we assume
|
||||
+ * that re-insertions of requeued requests, without
|
||||
+ * re-preparation, can happen only for pass_through or at_head
|
||||
+ * requests (which are not re-inserted into bfq internal
|
||||
+ * queues).
|
||||
+ */
|
||||
rq->elv.priv[0] = NULL;
|
||||
rq->elv.priv[1] = NULL;
|
||||
}
|
||||
@@ -5426,7 +5482,8 @@ static struct elevator_type iosched_bfq_mq = {
|
||||
.ops.mq = {
|
||||
.limit_depth = bfq_limit_depth,
|
||||
.prepare_request = bfq_prepare_request,
|
||||
- .finish_request = bfq_finish_request,
|
||||
+ .requeue_request = bfq_finish_requeue_request,
|
||||
+ .finish_request = bfq_finish_requeue_request,
|
||||
.exit_icq = bfq_exit_icq,
|
||||
.insert_requests = bfq_insert_requests,
|
||||
.dispatch_request = bfq_dispatch_request,
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
From 3e2bdd6dff239afd8386e8758eee69ad61e5a3d6 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Thu, 21 Sep 2017 11:04:01 +0200
|
||||
Subject: [PATCH] block, bfq: check and switch back to interactive wr also on
|
||||
queue split
|
||||
|
||||
As already explained in the message of commit "block, bfq: fix
|
||||
wrong init of saved start time for weight raising", if a soft
|
||||
real-time weight-raising period happens to be nested in a larger
|
||||
interactive weight-raising period, then BFQ restores the interactive
|
||||
weight raising at the end of the soft real-time weight raising. In
|
||||
particular, BFQ checks whether the latter has ended only on request
|
||||
dispatches.
|
||||
|
||||
Unfortunately, the above scheme fails to restore interactive weight
|
||||
raising in the following corner case: if a bfq_queue, say Q,
|
||||
1) Is merged with another bfq_queue while it is in a nested soft
|
||||
real-time weight-raising period. The weight-raising state of Q is
|
||||
then saved, and not considered any longer until a split occurs.
|
||||
2) Is split from the other bfq_queue(s) at a time instant when its
|
||||
soft real-time weight raising is already finished.
|
||||
On the split, while resuming the previous, soft real-time
|
||||
weight-raised state of the bfq_queue Q, BFQ checks whether the
|
||||
current soft real-time weight-raising period is actually over. If so,
|
||||
BFQ switches weight raising off for Q, *without* checking whether the
|
||||
soft real-time period was actually nested in a non-yet-finished
|
||||
interactive weight-raising period.
|
||||
|
||||
This commit addresses this issue by adding the above missing check in
|
||||
bfq_queue splits, and restoring interactive weight raising if needed.
|
||||
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Tested-by: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Tested-by: Mirko Montanari <mirkomontanari91@gmail.com>
|
||||
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Tested-by: Lee Tibbert <lee.tibbert@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 87 ++++++++++++++++++++++++++++++-----------------------
|
||||
1 file changed, 49 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index c25955c25e03..33b63bc4a64b 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -724,6 +724,44 @@ static void bfq_updated_next_req(struct bfq_data *bfqd,
|
||||
}
|
||||
}
|
||||
|
||||
+static unsigned int bfq_wr_duration(struct bfq_data *bfqd)
|
||||
+{
|
||||
+ u64 dur;
|
||||
+
|
||||
+ if (bfqd->bfq_wr_max_time > 0)
|
||||
+ return bfqd->bfq_wr_max_time;
|
||||
+
|
||||
+ dur = bfqd->RT_prod;
|
||||
+ do_div(dur, bfqd->peak_rate);
|
||||
+
|
||||
+ /*
|
||||
+ * Limit duration between 3 and 13 seconds. Tests show that
|
||||
+ * higher values than 13 seconds often yield the opposite of
|
||||
+ * the desired result, i.e., worsen responsiveness by letting
|
||||
+ * non-interactive and non-soft-real-time applications
|
||||
+ * preserve weight raising for a too long time interval.
|
||||
+ *
|
||||
+ * On the other end, lower values than 3 seconds make it
|
||||
+ * difficult for most interactive tasks to complete their jobs
|
||||
+ * before weight-raising finishes.
|
||||
+ */
|
||||
+ if (dur > msecs_to_jiffies(13000))
|
||||
+ dur = msecs_to_jiffies(13000);
|
||||
+ else if (dur < msecs_to_jiffies(3000))
|
||||
+ dur = msecs_to_jiffies(3000);
|
||||
+
|
||||
+ return dur;
|
||||
+}
|
||||
+
|
||||
+/* switch back from soft real-time to interactive weight raising */
|
||||
+static void switch_back_to_interactive_wr(struct bfq_queue *bfqq,
|
||||
+ struct bfq_data *bfqd)
|
||||
+{
|
||||
+ bfqq->wr_coeff = bfqd->bfq_wr_coeff;
|
||||
+ bfqq->wr_cur_max_time = bfq_wr_duration(bfqd);
|
||||
+ bfqq->last_wr_start_finish = bfqq->wr_start_at_switch_to_srt;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
bfq_bfqq_resume_state(struct bfq_queue *bfqq, struct bfq_data *bfqd,
|
||||
struct bfq_io_cq *bic, bool bfq_already_existing)
|
||||
@@ -750,10 +788,16 @@ bfq_bfqq_resume_state(struct bfq_queue *bfqq, struct bfq_data *bfqd,
|
||||
if (bfqq->wr_coeff > 1 && (bfq_bfqq_in_large_burst(bfqq) ||
|
||||
time_is_before_jiffies(bfqq->last_wr_start_finish +
|
||||
bfqq->wr_cur_max_time))) {
|
||||
- bfq_log_bfqq(bfqq->bfqd, bfqq,
|
||||
- "resume state: switching off wr");
|
||||
-
|
||||
- bfqq->wr_coeff = 1;
|
||||
+ if (bfqq->wr_cur_max_time == bfqd->bfq_wr_rt_max_time &&
|
||||
+ !bfq_bfqq_in_large_burst(bfqq) &&
|
||||
+ time_is_after_eq_jiffies(bfqq->wr_start_at_switch_to_srt +
|
||||
+ bfq_wr_duration(bfqd))) {
|
||||
+ switch_back_to_interactive_wr(bfqq, bfqd);
|
||||
+ } else {
|
||||
+ bfqq->wr_coeff = 1;
|
||||
+ bfq_log_bfqq(bfqq->bfqd, bfqq,
|
||||
+ "resume state: switching off wr");
|
||||
+ }
|
||||
}
|
||||
|
||||
/* make sure weight will be updated, however we got here */
|
||||
@@ -1173,35 +1217,6 @@ static bool bfq_bfqq_update_budg_for_activation(struct bfq_data *bfqd,
|
||||
return wr_or_deserves_wr;
|
||||
}
|
||||
|
||||
-static unsigned int bfq_wr_duration(struct bfq_data *bfqd)
|
||||
-{
|
||||
- u64 dur;
|
||||
-
|
||||
- if (bfqd->bfq_wr_max_time > 0)
|
||||
- return bfqd->bfq_wr_max_time;
|
||||
-
|
||||
- dur = bfqd->RT_prod;
|
||||
- do_div(dur, bfqd->peak_rate);
|
||||
-
|
||||
- /*
|
||||
- * Limit duration between 3 and 13 seconds. Tests show that
|
||||
- * higher values than 13 seconds often yield the opposite of
|
||||
- * the desired result, i.e., worsen responsiveness by letting
|
||||
- * non-interactive and non-soft-real-time applications
|
||||
- * preserve weight raising for a too long time interval.
|
||||
- *
|
||||
- * On the other end, lower values than 3 seconds make it
|
||||
- * difficult for most interactive tasks to complete their jobs
|
||||
- * before weight-raising finishes.
|
||||
- */
|
||||
- if (dur > msecs_to_jiffies(13000))
|
||||
- dur = msecs_to_jiffies(13000);
|
||||
- else if (dur < msecs_to_jiffies(3000))
|
||||
- dur = msecs_to_jiffies(3000);
|
||||
-
|
||||
- return dur;
|
||||
-}
|
||||
-
|
||||
/*
|
||||
* Return the farthest future time instant according to jiffies
|
||||
* macros.
|
||||
@@ -3501,11 +3516,7 @@ static void bfq_update_wr_data(struct bfq_data *bfqd, struct bfq_queue *bfqq)
|
||||
bfq_wr_duration(bfqd)))
|
||||
bfq_bfqq_end_wr(bfqq);
|
||||
else {
|
||||
- /* switch back to interactive wr */
|
||||
- bfqq->wr_coeff = bfqd->bfq_wr_coeff;
|
||||
- bfqq->wr_cur_max_time = bfq_wr_duration(bfqd);
|
||||
- bfqq->last_wr_start_finish =
|
||||
- bfqq->wr_start_at_switch_to_srt;
|
||||
+ switch_back_to_interactive_wr(bfqq, bfqd);
|
||||
bfqq->entity.prio_changed = 1;
|
||||
}
|
||||
}
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
From 1be6e8a964ee9aa8d4daac523ce29e5f486dd756 Mon Sep 17 00:00:00 2001
|
||||
From: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Date: Wed, 20 Dec 2017 12:38:32 +0100
|
||||
Subject: [PATCH] block, bfq: check low_latency flag in bfq_bfqq_save_state()
|
||||
|
||||
A just-created bfq_queue will certainly be deemed as interactive on
|
||||
the arrival of its first I/O request, if the low_latency flag is
|
||||
set. Yet, if the queue is merged with another queue on the arrival of
|
||||
its first I/O request, it will not have the chance to be flagged as
|
||||
interactive. Nevertheless, if the queue is then split soon enough, it
|
||||
has to be flagged as interactive after the split.
|
||||
|
||||
To handle this early-merge scenario correctly, BFQ saves the state of
|
||||
the queue, on the merge, as if the latter had already been deemed
|
||||
interactive. So, if the queue is split soon, it will get
|
||||
weight-raised, because the previous state of the queue is resumed on
|
||||
the split.
|
||||
|
||||
Unfortunately, in the act of saving the state of the newly-created
|
||||
queue, BFQ doesn't check whether the low_latency flag is set, and this
|
||||
causes early-merged queues to be then weight-raised, on queue splits,
|
||||
even if low_latency is off. This commit addresses this problem by
|
||||
adding the missing check.
|
||||
|
||||
Signed-off-by: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index fa395a260a23..2cf395daee80 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -2064,7 +2064,8 @@ static void bfq_bfqq_save_state(struct bfq_queue *bfqq)
|
||||
bic->saved_in_large_burst = bfq_bfqq_in_large_burst(bfqq);
|
||||
bic->was_in_burst_list = !hlist_unhashed(&bfqq->burst_list_node);
|
||||
if (unlikely(bfq_bfqq_just_created(bfqq) &&
|
||||
- !bfq_bfqq_in_large_burst(bfqq))) {
|
||||
+ !bfq_bfqq_in_large_burst(bfqq) &&
|
||||
+ bfqq->bfqd->low_latency)) {
|
||||
/*
|
||||
* bfqq being merged right after being created: bfqq
|
||||
* would have deserved interactive weight raising, but
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+206
@@ -0,0 +1,206 @@
|
||||
From a34b024448eb71b0e51ad011fa1862236e366034 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Fri, 15 Dec 2017 07:23:12 +0100
|
||||
Subject: [PATCH] block, bfq: consider also past I/O in soft real-time
|
||||
detection
|
||||
|
||||
BFQ privileges the I/O of soft real-time applications, such as video
|
||||
players, to guarantee to these application a high bandwidth and a low
|
||||
latency. In this respect, it is not easy to correctly detect when an
|
||||
application is soft real-time. A particularly nasty false positive is
|
||||
that of an I/O-bound application that occasionally happens to meet all
|
||||
requirements to be deemed as soft real-time. After being detected as
|
||||
soft real-time, such an application monopolizes the device. Fortunately,
|
||||
BFQ will realize soon that the application is actually not soft
|
||||
real-time and suspend every privilege. Yet, the application may happen
|
||||
again to be wrongly detected as soft real-time, and so on.
|
||||
|
||||
As highlighted by our tests, this problem causes BFQ to occasionally
|
||||
fail to guarantee a high responsiveness, in the presence of heavy
|
||||
background I/O workloads. The reason is that the background workload
|
||||
happens to be detected as soft real-time, more or less frequently,
|
||||
during the execution of the interactive task under test. To give an
|
||||
idea, because of this problem, Libreoffice Writer occasionally takes 8
|
||||
seconds, instead of 3, to start up, if there are sequential reads and
|
||||
writes in the background, on a Kingston SSDNow V300.
|
||||
|
||||
This commit addresses this issue by leveraging the following facts.
|
||||
|
||||
The reason why some applications are detected as soft real-time despite
|
||||
all BFQ checks to avoid false positives, is simply that, during high
|
||||
CPU or storage-device load, I/O-bound applications may happen to do
|
||||
I/O slowly enough to meet all soft real-time requirements, and pass
|
||||
all BFQ extra checks. Yet, this happens only for limited time periods:
|
||||
slow-speed time intervals are usually interspersed between other time
|
||||
intervals during which these applications do I/O at a very high speed.
|
||||
To exploit these facts, this commit introduces a little change, in the
|
||||
detection of soft real-time behavior, to systematically consider also
|
||||
the recent past: the higher the speed was in the recent past, the
|
||||
later next I/O should arrive for the application to be considered as
|
||||
soft real-time. At the beginning of a slow-speed interval, the minimum
|
||||
arrival time allowed for the next I/O usually happens to still be so
|
||||
high, to fall *after* the end of the slow-speed period itself. As a
|
||||
consequence, the application does not risk to be deemed as soft
|
||||
real-time during the slow-speed interval. Then, during the next
|
||||
high-speed interval, the application cannot, evidently, be deemed as
|
||||
soft real-time (exactly because of its speed), and so on.
|
||||
|
||||
This extra filtering proved to be rather effective: in the above test,
|
||||
the frequency of false positives became so low that the start-up time
|
||||
was 3 seconds in all iterations (apart from occasional outliers,
|
||||
caused by page-cache-management issues, which are out of the scope of
|
||||
this commit, and cannot be solved by an I/O scheduler).
|
||||
|
||||
Tested-by: Lee Tibbert <lee.tibbert@gmail.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 115 ++++++++++++++++++++++++++++++++++++----------------
|
||||
1 file changed, 81 insertions(+), 34 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 9625550b2f85..e33c5c4c9856 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -2940,45 +2940,87 @@ static bool bfq_bfqq_is_slow(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
||||
* whereas soft_rt_next_start is set to infinity for applications that do
|
||||
* not.
|
||||
*
|
||||
- * Unfortunately, even a greedy application may happen to behave in an
|
||||
- * isochronous way if the CPU load is high. In fact, the application may
|
||||
- * stop issuing requests while the CPUs are busy serving other processes,
|
||||
- * then restart, then stop again for a while, and so on. In addition, if
|
||||
- * the disk achieves a low enough throughput with the request pattern
|
||||
- * issued by the application (e.g., because the request pattern is random
|
||||
- * and/or the device is slow), then the application may meet the above
|
||||
- * bandwidth requirement too. To prevent such a greedy application to be
|
||||
- * deemed as soft real-time, a further rule is used in the computation of
|
||||
- * soft_rt_next_start: soft_rt_next_start must be higher than the current
|
||||
- * time plus the maximum time for which the arrival of a request is waited
|
||||
- * for when a sync queue becomes idle, namely bfqd->bfq_slice_idle.
|
||||
- * This filters out greedy applications, as the latter issue instead their
|
||||
- * next request as soon as possible after the last one has been completed
|
||||
- * (in contrast, when a batch of requests is completed, a soft real-time
|
||||
- * application spends some time processing data).
|
||||
+ * Unfortunately, even a greedy (i.e., I/O-bound) application may
|
||||
+ * happen to meet, occasionally or systematically, both the above
|
||||
+ * bandwidth and isochrony requirements. This may happen at least in
|
||||
+ * the following circumstances. First, if the CPU load is high. The
|
||||
+ * application may stop issuing requests while the CPUs are busy
|
||||
+ * serving other processes, then restart, then stop again for a while,
|
||||
+ * and so on. The other circumstances are related to the storage
|
||||
+ * device: the storage device is highly loaded or reaches a low-enough
|
||||
+ * throughput with the I/O of the application (e.g., because the I/O
|
||||
+ * is random and/or the device is slow). In all these cases, the
|
||||
+ * I/O of the application may be simply slowed down enough to meet
|
||||
+ * the bandwidth and isochrony requirements. To reduce the probability
|
||||
+ * that greedy applications are deemed as soft real-time in these
|
||||
+ * corner cases, a further rule is used in the computation of
|
||||
+ * soft_rt_next_start: the return value of this function is forced to
|
||||
+ * be higher than the maximum between the following two quantities.
|
||||
*
|
||||
- * Unfortunately, the last filter may easily generate false positives if
|
||||
- * only bfqd->bfq_slice_idle is used as a reference time interval and one
|
||||
- * or both the following cases occur:
|
||||
- * 1) HZ is so low that the duration of a jiffy is comparable to or higher
|
||||
- * than bfqd->bfq_slice_idle. This happens, e.g., on slow devices with
|
||||
- * HZ=100.
|
||||
+ * (a) Current time plus: (1) the maximum time for which the arrival
|
||||
+ * of a request is waited for when a sync queue becomes idle,
|
||||
+ * namely bfqd->bfq_slice_idle, and (2) a few extra jiffies. We
|
||||
+ * postpone for a moment the reason for adding a few extra
|
||||
+ * jiffies; we get back to it after next item (b). Lower-bounding
|
||||
+ * the return value of this function with the current time plus
|
||||
+ * bfqd->bfq_slice_idle tends to filter out greedy applications,
|
||||
+ * because the latter issue their next request as soon as possible
|
||||
+ * after the last one has been completed. In contrast, a soft
|
||||
+ * real-time application spends some time processing data, after a
|
||||
+ * batch of its requests has been completed.
|
||||
+ *
|
||||
+ * (b) Current value of bfqq->soft_rt_next_start. As pointed out
|
||||
+ * above, greedy applications may happen to meet both the
|
||||
+ * bandwidth and isochrony requirements under heavy CPU or
|
||||
+ * storage-device load. In more detail, in these scenarios, these
|
||||
+ * applications happen, only for limited time periods, to do I/O
|
||||
+ * slowly enough to meet all the requirements described so far,
|
||||
+ * including the filtering in above item (a). These slow-speed
|
||||
+ * time intervals are usually interspersed between other time
|
||||
+ * intervals during which these applications do I/O at a very high
|
||||
+ * speed. Fortunately, exactly because of the high speed of the
|
||||
+ * I/O in the high-speed intervals, the values returned by this
|
||||
+ * function happen to be so high, near the end of any such
|
||||
+ * high-speed interval, to be likely to fall *after* the end of
|
||||
+ * the low-speed time interval that follows. These high values are
|
||||
+ * stored in bfqq->soft_rt_next_start after each invocation of
|
||||
+ * this function. As a consequence, if the last value of
|
||||
+ * bfqq->soft_rt_next_start is constantly used to lower-bound the
|
||||
+ * next value that this function may return, then, from the very
|
||||
+ * beginning of a low-speed interval, bfqq->soft_rt_next_start is
|
||||
+ * likely to be constantly kept so high that any I/O request
|
||||
+ * issued during the low-speed interval is considered as arriving
|
||||
+ * to soon for the application to be deemed as soft
|
||||
+ * real-time. Then, in the high-speed interval that follows, the
|
||||
+ * application will not be deemed as soft real-time, just because
|
||||
+ * it will do I/O at a high speed. And so on.
|
||||
+ *
|
||||
+ * Getting back to the filtering in item (a), in the following two
|
||||
+ * cases this filtering might be easily passed by a greedy
|
||||
+ * application, if the reference quantity was just
|
||||
+ * bfqd->bfq_slice_idle:
|
||||
+ * 1) HZ is so low that the duration of a jiffy is comparable to or
|
||||
+ * higher than bfqd->bfq_slice_idle. This happens, e.g., on slow
|
||||
+ * devices with HZ=100. The time granularity may be so coarse
|
||||
+ * that the approximation, in jiffies, of bfqd->bfq_slice_idle
|
||||
+ * is rather lower than the exact value.
|
||||
* 2) jiffies, instead of increasing at a constant rate, may stop increasing
|
||||
* for a while, then suddenly 'jump' by several units to recover the lost
|
||||
* increments. This seems to happen, e.g., inside virtual machines.
|
||||
- * To address this issue, we do not use as a reference time interval just
|
||||
- * bfqd->bfq_slice_idle, but bfqd->bfq_slice_idle plus a few jiffies. In
|
||||
- * particular we add the minimum number of jiffies for which the filter
|
||||
- * seems to be quite precise also in embedded systems and KVM/QEMU virtual
|
||||
- * machines.
|
||||
+ * To address this issue, in the filtering in (a) we do not use as a
|
||||
+ * reference time interval just bfqd->bfq_slice_idle, but
|
||||
+ * bfqd->bfq_slice_idle plus a few jiffies. In particular, we add the
|
||||
+ * minimum number of jiffies for which the filter seems to be quite
|
||||
+ * precise also in embedded systems and KVM/QEMU virtual machines.
|
||||
*/
|
||||
static unsigned long bfq_bfqq_softrt_next_start(struct bfq_data *bfqd,
|
||||
struct bfq_queue *bfqq)
|
||||
{
|
||||
- return max(bfqq->last_idle_bklogged +
|
||||
- HZ * bfqq->service_from_backlogged /
|
||||
- bfqd->bfq_wr_max_softrt_rate,
|
||||
- jiffies + nsecs_to_jiffies(bfqq->bfqd->bfq_slice_idle) + 4);
|
||||
+ return max3(bfqq->soft_rt_next_start,
|
||||
+ bfqq->last_idle_bklogged +
|
||||
+ HZ * bfqq->service_from_backlogged /
|
||||
+ bfqd->bfq_wr_max_softrt_rate,
|
||||
+ jiffies + nsecs_to_jiffies(bfqq->bfqd->bfq_slice_idle) + 4);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -4014,10 +4056,15 @@ static void bfq_init_bfqq(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
||||
bfqq->split_time = bfq_smallest_from_now();
|
||||
|
||||
/*
|
||||
- * Set to the value for which bfqq will not be deemed as
|
||||
- * soft rt when it becomes backlogged.
|
||||
+ * To not forget the possibly high bandwidth consumed by a
|
||||
+ * process/queue in the recent past,
|
||||
+ * bfq_bfqq_softrt_next_start() returns a value at least equal
|
||||
+ * to the current value of bfqq->soft_rt_next_start (see
|
||||
+ * comments on bfq_bfqq_softrt_next_start). Set
|
||||
+ * soft_rt_next_start to now, to mean that bfqq has consumed
|
||||
+ * no bandwidth so far.
|
||||
*/
|
||||
- bfqq->soft_rt_next_start = bfq_greatest_from_now();
|
||||
+ bfqq->soft_rt_next_start = jiffies;
|
||||
|
||||
/* first request is almost certainly seeky */
|
||||
bfqq->seek_history = 1;
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
From 7cb04004fa371a626c1a5ebe6d977f70285759ed Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Thu, 21 Sep 2017 11:04:03 +0200
|
||||
Subject: [PATCH] block, bfq: decrease burst size when queues in burst exit
|
||||
|
||||
If many queues belonging to the same group happen to be created
|
||||
shortly after each other, then the concurrent processes associated
|
||||
with these queues have typically a common goal, and they get it done
|
||||
as soon as possible if not hampered by device idling. Examples are
|
||||
processes spawned by git grep, or by systemd during boot. As for
|
||||
device idling, this mechanism is currently necessary for weight
|
||||
raising to succeed in its goal: privileging I/O. In view of these
|
||||
facts, BFQ does not provide the above queues with either weight
|
||||
raising or device idling.
|
||||
|
||||
On the other hand, a burst of queue creations may be caused also by
|
||||
the start-up of a complex application. In this case, these queues need
|
||||
usually to be served one after the other, and as quickly as possible,
|
||||
to maximise responsiveness. Therefore, in this case the best strategy
|
||||
is to weight-raise all the queues created during the burst, i.e., the
|
||||
exact opposite of the strategy for the above case.
|
||||
|
||||
To distinguish between the two cases, BFQ uses an empirical burst-size
|
||||
threshold, found through extensive tests and monitoring of daily
|
||||
usage. Only large bursts, i.e., burst with a size above this
|
||||
threshold, are considered as generated by a high number of parallel
|
||||
processes. In this respect, upstart-based boot proved to be rather
|
||||
hard to detect as generating a large burst of queue creations, because
|
||||
with upstart most of the queues created in a burst exit *before* the
|
||||
next queues in the same burst are created. To address this issue, I
|
||||
changed the burst-detection mechanism so as to not decrease the size
|
||||
of the current burst even if one of the queues in the burst is
|
||||
eliminated.
|
||||
|
||||
Unfortunately, this missing decrease causes false positives on very
|
||||
fast systems: on the start-up of a complex application, such as
|
||||
libreoffice writer, so many queues are created, served and exited
|
||||
shortly after each other, that a large burst of queue creations is
|
||||
wrongly detected as occurring. These false positives just disappear if
|
||||
the size of a burst is decreased when one of the queues in the burst
|
||||
exits. This commit restores the missing burst-size decrease, relying
|
||||
of the fact that upstart is apparently unlikely to be used on systems
|
||||
running this and future versions of the kernel.
|
||||
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Mauro Andreolini <mauro.andreolini@unimore.it>
|
||||
Signed-off-by: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Tested-by: Mirko Montanari <mirkomontanari91@gmail.com>
|
||||
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Tested-by: Lee Tibbert <lee.tibbert@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 12 +++---------
|
||||
1 file changed, 3 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 115747fe43c8..70f9177c4f5b 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -3725,16 +3725,10 @@ void bfq_put_queue(struct bfq_queue *bfqq)
|
||||
if (bfqq->ref)
|
||||
return;
|
||||
|
||||
- if (bfq_bfqq_sync(bfqq))
|
||||
- /*
|
||||
- * The fact that this queue is being destroyed does not
|
||||
- * invalidate the fact that this queue may have been
|
||||
- * activated during the current burst. As a consequence,
|
||||
- * although the queue does not exist anymore, and hence
|
||||
- * needs to be removed from the burst list if there,
|
||||
- * the burst size has not to be decremented.
|
||||
- */
|
||||
+ if (bfq_bfqq_sync(bfqq) && !hlist_unhashed(&bfqq->burst_list_node)) {
|
||||
hlist_del_init(&bfqq->burst_list_node);
|
||||
+ bfqq->bfqd->burst_size--;
|
||||
+ }
|
||||
|
||||
kmem_cache_free(bfq_pool, bfqq);
|
||||
#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
From 8993d445df388e3541f48920a2353cfc904b220a Mon Sep 17 00:00:00 2001
|
||||
From: Chiara Bruschi <bruschi.chiara@outlook.it>
|
||||
Date: Mon, 18 Dec 2017 16:21:59 +0000
|
||||
Subject: [PATCH] block, bfq: fix occurrences of request finish method's old
|
||||
name
|
||||
|
||||
Commit '7b9e93616399' ("blk-mq-sched: unify request finished methods")
|
||||
changed the old name of current bfq_finish_request method, but left it
|
||||
unchanged elsewhere in the code (related comments, part of function
|
||||
name bfq_put_rq_priv_body).
|
||||
|
||||
This commit fixes all occurrences of the old name of this method by
|
||||
changing them into the current name.
|
||||
|
||||
Fixes: 7b9e93616399 ("blk-mq-sched: unify request finished methods")
|
||||
Reviewed-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Federico Motta <federico@willer.it>
|
||||
Signed-off-by: Chiara Bruschi <bruschi.chiara@outlook.it>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 26 +++++++++++++-------------
|
||||
1 file changed, 13 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 5e6f837f663e..f352b1677143 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -3684,8 +3684,8 @@ static struct request *__bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
}
|
||||
|
||||
/*
|
||||
- * We exploit the put_rq_private hook to decrement
|
||||
- * rq_in_driver, but put_rq_private will not be
|
||||
+ * We exploit the bfq_finish_request hook to decrement
|
||||
+ * rq_in_driver, but bfq_finish_request will not be
|
||||
* invoked on this request. So, to avoid unbalance,
|
||||
* just start this request, without incrementing
|
||||
* rq_in_driver. As a negative consequence,
|
||||
@@ -3694,14 +3694,14 @@ static struct request *__bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
* bfq_schedule_dispatch to be invoked uselessly.
|
||||
*
|
||||
* As for implementing an exact solution, the
|
||||
- * put_request hook, if defined, is probably invoked
|
||||
- * also on this request. So, by exploiting this hook,
|
||||
- * we could 1) increment rq_in_driver here, and 2)
|
||||
- * decrement it in put_request. Such a solution would
|
||||
- * let the value of the counter be always accurate,
|
||||
- * but it would entail using an extra interface
|
||||
- * function. This cost seems higher than the benefit,
|
||||
- * being the frequency of non-elevator-private
|
||||
+ * bfq_finish_request hook, if defined, is probably
|
||||
+ * invoked also on this request. So, by exploiting
|
||||
+ * this hook, we could 1) increment rq_in_driver here,
|
||||
+ * and 2) decrement it in bfq_finish_request. Such a
|
||||
+ * solution would let the value of the counter be
|
||||
+ * always accurate, but it would entail using an extra
|
||||
+ * interface function. This cost seems higher than the
|
||||
+ * benefit, being the frequency of non-elevator-private
|
||||
* requests very low.
|
||||
*/
|
||||
goto start_rq;
|
||||
@@ -4558,7 +4558,7 @@ static void bfq_completed_request(struct bfq_queue *bfqq, struct bfq_data *bfqd)
|
||||
bfq_schedule_dispatch(bfqd);
|
||||
}
|
||||
|
||||
-static void bfq_put_rq_priv_body(struct bfq_queue *bfqq)
|
||||
+static void bfq_finish_request_body(struct bfq_queue *bfqq)
|
||||
{
|
||||
bfqq->allocated--;
|
||||
|
||||
@@ -4588,7 +4588,7 @@ static void bfq_finish_request(struct request *rq)
|
||||
spin_lock_irqsave(&bfqd->lock, flags);
|
||||
|
||||
bfq_completed_request(bfqq, bfqd);
|
||||
- bfq_put_rq_priv_body(bfqq);
|
||||
+ bfq_finish_request_body(bfqq);
|
||||
|
||||
spin_unlock_irqrestore(&bfqd->lock, flags);
|
||||
} else {
|
||||
@@ -4609,7 +4609,7 @@ static void bfq_finish_request(struct request *rq)
|
||||
bfqg_stats_update_io_remove(bfqq_group(bfqq),
|
||||
rq->cmd_flags);
|
||||
}
|
||||
- bfq_put_rq_priv_body(bfqq);
|
||||
+ bfq_finish_request_body(bfqq);
|
||||
}
|
||||
|
||||
rq->elv.priv[0] = NULL;
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
From 99fead8d38e5302b1be9403d4de815ce9174a3df Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Mon, 9 Oct 2017 13:11:23 +0200
|
||||
Subject: [PATCH] block, bfq: fix unbalanced decrements of burst size
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The commit "block, bfq: decrease burst size when queues in burst
|
||||
exit" introduced the decrement of burst_size on the removal of a
|
||||
bfq_queue from the burst list. Unfortunately, this decrement can
|
||||
happen to be performed even when burst size is already equal to 0,
|
||||
because of unbalanced decrements. A description follows of the cause
|
||||
of these unbalanced decrements, namely a wrong assumption, and of the
|
||||
way how this wrong assumption leads to unbalanced decrements.
|
||||
|
||||
The wrong assumption is that a bfq_queue can exit only if the process
|
||||
associated with the bfq_queue has exited. This is false, because a
|
||||
bfq_queue, say Q, may exit also as a consequence of a merge with
|
||||
another bfq_queue. In this case, Q exits because the I/O of its
|
||||
associated process has been redirected to another bfq_queue.
|
||||
|
||||
The decrement unbalance occurs because Q may then be re-created after
|
||||
a split, and added back to the current burst list, *without*
|
||||
incrementing burst_size. burst_size is not incremented because Q is
|
||||
not a new bfq_queue added to the burst list, but a bfq_queue only
|
||||
temporarily removed from the list, and, before the commit "bfq-sq,
|
||||
bfq-mq: decrease burst size when queues in burst exit", burst_size was
|
||||
not decremented when Q was removed.
|
||||
|
||||
This commit addresses this issue by just checking whether the exiting
|
||||
bfq_queue is a merged bfq_queue, and, in that case, not decrementing
|
||||
burst_size. Unfortunately, this still leaves room for unbalanced
|
||||
decrements, in the following rarer case: on a split, the bfq_queue
|
||||
happens to be inserted into a different burst list than that it was
|
||||
removed from when merged. If this happens, the number of elements in
|
||||
the new burst list becomes higher than burst_size (by one). When the
|
||||
bfq_queue then exits, it is of course not in a merged state any
|
||||
longer, thus burst_size is decremented, which results in an unbalanced
|
||||
decrement. To handle this sporadic, unlucky case in a simple way,
|
||||
this commit also checks that burst_size is larger than 0 before
|
||||
decrementing it.
|
||||
|
||||
Finally, this commit removes an useless, extra check: the check that
|
||||
the bfq_queue is sync, performed before checking whether the bfq_queue
|
||||
is in the burst list. This extra check is redundant, because only sync
|
||||
bfq_queues can be inserted into the burst list.
|
||||
|
||||
Fixes: 7cb04004fa37 ("block, bfq: decrease burst size when queues in burst exit")
|
||||
Reported-by: Philip Müller <philm@manjaro.org>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Tested-by: Philip Müller <philm@manjaro.org>
|
||||
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Tested-by: Lee Tibbert <lee.tibbert@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 57 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 261f98695910..889a8549d97f 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -3726,9 +3726,36 @@ void bfq_put_queue(struct bfq_queue *bfqq)
|
||||
if (bfqq->ref)
|
||||
return;
|
||||
|
||||
- if (bfq_bfqq_sync(bfqq) && !hlist_unhashed(&bfqq->burst_list_node)) {
|
||||
+ if (!hlist_unhashed(&bfqq->burst_list_node)) {
|
||||
hlist_del_init(&bfqq->burst_list_node);
|
||||
- bfqq->bfqd->burst_size--;
|
||||
+ /*
|
||||
+ * Decrement also burst size after the removal, if the
|
||||
+ * process associated with bfqq is exiting, and thus
|
||||
+ * does not contribute to the burst any longer. This
|
||||
+ * decrement helps filter out false positives of large
|
||||
+ * bursts, when some short-lived process (often due to
|
||||
+ * the execution of commands by some service) happens
|
||||
+ * to start and exit while a complex application is
|
||||
+ * starting, and thus spawning several processes that
|
||||
+ * do I/O (and that *must not* be treated as a large
|
||||
+ * burst, see comments on bfq_handle_burst).
|
||||
+ *
|
||||
+ * In particular, the decrement is performed only if:
|
||||
+ * 1) bfqq is not a merged queue, because, if it is,
|
||||
+ * then this free of bfqq is not triggered by the exit
|
||||
+ * of the process bfqq is associated with, but exactly
|
||||
+ * by the fact that bfqq has just been merged.
|
||||
+ * 2) burst_size is greater than 0, to handle
|
||||
+ * unbalanced decrements. Unbalanced decrements may
|
||||
+ * happen in te following case: bfqq is inserted into
|
||||
+ * the current burst list--without incrementing
|
||||
+ * bust_size--because of a split, but the current
|
||||
+ * burst list is not the burst list bfqq belonged to
|
||||
+ * (see comments on the case of a split in
|
||||
+ * bfq_set_request).
|
||||
+ */
|
||||
+ if (bfqq->bic && bfqq->bfqd->burst_size > 0)
|
||||
+ bfqq->bfqd->burst_size--;
|
||||
}
|
||||
|
||||
kmem_cache_free(bfq_pool, bfqq);
|
||||
@@ -4460,6 +4487,34 @@ static struct bfq_queue *bfq_get_bfqq_handle_split(struct bfq_data *bfqd,
|
||||
else {
|
||||
bfq_clear_bfqq_in_large_burst(bfqq);
|
||||
if (bic->was_in_burst_list)
|
||||
+ /*
|
||||
+ * If bfqq was in the current
|
||||
+ * burst list before being
|
||||
+ * merged, then we have to add
|
||||
+ * it back. And we do not need
|
||||
+ * to increase burst_size, as
|
||||
+ * we did not decrement
|
||||
+ * burst_size when we removed
|
||||
+ * bfqq from the burst list as
|
||||
+ * a consequence of a merge
|
||||
+ * (see comments in
|
||||
+ * bfq_put_queue). In this
|
||||
+ * respect, it would be rather
|
||||
+ * costly to know whether the
|
||||
+ * current burst list is still
|
||||
+ * the same burst list from
|
||||
+ * which bfqq was removed on
|
||||
+ * the merge. To avoid this
|
||||
+ * cost, if bfqq was in a
|
||||
+ * burst list, then we add
|
||||
+ * bfqq to the current burst
|
||||
+ * list without any further
|
||||
+ * check. This can cause
|
||||
+ * inappropriate insertions,
|
||||
+ * but rarely enough to not
|
||||
+ * harm the detection of large
|
||||
+ * bursts significantly.
|
||||
+ */
|
||||
hlist_add_head(&bfqq->burst_list_node,
|
||||
&bfqd->burst_list);
|
||||
}
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+146
@@ -0,0 +1,146 @@
|
||||
From 4baa8bb13f41307f3eb62fe91f93a1a798ebef53 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Thu, 21 Sep 2017 11:04:00 +0200
|
||||
Subject: [PATCH] block, bfq: fix wrong init of saved start time for weight
|
||||
raising
|
||||
|
||||
This commit fixes a bug that causes bfq to fail to guarantee a high
|
||||
responsiveness on some drives, if there is heavy random read+write I/O
|
||||
in the background. More precisely, such a failure allowed this bug to
|
||||
be found [1], but the bug may well cause other yet unreported
|
||||
anomalies.
|
||||
|
||||
BFQ raises the weight of the bfq_queues associated with soft real-time
|
||||
applications, to privilege the I/O, and thus reduce latency, for these
|
||||
applications. This mechanism is named soft-real-time weight raising in
|
||||
BFQ. A soft real-time period may happen to be nested into an
|
||||
interactive weight raising period, i.e., it may happen that, when a
|
||||
bfq_queue switches to a soft real-time weight-raised state, the
|
||||
bfq_queue is already being weight-raised because deemed interactive
|
||||
too. In this case, BFQ saves in a special variable
|
||||
wr_start_at_switch_to_srt, the time instant when the interactive
|
||||
weight-raising period started for the bfq_queue, i.e., the time
|
||||
instant when BFQ started to deem the bfq_queue interactive. This value
|
||||
is then used to check whether the interactive weight-raising period
|
||||
would still be in progress when the soft real-time weight-raising
|
||||
period ends. If so, interactive weight raising is restored for the
|
||||
bfq_queue. This restore is useful, in particular, because it prevents
|
||||
bfq_queues from losing their interactive weight raising prematurely,
|
||||
as a consequence of spurious, short-lived soft real-time
|
||||
weight-raising periods caused by wrong detections as soft real-time.
|
||||
|
||||
If, instead, a bfq_queue switches to soft-real-time weight raising
|
||||
while it *is not* already in an interactive weight-raising period,
|
||||
then the variable wr_start_at_switch_to_srt has no meaning during the
|
||||
following soft real-time weight-raising period. Unfortunately the
|
||||
handling of this case is wrong in BFQ: not only the variable is not
|
||||
flagged somehow as meaningless, but it is also set to the time when
|
||||
the switch to soft real-time weight-raising occurs. This may cause an
|
||||
interactive weight-raising period to be considered mistakenly as still
|
||||
in progress, and thus a spurious interactive weight-raising period to
|
||||
start for the bfq_queue, at the end of the soft-real-time
|
||||
weight-raising period. In particular the spurious interactive
|
||||
weight-raising period will be considered as still in progress, if the
|
||||
soft-real-time weight-raising period does not last very long. The
|
||||
bfq_queue will then be wrongly privileged and, if I/O bound, will
|
||||
unjustly steal bandwidth to truly interactive or soft real-time
|
||||
bfq_queues, harming responsiveness and low latency.
|
||||
|
||||
This commit fixes this issue by just setting wr_start_at_switch_to_srt
|
||||
to minus infinity (farthest past time instant according to jiffies
|
||||
macros): when the soft-real-time weight-raising period ends, certainly
|
||||
no interactive weight-raising period will be considered as still in
|
||||
progress.
|
||||
|
||||
[1] Background I/O Type: Random - Background I/O mix: Reads and writes
|
||||
- Application to start: LibreOffice Writer in
|
||||
http://www.phoronix.com/scan.php?page=news_item&px=Linux-4.13-IO-Laptop
|
||||
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Tested-by: Lee Tibbert <lee.tibbert@gmail.com>
|
||||
Tested-by: Mirko Montanari <mirkomontanari91@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 50 +++++++++++++++++++++++++++++++-------------------
|
||||
1 file changed, 31 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index a4783da90ba8..c25955c25e03 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -1202,6 +1202,24 @@ static unsigned int bfq_wr_duration(struct bfq_data *bfqd)
|
||||
return dur;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Return the farthest future time instant according to jiffies
|
||||
+ * macros.
|
||||
+ */
|
||||
+static unsigned long bfq_greatest_from_now(void)
|
||||
+{
|
||||
+ return jiffies + MAX_JIFFY_OFFSET;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Return the farthest past time instant according to jiffies
|
||||
+ * macros.
|
||||
+ */
|
||||
+static unsigned long bfq_smallest_from_now(void)
|
||||
+{
|
||||
+ return jiffies - MAX_JIFFY_OFFSET;
|
||||
+}
|
||||
+
|
||||
static void bfq_update_bfqq_wr_on_rq_arrival(struct bfq_data *bfqd,
|
||||
struct bfq_queue *bfqq,
|
||||
unsigned int old_wr_coeff,
|
||||
@@ -1216,7 +1234,19 @@ static void bfq_update_bfqq_wr_on_rq_arrival(struct bfq_data *bfqd,
|
||||
bfqq->wr_coeff = bfqd->bfq_wr_coeff;
|
||||
bfqq->wr_cur_max_time = bfq_wr_duration(bfqd);
|
||||
} else {
|
||||
- bfqq->wr_start_at_switch_to_srt = jiffies;
|
||||
+ /*
|
||||
+ * No interactive weight raising in progress
|
||||
+ * here: assign minus infinity to
|
||||
+ * wr_start_at_switch_to_srt, to make sure
|
||||
+ * that, at the end of the soft-real-time
|
||||
+ * weight raising periods that is starting
|
||||
+ * now, no interactive weight-raising period
|
||||
+ * may be wrongly considered as still in
|
||||
+ * progress (and thus actually started by
|
||||
+ * mistake).
|
||||
+ */
|
||||
+ bfqq->wr_start_at_switch_to_srt =
|
||||
+ bfq_smallest_from_now();
|
||||
bfqq->wr_coeff = bfqd->bfq_wr_coeff *
|
||||
BFQ_SOFTRT_WEIGHT_FACTOR;
|
||||
bfqq->wr_cur_max_time =
|
||||
@@ -2897,24 +2927,6 @@ static unsigned long bfq_bfqq_softrt_next_start(struct bfq_data *bfqd,
|
||||
jiffies + nsecs_to_jiffies(bfqq->bfqd->bfq_slice_idle) + 4);
|
||||
}
|
||||
|
||||
-/*
|
||||
- * Return the farthest future time instant according to jiffies
|
||||
- * macros.
|
||||
- */
|
||||
-static unsigned long bfq_greatest_from_now(void)
|
||||
-{
|
||||
- return jiffies + MAX_JIFFY_OFFSET;
|
||||
-}
|
||||
-
|
||||
-/*
|
||||
- * Return the farthest past time instant according to jiffies
|
||||
- * macros.
|
||||
- */
|
||||
-static unsigned long bfq_smallest_from_now(void)
|
||||
-{
|
||||
- return jiffies - MAX_JIFFY_OFFSET;
|
||||
-}
|
||||
-
|
||||
/**
|
||||
* bfq_bfqq_expire - expire a queue.
|
||||
* @bfqd: device owning the queue.
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
From f0ba5ea2fe45c0ad24a7dedae84a97f7aa046494 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Wed, 20 Dec 2017 17:27:36 +0100
|
||||
Subject: [PATCH] block, bfq: increase threshold to deem I/O as random
|
||||
|
||||
If two processes do I/O close to each other, i.e., are cooperating
|
||||
processes in BFQ (and CFQ'S) nomenclature, then BFQ merges their
|
||||
associated bfq_queues, so as to get sequential I/O from the union of
|
||||
the I/O requests of the processes, and thus reach a higher
|
||||
throughput. A merged queue is then split if its I/O stops being
|
||||
sequential. In this respect, BFQ deems the I/O of a bfq_queue as
|
||||
(mostly) sequential only if less than 4 I/O requests are random, out
|
||||
of the last 32 requests inserted into the queue.
|
||||
|
||||
Unfortunately, extensive testing (with the interleaved_io benchmark of
|
||||
the S suite [1], and with real applications spawning cooperating
|
||||
processes) has clearly shown that, with such a low threshold, only a
|
||||
rather low I/O throughput may be reached when several cooperating
|
||||
processes do I/O. In particular, the outcome of each test run was
|
||||
bimodal: if queue merging occurred and was stable during the test,
|
||||
then the throughput was close to the peak rate of the storage device,
|
||||
otherwise the throughput was arbitrarily low (usually around 1/10 of
|
||||
the peak rate with a rotational device). The probability to get the
|
||||
unlucky outcomes grew with the number of cooperating processes: it was
|
||||
already significant with 5 processes, and close to one with 7 or more
|
||||
processes.
|
||||
|
||||
The cause of the low throughput in the unlucky runs was that the
|
||||
merged queues containing the I/O of these cooperating processes were
|
||||
soon split, because they contained more random I/O requests than those
|
||||
tolerated by the 4/32 threshold, but
|
||||
- that I/O would have however allowed the storage device to reach
|
||||
peak throughput or almost peak throughput;
|
||||
- in contrast, the I/O of these processes, if served individually
|
||||
(from separate queues) yielded a rather low throughput.
|
||||
|
||||
So we repeated our tests with increasing values of the threshold,
|
||||
until we found the minimum value (19) for which we obtained maximum
|
||||
throughput, reliably, with at least up to 9 cooperating
|
||||
processes. Then we checked that the use of that higher threshold value
|
||||
did not cause any regression for any other benchmark in the suite [1].
|
||||
This commit raises the threshold to such a higher value.
|
||||
|
||||
[1] https://github.com/Algodev-github/S
|
||||
|
||||
Signed-off-by: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index bcb6d21baf12..0f48583b9380 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -178,7 +178,7 @@ static struct kmem_cache *bfq_pool;
|
||||
#define BFQQ_SEEK_THR (sector_t)(8 * 100)
|
||||
#define BFQQ_SECT_THR_NONROT (sector_t)(2 * 32)
|
||||
#define BFQQ_CLOSE_THR (sector_t)(8 * 1024)
|
||||
-#define BFQQ_SEEKY(bfqq) (hweight32(bfqq->seek_history) > 32/8)
|
||||
+#define BFQQ_SEEKY(bfqq) (hweight32(bfqq->seek_history) > 19)
|
||||
|
||||
/* Min number of samples required to perform peak-rate update */
|
||||
#define BFQ_RATE_MIN_SAMPLES 32
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
From 8abef10b3de1144cfe968f454946f13eb1ac3d0a Mon Sep 17 00:00:00 2001
|
||||
From: Jens Axboe <axboe@kernel.dk>
|
||||
Date: Tue, 9 Jan 2018 12:20:51 -0700
|
||||
Subject: [PATCH] bfq-iosched: don't call bfqg_and_blkg_put for
|
||||
!CONFIG_BFQ_GROUP_IOSCHED
|
||||
|
||||
It's not available if we don't have group io scheduling set, and
|
||||
there's no need to call it.
|
||||
|
||||
Fixes: 0d52af590552 ("block, bfq: release oom-queue ref to root group on exit")
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 7c0b7f60811c..5e6f837f663e 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -4893,10 +4893,10 @@ static void bfq_exit_queue(struct elevator_queue *e)
|
||||
|
||||
hrtimer_cancel(&bfqd->idle_slice_timer);
|
||||
|
||||
+#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
/* release oom-queue reference to root group */
|
||||
bfqg_and_blkg_put(bfqd->root_group);
|
||||
|
||||
-#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
blkcg_deactivate_policy(bfqd->queue, &blkcg_policy_bfq);
|
||||
#else
|
||||
spin_lock_irq(&bfqd->lock);
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+186
@@ -0,0 +1,186 @@
|
||||
From 7b8fa3b900a087bc03b11329a92398fde563ba37 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Wed, 20 Dec 2017 12:38:33 +0100
|
||||
Subject: [PATCH] block, bfq: let a queue be merged only shortly after starting
|
||||
I/O
|
||||
|
||||
In BFQ and CFQ, two processes are said to be cooperating if they do
|
||||
I/O in such a way that the union of their I/O requests yields a
|
||||
sequential I/O pattern. To get such a sequential I/O pattern out of
|
||||
the non-sequential pattern of each cooperating process, BFQ and CFQ
|
||||
merge the queues associated with these processes. In more detail,
|
||||
cooperating processes, and thus their associated queues, usually
|
||||
start, or restart, to do I/O shortly after each other. This is the
|
||||
case, e.g., for the I/O threads of KVM/QEMU and of the dump
|
||||
utility. Basing on this assumption, this commit allows a bfq_queue to
|
||||
be merged only during a short time interval (100ms) after it starts,
|
||||
or re-starts, to do I/O. This filtering provides two important
|
||||
benefits.
|
||||
|
||||
First, it greatly reduces the probability that two non-cooperating
|
||||
processes have their queues merged by mistake, if they just happen to
|
||||
do I/O close to each other for a short time interval. These spurious
|
||||
merges cause loss of service guarantees. A low-weight bfq_queue may
|
||||
unjustly get more than its expected share of the throughput: if such a
|
||||
low-weight queue is merged with a high-weight queue, then the I/O for
|
||||
the low-weight queue is served as if the queue had a high weight. This
|
||||
may damage other high-weight queues unexpectedly. For instance,
|
||||
because of this issue, lxterminal occasionally took 7.5 seconds to
|
||||
start, instead of 6.5 seconds, when some sequential readers and
|
||||
writers did I/O in the background on a FUJITSU MHX2300BT HDD. The
|
||||
reason is that the bfq_queues associated with some of the readers or
|
||||
the writers were merged with the high-weight queues of some processes
|
||||
that had to do some urgent but little I/O. The readers then exploited
|
||||
the inherited high weight for all or most of their I/O, during the
|
||||
start-up of terminal. The filtering introduced by this commit
|
||||
eliminated any outlier caused by spurious queue merges in our start-up
|
||||
time tests.
|
||||
|
||||
This filtering also provides a little boost of the throughput
|
||||
sustainable by BFQ: 3-4%, depending on the CPU. The reason is that,
|
||||
once a bfq_queue cannot be merged any longer, this commit makes BFQ
|
||||
stop updating the data needed to handle merging for the queue.
|
||||
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 57 ++++++++++++++++++++++++++++++++++++++++++-----------
|
||||
block/bfq-iosched.h | 2 ++
|
||||
block/bfq-wf2q.c | 4 ++++
|
||||
3 files changed, 52 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 2cf395daee80..7066d90f09df 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -166,6 +166,20 @@ static const int bfq_async_charge_factor = 10;
|
||||
/* Default timeout values, in jiffies, approximating CFQ defaults. */
|
||||
const int bfq_timeout = HZ / 8;
|
||||
|
||||
+/*
|
||||
+ * Time limit for merging (see comments in bfq_setup_cooperator). Set
|
||||
+ * to the slowest value that, in our tests, proved to be effective in
|
||||
+ * removing false positives, while not causing true positives to miss
|
||||
+ * queue merging.
|
||||
+ *
|
||||
+ * As can be deduced from the low time limit below, queue merging, if
|
||||
+ * successful, happens at the very beggining of the I/O of the involved
|
||||
+ * cooperating processes, as a consequence of the arrival of the very
|
||||
+ * first requests from each cooperator. After that, there is very
|
||||
+ * little chance to find cooperators.
|
||||
+ */
|
||||
+static const unsigned long bfq_merge_time_limit = HZ/10;
|
||||
+
|
||||
static struct kmem_cache *bfq_pool;
|
||||
|
||||
/* Below this threshold (in ns), we consider thinktime immediate. */
|
||||
@@ -444,6 +458,13 @@ bfq_rq_pos_tree_lookup(struct bfq_data *bfqd, struct rb_root *root,
|
||||
return bfqq;
|
||||
}
|
||||
|
||||
+static bool bfq_too_late_for_merging(struct bfq_queue *bfqq)
|
||||
+{
|
||||
+ return bfqq->service_from_backlogged > 0 &&
|
||||
+ time_is_before_jiffies(bfqq->first_IO_time +
|
||||
+ bfq_merge_time_limit);
|
||||
+}
|
||||
+
|
||||
void bfq_pos_tree_add_move(struct bfq_data *bfqd, struct bfq_queue *bfqq)
|
||||
{
|
||||
struct rb_node **p, *parent;
|
||||
@@ -454,6 +475,14 @@ void bfq_pos_tree_add_move(struct bfq_data *bfqd, struct bfq_queue *bfqq)
|
||||
bfqq->pos_root = NULL;
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * bfqq cannot be merged any longer (see comments in
|
||||
+ * bfq_setup_cooperator): no point in adding bfqq into the
|
||||
+ * position tree.
|
||||
+ */
|
||||
+ if (bfq_too_late_for_merging(bfqq))
|
||||
+ return;
|
||||
+
|
||||
if (bfq_class_idle(bfqq))
|
||||
return;
|
||||
if (!bfqq->next_rq)
|
||||
@@ -1935,6 +1964,9 @@ bfq_setup_merge(struct bfq_queue *bfqq, struct bfq_queue *new_bfqq)
|
||||
static bool bfq_may_be_close_cooperator(struct bfq_queue *bfqq,
|
||||
struct bfq_queue *new_bfqq)
|
||||
{
|
||||
+ if (bfq_too_late_for_merging(new_bfqq))
|
||||
+ return false;
|
||||
+
|
||||
if (bfq_class_idle(bfqq) || bfq_class_idle(new_bfqq) ||
|
||||
(bfqq->ioprio_class != new_bfqq->ioprio_class))
|
||||
return false;
|
||||
@@ -2003,6 +2035,20 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
||||
{
|
||||
struct bfq_queue *in_service_bfqq, *new_bfqq;
|
||||
|
||||
+ /*
|
||||
+ * Prevent bfqq from being merged if it has been created too
|
||||
+ * long ago. The idea is that true cooperating processes, and
|
||||
+ * thus their associated bfq_queues, are supposed to be
|
||||
+ * created shortly after each other. This is the case, e.g.,
|
||||
+ * for KVM/QEMU and dump I/O threads. Basing on this
|
||||
+ * assumption, the following filtering greatly reduces the
|
||||
+ * probability that two non-cooperating processes, which just
|
||||
+ * happen to do close I/O for some short time interval, have
|
||||
+ * their queues merged by mistake.
|
||||
+ */
|
||||
+ if (bfq_too_late_for_merging(bfqq))
|
||||
+ return NULL;
|
||||
+
|
||||
if (bfqq->new_bfqq)
|
||||
return bfqq->new_bfqq;
|
||||
|
||||
@@ -3002,17 +3048,6 @@ void bfq_bfqq_expire(struct bfq_data *bfqd,
|
||||
*/
|
||||
slow = bfq_bfqq_is_slow(bfqd, bfqq, compensate, reason, &delta);
|
||||
|
||||
- /*
|
||||
- * Increase service_from_backlogged before next statement,
|
||||
- * because the possible next invocation of
|
||||
- * bfq_bfqq_charge_time would likely inflate
|
||||
- * entity->service. In contrast, service_from_backlogged must
|
||||
- * contain real service, to enable the soft real-time
|
||||
- * heuristic to correctly compute the bandwidth consumed by
|
||||
- * bfqq.
|
||||
- */
|
||||
- bfqq->service_from_backlogged += entity->service;
|
||||
-
|
||||
/*
|
||||
* As above explained, charge slow (typically seeky) and
|
||||
* timed-out queues with the time and not the service
|
||||
diff --git a/block/bfq-iosched.h b/block/bfq-iosched.h
|
||||
index 91c4390903a1..5d47b58d5fc8 100644
|
||||
--- a/block/bfq-iosched.h
|
||||
+++ b/block/bfq-iosched.h
|
||||
@@ -344,6 +344,8 @@ struct bfq_queue {
|
||||
unsigned long wr_start_at_switch_to_srt;
|
||||
|
||||
unsigned long split_time; /* time of last split */
|
||||
+
|
||||
+ unsigned long first_IO_time; /* time of first I/O for this queue */
|
||||
};
|
||||
|
||||
/**
|
||||
diff --git a/block/bfq-wf2q.c b/block/bfq-wf2q.c
|
||||
index e495d3f9b4b0..4456eda34e48 100644
|
||||
--- a/block/bfq-wf2q.c
|
||||
+++ b/block/bfq-wf2q.c
|
||||
@@ -835,6 +835,10 @@ void bfq_bfqq_served(struct bfq_queue *bfqq, int served)
|
||||
struct bfq_entity *entity = &bfqq->entity;
|
||||
struct bfq_service_tree *st;
|
||||
|
||||
+ if (!bfqq->service_from_backlogged)
|
||||
+ bfqq->first_IO_time = jiffies;
|
||||
+
|
||||
+ bfqq->service_from_backlogged += served;
|
||||
for_each_entity(entity) {
|
||||
st = bfq_entity_service_tree(entity);
|
||||
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
From 894df937e06a56ed6f054a75a416aff84147c5a2 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Thu, 21 Sep 2017 11:04:02 +0200
|
||||
Subject: [PATCH] block, bfq: let early-merged queues be weight-raised on split
|
||||
too
|
||||
|
||||
A just-created bfq_queue, say Q, may happen to be merged with another
|
||||
bfq_queue on the very first invocation of the function
|
||||
__bfq_insert_request. In such a case, even if Q would clearly deserve
|
||||
interactive weight raising (as it has just been created), the function
|
||||
bfq_add_request does not make it to be invoked for Q, and thus to
|
||||
activate weight raising for Q. As a consequence, when the state of Q
|
||||
is saved for a possible future restore, after a split of Q from the
|
||||
other bfq_queue(s), such a state happens to be (unjustly)
|
||||
non-weight-raised. Then the bfq_queue will not enjoy any weight
|
||||
raising on the split, even if should still be in an interactive
|
||||
weight-raising period when the split occurs.
|
||||
|
||||
This commit solves this problem as follows, for a just-created
|
||||
bfq_queue that is being early-merged: it stores directly, in the saved
|
||||
state of the bfq_queue, the weight-raising state that would have been
|
||||
assigned to the bfq_queue if not early-merged.
|
||||
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Tested-by: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Tested-by: Mirko Montanari <mirkomontanari91@gmail.com>
|
||||
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Tested-by: Lee Tibbert <lee.tibbert@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 28 +++++++++++++++++++++++-----
|
||||
1 file changed, 23 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 33b63bc4a64b..115747fe43c8 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -2061,10 +2061,27 @@ static void bfq_bfqq_save_state(struct bfq_queue *bfqq)
|
||||
bic->saved_IO_bound = bfq_bfqq_IO_bound(bfqq);
|
||||
bic->saved_in_large_burst = bfq_bfqq_in_large_burst(bfqq);
|
||||
bic->was_in_burst_list = !hlist_unhashed(&bfqq->burst_list_node);
|
||||
- bic->saved_wr_coeff = bfqq->wr_coeff;
|
||||
- bic->saved_wr_start_at_switch_to_srt = bfqq->wr_start_at_switch_to_srt;
|
||||
- bic->saved_last_wr_start_finish = bfqq->last_wr_start_finish;
|
||||
- bic->saved_wr_cur_max_time = bfqq->wr_cur_max_time;
|
||||
+ if (unlikely(bfq_bfqq_just_created(bfqq) &&
|
||||
+ !bfq_bfqq_in_large_burst(bfqq))) {
|
||||
+ /*
|
||||
+ * bfqq being merged right after being created: bfqq
|
||||
+ * would have deserved interactive weight raising, but
|
||||
+ * did not make it to be set in a weight-raised state,
|
||||
+ * because of this early merge. Store directly the
|
||||
+ * weight-raising state that would have been assigned
|
||||
+ * to bfqq, so that to avoid that bfqq unjustly fails
|
||||
+ * to enjoy weight raising if split soon.
|
||||
+ */
|
||||
+ bic->saved_wr_coeff = bfqq->bfqd->bfq_wr_coeff;
|
||||
+ bic->saved_wr_cur_max_time = bfq_wr_duration(bfqq->bfqd);
|
||||
+ bic->saved_last_wr_start_finish = jiffies;
|
||||
+ } else {
|
||||
+ bic->saved_wr_coeff = bfqq->wr_coeff;
|
||||
+ bic->saved_wr_start_at_switch_to_srt =
|
||||
+ bfqq->wr_start_at_switch_to_srt;
|
||||
+ bic->saved_last_wr_start_finish = bfqq->last_wr_start_finish;
|
||||
+ bic->saved_wr_cur_max_time = bfqq->wr_cur_max_time;
|
||||
+ }
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -4150,7 +4167,6 @@ static void __bfq_insert_request(struct bfq_data *bfqd, struct request *rq)
|
||||
new_bfqq->allocated++;
|
||||
bfqq->allocated--;
|
||||
new_bfqq->ref++;
|
||||
- bfq_clear_bfqq_just_created(bfqq);
|
||||
/*
|
||||
* If the bic associated with the process
|
||||
* issuing this request still points to bfqq
|
||||
@@ -4162,6 +4178,8 @@ static void __bfq_insert_request(struct bfq_data *bfqd, struct request *rq)
|
||||
if (bic_to_bfqq(RQ_BIC(rq), 1) == bfqq)
|
||||
bfq_merge_bfqqs(bfqd, RQ_BIC(rq),
|
||||
bfqq, new_bfqq);
|
||||
+
|
||||
+ bfq_clear_bfqq_just_created(bfqq);
|
||||
/*
|
||||
* rq is about to be enqueued into new_bfqq,
|
||||
* release rq reference on bfqq
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+202
@@ -0,0 +1,202 @@
|
||||
From 8a8747dc01cee6f92a52c03ba686e9f60cb46c87 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Sat, 13 Jan 2018 12:05:18 +0100
|
||||
Subject: [PATCH] block, bfq: limit sectors served with interactive weight
|
||||
raising
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
To maximise responsiveness, BFQ raises the weight, and performs device
|
||||
idling, for bfq_queues associated with processes deemed as
|
||||
interactive. In particular, weight raising has a maximum duration,
|
||||
equal to the time needed to start a large application. If a
|
||||
weight-raised process goes on doing I/O beyond this maximum duration,
|
||||
it loses weight-raising.
|
||||
|
||||
This mechanism is evidently vulnerable to the following false
|
||||
positives: I/O-bound applications that will go on doing I/O for much
|
||||
longer than the duration of weight-raising. These applications have
|
||||
basically no benefit from being weight-raised at the beginning of
|
||||
their I/O. On the opposite end, while being weight-raised, these
|
||||
applications
|
||||
a) unjustly steal throughput to applications that may truly need
|
||||
low latency;
|
||||
b) make BFQ uselessly perform device idling; device idling results
|
||||
in loss of device throughput with most flash-based storage, and may
|
||||
increase latencies when used purposelessly.
|
||||
|
||||
This commit adds a countermeasure to reduce both the above
|
||||
problems. To introduce this countermeasure, we provide the following
|
||||
extra piece of information (full details in the comments added by this
|
||||
commit). During the start-up of the large application used as a
|
||||
reference to set the duration of weight-raising, involved processes
|
||||
transfer at most ~110K sectors each. Accordingly, a process initially
|
||||
deemed as interactive has no right to be weight-raised any longer,
|
||||
once transferred 110K sectors or more.
|
||||
|
||||
Basing on this consideration, this commit early-ends weight-raising
|
||||
for a bfq_queue if the latter happens to have received an amount of
|
||||
service at least equal to 110K sectors (actually, a little bit more,
|
||||
to keep a safety margin). I/O-bound applications that reach a high
|
||||
throughput, such as file copy, get to this threshold much before the
|
||||
allowed weight-raising period finishes. Thus this early ending of
|
||||
weight-raising reduces the amount of time during which these
|
||||
applications cause the problems described above.
|
||||
|
||||
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++------
|
||||
block/bfq-iosched.h | 5 ++++
|
||||
block/bfq-wf2q.c | 3 ++
|
||||
3 files changed, 80 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index a7ab0cb50733..47e6ec7427c4 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -209,15 +209,17 @@ static struct kmem_cache *bfq_pool;
|
||||
* interactive applications automatically, using the following formula:
|
||||
* duration = (R / r) * T, where r is the peak rate of the device, and
|
||||
* R and T are two reference parameters.
|
||||
- * In particular, R is the peak rate of the reference device (see below),
|
||||
- * and T is a reference time: given the systems that are likely to be
|
||||
- * installed on the reference device according to its speed class, T is
|
||||
- * about the maximum time needed, under BFQ and while reading two files in
|
||||
- * parallel, to load typical large applications on these systems.
|
||||
- * In practice, the slower/faster the device at hand is, the more/less it
|
||||
- * takes to load applications with respect to the reference device.
|
||||
- * Accordingly, the longer/shorter BFQ grants weight raising to interactive
|
||||
- * applications.
|
||||
+ * In particular, R is the peak rate of the reference device (see
|
||||
+ * below), and T is a reference time: given the systems that are
|
||||
+ * likely to be installed on the reference device according to its
|
||||
+ * speed class, T is about the maximum time needed, under BFQ and
|
||||
+ * while reading two files in parallel, to load typical large
|
||||
+ * applications on these systems (see the comments on
|
||||
+ * max_service_from_wr below, for more details on how T is obtained).
|
||||
+ * In practice, the slower/faster the device at hand is, the more/less
|
||||
+ * it takes to load applications with respect to the reference device.
|
||||
+ * Accordingly, the longer/shorter BFQ grants weight raising to
|
||||
+ * interactive applications.
|
||||
*
|
||||
* BFQ uses four different reference pairs (R, T), depending on:
|
||||
* . whether the device is rotational or non-rotational;
|
||||
@@ -254,6 +256,60 @@ static int T_slow[2];
|
||||
static int T_fast[2];
|
||||
static int device_speed_thresh[2];
|
||||
|
||||
+/*
|
||||
+ * BFQ uses the above-detailed, time-based weight-raising mechanism to
|
||||
+ * privilege interactive tasks. This mechanism is vulnerable to the
|
||||
+ * following false positives: I/O-bound applications that will go on
|
||||
+ * doing I/O for much longer than the duration of weight
|
||||
+ * raising. These applications have basically no benefit from being
|
||||
+ * weight-raised at the beginning of their I/O. On the opposite end,
|
||||
+ * while being weight-raised, these applications
|
||||
+ * a) unjustly steal throughput to applications that may actually need
|
||||
+ * low latency;
|
||||
+ * b) make BFQ uselessly perform device idling; device idling results
|
||||
+ * in loss of device throughput with most flash-based storage, and may
|
||||
+ * increase latencies when used purposelessly.
|
||||
+ *
|
||||
+ * BFQ tries to reduce these problems, by adopting the following
|
||||
+ * countermeasure. To introduce this countermeasure, we need first to
|
||||
+ * finish explaining how the duration of weight-raising for
|
||||
+ * interactive tasks is computed.
|
||||
+ *
|
||||
+ * For a bfq_queue deemed as interactive, the duration of weight
|
||||
+ * raising is dynamically adjusted, as a function of the estimated
|
||||
+ * peak rate of the device, so as to be equal to the time needed to
|
||||
+ * execute the 'largest' interactive task we benchmarked so far. By
|
||||
+ * largest task, we mean the task for which each involved process has
|
||||
+ * to do more I/O than for any of the other tasks we benchmarked. This
|
||||
+ * reference interactive task is the start-up of LibreOffice Writer,
|
||||
+ * and in this task each process/bfq_queue needs to have at most ~110K
|
||||
+ * sectors transferred.
|
||||
+ *
|
||||
+ * This last piece of information enables BFQ to reduce the actual
|
||||
+ * duration of weight-raising for at least one class of I/O-bound
|
||||
+ * applications: those doing sequential or quasi-sequential I/O. An
|
||||
+ * example is file copy. In fact, once started, the main I/O-bound
|
||||
+ * processes of these applications usually consume the above 110K
|
||||
+ * sectors in much less time than the processes of an application that
|
||||
+ * is starting, because these I/O-bound processes will greedily devote
|
||||
+ * almost all their CPU cycles only to their target,
|
||||
+ * throughput-friendly I/O operations. This is even more true if BFQ
|
||||
+ * happens to be underestimating the device peak rate, and thus
|
||||
+ * overestimating the duration of weight raising. But, according to
|
||||
+ * our measurements, once transferred 110K sectors, these processes
|
||||
+ * have no right to be weight-raised any longer.
|
||||
+ *
|
||||
+ * Basing on the last consideration, BFQ ends weight-raising for a
|
||||
+ * bfq_queue if the latter happens to have received an amount of
|
||||
+ * service at least equal to the following constant. The constant is
|
||||
+ * set to slightly more than 110K, to have a minimum safety margin.
|
||||
+ *
|
||||
+ * This early ending of weight-raising reduces the amount of time
|
||||
+ * during which interactive false positives cause the two problems
|
||||
+ * described at the beginning of these comments.
|
||||
+ */
|
||||
+static const unsigned long max_service_from_wr = 120000;
|
||||
+
|
||||
#define RQ_BIC(rq) icq_to_bic((rq)->elv.priv[0])
|
||||
#define RQ_BFQQ(rq) ((rq)->elv.priv[1])
|
||||
|
||||
@@ -1352,6 +1408,7 @@ static void bfq_update_bfqq_wr_on_rq_arrival(struct bfq_data *bfqd,
|
||||
if (old_wr_coeff == 1 && wr_or_deserves_wr) {
|
||||
/* start a weight-raising period */
|
||||
if (interactive) {
|
||||
+ bfqq->service_from_wr = 0;
|
||||
bfqq->wr_coeff = bfqd->bfq_wr_coeff;
|
||||
bfqq->wr_cur_max_time = bfq_wr_duration(bfqd);
|
||||
} else {
|
||||
@@ -3665,6 +3722,12 @@ static void bfq_update_wr_data(struct bfq_data *bfqd, struct bfq_queue *bfqq)
|
||||
bfqq->entity.prio_changed = 1;
|
||||
}
|
||||
}
|
||||
+ if (bfqq->wr_coeff > 1 &&
|
||||
+ bfqq->wr_cur_max_time != bfqd->bfq_wr_rt_max_time &&
|
||||
+ bfqq->service_from_wr > max_service_from_wr) {
|
||||
+ /* see comments on max_service_from_wr */
|
||||
+ bfq_bfqq_end_wr(bfqq);
|
||||
+ }
|
||||
}
|
||||
/*
|
||||
* To improve latency (for this or other queues), immediately
|
||||
diff --git a/block/bfq-iosched.h b/block/bfq-iosched.h
|
||||
index fcd941008127..350c39ae2896 100644
|
||||
--- a/block/bfq-iosched.h
|
||||
+++ b/block/bfq-iosched.h
|
||||
@@ -337,6 +337,11 @@ struct bfq_queue {
|
||||
* last transition from idle to backlogged.
|
||||
*/
|
||||
unsigned long service_from_backlogged;
|
||||
+ /*
|
||||
+ * Cumulative service received from the @bfq_queue since its
|
||||
+ * last transition to weight-raised state.
|
||||
+ */
|
||||
+ unsigned long service_from_wr;
|
||||
|
||||
/*
|
||||
* Value of wr start time when switching to soft rt
|
||||
diff --git a/block/bfq-wf2q.c b/block/bfq-wf2q.c
|
||||
index 4456eda34e48..4498c43245e2 100644
|
||||
--- a/block/bfq-wf2q.c
|
||||
+++ b/block/bfq-wf2q.c
|
||||
@@ -838,6 +838,9 @@ void bfq_bfqq_served(struct bfq_queue *bfqq, int served)
|
||||
if (!bfqq->service_from_backlogged)
|
||||
bfqq->first_IO_time = jiffies;
|
||||
|
||||
+ if (bfqq->wr_coeff > 1)
|
||||
+ bfqq->service_from_wr += served;
|
||||
+
|
||||
bfqq->service_from_backlogged += served;
|
||||
for_each_entity(entity) {
|
||||
st = bfq_entity_service_tree(entity);
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+162
@@ -0,0 +1,162 @@
|
||||
From a52a69ea89dc12e6f4572f554940789c1ab23c7a Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Sat, 13 Jan 2018 12:05:17 +0100
|
||||
Subject: [PATCH] block, bfq: limit tags for writes and async I/O
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Asynchronous I/O can easily starve synchronous I/O (both sync reads
|
||||
and sync writes), by consuming all request tags. Similarly, storms of
|
||||
synchronous writes, such as those that sync(2) may trigger, can starve
|
||||
synchronous reads. In their turn, these two problems may also cause
|
||||
BFQ to loose control on latency for interactive and soft real-time
|
||||
applications. For example, on a PLEXTOR PX-256M5S SSD, LibreOffice
|
||||
Writer takes 0.6 seconds to start if the device is idle, but it takes
|
||||
more than 45 seconds (!) if there are sequential writes in the
|
||||
background.
|
||||
|
||||
This commit addresses this issue by limiting the maximum percentage of
|
||||
tags that asynchronous I/O requests and synchronous write requests can
|
||||
consume. In particular, this commit grants a higher threshold to
|
||||
synchronous writes, to prevent the latter from being starved by
|
||||
asynchronous I/O.
|
||||
|
||||
According to the above test, LibreOffice Writer now starts in about
|
||||
1.2 seconds on average, regardless of the background workload, and
|
||||
apart from some rare outlier. To check this improvement, run, e.g.,
|
||||
sudo ./comm_startup_lat.sh bfq 5 5 seq 10 "lowriter --terminate_after_init"
|
||||
for the comm_startup_lat benchmark in the S suite [1].
|
||||
|
||||
[1] https://github.com/Algodev-github/S
|
||||
|
||||
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
block/bfq-iosched.h | 12 +++++++++
|
||||
2 files changed, 89 insertions(+)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index f352b1677143..a7ab0cb50733 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -417,6 +417,82 @@ static struct request *bfq_choose_req(struct bfq_data *bfqd,
|
||||
}
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * See the comments on bfq_limit_depth for the purpose of
|
||||
+ * the depths set in the function.
|
||||
+ */
|
||||
+static void bfq_update_depths(struct bfq_data *bfqd, struct sbitmap_queue *bt)
|
||||
+{
|
||||
+ bfqd->sb_shift = bt->sb.shift;
|
||||
+
|
||||
+ /*
|
||||
+ * In-word depths if no bfq_queue is being weight-raised:
|
||||
+ * leaving 25% of tags only for sync reads.
|
||||
+ *
|
||||
+ * In next formulas, right-shift the value
|
||||
+ * (1U<<bfqd->sb_shift), instead of computing directly
|
||||
+ * (1U<<(bfqd->sb_shift - something)), to be robust against
|
||||
+ * any possible value of bfqd->sb_shift, without having to
|
||||
+ * limit 'something'.
|
||||
+ */
|
||||
+ /* no more than 50% of tags for async I/O */
|
||||
+ bfqd->word_depths[0][0] = max((1U<<bfqd->sb_shift)>>1, 1U);
|
||||
+ /*
|
||||
+ * no more than 75% of tags for sync writes (25% extra tags
|
||||
+ * w.r.t. async I/O, to prevent async I/O from starving sync
|
||||
+ * writes)
|
||||
+ */
|
||||
+ bfqd->word_depths[0][1] = max(((1U<<bfqd->sb_shift) * 3)>>2, 1U);
|
||||
+
|
||||
+ /*
|
||||
+ * In-word depths in case some bfq_queue is being weight-
|
||||
+ * raised: leaving ~63% of tags for sync reads. This is the
|
||||
+ * highest percentage for which, in our tests, application
|
||||
+ * start-up times didn't suffer from any regression due to tag
|
||||
+ * shortage.
|
||||
+ */
|
||||
+ /* no more than ~18% of tags for async I/O */
|
||||
+ bfqd->word_depths[1][0] = max(((1U<<bfqd->sb_shift) * 3)>>4, 1U);
|
||||
+ /* no more than ~37% of tags for sync writes (~20% extra tags) */
|
||||
+ bfqd->word_depths[1][1] = max(((1U<<bfqd->sb_shift) * 6)>>4, 1U);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Async I/O can easily starve sync I/O (both sync reads and sync
|
||||
+ * writes), by consuming all tags. Similarly, storms of sync writes,
|
||||
+ * such as those that sync(2) may trigger, can starve sync reads.
|
||||
+ * Limit depths of async I/O and sync writes so as to counter both
|
||||
+ * problems.
|
||||
+ */
|
||||
+static void bfq_limit_depth(unsigned int op, struct blk_mq_alloc_data *data)
|
||||
+{
|
||||
+ struct blk_mq_tags *tags = blk_mq_tags_from_data(data);
|
||||
+ struct bfq_data *bfqd = data->q->elevator->elevator_data;
|
||||
+ struct sbitmap_queue *bt;
|
||||
+
|
||||
+ if (op_is_sync(op) && !op_is_write(op))
|
||||
+ return;
|
||||
+
|
||||
+ if (data->flags & BLK_MQ_REQ_RESERVED) {
|
||||
+ if (unlikely(!tags->nr_reserved_tags)) {
|
||||
+ WARN_ON_ONCE(1);
|
||||
+ return;
|
||||
+ }
|
||||
+ bt = &tags->breserved_tags;
|
||||
+ } else
|
||||
+ bt = &tags->bitmap_tags;
|
||||
+
|
||||
+ if (unlikely(bfqd->sb_shift != bt->sb.shift))
|
||||
+ bfq_update_depths(bfqd, bt);
|
||||
+
|
||||
+ data->shallow_depth =
|
||||
+ bfqd->word_depths[!!bfqd->wr_busy_queues][op_is_sync(op)];
|
||||
+
|
||||
+ bfq_log(bfqd, "[%s] wr_busy %d sync %d depth %u",
|
||||
+ __func__, bfqd->wr_busy_queues, op_is_sync(op),
|
||||
+ data->shallow_depth);
|
||||
+}
|
||||
+
|
||||
static struct bfq_queue *
|
||||
bfq_rq_pos_tree_lookup(struct bfq_data *bfqd, struct rb_root *root,
|
||||
sector_t sector, struct rb_node **ret_parent,
|
||||
@@ -5285,6 +5361,7 @@ static struct elv_fs_entry bfq_attrs[] = {
|
||||
|
||||
static struct elevator_type iosched_bfq_mq = {
|
||||
.ops.mq = {
|
||||
+ .limit_depth = bfq_limit_depth,
|
||||
.prepare_request = bfq_prepare_request,
|
||||
.finish_request = bfq_finish_request,
|
||||
.exit_icq = bfq_exit_icq,
|
||||
diff --git a/block/bfq-iosched.h b/block/bfq-iosched.h
|
||||
index 5d47b58d5fc8..fcd941008127 100644
|
||||
--- a/block/bfq-iosched.h
|
||||
+++ b/block/bfq-iosched.h
|
||||
@@ -629,6 +629,18 @@ struct bfq_data {
|
||||
struct bfq_io_cq *bio_bic;
|
||||
/* bfqq associated with the task issuing current bio for merging */
|
||||
struct bfq_queue *bio_bfqq;
|
||||
+
|
||||
+ /*
|
||||
+ * Cached sbitmap shift, used to compute depth limits in
|
||||
+ * bfq_update_depths.
|
||||
+ */
|
||||
+ unsigned int sb_shift;
|
||||
+
|
||||
+ /*
|
||||
+ * Depth limits used in bfq_limit_depth (see comments on the
|
||||
+ * function)
|
||||
+ */
|
||||
+ unsigned int word_depths[2][2];
|
||||
};
|
||||
|
||||
enum bfqq_state_flags {
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+467
@@ -0,0 +1,467 @@
|
||||
From a33801e8b4735b8d473f963e5854172f9cde3e8b Mon Sep 17 00:00:00 2001
|
||||
From: Luca Miccio <lucmiccio@gmail.com>
|
||||
Date: Mon, 13 Nov 2017 07:34:10 +0100
|
||||
Subject: [PATCH] block, bfq: move debug blkio stats behind
|
||||
CONFIG_DEBUG_BLK_CGROUP
|
||||
|
||||
BFQ currently creates, and updates, its own instance of the whole
|
||||
set of blkio statistics that cfq creates. Yet, from the comments
|
||||
of Tejun Heo in [1], it turned out that most of these statistics
|
||||
are meant/useful only for debugging. This commit makes BFQ create
|
||||
the latter, debugging statistics only if the option
|
||||
CONFIG_DEBUG_BLK_CGROUP is set.
|
||||
|
||||
By doing so, this commit also enables BFQ to enjoy a high perfomance
|
||||
boost. The reason is that, if CONFIG_DEBUG_BLK_CGROUP is not set, then
|
||||
BFQ has to update far fewer statistics, and, in particular, not the
|
||||
heaviest to update. To give an idea of the benefits, if
|
||||
CONFIG_DEBUG_BLK_CGROUP is not set, then, on an Intel i7-4850HQ, and
|
||||
with 8 threads doing random I/O in parallel on null_blk (configured
|
||||
with 0 latency), the throughput of BFQ grows from 310 to 400 KIOPS
|
||||
(+30%). We have measured similar or even much higher boosts with other
|
||||
CPUs: e.g., +45% with an ARM CortexTM-A53 Octa-core. Our results have
|
||||
been obtained and can be reproduced very easily with the script in [1].
|
||||
|
||||
[1] https://www.spinics.net/lists/linux-block/msg18943.html
|
||||
|
||||
Suggested-by: Tejun Heo <tj@kernel.org>
|
||||
Suggested-by: Ulf Hansson <ulf.hansson@linaro.org>
|
||||
Tested-by: Lee Tibbert <lee.tibbert@gmail.com>
|
||||
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Signed-off-by: Luca Miccio <lucmiccio@gmail.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
Documentation/block/bfq-iosched.txt | 38 +++++++--
|
||||
block/bfq-cgroup.c | 148 ++++++++++++++++++++----------------
|
||||
block/bfq-iosched.c | 14 ++--
|
||||
block/bfq-iosched.h | 4 +-
|
||||
4 files changed, 125 insertions(+), 79 deletions(-)
|
||||
|
||||
diff --git a/Documentation/block/bfq-iosched.txt b/Documentation/block/bfq-iosched.txt
|
||||
index 7fad6c061470..8d8d8f06cab2 100644
|
||||
--- a/Documentation/block/bfq-iosched.txt
|
||||
+++ b/Documentation/block/bfq-iosched.txt
|
||||
@@ -20,12 +20,22 @@ for that device, by setting low_latency to 0. See Section 3 for
|
||||
details on how to configure BFQ for the desired tradeoff between
|
||||
latency and throughput, or on how to maximize throughput.
|
||||
|
||||
-BFQ has a non-null overhead, which limits the maximum IOPS that the
|
||||
-CPU can process for a device scheduled with BFQ. To give an idea of
|
||||
-the limits on slow or average CPUs, here are BFQ limits for three
|
||||
-different CPUs, on, respectively, an average laptop, an old desktop,
|
||||
-and a cheap embedded system, in case full hierarchical support is
|
||||
-enabled (i.e., CONFIG_BFQ_GROUP_IOSCHED is set):
|
||||
+BFQ has a non-null overhead, which limits the maximum IOPS that a CPU
|
||||
+can process for a device scheduled with BFQ. To give an idea of the
|
||||
+limits on slow or average CPUs, here are, first, the limits of BFQ for
|
||||
+three different CPUs, on, respectively, an average laptop, an old
|
||||
+desktop, and a cheap embedded system, in case full hierarchical
|
||||
+support is enabled (i.e., CONFIG_BFQ_GROUP_IOSCHED is set), but
|
||||
+CONFIG_DEBUG_BLK_CGROUP is not set (Section 4-2):
|
||||
+- Intel i7-4850HQ: 400 KIOPS
|
||||
+- AMD A8-3850: 250 KIOPS
|
||||
+- ARM CortexTM-A53 Octa-core: 80 KIOPS
|
||||
+
|
||||
+If CONFIG_DEBUG_BLK_CGROUP is set (and of course full hierarchical
|
||||
+support is enabled), then the sustainable throughput with BFQ
|
||||
+decreases, because all blkio.bfq* statistics are created and updated
|
||||
+(Section 4-2). For BFQ, this leads to the following maximum
|
||||
+sustainable throughputs, on the same systems as above:
|
||||
- Intel i7-4850HQ: 310 KIOPS
|
||||
- AMD A8-3850: 200 KIOPS
|
||||
- ARM CortexTM-A53 Octa-core: 56 KIOPS
|
||||
@@ -505,6 +515,22 @@ BFQ-specific files is "blkio.bfq." or "io.bfq." For example, the group
|
||||
parameter to set the weight of a group with BFQ is blkio.bfq.weight
|
||||
or io.bfq.weight.
|
||||
|
||||
+As for cgroups-v1 (blkio controller), the exact set of stat files
|
||||
+created, and kept up-to-date by bfq, depends on whether
|
||||
+CONFIG_DEBUG_BLK_CGROUP is set. If it is set, then bfq creates all
|
||||
+the stat files documented in
|
||||
+Documentation/cgroup-v1/blkio-controller.txt. If, instead,
|
||||
+CONFIG_DEBUG_BLK_CGROUP is not set, then bfq creates only the files
|
||||
+blkio.bfq.io_service_bytes
|
||||
+blkio.bfq.io_service_bytes_recursive
|
||||
+blkio.bfq.io_serviced
|
||||
+blkio.bfq.io_serviced_recursive
|
||||
+
|
||||
+The value of CONFIG_DEBUG_BLK_CGROUP greatly influences the maximum
|
||||
+throughput sustainable with bfq, because updating the blkio.bfq.*
|
||||
+stats is rather costly, especially for some of the stats enabled by
|
||||
+CONFIG_DEBUG_BLK_CGROUP.
|
||||
+
|
||||
Parameters to set
|
||||
-----------------
|
||||
|
||||
diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c
|
||||
index ceefb9a706d6..da1525ec4c87 100644
|
||||
--- a/block/bfq-cgroup.c
|
||||
+++ b/block/bfq-cgroup.c
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
#include "bfq-iosched.h"
|
||||
|
||||
-#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
|
||||
/* bfqg stats flags */
|
||||
enum bfqg_stats_flags {
|
||||
@@ -152,6 +152,57 @@ void bfqg_stats_update_avg_queue_size(struct bfq_group *bfqg)
|
||||
bfqg_stats_update_group_wait_time(stats);
|
||||
}
|
||||
|
||||
+void bfqg_stats_update_io_add(struct bfq_group *bfqg, struct bfq_queue *bfqq,
|
||||
+ unsigned int op)
|
||||
+{
|
||||
+ blkg_rwstat_add(&bfqg->stats.queued, op, 1);
|
||||
+ bfqg_stats_end_empty_time(&bfqg->stats);
|
||||
+ if (!(bfqq == ((struct bfq_data *)bfqg->bfqd)->in_service_queue))
|
||||
+ bfqg_stats_set_start_group_wait_time(bfqg, bfqq_group(bfqq));
|
||||
+}
|
||||
+
|
||||
+void bfqg_stats_update_io_remove(struct bfq_group *bfqg, unsigned int op)
|
||||
+{
|
||||
+ blkg_rwstat_add(&bfqg->stats.queued, op, -1);
|
||||
+}
|
||||
+
|
||||
+void bfqg_stats_update_io_merged(struct bfq_group *bfqg, unsigned int op)
|
||||
+{
|
||||
+ blkg_rwstat_add(&bfqg->stats.merged, op, 1);
|
||||
+}
|
||||
+
|
||||
+void bfqg_stats_update_completion(struct bfq_group *bfqg, uint64_t start_time,
|
||||
+ uint64_t io_start_time, unsigned int op)
|
||||
+{
|
||||
+ struct bfqg_stats *stats = &bfqg->stats;
|
||||
+ unsigned long long now = sched_clock();
|
||||
+
|
||||
+ if (time_after64(now, io_start_time))
|
||||
+ blkg_rwstat_add(&stats->service_time, op,
|
||||
+ now - io_start_time);
|
||||
+ if (time_after64(io_start_time, start_time))
|
||||
+ blkg_rwstat_add(&stats->wait_time, op,
|
||||
+ io_start_time - start_time);
|
||||
+}
|
||||
+
|
||||
+#else /* CONFIG_BFQ_GROUP_IOSCHED && CONFIG_DEBUG_BLK_CGROUP */
|
||||
+
|
||||
+void bfqg_stats_update_io_add(struct bfq_group *bfqg, struct bfq_queue *bfqq,
|
||||
+ unsigned int op) { }
|
||||
+void bfqg_stats_update_io_remove(struct bfq_group *bfqg, unsigned int op) { }
|
||||
+void bfqg_stats_update_io_merged(struct bfq_group *bfqg, unsigned int op) { }
|
||||
+void bfqg_stats_update_completion(struct bfq_group *bfqg, uint64_t start_time,
|
||||
+ uint64_t io_start_time, unsigned int op) { }
|
||||
+void bfqg_stats_update_dequeue(struct bfq_group *bfqg) { }
|
||||
+void bfqg_stats_set_start_empty_time(struct bfq_group *bfqg) { }
|
||||
+void bfqg_stats_update_idle_time(struct bfq_group *bfqg) { }
|
||||
+void bfqg_stats_set_start_idle_time(struct bfq_group *bfqg) { }
|
||||
+void bfqg_stats_update_avg_queue_size(struct bfq_group *bfqg) { }
|
||||
+
|
||||
+#endif /* CONFIG_BFQ_GROUP_IOSCHED && CONFIG_DEBUG_BLK_CGROUP */
|
||||
+
|
||||
+#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+
|
||||
/*
|
||||
* blk-cgroup policy-related handlers
|
||||
* The following functions help in converting between blk-cgroup
|
||||
@@ -229,42 +280,10 @@ void bfqg_and_blkg_put(struct bfq_group *bfqg)
|
||||
blkg_put(bfqg_to_blkg(bfqg));
|
||||
}
|
||||
|
||||
-void bfqg_stats_update_io_add(struct bfq_group *bfqg, struct bfq_queue *bfqq,
|
||||
- unsigned int op)
|
||||
-{
|
||||
- blkg_rwstat_add(&bfqg->stats.queued, op, 1);
|
||||
- bfqg_stats_end_empty_time(&bfqg->stats);
|
||||
- if (!(bfqq == ((struct bfq_data *)bfqg->bfqd)->in_service_queue))
|
||||
- bfqg_stats_set_start_group_wait_time(bfqg, bfqq_group(bfqq));
|
||||
-}
|
||||
-
|
||||
-void bfqg_stats_update_io_remove(struct bfq_group *bfqg, unsigned int op)
|
||||
-{
|
||||
- blkg_rwstat_add(&bfqg->stats.queued, op, -1);
|
||||
-}
|
||||
-
|
||||
-void bfqg_stats_update_io_merged(struct bfq_group *bfqg, unsigned int op)
|
||||
-{
|
||||
- blkg_rwstat_add(&bfqg->stats.merged, op, 1);
|
||||
-}
|
||||
-
|
||||
-void bfqg_stats_update_completion(struct bfq_group *bfqg, uint64_t start_time,
|
||||
- uint64_t io_start_time, unsigned int op)
|
||||
-{
|
||||
- struct bfqg_stats *stats = &bfqg->stats;
|
||||
- unsigned long long now = sched_clock();
|
||||
-
|
||||
- if (time_after64(now, io_start_time))
|
||||
- blkg_rwstat_add(&stats->service_time, op,
|
||||
- now - io_start_time);
|
||||
- if (time_after64(io_start_time, start_time))
|
||||
- blkg_rwstat_add(&stats->wait_time, op,
|
||||
- io_start_time - start_time);
|
||||
-}
|
||||
-
|
||||
/* @stats = 0 */
|
||||
static void bfqg_stats_reset(struct bfqg_stats *stats)
|
||||
{
|
||||
+#ifdef CONFIG_DEBUG_BLK_CGROUP
|
||||
/* queued stats shouldn't be cleared */
|
||||
blkg_rwstat_reset(&stats->merged);
|
||||
blkg_rwstat_reset(&stats->service_time);
|
||||
@@ -276,6 +295,7 @@ static void bfqg_stats_reset(struct bfqg_stats *stats)
|
||||
blkg_stat_reset(&stats->group_wait_time);
|
||||
blkg_stat_reset(&stats->idle_time);
|
||||
blkg_stat_reset(&stats->empty_time);
|
||||
+#endif
|
||||
}
|
||||
|
||||
/* @to += @from */
|
||||
@@ -284,6 +304,7 @@ static void bfqg_stats_add_aux(struct bfqg_stats *to, struct bfqg_stats *from)
|
||||
if (!to || !from)
|
||||
return;
|
||||
|
||||
+#ifdef CONFIG_DEBUG_BLK_CGROUP
|
||||
/* queued stats shouldn't be cleared */
|
||||
blkg_rwstat_add_aux(&to->merged, &from->merged);
|
||||
blkg_rwstat_add_aux(&to->service_time, &from->service_time);
|
||||
@@ -296,6 +317,7 @@ static void bfqg_stats_add_aux(struct bfqg_stats *to, struct bfqg_stats *from)
|
||||
blkg_stat_add_aux(&to->group_wait_time, &from->group_wait_time);
|
||||
blkg_stat_add_aux(&to->idle_time, &from->idle_time);
|
||||
blkg_stat_add_aux(&to->empty_time, &from->empty_time);
|
||||
+#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -342,6 +364,7 @@ void bfq_init_entity(struct bfq_entity *entity, struct bfq_group *bfqg)
|
||||
|
||||
static void bfqg_stats_exit(struct bfqg_stats *stats)
|
||||
{
|
||||
+#ifdef CONFIG_DEBUG_BLK_CGROUP
|
||||
blkg_rwstat_exit(&stats->merged);
|
||||
blkg_rwstat_exit(&stats->service_time);
|
||||
blkg_rwstat_exit(&stats->wait_time);
|
||||
@@ -353,10 +376,12 @@ static void bfqg_stats_exit(struct bfqg_stats *stats)
|
||||
blkg_stat_exit(&stats->group_wait_time);
|
||||
blkg_stat_exit(&stats->idle_time);
|
||||
blkg_stat_exit(&stats->empty_time);
|
||||
+#endif
|
||||
}
|
||||
|
||||
static int bfqg_stats_init(struct bfqg_stats *stats, gfp_t gfp)
|
||||
{
|
||||
+#ifdef CONFIG_DEBUG_BLK_CGROUP
|
||||
if (blkg_rwstat_init(&stats->merged, gfp) ||
|
||||
blkg_rwstat_init(&stats->service_time, gfp) ||
|
||||
blkg_rwstat_init(&stats->wait_time, gfp) ||
|
||||
@@ -371,6 +396,7 @@ static int bfqg_stats_init(struct bfqg_stats *stats, gfp_t gfp)
|
||||
bfqg_stats_exit(stats);
|
||||
return -ENOMEM;
|
||||
}
|
||||
+#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -887,6 +913,7 @@ static ssize_t bfq_io_set_weight(struct kernfs_open_file *of,
|
||||
return bfq_io_set_weight_legacy(of_css(of), NULL, weight);
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_DEBUG_BLK_CGROUP
|
||||
static int bfqg_print_stat(struct seq_file *sf, void *v)
|
||||
{
|
||||
blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), blkg_prfill_stat,
|
||||
@@ -991,6 +1018,7 @@ static int bfqg_print_avg_queue_size(struct seq_file *sf, void *v)
|
||||
0, false);
|
||||
return 0;
|
||||
}
|
||||
+#endif /* CONFIG_DEBUG_BLK_CGROUP */
|
||||
|
||||
struct bfq_group *bfq_create_group_hierarchy(struct bfq_data *bfqd, int node)
|
||||
{
|
||||
@@ -1028,15 +1056,6 @@ struct cftype bfq_blkcg_legacy_files[] = {
|
||||
},
|
||||
|
||||
/* statistics, covers only the tasks in the bfqg */
|
||||
- {
|
||||
- .name = "bfq.time",
|
||||
- .private = offsetof(struct bfq_group, stats.time),
|
||||
- .seq_show = bfqg_print_stat,
|
||||
- },
|
||||
- {
|
||||
- .name = "bfq.sectors",
|
||||
- .seq_show = bfqg_print_stat_sectors,
|
||||
- },
|
||||
{
|
||||
.name = "bfq.io_service_bytes",
|
||||
.private = (unsigned long)&blkcg_policy_bfq,
|
||||
@@ -1047,6 +1066,16 @@ struct cftype bfq_blkcg_legacy_files[] = {
|
||||
.private = (unsigned long)&blkcg_policy_bfq,
|
||||
.seq_show = blkg_print_stat_ios,
|
||||
},
|
||||
+#ifdef CONFIG_DEBUG_BLK_CGROUP
|
||||
+ {
|
||||
+ .name = "bfq.time",
|
||||
+ .private = offsetof(struct bfq_group, stats.time),
|
||||
+ .seq_show = bfqg_print_stat,
|
||||
+ },
|
||||
+ {
|
||||
+ .name = "bfq.sectors",
|
||||
+ .seq_show = bfqg_print_stat_sectors,
|
||||
+ },
|
||||
{
|
||||
.name = "bfq.io_service_time",
|
||||
.private = offsetof(struct bfq_group, stats.service_time),
|
||||
@@ -1067,17 +1096,9 @@ struct cftype bfq_blkcg_legacy_files[] = {
|
||||
.private = offsetof(struct bfq_group, stats.queued),
|
||||
.seq_show = bfqg_print_rwstat,
|
||||
},
|
||||
+#endif /* CONFIG_DEBUG_BLK_CGROUP */
|
||||
|
||||
/* the same statictics which cover the bfqg and its descendants */
|
||||
- {
|
||||
- .name = "bfq.time_recursive",
|
||||
- .private = offsetof(struct bfq_group, stats.time),
|
||||
- .seq_show = bfqg_print_stat_recursive,
|
||||
- },
|
||||
- {
|
||||
- .name = "bfq.sectors_recursive",
|
||||
- .seq_show = bfqg_print_stat_sectors_recursive,
|
||||
- },
|
||||
{
|
||||
.name = "bfq.io_service_bytes_recursive",
|
||||
.private = (unsigned long)&blkcg_policy_bfq,
|
||||
@@ -1088,6 +1109,16 @@ struct cftype bfq_blkcg_legacy_files[] = {
|
||||
.private = (unsigned long)&blkcg_policy_bfq,
|
||||
.seq_show = blkg_print_stat_ios_recursive,
|
||||
},
|
||||
+#ifdef CONFIG_DEBUG_BLK_CGROUP
|
||||
+ {
|
||||
+ .name = "bfq.time_recursive",
|
||||
+ .private = offsetof(struct bfq_group, stats.time),
|
||||
+ .seq_show = bfqg_print_stat_recursive,
|
||||
+ },
|
||||
+ {
|
||||
+ .name = "bfq.sectors_recursive",
|
||||
+ .seq_show = bfqg_print_stat_sectors_recursive,
|
||||
+ },
|
||||
{
|
||||
.name = "bfq.io_service_time_recursive",
|
||||
.private = offsetof(struct bfq_group, stats.service_time),
|
||||
@@ -1132,6 +1163,7 @@ struct cftype bfq_blkcg_legacy_files[] = {
|
||||
.private = offsetof(struct bfq_group, stats.dequeue),
|
||||
.seq_show = bfqg_print_stat,
|
||||
},
|
||||
+#endif /* CONFIG_DEBUG_BLK_CGROUP */
|
||||
{ } /* terminate */
|
||||
};
|
||||
|
||||
@@ -1147,18 +1179,6 @@ struct cftype bfq_blkg_files[] = {
|
||||
|
||||
#else /* CONFIG_BFQ_GROUP_IOSCHED */
|
||||
|
||||
-void bfqg_stats_update_io_add(struct bfq_group *bfqg, struct bfq_queue *bfqq,
|
||||
- unsigned int op) { }
|
||||
-void bfqg_stats_update_io_remove(struct bfq_group *bfqg, unsigned int op) { }
|
||||
-void bfqg_stats_update_io_merged(struct bfq_group *bfqg, unsigned int op) { }
|
||||
-void bfqg_stats_update_completion(struct bfq_group *bfqg, uint64_t start_time,
|
||||
- uint64_t io_start_time, unsigned int op) { }
|
||||
-void bfqg_stats_update_dequeue(struct bfq_group *bfqg) { }
|
||||
-void bfqg_stats_set_start_empty_time(struct bfq_group *bfqg) { }
|
||||
-void bfqg_stats_update_idle_time(struct bfq_group *bfqg) { }
|
||||
-void bfqg_stats_set_start_idle_time(struct bfq_group *bfqg) { }
|
||||
-void bfqg_stats_update_avg_queue_size(struct bfq_group *bfqg) { }
|
||||
-
|
||||
void bfq_bfqq_move(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
||||
struct bfq_group *bfqg) {}
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 69e05f861daf..bcb6d21baf12 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -3693,14 +3693,14 @@ static struct request *bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
{
|
||||
struct bfq_data *bfqd = hctx->queue->elevator->elevator_data;
|
||||
struct request *rq;
|
||||
-#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
struct bfq_queue *in_serv_queue, *bfqq;
|
||||
bool waiting_rq, idle_timer_disabled;
|
||||
#endif
|
||||
|
||||
spin_lock_irq(&bfqd->lock);
|
||||
|
||||
-#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
in_serv_queue = bfqd->in_service_queue;
|
||||
waiting_rq = in_serv_queue && bfq_bfqq_wait_request(in_serv_queue);
|
||||
|
||||
@@ -3714,7 +3714,7 @@ static struct request *bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
#endif
|
||||
spin_unlock_irq(&bfqd->lock);
|
||||
|
||||
-#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
bfqq = rq ? RQ_BFQQ(rq) : NULL;
|
||||
if (!idle_timer_disabled && !bfqq)
|
||||
return rq;
|
||||
@@ -4281,7 +4281,7 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
{
|
||||
struct request_queue *q = hctx->queue;
|
||||
struct bfq_data *bfqd = q->elevator->elevator_data;
|
||||
-#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
struct bfq_queue *bfqq = RQ_BFQQ(rq);
|
||||
bool idle_timer_disabled = false;
|
||||
unsigned int cmd_flags;
|
||||
@@ -4304,7 +4304,7 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
else
|
||||
list_add_tail(&rq->queuelist, &bfqd->dispatch);
|
||||
} else {
|
||||
-#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
idle_timer_disabled = __bfq_insert_request(bfqd, rq);
|
||||
/*
|
||||
* Update bfqq, because, if a queue merge has occurred
|
||||
@@ -4323,7 +4323,7 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
}
|
||||
}
|
||||
|
||||
-#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
/*
|
||||
* Cache cmd_flags before releasing scheduler lock, because rq
|
||||
* may disappear afterwards (for example, because of a request
|
||||
@@ -4333,7 +4333,7 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
#endif
|
||||
spin_unlock_irq(&bfqd->lock);
|
||||
|
||||
-#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
if (!bfqq)
|
||||
return;
|
||||
/*
|
||||
diff --git a/block/bfq-iosched.h b/block/bfq-iosched.h
|
||||
index ac0809c72c98..91c4390903a1 100644
|
||||
--- a/block/bfq-iosched.h
|
||||
+++ b/block/bfq-iosched.h
|
||||
@@ -689,7 +689,7 @@ enum bfqq_expiration {
|
||||
};
|
||||
|
||||
struct bfqg_stats {
|
||||
-#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
/* number of ios merged */
|
||||
struct blkg_rwstat merged;
|
||||
/* total time spent on device in ns, may not be accurate w/ queueing */
|
||||
@@ -717,7 +717,7 @@ struct bfqg_stats {
|
||||
uint64_t start_idle_time;
|
||||
uint64_t start_empty_time;
|
||||
uint16_t flags;
|
||||
-#endif /* CONFIG_BFQ_GROUP_IOSCHED */
|
||||
+#endif /* CONFIG_BFQ_GROUP_IOSCHED && CONFIG_DEBUG_BLK_CGROUP */
|
||||
};
|
||||
|
||||
#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
From 52257ffbfcaf58d247b13fb148e27ed17c33e526 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Tue, 9 Jan 2018 10:27:58 +0100
|
||||
Subject: [PATCH] block, bfq: put async queues for root bfq groups too
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
For each pair [device for which bfq is selected as I/O scheduler,
|
||||
group in blkio/io], bfq maintains a corresponding bfq group. Each such
|
||||
bfq group contains a set of async queues, with each async queue
|
||||
created on demand, i.e., when some I/O request arrives for it. On
|
||||
creation, an async queue gets an extra reference, to make sure that
|
||||
the queue is not freed as long as its bfq group exists. Accordingly,
|
||||
to allow the queue to be freed after the group exited, this extra
|
||||
reference must released on group exit.
|
||||
|
||||
The above holds also for a bfq root group, i.e., for the bfq group
|
||||
corresponding to the root blkio/io root for a given device. Yet, by
|
||||
mistake, the references to the existing async queues of a root group
|
||||
are not released when the latter exits. This causes a memory leak when
|
||||
the instance of bfq for a given device exits. In a similar vein,
|
||||
bfqg_stats_xfer_dead is not executed for a root group.
|
||||
|
||||
This commit fixes bfq_pd_offline so that the latter executes the above
|
||||
missing operations for a root group too.
|
||||
|
||||
Reported-by: Holger Hoffstätte <holger@applied-asynchrony.com>
|
||||
Reported-by: Guoqing Jiang <gqjiang@suse.com>
|
||||
Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>
|
||||
Signed-off-by: Davide Ferrari <davideferrari8@gmail.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-cgroup.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c
|
||||
index da1525ec4c87..d819dc77fe65 100644
|
||||
--- a/block/bfq-cgroup.c
|
||||
+++ b/block/bfq-cgroup.c
|
||||
@@ -775,10 +775,11 @@ static void bfq_pd_offline(struct blkg_policy_data *pd)
|
||||
unsigned long flags;
|
||||
int i;
|
||||
|
||||
+ spin_lock_irqsave(&bfqd->lock, flags);
|
||||
+
|
||||
if (!entity) /* root group */
|
||||
- return;
|
||||
+ goto put_async_queues;
|
||||
|
||||
- spin_lock_irqsave(&bfqd->lock, flags);
|
||||
/*
|
||||
* Empty all service_trees belonging to this group before
|
||||
* deactivating the group itself.
|
||||
@@ -809,6 +810,8 @@ static void bfq_pd_offline(struct blkg_policy_data *pd)
|
||||
}
|
||||
|
||||
__bfq_deactivate_entity(entity, false);
|
||||
+
|
||||
+put_async_queues:
|
||||
bfq_put_async_queues(bfqd, bfqg);
|
||||
|
||||
spin_unlock_irqrestore(&bfqd->lock, flags);
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
From 0d52af590552473666da5b6111e7182d6cd23f92 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Tue, 9 Jan 2018 10:27:59 +0100
|
||||
Subject: [PATCH] block, bfq: release oom-queue ref to root group on exit
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
On scheduler init, a reference to the root group, and a reference to
|
||||
its corresponding blkg are taken for the oom queue. Yet these
|
||||
references are not released on scheduler exit, which prevents these
|
||||
objects from be freed. This commit adds the missing reference
|
||||
releases.
|
||||
|
||||
Reported-by: Davide Ferrari <davideferrari8@gmail.com>
|
||||
Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 7bd789da7a29..7c0b7f60811c 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -4893,6 +4893,9 @@ static void bfq_exit_queue(struct elevator_queue *e)
|
||||
|
||||
hrtimer_cancel(&bfqd->idle_slice_timer);
|
||||
|
||||
+ /* release oom-queue reference to root group */
|
||||
+ bfqg_and_blkg_put(bfqd->root_group);
|
||||
+
|
||||
#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
blkcg_deactivate_policy(bfqd->queue, &blkcg_policy_bfq);
|
||||
#else
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+225
@@ -0,0 +1,225 @@
|
||||
From 9b25bd0368d562d1929059e8eb9de4102567b923 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Mon, 4 Dec 2017 11:42:05 +0100
|
||||
Subject: [PATCH] block, bfq: remove batches of confusing ifdefs
|
||||
|
||||
Commit a33801e8b473 ("block, bfq: move debug blkio stats behind
|
||||
CONFIG_DEBUG_BLK_CGROUP") introduced two batches of confusing ifdefs:
|
||||
one reported in [1], plus a similar one in another function. This
|
||||
commit removes both batches, in the way suggested in [1].
|
||||
|
||||
[1] https://www.spinics.net/lists/linux-block/msg20043.html
|
||||
|
||||
Fixes: a33801e8b473 ("block, bfq: move debug blkio stats behind CONFIG_DEBUG_BLK_CGROUP")
|
||||
Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Tested-by: Luca Miccio <lucmiccio@gmail.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 127 +++++++++++++++++++++++++++++-----------------------
|
||||
1 file changed, 72 insertions(+), 55 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index e33c5c4c9856..7bd789da7a29 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -3743,35 +3743,16 @@ static struct request *__bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
return rq;
|
||||
}
|
||||
|
||||
-static struct request *bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
-{
|
||||
- struct bfq_data *bfqd = hctx->queue->elevator->elevator_data;
|
||||
- struct request *rq;
|
||||
#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
- struct bfq_queue *in_serv_queue, *bfqq;
|
||||
- bool waiting_rq, idle_timer_disabled;
|
||||
-#endif
|
||||
-
|
||||
- spin_lock_irq(&bfqd->lock);
|
||||
-
|
||||
-#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
- in_serv_queue = bfqd->in_service_queue;
|
||||
- waiting_rq = in_serv_queue && bfq_bfqq_wait_request(in_serv_queue);
|
||||
-
|
||||
- rq = __bfq_dispatch_request(hctx);
|
||||
-
|
||||
- idle_timer_disabled =
|
||||
- waiting_rq && !bfq_bfqq_wait_request(in_serv_queue);
|
||||
-
|
||||
-#else
|
||||
- rq = __bfq_dispatch_request(hctx);
|
||||
-#endif
|
||||
- spin_unlock_irq(&bfqd->lock);
|
||||
+static void bfq_update_dispatch_stats(struct request_queue *q,
|
||||
+ struct request *rq,
|
||||
+ struct bfq_queue *in_serv_queue,
|
||||
+ bool idle_timer_disabled)
|
||||
+{
|
||||
+ struct bfq_queue *bfqq = rq ? RQ_BFQQ(rq) : NULL;
|
||||
|
||||
-#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
- bfqq = rq ? RQ_BFQQ(rq) : NULL;
|
||||
if (!idle_timer_disabled && !bfqq)
|
||||
- return rq;
|
||||
+ return;
|
||||
|
||||
/*
|
||||
* rq and bfqq are guaranteed to exist until this function
|
||||
@@ -3786,7 +3767,7 @@ static struct request *bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
* In addition, the following queue lock guarantees that
|
||||
* bfqq_group(bfqq) exists as well.
|
||||
*/
|
||||
- spin_lock_irq(hctx->queue->queue_lock);
|
||||
+ spin_lock_irq(q->queue_lock);
|
||||
if (idle_timer_disabled)
|
||||
/*
|
||||
* Since the idle timer has been disabled,
|
||||
@@ -3805,9 +3786,37 @@ static struct request *bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
bfqg_stats_set_start_empty_time(bfqg);
|
||||
bfqg_stats_update_io_remove(bfqg, rq->cmd_flags);
|
||||
}
|
||||
- spin_unlock_irq(hctx->queue->queue_lock);
|
||||
+ spin_unlock_irq(q->queue_lock);
|
||||
+}
|
||||
+#else
|
||||
+static inline void bfq_update_dispatch_stats(struct request_queue *q,
|
||||
+ struct request *rq,
|
||||
+ struct bfq_queue *in_serv_queue,
|
||||
+ bool idle_timer_disabled) {}
|
||||
#endif
|
||||
|
||||
+static struct request *bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
+{
|
||||
+ struct bfq_data *bfqd = hctx->queue->elevator->elevator_data;
|
||||
+ struct request *rq;
|
||||
+ struct bfq_queue *in_serv_queue;
|
||||
+ bool waiting_rq, idle_timer_disabled;
|
||||
+
|
||||
+ spin_lock_irq(&bfqd->lock);
|
||||
+
|
||||
+ in_serv_queue = bfqd->in_service_queue;
|
||||
+ waiting_rq = in_serv_queue && bfq_bfqq_wait_request(in_serv_queue);
|
||||
+
|
||||
+ rq = __bfq_dispatch_request(hctx);
|
||||
+
|
||||
+ idle_timer_disabled =
|
||||
+ waiting_rq && !bfq_bfqq_wait_request(in_serv_queue);
|
||||
+
|
||||
+ spin_unlock_irq(&bfqd->lock);
|
||||
+
|
||||
+ bfq_update_dispatch_stats(hctx->queue, rq, in_serv_queue,
|
||||
+ idle_timer_disabled);
|
||||
+
|
||||
return rq;
|
||||
}
|
||||
|
||||
@@ -4335,16 +4344,46 @@ static bool __bfq_insert_request(struct bfq_data *bfqd, struct request *rq)
|
||||
return idle_timer_disabled;
|
||||
}
|
||||
|
||||
+#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
+static void bfq_update_insert_stats(struct request_queue *q,
|
||||
+ struct bfq_queue *bfqq,
|
||||
+ bool idle_timer_disabled,
|
||||
+ unsigned int cmd_flags)
|
||||
+{
|
||||
+ if (!bfqq)
|
||||
+ return;
|
||||
+
|
||||
+ /*
|
||||
+ * bfqq still exists, because it can disappear only after
|
||||
+ * either it is merged with another queue, or the process it
|
||||
+ * is associated with exits. But both actions must be taken by
|
||||
+ * the same process currently executing this flow of
|
||||
+ * instructions.
|
||||
+ *
|
||||
+ * In addition, the following queue lock guarantees that
|
||||
+ * bfqq_group(bfqq) exists as well.
|
||||
+ */
|
||||
+ spin_lock_irq(q->queue_lock);
|
||||
+ bfqg_stats_update_io_add(bfqq_group(bfqq), bfqq, cmd_flags);
|
||||
+ if (idle_timer_disabled)
|
||||
+ bfqg_stats_update_idle_time(bfqq_group(bfqq));
|
||||
+ spin_unlock_irq(q->queue_lock);
|
||||
+}
|
||||
+#else
|
||||
+static inline void bfq_update_insert_stats(struct request_queue *q,
|
||||
+ struct bfq_queue *bfqq,
|
||||
+ bool idle_timer_disabled,
|
||||
+ unsigned int cmd_flags) {}
|
||||
+#endif
|
||||
+
|
||||
static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
bool at_head)
|
||||
{
|
||||
struct request_queue *q = hctx->queue;
|
||||
struct bfq_data *bfqd = q->elevator->elevator_data;
|
||||
-#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
struct bfq_queue *bfqq = RQ_BFQQ(rq);
|
||||
bool idle_timer_disabled = false;
|
||||
unsigned int cmd_flags;
|
||||
-#endif
|
||||
|
||||
spin_lock_irq(&bfqd->lock);
|
||||
if (blk_mq_sched_try_insert_merge(q, rq)) {
|
||||
@@ -4363,7 +4402,6 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
else
|
||||
list_add_tail(&rq->queuelist, &bfqd->dispatch);
|
||||
} else {
|
||||
-#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
idle_timer_disabled = __bfq_insert_request(bfqd, rq);
|
||||
/*
|
||||
* Update bfqq, because, if a queue merge has occurred
|
||||
@@ -4371,9 +4409,6 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
* redirected into a new queue.
|
||||
*/
|
||||
bfqq = RQ_BFQQ(rq);
|
||||
-#else
|
||||
- __bfq_insert_request(bfqd, rq);
|
||||
-#endif
|
||||
|
||||
if (rq_mergeable(rq)) {
|
||||
elv_rqhash_add(q, rq);
|
||||
@@ -4382,35 +4417,17 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
}
|
||||
}
|
||||
|
||||
-#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
/*
|
||||
* Cache cmd_flags before releasing scheduler lock, because rq
|
||||
* may disappear afterwards (for example, because of a request
|
||||
* merge).
|
||||
*/
|
||||
cmd_flags = rq->cmd_flags;
|
||||
-#endif
|
||||
+
|
||||
spin_unlock_irq(&bfqd->lock);
|
||||
|
||||
-#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
|
||||
- if (!bfqq)
|
||||
- return;
|
||||
- /*
|
||||
- * bfqq still exists, because it can disappear only after
|
||||
- * either it is merged with another queue, or the process it
|
||||
- * is associated with exits. But both actions must be taken by
|
||||
- * the same process currently executing this flow of
|
||||
- * instruction.
|
||||
- *
|
||||
- * In addition, the following queue lock guarantees that
|
||||
- * bfqq_group(bfqq) exists as well.
|
||||
- */
|
||||
- spin_lock_irq(q->queue_lock);
|
||||
- bfqg_stats_update_io_add(bfqq_group(bfqq), bfqq, cmd_flags);
|
||||
- if (idle_timer_disabled)
|
||||
- bfqg_stats_update_idle_time(bfqq_group(bfqq));
|
||||
- spin_unlock_irq(q->queue_lock);
|
||||
-#endif
|
||||
+ bfq_update_insert_stats(q, bfqq, idle_timer_disabled,
|
||||
+ cmd_flags);
|
||||
}
|
||||
|
||||
static void bfq_insert_requests(struct blk_mq_hw_ctx *hctx,
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
From 4403e4e467c365b4189e3e3d3ad35cf67b8c36ed Mon Sep 17 00:00:00 2001
|
||||
From: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Date: Wed, 20 Dec 2017 12:38:34 +0100
|
||||
Subject: [PATCH] block, bfq: remove superfluous check in queue-merging setup
|
||||
|
||||
When two or more processes do I/O in a way that the their requests are
|
||||
sequential in respect to one another, BFQ merges the bfq_queues associated
|
||||
with the processes. This way the overall I/O pattern becomes sequential,
|
||||
and thus there is a boost in througput.
|
||||
These cooperating processes usually start or restart to do I/O shortly
|
||||
after each other. So, in order to avoid merging non-cooperating processes,
|
||||
BFQ ensures that none of these queues has been in weight raising for too
|
||||
long.
|
||||
|
||||
In this respect, from commit "block, bfq-sq, bfq-mq: let a queue be merged
|
||||
only shortly after being created", BFQ checks whether any queue (and not
|
||||
only weight-raised ones) is doing I/O continuously from too long to be
|
||||
merged.
|
||||
|
||||
This new additional check makes the first one useless: a queue doing
|
||||
I/O from long enough, if being weight-raised, is also a queue in
|
||||
weight raising for too long to be merged. Accordingly, this commit
|
||||
removes the first check.
|
||||
|
||||
Signed-off-by: Angelo Ruocco <angeloruocco90@gmail.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 36 +++++-------------------------------
|
||||
1 file changed, 5 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 7066d90f09df..9625550b2f85 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -1990,20 +1990,6 @@ static bool bfq_may_be_close_cooperator(struct bfq_queue *bfqq,
|
||||
return true;
|
||||
}
|
||||
|
||||
-/*
|
||||
- * If this function returns true, then bfqq cannot be merged. The idea
|
||||
- * is that true cooperation happens very early after processes start
|
||||
- * to do I/O. Usually, late cooperations are just accidental false
|
||||
- * positives. In case bfqq is weight-raised, such false positives
|
||||
- * would evidently degrade latency guarantees for bfqq.
|
||||
- */
|
||||
-static bool wr_from_too_long(struct bfq_queue *bfqq)
|
||||
-{
|
||||
- return bfqq->wr_coeff > 1 &&
|
||||
- time_is_before_jiffies(bfqq->last_wr_start_finish +
|
||||
- msecs_to_jiffies(100));
|
||||
-}
|
||||
-
|
||||
/*
|
||||
* Attempt to schedule a merge of bfqq with the currently in-service
|
||||
* queue or with a close queue among the scheduled queues. Return
|
||||
@@ -2017,11 +2003,6 @@ static bool wr_from_too_long(struct bfq_queue *bfqq)
|
||||
* to maintain. Besides, in such a critical condition as an out of memory,
|
||||
* the benefits of queue merging may be little relevant, or even negligible.
|
||||
*
|
||||
- * Weight-raised queues can be merged only if their weight-raising
|
||||
- * period has just started. In fact cooperating processes are usually
|
||||
- * started together. Thus, with this filter we avoid false positives
|
||||
- * that would jeopardize low-latency guarantees.
|
||||
- *
|
||||
* WARNING: queue merging may impair fairness among non-weight raised
|
||||
* queues, for at least two reasons: 1) the original weight of a
|
||||
* merged queue may change during the merged state, 2) even being the
|
||||
@@ -2052,9 +2033,7 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
||||
if (bfqq->new_bfqq)
|
||||
return bfqq->new_bfqq;
|
||||
|
||||
- if (!io_struct ||
|
||||
- wr_from_too_long(bfqq) ||
|
||||
- unlikely(bfqq == &bfqd->oom_bfqq))
|
||||
+ if (!io_struct || unlikely(bfqq == &bfqd->oom_bfqq))
|
||||
return NULL;
|
||||
|
||||
/* If there is only one backlogged queue, don't search. */
|
||||
@@ -2063,12 +2042,9 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
||||
|
||||
in_service_bfqq = bfqd->in_service_queue;
|
||||
|
||||
- if (!in_service_bfqq || in_service_bfqq == bfqq
|
||||
- || wr_from_too_long(in_service_bfqq) ||
|
||||
- unlikely(in_service_bfqq == &bfqd->oom_bfqq))
|
||||
- goto check_scheduled;
|
||||
-
|
||||
- if (bfq_rq_close_to_sector(io_struct, request, bfqd->last_position) &&
|
||||
+ if (in_service_bfqq && in_service_bfqq != bfqq &&
|
||||
+ likely(in_service_bfqq != &bfqd->oom_bfqq) &&
|
||||
+ bfq_rq_close_to_sector(io_struct, request, bfqd->last_position) &&
|
||||
bfqq->entity.parent == in_service_bfqq->entity.parent &&
|
||||
bfq_may_be_close_cooperator(bfqq, in_service_bfqq)) {
|
||||
new_bfqq = bfq_setup_merge(bfqq, in_service_bfqq);
|
||||
@@ -2080,12 +2056,10 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
||||
* queues. The only thing we need is that the bio/request is not
|
||||
* NULL, as we need it to establish whether a cooperator exists.
|
||||
*/
|
||||
-check_scheduled:
|
||||
new_bfqq = bfq_find_close_cooperator(bfqd, bfqq,
|
||||
bfq_io_struct_pos(io_struct, request));
|
||||
|
||||
- if (new_bfqq && !wr_from_too_long(new_bfqq) &&
|
||||
- likely(new_bfqq != &bfqd->oom_bfqq) &&
|
||||
+ if (new_bfqq && likely(new_bfqq != &bfqd->oom_bfqq) &&
|
||||
bfq_may_be_close_cooperator(bfqq, new_bfqq))
|
||||
return bfq_setup_merge(bfqq, new_bfqq);
|
||||
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+283
@@ -0,0 +1,283 @@
|
||||
From 24bfd19bb7890255693ee5cb6dc100d8d215d00b Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Mon, 13 Nov 2017 07:34:09 +0100
|
||||
Subject: [PATCH] block, bfq: update blkio stats outside the scheduler lock
|
||||
|
||||
bfq invokes various blkg_*stats_* functions to update the statistics
|
||||
contained in the special files blkio.bfq.* in the blkio controller
|
||||
groups, i.e., the I/O accounting related to the proportional-share
|
||||
policy provided by bfq. The execution of these functions takes a
|
||||
considerable percentage, about 40%, of the total per-request execution
|
||||
time of bfq (i.e., of the sum of the execution time of all the bfq
|
||||
functions that have to be executed to process an I/O request from its
|
||||
creation to its destruction). This reduces the request-processing
|
||||
rate sustainable by bfq noticeably, even on a multicore CPU. In fact,
|
||||
the bfq functions that invoke blkg_*stats_* functions cannot be
|
||||
executed in parallel with the rest of the code of bfq, because both
|
||||
are executed under the same same per-device scheduler lock.
|
||||
|
||||
To reduce this slowdown, this commit moves, wherever possible, the
|
||||
invocation of these functions (more precisely, of the bfq functions
|
||||
that invoke blkg_*stats_* functions) outside the critical sections
|
||||
protected by the scheduler lock.
|
||||
|
||||
With this change, and with all blkio.bfq.* statistics enabled, the
|
||||
throughput grows, e.g., from 250 to 310 KIOPS (+25%) on an Intel
|
||||
i7-4850HQ, in case of 8 threads doing random I/O in parallel on
|
||||
null_blk, with the latter configured with 0 latency. We obtained the
|
||||
same or higher throughput boosts, up to +30%, with other processors
|
||||
(some figures are reported in the documentation). For our tests, we
|
||||
used the script [1], with which our results can be easily reproduced.
|
||||
|
||||
NOTE. This commit still protects the invocation of blkg_*stats_*
|
||||
functions with the request_queue lock, because the group these
|
||||
functions are invoked on may otherwise disappear before or while these
|
||||
functions are executed. Fortunately, tests without even this lock
|
||||
show, by difference, that the serialization caused by this lock has a
|
||||
little impact (at most ~5% of throughput reduction).
|
||||
|
||||
[1] https://github.com/Algodev-github/IOSpeed
|
||||
|
||||
Tested-by: Lee Tibbert <lee.tibbert@gmail.com>
|
||||
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Luca Miccio <lucmiccio@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
Documentation/block/bfq-iosched.txt | 6 +-
|
||||
block/bfq-iosched.c | 110 ++++++++++++++++++++++++++++++++----
|
||||
block/bfq-wf2q.c | 1 -
|
||||
3 files changed, 102 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/Documentation/block/bfq-iosched.txt b/Documentation/block/bfq-iosched.txt
|
||||
index 7a9361508157..7fad6c061470 100644
|
||||
--- a/Documentation/block/bfq-iosched.txt
|
||||
+++ b/Documentation/block/bfq-iosched.txt
|
||||
@@ -26,9 +26,9 @@ the limits on slow or average CPUs, here are BFQ limits for three
|
||||
different CPUs, on, respectively, an average laptop, an old desktop,
|
||||
and a cheap embedded system, in case full hierarchical support is
|
||||
enabled (i.e., CONFIG_BFQ_GROUP_IOSCHED is set):
|
||||
-- Intel i7-4850HQ: 250 KIOPS
|
||||
-- AMD A8-3850: 170 KIOPS
|
||||
-- ARM CortexTM-A53 Octa-core: 45 KIOPS
|
||||
+- Intel i7-4850HQ: 310 KIOPS
|
||||
+- AMD A8-3850: 200 KIOPS
|
||||
+- ARM CortexTM-A53 Octa-core: 56 KIOPS
|
||||
|
||||
BFQ works for multi-queue devices too.
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 91703eba63f0..69e05f861daf 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -2228,7 +2228,6 @@ static void __bfq_set_in_service_queue(struct bfq_data *bfqd,
|
||||
struct bfq_queue *bfqq)
|
||||
{
|
||||
if (bfqq) {
|
||||
- bfqg_stats_update_avg_queue_size(bfqq_group(bfqq));
|
||||
bfq_clear_bfqq_fifo_expire(bfqq);
|
||||
|
||||
bfqd->budgets_assigned = (bfqd->budgets_assigned * 7 + 256) / 8;
|
||||
@@ -3469,7 +3468,6 @@ static struct bfq_queue *bfq_select_queue(struct bfq_data *bfqd)
|
||||
*/
|
||||
bfq_clear_bfqq_wait_request(bfqq);
|
||||
hrtimer_try_to_cancel(&bfqd->idle_slice_timer);
|
||||
- bfqg_stats_update_idle_time(bfqq_group(bfqq));
|
||||
}
|
||||
goto keep_queue;
|
||||
}
|
||||
@@ -3695,15 +3693,67 @@ static struct request *bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
{
|
||||
struct bfq_data *bfqd = hctx->queue->elevator->elevator_data;
|
||||
struct request *rq;
|
||||
+#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+ struct bfq_queue *in_serv_queue, *bfqq;
|
||||
+ bool waiting_rq, idle_timer_disabled;
|
||||
+#endif
|
||||
|
||||
spin_lock_irq(&bfqd->lock);
|
||||
|
||||
+#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+ in_serv_queue = bfqd->in_service_queue;
|
||||
+ waiting_rq = in_serv_queue && bfq_bfqq_wait_request(in_serv_queue);
|
||||
+
|
||||
+ rq = __bfq_dispatch_request(hctx);
|
||||
+
|
||||
+ idle_timer_disabled =
|
||||
+ waiting_rq && !bfq_bfqq_wait_request(in_serv_queue);
|
||||
+
|
||||
+#else
|
||||
rq = __bfq_dispatch_request(hctx);
|
||||
- if (rq && RQ_BFQQ(rq))
|
||||
- bfqg_stats_update_io_remove(bfqq_group(RQ_BFQQ(rq)),
|
||||
- rq->cmd_flags);
|
||||
+#endif
|
||||
spin_unlock_irq(&bfqd->lock);
|
||||
|
||||
+#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+ bfqq = rq ? RQ_BFQQ(rq) : NULL;
|
||||
+ if (!idle_timer_disabled && !bfqq)
|
||||
+ return rq;
|
||||
+
|
||||
+ /*
|
||||
+ * rq and bfqq are guaranteed to exist until this function
|
||||
+ * ends, for the following reasons. First, rq can be
|
||||
+ * dispatched to the device, and then can be completed and
|
||||
+ * freed, only after this function ends. Second, rq cannot be
|
||||
+ * merged (and thus freed because of a merge) any longer,
|
||||
+ * because it has already started. Thus rq cannot be freed
|
||||
+ * before this function ends, and, since rq has a reference to
|
||||
+ * bfqq, the same guarantee holds for bfqq too.
|
||||
+ *
|
||||
+ * In addition, the following queue lock guarantees that
|
||||
+ * bfqq_group(bfqq) exists as well.
|
||||
+ */
|
||||
+ spin_lock_irq(hctx->queue->queue_lock);
|
||||
+ if (idle_timer_disabled)
|
||||
+ /*
|
||||
+ * Since the idle timer has been disabled,
|
||||
+ * in_serv_queue contained some request when
|
||||
+ * __bfq_dispatch_request was invoked above, which
|
||||
+ * implies that rq was picked exactly from
|
||||
+ * in_serv_queue. Thus in_serv_queue == bfqq, and is
|
||||
+ * therefore guaranteed to exist because of the above
|
||||
+ * arguments.
|
||||
+ */
|
||||
+ bfqg_stats_update_idle_time(bfqq_group(in_serv_queue));
|
||||
+ if (bfqq) {
|
||||
+ struct bfq_group *bfqg = bfqq_group(bfqq);
|
||||
+
|
||||
+ bfqg_stats_update_avg_queue_size(bfqg);
|
||||
+ bfqg_stats_set_start_empty_time(bfqg);
|
||||
+ bfqg_stats_update_io_remove(bfqg, rq->cmd_flags);
|
||||
+ }
|
||||
+ spin_unlock_irq(hctx->queue->queue_lock);
|
||||
+#endif
|
||||
+
|
||||
return rq;
|
||||
}
|
||||
|
||||
@@ -4161,7 +4211,6 @@ static void bfq_rq_enqueued(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
||||
*/
|
||||
bfq_clear_bfqq_wait_request(bfqq);
|
||||
hrtimer_try_to_cancel(&bfqd->idle_slice_timer);
|
||||
- bfqg_stats_update_idle_time(bfqq_group(bfqq));
|
||||
|
||||
/*
|
||||
* The queue is not empty, because a new request just
|
||||
@@ -4176,10 +4225,12 @@ static void bfq_rq_enqueued(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
||||
}
|
||||
}
|
||||
|
||||
-static void __bfq_insert_request(struct bfq_data *bfqd, struct request *rq)
|
||||
+/* returns true if it causes the idle timer to be disabled */
|
||||
+static bool __bfq_insert_request(struct bfq_data *bfqd, struct request *rq)
|
||||
{
|
||||
struct bfq_queue *bfqq = RQ_BFQQ(rq),
|
||||
*new_bfqq = bfq_setup_cooperator(bfqd, bfqq, rq, true);
|
||||
+ bool waiting, idle_timer_disabled = false;
|
||||
|
||||
if (new_bfqq) {
|
||||
if (bic_to_bfqq(RQ_BIC(rq), 1) != bfqq)
|
||||
@@ -4213,12 +4264,16 @@ static void __bfq_insert_request(struct bfq_data *bfqd, struct request *rq)
|
||||
bfqq = new_bfqq;
|
||||
}
|
||||
|
||||
+ waiting = bfqq && bfq_bfqq_wait_request(bfqq);
|
||||
bfq_add_request(rq);
|
||||
+ idle_timer_disabled = waiting && !bfq_bfqq_wait_request(bfqq);
|
||||
|
||||
rq->fifo_time = ktime_get_ns() + bfqd->bfq_fifo_expire[rq_is_sync(rq)];
|
||||
list_add_tail(&rq->queuelist, &bfqq->fifo);
|
||||
|
||||
bfq_rq_enqueued(bfqd, bfqq, rq);
|
||||
+
|
||||
+ return idle_timer_disabled;
|
||||
}
|
||||
|
||||
static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
@@ -4226,7 +4281,11 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
{
|
||||
struct request_queue *q = hctx->queue;
|
||||
struct bfq_data *bfqd = q->elevator->elevator_data;
|
||||
+#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
struct bfq_queue *bfqq = RQ_BFQQ(rq);
|
||||
+ bool idle_timer_disabled = false;
|
||||
+ unsigned int cmd_flags;
|
||||
+#endif
|
||||
|
||||
spin_lock_irq(&bfqd->lock);
|
||||
if (blk_mq_sched_try_insert_merge(q, rq)) {
|
||||
@@ -4245,13 +4304,17 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
else
|
||||
list_add_tail(&rq->queuelist, &bfqd->dispatch);
|
||||
} else {
|
||||
- __bfq_insert_request(bfqd, rq);
|
||||
+#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+ idle_timer_disabled = __bfq_insert_request(bfqd, rq);
|
||||
/*
|
||||
* Update bfqq, because, if a queue merge has occurred
|
||||
* in __bfq_insert_request, then rq has been
|
||||
* redirected into a new queue.
|
||||
*/
|
||||
bfqq = RQ_BFQQ(rq);
|
||||
+#else
|
||||
+ __bfq_insert_request(bfqd, rq);
|
||||
+#endif
|
||||
|
||||
if (rq_mergeable(rq)) {
|
||||
elv_rqhash_add(q, rq);
|
||||
@@ -4260,10 +4323,35 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
}
|
||||
}
|
||||
|
||||
- if (bfqq)
|
||||
- bfqg_stats_update_io_add(bfqq_group(bfqq), bfqq, rq->cmd_flags);
|
||||
-
|
||||
+#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+ /*
|
||||
+ * Cache cmd_flags before releasing scheduler lock, because rq
|
||||
+ * may disappear afterwards (for example, because of a request
|
||||
+ * merge).
|
||||
+ */
|
||||
+ cmd_flags = rq->cmd_flags;
|
||||
+#endif
|
||||
spin_unlock_irq(&bfqd->lock);
|
||||
+
|
||||
+#ifdef CONFIG_BFQ_GROUP_IOSCHED
|
||||
+ if (!bfqq)
|
||||
+ return;
|
||||
+ /*
|
||||
+ * bfqq still exists, because it can disappear only after
|
||||
+ * either it is merged with another queue, or the process it
|
||||
+ * is associated with exits. But both actions must be taken by
|
||||
+ * the same process currently executing this flow of
|
||||
+ * instruction.
|
||||
+ *
|
||||
+ * In addition, the following queue lock guarantees that
|
||||
+ * bfqq_group(bfqq) exists as well.
|
||||
+ */
|
||||
+ spin_lock_irq(q->queue_lock);
|
||||
+ bfqg_stats_update_io_add(bfqq_group(bfqq), bfqq, cmd_flags);
|
||||
+ if (idle_timer_disabled)
|
||||
+ bfqg_stats_update_idle_time(bfqq_group(bfqq));
|
||||
+ spin_unlock_irq(q->queue_lock);
|
||||
+#endif
|
||||
}
|
||||
|
||||
static void bfq_insert_requests(struct blk_mq_hw_ctx *hctx,
|
||||
diff --git a/block/bfq-wf2q.c b/block/bfq-wf2q.c
|
||||
index 414ba686a847..e495d3f9b4b0 100644
|
||||
--- a/block/bfq-wf2q.c
|
||||
+++ b/block/bfq-wf2q.c
|
||||
@@ -843,7 +843,6 @@ void bfq_bfqq_served(struct bfq_queue *bfqq, int served)
|
||||
st->vtime += bfq_delta(served, st->wsum);
|
||||
bfq_forget_idle(st);
|
||||
}
|
||||
- bfqg_stats_set_start_empty_time(bfqq_group(bfqq));
|
||||
bfq_log_bfqq(bfqq->bfqd, bfqq, "bfqq_served %d secs", served);
|
||||
}
|
||||
|
||||
--
|
||||
2.15.1
|
||||
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
From 68017e5d87a2477d40476f1a0a06f202ee79316b Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Mon, 13 Nov 2017 07:34:07 +0100
|
||||
Subject: [PATCH] doc, block, bfq: update max IOPS sustainable with BFQ
|
||||
|
||||
We have investigated more deeply the performance of BFQ, in terms of
|
||||
number of IOPS that can be processed by the CPU when BFQ is used as
|
||||
I/O scheduler. In more detail, using the script [1], we have measured
|
||||
the number of IOPS reached on top of a null block device configured
|
||||
with zero latency, as a function of the workload (sequential read,
|
||||
sequential write, random read, random write) and of the system (we
|
||||
considered desktops, laptops and embedded systems).
|
||||
|
||||
Basing on the resulting figures, with this commit we update the
|
||||
current, conservative IOPS range reported in BFQ documentation. In
|
||||
particular, the documentation now reports, for each of three different
|
||||
systems, the lowest number of IOPS obtained for that system with the
|
||||
above test (namely, the value obtained with the workload leading to
|
||||
the lowest IOPS).
|
||||
|
||||
[1] https://github.com/Algodev-github/IOSpeed
|
||||
|
||||
Reviewed-by: Lee Tibbert <lee.tibbert@gmail.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Luca Miccio <lucmiccio@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
Documentation/block/bfq-iosched.txt | 17 +++++++++++------
|
||||
1 file changed, 11 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/Documentation/block/bfq-iosched.txt b/Documentation/block/bfq-iosched.txt
|
||||
index 3d6951d63489..7a9361508157 100644
|
||||
--- a/Documentation/block/bfq-iosched.txt
|
||||
+++ b/Documentation/block/bfq-iosched.txt
|
||||
@@ -20,12 +20,17 @@ for that device, by setting low_latency to 0. See Section 3 for
|
||||
details on how to configure BFQ for the desired tradeoff between
|
||||
latency and throughput, or on how to maximize throughput.
|
||||
|
||||
-On average CPUs, the current version of BFQ can handle devices
|
||||
-performing at most ~30K IOPS; at most ~50 KIOPS on faster CPUs. As a
|
||||
-reference, 30-50 KIOPS correspond to very high bandwidths with
|
||||
-sequential I/O (e.g., 8-12 GB/s if I/O requests are 256 KB large), and
|
||||
-to 120-200 MB/s with 4KB random I/O. BFQ is currently being tested on
|
||||
-multi-queue devices too.
|
||||
+BFQ has a non-null overhead, which limits the maximum IOPS that the
|
||||
+CPU can process for a device scheduled with BFQ. To give an idea of
|
||||
+the limits on slow or average CPUs, here are BFQ limits for three
|
||||
+different CPUs, on, respectively, an average laptop, an old desktop,
|
||||
+and a cheap embedded system, in case full hierarchical support is
|
||||
+enabled (i.e., CONFIG_BFQ_GROUP_IOSCHED is set):
|
||||
+- Intel i7-4850HQ: 250 KIOPS
|
||||
+- AMD A8-3850: 170 KIOPS
|
||||
+- ARM CortexTM-A53 Octa-core: 45 KIOPS
|
||||
+
|
||||
+BFQ works for multi-queue devices too.
|
||||
|
||||
The table of contents follow. Impatients can just jump to Section 3.
|
||||
|
||||
--
|
||||
2.13.6
|
||||
|
||||
@@ -0,0 +1,431 @@
|
||||
|
||||
fs/aufs/Kconfig | 2 +-
|
||||
fs/dcache.c | 2 ++
|
||||
fs/exec.c | 1 +
|
||||
fs/fcntl.c | 1 +
|
||||
fs/file_table.c | 4 ++++
|
||||
fs/inode.c | 1 +
|
||||
fs/namespace.c | 2 ++
|
||||
fs/notify/group.c | 4 ++++
|
||||
fs/notify/mark.c | 4 ++++
|
||||
fs/open.c | 2 ++
|
||||
fs/read_write.c | 4 ++++
|
||||
fs/splice.c | 2 ++
|
||||
fs/sync.c | 1 +
|
||||
fs/xattr.c | 1 +
|
||||
kernel/task_work.c | 1 +
|
||||
security/commoncap.c | 2 ++
|
||||
security/device_cgroup.c | 2 ++
|
||||
security/security.c | 10 ++++++++++
|
||||
18 files changed, 45 insertions(+), 1 deletion(-)
|
||||
|
||||
diff -Nurp linux-4.14.14-aufs/fs/aufs/Kconfig linux-4.14.14-aufs.mod/fs/aufs/Kconfig
|
||||
--- linux-4.14.14-aufs/fs/aufs/Kconfig 2018-01-17 11:17:42.191975391 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/aufs/Kconfig 2018-01-17 11:18:22.784556755 +0200
|
||||
@@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
config AUFS_FS
|
||||
- bool "Aufs (Advanced multi layered unification filesystem) support"
|
||||
+ tristate "Aufs (Advanced multi layered unification filesystem) support"
|
||||
help
|
||||
Aufs is a stackable unification filesystem such as Unionfs,
|
||||
which unifies several directories and provides a merged single
|
||||
diff -Nurp linux-4.14.14-aufs/fs/dcache.c linux-4.14.14-aufs.mod/fs/dcache.c
|
||||
--- linux-4.14.14-aufs/fs/dcache.c 2018-01-17 11:17:42.200975519 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/dcache.c 2018-01-17 11:18:22.784556755 +0200
|
||||
@@ -1305,6 +1305,7 @@ rename_retry:
|
||||
seq = 1;
|
||||
goto again;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(d_walk);
|
||||
|
||||
struct check_mount {
|
||||
struct vfsmount *mnt;
|
||||
@@ -2894,6 +2895,7 @@ void d_exchange(struct dentry *dentry1,
|
||||
|
||||
write_sequnlock(&rename_lock);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(d_exchange);
|
||||
|
||||
/**
|
||||
* d_ancestor - search for an ancestor
|
||||
diff -Nurp linux-4.14.14-aufs/fs/exec.c linux-4.14.14-aufs.mod/fs/exec.c
|
||||
--- linux-4.14.14-aufs/fs/exec.c 2018-01-17 11:08:18.957908605 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/exec.c 2018-01-17 11:18:22.785556770 +0200
|
||||
@@ -109,6 +109,7 @@ bool path_noexec(const struct path *path
|
||||
return (path->mnt->mnt_flags & MNT_NOEXEC) ||
|
||||
(path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(path_noexec);
|
||||
|
||||
#ifdef CONFIG_USELIB
|
||||
/*
|
||||
diff -Nurp linux-4.14.14-aufs/fs/fcntl.c linux-4.14.14-aufs.mod/fs/fcntl.c
|
||||
--- linux-4.14.14-aufs/fs/fcntl.c 2018-01-17 11:17:42.200975519 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/fcntl.c 2018-01-17 11:18:22.785556770 +0200
|
||||
@@ -85,6 +85,7 @@ int setfl(int fd, struct file * filp, un
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(setfl);
|
||||
|
||||
static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
|
||||
int force)
|
||||
diff -Nurp linux-4.14.14-aufs/fs/file_table.c linux-4.14.14-aufs.mod/fs/file_table.c
|
||||
--- linux-4.14.14-aufs/fs/file_table.c 2017-11-12 20:46:13.000000000 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/file_table.c 2018-01-17 11:18:22.785556770 +0200
|
||||
@@ -148,6 +148,7 @@ over:
|
||||
}
|
||||
return ERR_PTR(-ENFILE);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(get_empty_filp);
|
||||
|
||||
/**
|
||||
* alloc_file - allocate and initialize a 'struct file'
|
||||
@@ -258,6 +259,7 @@ void flush_delayed_fput(void)
|
||||
{
|
||||
delayed_fput(NULL);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(flush_delayed_fput);
|
||||
|
||||
static DECLARE_DELAYED_WORK(delayed_fput_work, delayed_fput);
|
||||
|
||||
@@ -300,6 +302,7 @@ void __fput_sync(struct file *file)
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(fput);
|
||||
+EXPORT_SYMBOL_GPL(__fput_sync);
|
||||
|
||||
void put_filp(struct file *file)
|
||||
{
|
||||
@@ -308,6 +311,7 @@ void put_filp(struct file *file)
|
||||
file_free(file);
|
||||
}
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(put_filp);
|
||||
|
||||
void __init files_init(void)
|
||||
{
|
||||
diff -Nurp linux-4.14.14-aufs/fs/inode.c linux-4.14.14-aufs.mod/fs/inode.c
|
||||
--- linux-4.14.14-aufs/fs/inode.c 2018-01-17 11:17:42.200975519 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/inode.c 2018-01-17 11:18:22.785556770 +0200
|
||||
@@ -1664,6 +1664,7 @@ int update_time(struct inode *inode, str
|
||||
|
||||
return update_time(inode, time, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(update_time);
|
||||
|
||||
/**
|
||||
* touch_atime - update the access time
|
||||
diff -Nurp linux-4.14.14-aufs/fs/namespace.c linux-4.14.14-aufs.mod/fs/namespace.c
|
||||
--- linux-4.14.14-aufs/fs/namespace.c 2018-01-17 11:17:42.201975534 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/namespace.c 2018-01-17 11:18:22.785556770 +0200
|
||||
@@ -517,6 +517,7 @@ void __mnt_drop_write(struct vfsmount *m
|
||||
mnt_dec_writers(real_mount(mnt));
|
||||
preempt_enable();
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(__mnt_drop_write);
|
||||
|
||||
/**
|
||||
* mnt_drop_write - give up write access to a mount
|
||||
@@ -1887,6 +1888,7 @@ int iterate_mounts(int (*f)(struct vfsmo
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(iterate_mounts);
|
||||
|
||||
static void cleanup_group_ids(struct mount *mnt, struct mount *end)
|
||||
{
|
||||
diff -Nurp linux-4.14.14-aufs/fs/notify/group.c linux-4.14.14-aufs.mod/fs/notify/group.c
|
||||
--- linux-4.14.14-aufs/fs/notify/group.c 2017-11-12 20:46:13.000000000 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/notify/group.c 2018-01-17 11:18:22.786556784 +0200
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/srcu.h>
|
||||
#include <linux/rculist.h>
|
||||
#include <linux/wait.h>
|
||||
+#include <linux/module.h>
|
||||
|
||||
#include <linux/fsnotify_backend.h>
|
||||
#include "fsnotify.h"
|
||||
@@ -109,6 +110,7 @@ void fsnotify_get_group(struct fsnotify_
|
||||
{
|
||||
atomic_inc(&group->refcnt);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_get_group);
|
||||
|
||||
/*
|
||||
* Drop a reference to a group. Free it if it's through.
|
||||
@@ -118,6 +120,7 @@ void fsnotify_put_group(struct fsnotify_
|
||||
if (atomic_dec_and_test(&group->refcnt))
|
||||
fsnotify_final_destroy_group(group);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_put_group);
|
||||
|
||||
/*
|
||||
* Create a new fsnotify_group and hold a reference for the group returned.
|
||||
@@ -147,6 +150,7 @@ struct fsnotify_group *fsnotify_alloc_gr
|
||||
|
||||
return group;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_alloc_group);
|
||||
|
||||
int fsnotify_fasync(int fd, struct file *file, int on)
|
||||
{
|
||||
diff -Nurp linux-4.14.14-aufs/fs/notify/mark.c linux-4.14.14-aufs.mod/fs/notify/mark.c
|
||||
--- linux-4.14.14-aufs/fs/notify/mark.c 2018-01-17 11:08:18.963908691 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/notify/mark.c 2018-01-17 11:18:22.786556784 +0200
|
||||
@@ -124,6 +124,7 @@ static void __fsnotify_recalc_mask(struc
|
||||
else if (conn->flags & FSNOTIFY_OBJ_TYPE_VFSMOUNT)
|
||||
real_mount(conn->mnt)->mnt_fsnotify_mask = new_mask;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_put_mark);
|
||||
|
||||
/*
|
||||
* Calculate mask of events for a list of marks. The caller must make sure
|
||||
@@ -271,6 +272,7 @@ static bool fsnotify_get_mark_safe(struc
|
||||
}
|
||||
return false;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_destroy_mark);
|
||||
|
||||
/*
|
||||
* Puts marks and wakes up group destruction if necessary.
|
||||
@@ -428,6 +430,7 @@ int fsnotify_compare_groups(struct fsnot
|
||||
return 1;
|
||||
return -1;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_add_mark);
|
||||
|
||||
static int fsnotify_attach_connector_to_object(
|
||||
struct fsnotify_mark_connector __rcu **connp,
|
||||
@@ -557,6 +560,7 @@ out_err:
|
||||
spin_unlock(&mark->lock);
|
||||
return err;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_init_mark);
|
||||
|
||||
/*
|
||||
* Attach an initialized mark to a given group and fs object.
|
||||
diff -Nurp linux-4.14.14-aufs/fs/open.c linux-4.14.14-aufs.mod/fs/open.c
|
||||
--- linux-4.14.14-aufs/fs/open.c 2017-11-12 20:46:13.000000000 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/open.c 2018-01-17 11:18:22.786556784 +0200
|
||||
@@ -64,6 +64,7 @@ int do_truncate(struct dentry *dentry, l
|
||||
inode_unlock(dentry->d_inode);
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_truncate);
|
||||
|
||||
long vfs_truncate(const struct path *path, loff_t length)
|
||||
{
|
||||
@@ -691,6 +692,7 @@ int open_check_o_direct(struct file *f)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(open_check_o_direct);
|
||||
|
||||
static int do_dentry_open(struct file *f,
|
||||
struct inode *inode,
|
||||
diff -Nurp linux-4.14.14-aufs/fs/read_write.c linux-4.14.14-aufs.mod/fs/read_write.c
|
||||
--- linux-4.14.14-aufs/fs/read_write.c 2018-01-17 11:17:42.201975534 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/read_write.c 2018-01-17 11:18:22.790556841 +0200
|
||||
@@ -454,6 +454,7 @@ ssize_t vfs_read(struct file *file, char
|
||||
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_read);
|
||||
|
||||
static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
|
||||
{
|
||||
@@ -494,6 +495,7 @@ vfs_readf_t vfs_readf(struct file *file)
|
||||
return new_sync_read;
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_readf);
|
||||
|
||||
vfs_writef_t vfs_writef(struct file *file)
|
||||
{
|
||||
@@ -505,6 +507,7 @@ vfs_writef_t vfs_writef(struct file *fil
|
||||
return new_sync_write;
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_writef);
|
||||
|
||||
ssize_t __kernel_write(struct file *file, const void *buf, size_t count, loff_t *pos)
|
||||
{
|
||||
@@ -574,6 +577,7 @@ ssize_t vfs_write(struct file *file, con
|
||||
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_write);
|
||||
|
||||
static inline loff_t file_pos_read(struct file *file)
|
||||
{
|
||||
diff -Nurp linux-4.14.14-aufs/fs/splice.c linux-4.14.14-aufs.mod/fs/splice.c
|
||||
--- linux-4.14.14-aufs/fs/splice.c 2018-01-17 11:17:42.201975534 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/splice.c 2018-01-17 11:18:22.791556855 +0200
|
||||
@@ -850,6 +850,7 @@ long do_splice_from(struct pipe_inode_in
|
||||
|
||||
return splice_write(pipe, out, ppos, len, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_splice_from);
|
||||
|
||||
/*
|
||||
* Attempt to initiate a splice from a file to a pipe.
|
||||
@@ -879,6 +880,7 @@ long do_splice_to(struct file *in, loff_
|
||||
|
||||
return splice_read(in, ppos, pipe, len, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_splice_to);
|
||||
|
||||
/**
|
||||
* splice_direct_to_actor - splices data directly between two non-pipes
|
||||
diff -Nurp linux-4.14.14-aufs/fs/sync.c linux-4.14.14-aufs.mod/fs/sync.c
|
||||
--- linux-4.14.14-aufs/fs/sync.c 2018-01-17 11:17:42.201975534 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/sync.c 2018-01-17 11:18:22.791556855 +0200
|
||||
@@ -39,6 +39,7 @@ int __sync_filesystem(struct super_block
|
||||
sb->s_op->sync_fs(sb, wait);
|
||||
return __sync_blockdev(sb->s_bdev, wait);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(__sync_filesystem);
|
||||
|
||||
/*
|
||||
* Write out and wait upon all dirty data associated with this
|
||||
diff -Nurp linux-4.14.14-aufs/fs/xattr.c linux-4.14.14-aufs.mod/fs/xattr.c
|
||||
--- linux-4.14.14-aufs/fs/xattr.c 2017-11-12 20:46:13.000000000 +0200
|
||||
+++ linux-4.14.14-aufs.mod/fs/xattr.c 2018-01-17 11:18:22.791556855 +0200
|
||||
@@ -297,6 +297,7 @@ vfs_getxattr_alloc(struct dentry *dentry
|
||||
*xattr_value = value;
|
||||
return error;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_getxattr_alloc);
|
||||
|
||||
ssize_t
|
||||
__vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
diff -Nurp linux-4.14.14-aufs/kernel/task_work.c linux-4.14.14-aufs.mod/kernel/task_work.c
|
||||
--- linux-4.14.14-aufs/kernel/task_work.c 2018-01-17 11:08:18.979908919 +0200
|
||||
+++ linux-4.14.14-aufs.mod/kernel/task_work.c 2018-01-17 11:18:22.791556855 +0200
|
||||
@@ -116,3 +116,4 @@ void task_work_run(void)
|
||||
} while (work);
|
||||
}
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(task_work_run);
|
||||
diff -Nurp linux-4.14.14-aufs/security/commoncap.c linux-4.14.14-aufs.mod/security/commoncap.c
|
||||
--- linux-4.14.14-aufs/security/commoncap.c 2018-01-17 11:08:18.999909204 +0200
|
||||
+++ linux-4.14.14-aufs.mod/security/commoncap.c 2018-01-17 11:18:22.791556855 +0200
|
||||
@@ -1267,12 +1267,14 @@ int cap_mmap_addr(unsigned long addr)
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(cap_mmap_addr);
|
||||
|
||||
int cap_mmap_file(struct file *file, unsigned long reqprot,
|
||||
unsigned long prot, unsigned long flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(cap_mmap_file);
|
||||
|
||||
#ifdef CONFIG_SECURITY
|
||||
|
||||
diff -Nurp linux-4.14.14-aufs/security/device_cgroup.c linux-4.14.14-aufs.mod/security/device_cgroup.c
|
||||
--- linux-4.14.14-aufs/security/device_cgroup.c 2017-11-12 20:46:13.000000000 +0200
|
||||
+++ linux-4.14.14-aufs.mod/security/device_cgroup.c 2018-01-17 11:18:22.791556855 +0200
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <linux/device_cgroup.h>
|
||||
#include <linux/cgroup.h>
|
||||
#include <linux/ctype.h>
|
||||
+#include <linux/export.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/seq_file.h>
|
||||
@@ -850,6 +851,7 @@ int __devcgroup_inode_permission(struct
|
||||
return __devcgroup_check_permission(type, imajor(inode), iminor(inode),
|
||||
access);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(__devcgroup_inode_permission);
|
||||
|
||||
int devcgroup_inode_mknod(int mode, dev_t dev)
|
||||
{
|
||||
diff -Nurp linux-4.14.14-aufs/security/security.c linux-4.14.14-aufs.mod/security/security.c
|
||||
--- linux-4.14.14-aufs/security/security.c 2017-11-12 20:46:13.000000000 +0200
|
||||
+++ linux-4.14.14-aufs.mod/security/security.c 2018-01-17 11:18:22.791556855 +0200
|
||||
@@ -530,6 +530,7 @@ int security_path_rmdir(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_rmdir, 0, dir, dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_rmdir);
|
||||
|
||||
int security_path_unlink(const struct path *dir, struct dentry *dentry)
|
||||
{
|
||||
@@ -546,6 +547,7 @@ int security_path_symlink(const struct p
|
||||
return 0;
|
||||
return call_int_hook(path_symlink, 0, dir, dentry, old_name);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_symlink);
|
||||
|
||||
int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
|
||||
struct dentry *new_dentry)
|
||||
@@ -554,6 +556,7 @@ int security_path_link(struct dentry *ol
|
||||
return 0;
|
||||
return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_link);
|
||||
|
||||
int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
|
||||
const struct path *new_dir, struct dentry *new_dentry,
|
||||
@@ -581,6 +584,7 @@ int security_path_truncate(const struct
|
||||
return 0;
|
||||
return call_int_hook(path_truncate, 0, path);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_truncate);
|
||||
|
||||
int security_path_chmod(const struct path *path, umode_t mode)
|
||||
{
|
||||
@@ -588,6 +592,7 @@ int security_path_chmod(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_chmod, 0, path, mode);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_chmod);
|
||||
|
||||
int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
|
||||
{
|
||||
@@ -595,6 +600,7 @@ int security_path_chown(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_chown, 0, path, uid, gid);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_chown);
|
||||
|
||||
int security_path_chroot(const struct path *path)
|
||||
{
|
||||
@@ -680,6 +686,7 @@ int security_inode_readlink(struct dentr
|
||||
return 0;
|
||||
return call_int_hook(inode_readlink, 0, dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_inode_readlink);
|
||||
|
||||
int security_inode_follow_link(struct dentry *dentry, struct inode *inode,
|
||||
bool rcu)
|
||||
@@ -695,6 +702,7 @@ int security_inode_permission(struct ino
|
||||
return 0;
|
||||
return call_int_hook(inode_permission, 0, inode, mask);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_inode_permission);
|
||||
|
||||
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
@@ -866,6 +874,7 @@ int security_file_permission(struct file
|
||||
|
||||
return fsnotify_perm(file, mask);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_file_permission);
|
||||
|
||||
int security_file_alloc(struct file *file)
|
||||
{
|
||||
@@ -925,6 +934,7 @@ int security_mmap_file(struct file *file
|
||||
return ret;
|
||||
return ima_file_mmap(file, prot);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_mmap_file);
|
||||
|
||||
int security_mmap_addr(unsigned long addr)
|
||||
{
|
||||
+11561
-9616
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,27 @@
|
||||
|
||||
arm build fails with:
|
||||
|
||||
n file included from fs/aufs/aufs.h:31:0,
|
||||
from fs/aufs/module.c:11:
|
||||
fs/aufs/file.h: In function 'au_do_vm_file_reset':
|
||||
fs/aufs/file.h:273:9: error: dereferencing pointer to incomplete type 'struct vm_area_struct'
|
||||
f = vma->vm_file;
|
||||
^
|
||||
|
||||
on x86(64) we seem to get covered by implict inclusion.
|
||||
|
||||
So explicitly include it to avoid subtle breakage
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
---
|
||||
|
||||
--- ./fs/aufs/file.h.orig
|
||||
+++ ./fs/aufs/file.h
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/fs.h>
|
||||
#include <linux/mm_types.h>
|
||||
#include <linux/poll.h>
|
||||
+#include <linux/vmalloc.h>
|
||||
#include "rwsem.h"
|
||||
|
||||
struct au_branch;
|
||||
-97
@@ -1,97 +0,0 @@
|
||||
From 8726f2faa371514fba2f594d799db95203dfeee0 Mon Sep 17 00:00:00 2001
|
||||
From: Francisco Jerez <currojerez@riseup.net>
|
||||
Date: Thu, 12 Jan 2017 12:44:54 +0200
|
||||
Subject: drm/i915: Remove WaDisableLSQCROPERFforOCL KBL workaround.
|
||||
|
||||
The WaDisableLSQCROPERFforOCL workaround has the side effect of
|
||||
disabling an L3SQ optimization that has huge performance implications
|
||||
and is unlikely to be necessary for the correct functioning of usual
|
||||
graphic workloads. Userspace is free to re-enable the workaround on
|
||||
demand, and is generally in a better position to determine whether the
|
||||
workaround is necessary than the DRM is (e.g. only during the
|
||||
execution of compute kernels that rely on both L3 fences and HDC R/W
|
||||
requests).
|
||||
|
||||
The same workaround seems to apply to BDW (at least to production
|
||||
stepping G1) and SKL as well (the internal workaround database claims
|
||||
that it does for all steppings, while the BSpec workaround table only
|
||||
mentions pre-production steppings), but the DRM doesn't do anything
|
||||
beyond whitelisting the L3SQCREG4 register so userspace can enable it
|
||||
when it sees fit. Do the same on KBL platforms.
|
||||
|
||||
Improves performance of the GFXBench4 gl_manhattan31 benchmark by 60%,
|
||||
and gl_4 (AKA car chase) by 14% on a KBL GT2 running Mesa master --
|
||||
This is followed by a regression of 35% and 10% respectively for the
|
||||
same benchmarks and platform caused by my recent patch series
|
||||
switching userspace to use the dataport constant cache instead of the
|
||||
sampler to implement uniform pull constant loads, which caused us to
|
||||
hit more heavily the L3 cache (and on platforms other than KBL had the
|
||||
opposite effect of improving performance of the same two benchmarks).
|
||||
The overall effect on KBL of this change combined with the recent
|
||||
userspace change is respectively 4.6% and 2.6%. SynMark2 OglShMapPcf
|
||||
was affected by the constant cache changes (though it improved as it
|
||||
did on other platforms rather than regressing), but is not
|
||||
significantly affected by this patch (with statistical significance of
|
||||
5% and sample size 20).
|
||||
|
||||
v2: Drop some more code to avoid unused variable warning.
|
||||
|
||||
Fixes: 738fa1b3123f ("drm/i915/kbl: Add WaDisableLSQCROPERFforOCL")
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99256
|
||||
Signed-off-by: Francisco Jerez <currojerez@riseup.net>
|
||||
Cc: Matthew Auld <matthew.william.auld@gmail.com>
|
||||
Cc: Eero Tamminen <eero.t.tamminen@intel.com>
|
||||
Cc: Jani Nikula <jani.nikula@intel.com>
|
||||
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
|
||||
Cc: beignet@lists.freedesktop.org
|
||||
Cc: <stable@vger.kernel.org> # v4.7+
|
||||
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
|
||||
[Removed double Fixes tag]
|
||||
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/1484217894-20505-1-git-send-email-mika.kuoppala@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index db714dc..8acab87 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -970,18 +970,8 @@ static inline int gen8_emit_flush_coherentl3_wa(struct intel_engine_cs *engine,
|
||||
uint32_t *batch,
|
||||
uint32_t index)
|
||||
{
|
||||
- struct drm_i915_private *dev_priv = engine->i915;
|
||||
uint32_t l3sqc4_flush = (0x40400000 | GEN8_LQSC_FLUSH_COHERENT_LINES);
|
||||
|
||||
- /*
|
||||
- * WaDisableLSQCROPERFforOCL:kbl
|
||||
- * This WA is implemented in skl_init_clock_gating() but since
|
||||
- * this batch updates GEN8_L3SQCREG4 with default value we need to
|
||||
- * set this bit here to retain the WA during flush.
|
||||
- */
|
||||
- if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
- l3sqc4_flush |= GEN8_LQSC_RO_PERF_DIS;
|
||||
-
|
||||
wa_ctx_emit(batch, index, (MI_STORE_REGISTER_MEM_GEN8 |
|
||||
MI_SRM_LRM_GLOBAL_GTT));
|
||||
wa_ctx_emit_reg(batch, index, GEN8_L3SQCREG4);
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index ab83fc2..49fa800 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -1095,14 +1095,6 @@ static int kbl_init_workarounds(struct intel_engine_cs *engine)
|
||||
WA_SET_BIT_MASKED(HDC_CHICKEN0,
|
||||
HDC_FENCE_DEST_SLM_DISABLE);
|
||||
|
||||
- /* GEN8_L3SQCREG4 has a dependency with WA batch so any new changes
|
||||
- * involving this register should also be added to WA batch as required.
|
||||
- */
|
||||
- if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
- /* WaDisableLSQCROPERFforOCL:kbl */
|
||||
- I915_WRITE(GEN8_L3SQCREG4, I915_READ(GEN8_L3SQCREG4) |
|
||||
- GEN8_LQSC_RO_PERF_DIS);
|
||||
-
|
||||
/* WaToEnableHwFixForPushConstHWBug:kbl */
|
||||
if (IS_KBL_REVID(dev_priv, KBL_REVID_C0, REVID_FOREVER))
|
||||
WA_SET_BIT_MASKED(COMMON_SLICE_CHICKEN2,
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
-127
@@ -1,127 +0,0 @@
|
||||
From a117f378f44150e6d13d2f19740fb757425b651f Mon Sep 17 00:00:00 2001
|
||||
From: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Fri, 16 Sep 2016 16:59:44 +0300
|
||||
Subject: drm/i915/skl: drop workarounds for A0 and B0 revisions
|
||||
|
||||
Pre-production hardware is not supported.
|
||||
|
||||
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/7929af62a68504c84038a8db1625bd96ebaa9e6f.1474034059.git.jani.nikula@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index 0568fb5..57da2b7 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -1299,10 +1299,6 @@ bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp)
|
||||
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
|
||||
struct drm_device *dev = dig_port->base.base.dev;
|
||||
|
||||
- /* WaDisableHBR2:skl */
|
||||
- if (IS_SKL_REVID(dev, 0, SKL_REVID_B0))
|
||||
- return false;
|
||||
-
|
||||
if ((IS_HASWELL(dev) && !IS_HSW_ULX(dev)) || IS_BROADWELL(dev) ||
|
||||
(INTEL_INFO(dev)->gen >= 9))
|
||||
return true;
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp_link_training.c b/drivers/gpu/drm/i915/intel_dp_link_training.c
|
||||
index c438b02..0048b52 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp_link_training.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp_link_training.c
|
||||
@@ -225,9 +225,6 @@ static u32 intel_dp_training_pattern(struct intel_dp *intel_dp)
|
||||
* Intel platforms that support HBR2 also support TPS3. TPS3 support is
|
||||
* also mandatory for downstream devices that support HBR2. However, not
|
||||
* all sinks follow the spec.
|
||||
- *
|
||||
- * Due to WaDisableHBR2 SKL < B0 is the only exception where TPS3 is
|
||||
- * supported in source but still not enabled.
|
||||
*/
|
||||
source_tps3 = intel_dp_source_supports_hbr2(intel_dp);
|
||||
sink_tps3 = drm_dp_tps3_supported(intel_dp->dpcd);
|
||||
diff --git a/drivers/gpu/drm/i915/intel_guc_loader.c b/drivers/gpu/drm/i915/intel_guc_loader.c
|
||||
index 6fd39ef..acc1dbd 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_guc_loader.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_guc_loader.c
|
||||
@@ -375,9 +375,8 @@ static int guc_ucode_xfer(struct drm_i915_private *dev_priv)
|
||||
/* Enable MIA caching. GuC clock gating is disabled. */
|
||||
I915_WRITE(GUC_SHIM_CONTROL, GUC_SHIM_CONTROL_VALUE);
|
||||
|
||||
- /* WaDisableMinuteIaClockGating:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev, 0, BXT_REVID_A1)) {
|
||||
+ /* WaDisableMinuteIaClockGating:bxt */
|
||||
+ if (IS_BXT_REVID(dev, 0, BXT_REVID_A1)) {
|
||||
I915_WRITE(GUC_SHIM_CONTROL, (I915_READ(GUC_SHIM_CONTROL) &
|
||||
~GUC_ENABLE_MIA_CLOCK_GATING));
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index 39417b7..47f7afa 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -269,8 +269,7 @@ logical_ring_init_platform_invariants(struct intel_engine_cs *engine)
|
||||
struct drm_i915_private *dev_priv = engine->i915;
|
||||
|
||||
engine->disable_lite_restore_wa =
|
||||
- (IS_SKL_REVID(dev_priv, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) &&
|
||||
+ IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1) &&
|
||||
(engine->id == VCS || engine->id == VCS2);
|
||||
|
||||
engine->ctx_desc_template = GEN8_CTX_VALID;
|
||||
@@ -1068,9 +1067,8 @@ static int gen9_init_perctx_bb(struct intel_engine_cs *engine,
|
||||
{
|
||||
uint32_t index = wa_ctx_start(wa_ctx, *offset, CACHELINE_DWORDS);
|
||||
|
||||
- /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:skl,bxt */
|
||||
- if (IS_SKL_REVID(engine->i915, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1)) {
|
||||
+ /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:bxt */
|
||||
+ if (IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1)) {
|
||||
wa_ctx_emit(batch, index, MI_LOAD_REGISTER_IMM(1));
|
||||
wa_ctx_emit_reg(batch, index, GEN9_SLICE_COMMON_ECO_CHICKEN0);
|
||||
wa_ctx_emit(batch, index,
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index 7a74750..2faf64f 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -851,15 +851,13 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
|
||||
WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3,
|
||||
GEN9_DISABLE_OCL_OOB_SUPPRESS_LOGIC);
|
||||
|
||||
- /* WaDisableDgMirrorFixInHalfSliceChicken5:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
+ /* WaDisableDgMirrorFixInHalfSliceChicken5:bxt */
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
WA_CLR_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN5,
|
||||
GEN9_DG_MIRROR_FIX_ENABLE);
|
||||
|
||||
- /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
+ /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:bxt */
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
WA_SET_BIT_MASKED(GEN7_COMMON_SLICE_CHICKEN1,
|
||||
GEN9_RHWO_OPTIMIZATION_DISABLE);
|
||||
/*
|
||||
@@ -1023,15 +1021,8 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
GEN8_LQSC_RO_PERF_DIS);
|
||||
|
||||
/* WaEnableGapsTsvCreditFix:skl */
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_C0, REVID_FOREVER)) {
|
||||
- I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
- GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
- }
|
||||
-
|
||||
- /* WaDisablePowerCompilerClockGating:skl */
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_B0, SKL_REVID_B0))
|
||||
- WA_SET_BIT_MASKED(HIZ_CHICKEN,
|
||||
- BDW_HIZ_POWER_COMPILER_CLOCK_GATING_DISABLE);
|
||||
+ I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
+ GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
|
||||
/* WaBarrierPerformanceFixDisable:skl */
|
||||
if (IS_SKL_REVID(dev_priv, SKL_REVID_C0, SKL_REVID_D0))
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
-86
@@ -1,86 +0,0 @@
|
||||
From 9fc736e833d226853fd53843e35d6a1d542394ed Mon Sep 17 00:00:00 2001
|
||||
From: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Fri, 16 Sep 2016 16:59:46 +0300
|
||||
Subject: drm/i915/skl: drop workarounds for D0 revision
|
||||
|
||||
Pre-production hardware is not supported.
|
||||
|
||||
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/d28d21ceddeec226b5d1a20a7382bee9a72709a4.1474034059.git.jani.nikula@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index 47f7afa..ca649cc 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -994,9 +994,8 @@ static int gen9_init_indirectctx_bb(struct intel_engine_cs *engine,
|
||||
struct drm_i915_private *dev_priv = engine->i915;
|
||||
uint32_t index = wa_ctx_start(wa_ctx, *offset, CACHELINE_DWORDS);
|
||||
|
||||
- /* WaDisableCtxRestoreArbitration:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_D0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
+ /* WaDisableCtxRestoreArbitration:bxt */
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
wa_ctx_emit(batch, index, MI_ARB_ON_OFF | MI_ARB_DISABLE);
|
||||
|
||||
/* WaFlushCoherentL3CacheLinesAtContextSwitch:skl,bxt */
|
||||
@@ -1095,9 +1094,8 @@ static int gen9_init_perctx_bb(struct intel_engine_cs *engine,
|
||||
wa_ctx_emit(batch, index, MI_NOOP);
|
||||
}
|
||||
|
||||
- /* WaDisableCtxRestoreArbitration:skl,bxt */
|
||||
- if (IS_SKL_REVID(engine->i915, 0, SKL_REVID_D0) ||
|
||||
- IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1))
|
||||
+ /* WaDisableCtxRestoreArbitration:bxt */
|
||||
+ if (IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1))
|
||||
wa_ctx_emit(batch, index, MI_ARB_ON_OFF | MI_ARB_ENABLE);
|
||||
|
||||
wa_ctx_emit(batch, index, MI_BATCH_BUFFER_END);
|
||||
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
|
||||
index 2df06b7..a860c40 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_pm.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_pm.c
|
||||
@@ -5335,8 +5335,7 @@ static void gen9_enable_rc6(struct drm_i915_private *dev_priv)
|
||||
rc6_mask = GEN6_RC_CTL_RC6_ENABLE;
|
||||
DRM_INFO("RC6 %s\n", onoff(rc6_mask & GEN6_RC_CTL_RC6_ENABLE));
|
||||
/* WaRsUseTimeoutMode */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_D0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
I915_WRITE(GEN6_RC6_THRESHOLD, 625); /* 800us */
|
||||
I915_WRITE(GEN6_RC_CONTROL, GEN6_RC_CTL_HW_ENABLE |
|
||||
GEN7_RC_CTL_TO_MODE |
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index 474ce84..6880082 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -1000,10 +1000,8 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
* until D0 which is the default case so this is equivalent to
|
||||
* !WaDisablePerCtxtPreemptionGranularityControl:skl
|
||||
*/
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_E0, REVID_FOREVER)) {
|
||||
- I915_WRITE(GEN7_FF_SLICE_CS_CHICKEN1,
|
||||
- _MASKED_BIT_ENABLE(GEN9_FFSC_PERCTX_PREEMPT_CTRL));
|
||||
- }
|
||||
+ I915_WRITE(GEN7_FF_SLICE_CS_CHICKEN1,
|
||||
+ _MASKED_BIT_ENABLE(GEN9_FFSC_PERCTX_PREEMPT_CTRL));
|
||||
|
||||
if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0)) {
|
||||
/* WaDisableChickenBitTSGBarrierAckForFFSliceCS:skl */
|
||||
@@ -1023,12 +1021,6 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
|
||||
- /* WaBarrierPerformanceFixDisable:skl */
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_C0, SKL_REVID_D0))
|
||||
- WA_SET_BIT_MASKED(HDC_CHICKEN0,
|
||||
- HDC_FENCE_DEST_SLM_DISABLE |
|
||||
- HDC_BARRIER_PERFORMANCE_DISABLE);
|
||||
-
|
||||
/* WaDisableSbeCacheDispatchPortSharing:skl */
|
||||
if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_F0))
|
||||
WA_SET_BIT_MASKED(
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
-59
@@ -1,59 +0,0 @@
|
||||
From 3be192e92ddcad15f7bf6b4b9e3f195eb8c1fe76 Mon Sep 17 00:00:00 2001
|
||||
From: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Fri, 16 Sep 2016 16:59:47 +0300
|
||||
Subject: drm/i915/skl: drop workarounds for E0 revision
|
||||
|
||||
Pre-production hardware is not supported.
|
||||
|
||||
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/0633a02177195703502ef2396aab03efc0314334.1474034059.git.jani.nikula@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index ca649cc..2d8eb2e 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -845,13 +845,12 @@ static inline int gen8_emit_flush_coherentl3_wa(struct intel_engine_cs *engine,
|
||||
uint32_t l3sqc4_flush = (0x40400000 | GEN8_LQSC_FLUSH_COHERENT_LINES);
|
||||
|
||||
/*
|
||||
- * WaDisableLSQCROPERFforOCL:skl,kbl
|
||||
+ * WaDisableLSQCROPERFforOCL:kbl
|
||||
* This WA is implemented in skl_init_clock_gating() but since
|
||||
* this batch updates GEN8_L3SQCREG4 with default value we need to
|
||||
* set this bit here to retain the WA during flush.
|
||||
*/
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0) ||
|
||||
- IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
+ if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
l3sqc4_flush |= GEN8_LQSC_RO_PERF_DIS;
|
||||
|
||||
wa_ctx_emit(batch, index, (MI_STORE_REGISTER_MEM_GEN8 |
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index 6880082..68dc27f 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -1003,20 +1003,6 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
I915_WRITE(GEN7_FF_SLICE_CS_CHICKEN1,
|
||||
_MASKED_BIT_ENABLE(GEN9_FFSC_PERCTX_PREEMPT_CTRL));
|
||||
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0)) {
|
||||
- /* WaDisableChickenBitTSGBarrierAckForFFSliceCS:skl */
|
||||
- I915_WRITE(FF_SLICE_CS_CHICKEN2,
|
||||
- _MASKED_BIT_ENABLE(GEN9_TSG_BARRIER_ACK_DISABLE));
|
||||
- }
|
||||
-
|
||||
- /* GEN8_L3SQCREG4 has a dependency with WA batch so any new changes
|
||||
- * involving this register should also be added to WA batch as required.
|
||||
- */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0))
|
||||
- /* WaDisableLSQCROPERFforOCL:skl */
|
||||
- I915_WRITE(GEN8_L3SQCREG4, I915_READ(GEN8_L3SQCREG4) |
|
||||
- GEN8_LQSC_RO_PERF_DIS);
|
||||
-
|
||||
/* WaEnableGapsTsvCreditFix:skl */
|
||||
I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
From 9af0a9aecdb945cd5513941ffdcbcc031009b402 Mon Sep 17 00:00:00 2001
|
||||
From: Guenter Roeck <linux@roeck-us.net>
|
||||
Date: Mon, 4 Sep 2017 18:33:53 -0700
|
||||
Subject: hwmon: (k10temp) Add support for family 17h
|
||||
|
||||
Add support for temperature sensors on Family 17h (Ryzen) processors.
|
||||
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/k10temp.c | 16 ++++++++++++++++
|
||||
1 file changed, 16 insertions(+)
|
||||
|
||||
diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
|
||||
index fc8076c..c4dac53 100644
|
||||
--- a/drivers/hwmon/k10temp.c
|
||||
+++ b/drivers/hwmon/k10temp.c
|
||||
@@ -36,6 +36,10 @@ MODULE_PARM_DESC(force, "force loading on processors with erratum 319");
|
||||
/* Provide lock for writing to NB_SMU_IND_ADDR */
|
||||
static DEFINE_MUTEX(nb_smu_ind_mutex);
|
||||
|
||||
+#ifndef PCI_DEVICE_ID_AMD_17H_DF_F3
|
||||
+#define PCI_DEVICE_ID_AMD_17H_DF_F3 0x1463
|
||||
+#endif
|
||||
+
|
||||
/* CPUID function 0x80000001, ebx */
|
||||
#define CPUID_PKGTYPE_MASK 0xf0000000
|
||||
#define CPUID_PKGTYPE_F 0x00000000
|
||||
@@ -61,6 +65,9 @@ static DEFINE_MUTEX(nb_smu_ind_mutex);
|
||||
*/
|
||||
#define F15H_M60H_REPORTED_TEMP_CTRL_OFFSET 0xd8200ca4
|
||||
|
||||
+/* F17h M01h Access througn SMN */
|
||||
+#define F17H_M01H_REPORTED_TEMP_CTRL_OFFSET 0x00059800
|
||||
+
|
||||
struct k10temp_data {
|
||||
struct pci_dev *pdev;
|
||||
void (*read_tempreg)(struct pci_dev *pdev, u32 *regval);
|
||||
@@ -88,6 +95,12 @@ static void read_tempreg_nb_f15(struct pci_dev *pdev, u32 *regval)
|
||||
F15H_M60H_REPORTED_TEMP_CTRL_OFFSET, regval);
|
||||
}
|
||||
|
||||
+static void read_tempreg_nb_f17(struct pci_dev *pdev, u32 *regval)
|
||||
+{
|
||||
+ amd_nb_index_read(pdev, PCI_DEVFN(0, 0), 0x60,
|
||||
+ F17H_M01H_REPORTED_TEMP_CTRL_OFFSET, regval);
|
||||
+}
|
||||
+
|
||||
static ssize_t temp1_input_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
@@ -224,6 +237,8 @@ static int k10temp_probe(struct pci_dev *pdev,
|
||||
if (boot_cpu_data.x86 == 0x15 && (boot_cpu_data.x86_model == 0x60 ||
|
||||
boot_cpu_data.x86_model == 0x70))
|
||||
data->read_tempreg = read_tempreg_nb_f15;
|
||||
+ else if (boot_cpu_data.x86 == 0x17)
|
||||
+ data->read_tempreg = read_tempreg_nb_f17;
|
||||
else
|
||||
data->read_tempreg = read_tempreg_pci;
|
||||
|
||||
@@ -242,6 +257,7 @@ static const struct pci_device_id k10temp_id_table[] = {
|
||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M60H_NB_F3) },
|
||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) },
|
||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) },
|
||||
+ { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_DF_F3) },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, k10temp_id_table);
|
||||
--
|
||||
cgit v1.1
|
||||
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
From 1b50b776355fa6c6d7b3281a63c275d5c18d629d Mon Sep 17 00:00:00 2001
|
||||
From: Guenter Roeck <linux@roeck-us.net>
|
||||
Date: Mon, 4 Sep 2017 18:33:53 -0700
|
||||
Subject: hwmon: (k10temp) Add support for temperature offsets
|
||||
|
||||
Add support for handling temperature offset values for various AMD CPUs,
|
||||
similar to the code used in the coretemp driver for Intel CPUs. This is
|
||||
primarily for Ryzen CPUs (which has documented temperature offsets),
|
||||
but the code is kept generic to simplify adding additional CPUs.
|
||||
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/k10temp.c | 30 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 30 insertions(+)
|
||||
|
||||
diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
|
||||
index c4dac53..46a54ed 100644
|
||||
--- a/drivers/hwmon/k10temp.c
|
||||
+++ b/drivers/hwmon/k10temp.c
|
||||
@@ -71,6 +71,24 @@ static DEFINE_MUTEX(nb_smu_ind_mutex);
|
||||
struct k10temp_data {
|
||||
struct pci_dev *pdev;
|
||||
void (*read_tempreg)(struct pci_dev *pdev, u32 *regval);
|
||||
+ int temp_offset;
|
||||
+};
|
||||
+
|
||||
+struct tctl_offset {
|
||||
+ u8 model;
|
||||
+ char const *id;
|
||||
+ int offset;
|
||||
+};
|
||||
+
|
||||
+static const struct tctl_offset tctl_offset_table[] = {
|
||||
+ { 0x17, "AMD Ryzen 7 1600X", 20000 },
|
||||
+ { 0x17, "AMD Ryzen 7 1700X", 20000 },
|
||||
+ { 0x17, "AMD Ryzen 7 1800X", 20000 },
|
||||
+ { 0x17, "AMD Ryzen Threadripper 1950X", 27000 },
|
||||
+ { 0x17, "AMD Ryzen Threadripper 1920X", 27000 },
|
||||
+ { 0x17, "AMD Ryzen Threadripper 1950", 10000 },
|
||||
+ { 0x17, "AMD Ryzen Threadripper 1920", 10000 },
|
||||
+ { 0x17, "AMD Ryzen Threadripper 1910", 10000 },
|
||||
};
|
||||
|
||||
static void read_tempreg_pci(struct pci_dev *pdev, u32 *regval)
|
||||
@@ -110,6 +128,7 @@ static ssize_t temp1_input_show(struct device *dev,
|
||||
|
||||
data->read_tempreg(data->pdev, ®val);
|
||||
temp = (regval >> 21) * 125;
|
||||
+ temp -= data->temp_offset;
|
||||
|
||||
return sprintf(buf, "%u\n", temp);
|
||||
}
|
||||
@@ -217,6 +236,7 @@ static int k10temp_probe(struct pci_dev *pdev,
|
||||
struct device *dev = &pdev->dev;
|
||||
struct k10temp_data *data;
|
||||
struct device *hwmon_dev;
|
||||
+ int i;
|
||||
|
||||
if (unreliable) {
|
||||
if (!force) {
|
||||
@@ -242,6 +262,16 @@ static int k10temp_probe(struct pci_dev *pdev,
|
||||
else
|
||||
data->read_tempreg = read_tempreg_pci;
|
||||
|
||||
+ for (i = 0; i < ARRAY_SIZE(tctl_offset_table); i++) {
|
||||
+ const struct tctl_offset *entry = &tctl_offset_table[i];
|
||||
+
|
||||
+ if (boot_cpu_data.x86 == entry->model &&
|
||||
+ strstr(boot_cpu_data.x86_model_id, entry->id)) {
|
||||
+ data->temp_offset = entry->offset;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
hwmon_dev = devm_hwmon_device_register_with_groups(dev, "k10temp", data,
|
||||
k10temp_groups);
|
||||
return PTR_ERR_OR_ZERO(hwmon_dev);
|
||||
--
|
||||
cgit v1.1
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user