diff options
-rw-r--r-- | system/easy-kernel/APKBUILD | 38 | ||||
-rw-r--r-- | system/easy-kernel/asound-syntax-fix.patch | 11 | ||||
-rw-r--r-- | system/easy-kernel/config-aarch64 | 1 | ||||
-rw-r--r-- | system/easy-kernel/therm_windtunnel.patch | 136 | ||||
-rw-r--r-- | system/easy-kernel/windfarm.patch | 182 | ||||
-rw-r--r-- | system/easy-kernel/windfarm_pm112.patch | 99 |
6 files changed, 16 insertions, 451 deletions
diff --git a/system/easy-kernel/APKBUILD b/system/easy-kernel/APKBUILD index 58481d4c1..3160f058f 100644 --- a/system/easy-kernel/APKBUILD +++ b/system/easy-kernel/APKBUILD @@ -2,10 +2,10 @@ # Maintainer: Adelie Platform Group <adelie-devel@lists.adelielinux.org> # KEEP THIS IN SYNC with the other easy-kernel packages. _kflavour="" -_patchver=0 +_patchver=1 _pkgname=easy-kernel$_kflavour -pkgver=5.4.5 -pkgrel=5 +pkgver=5.4.66 +pkgrel=0 pkgname=$_pkgname-$pkgver-mc$_patchver pkgdesc="The Linux kernel, packaged for your convenience" url="https://kernel.org/" @@ -23,19 +23,15 @@ _pkgmajver=${pkgver%%.*} _pkgminver=${pkgver%.*} source="https://cdn.kernel.org/pub/linux/kernel/v${_pkgmajver}.x/linux-${_pkgminver}.tar.xz https://distfiles.adelielinux.org/source/linux-${_pkgminver}-mc$_patchver-patches.tar.xz - config-ppc64 - config-ppc - config-x86_64 - config-pmmx config-aarch64 - config-sparc64 config-m68k - asound-syntax-fix.patch + config-pmmx + config-ppc + config-ppc64 + config-sparc64 + config-x86_64 kernel.h uapi-iphdr.patch - therm_windtunnel.patch - windfarm.patch - windfarm_pm112.patch " builddir="$srcdir/linux-${_pkgminver}" @@ -136,17 +132,13 @@ src() { } sha512sums="9f60f77e8ab972b9438ac648bed17551c8491d6585a5e85f694b2eaa4c623fbc61eb18419b2656b6795eac5deec0edaa04547fc6723fbda52256bd7f3486898f linux-5.4.tar.xz -37c85fcec3bd54d586523f74cfb56db6158152cfbb407469f0da12b24e5de01cbe273ad4e59d41df75011c163922dadf2fe5e919cb6b16f74872e80c28bba1b1 linux-5.4-mc0-patches.tar.xz -dcf8bc3638b3234df3d66f5b804938113e859ffd1df4c7b689f476ea5d9c43d5df9c58dbb8b4def61e8f720554d9d11db6d6065ed5ded7482d5bb088d838f23e config-ppc64 -20834051bba37b1035dfed97431f36bb8ca973077a33d8186b0968d0d90c74573ad63a39b879437bc8231acc3a8a3b405c2b845b910c03ca4a5fbc65243addb6 config-ppc -a71f8446cc483c9e571b8793d6de92a15f9752cc85a0199fa0a62baa6da3ddb90e1e8354132789496074e4bb337706e56bf52e4cb331b33eb990c3a68eceba87 config-x86_64 +e6a7a5933dbe638be42a1308fd64895e53fe38be1238016a560985127106356570e6ea6ba94e6fbfb5924e24728232487c91ff1affcc79af1d724b8c813f5036 linux-5.4-mc1-patches.tar.xz +d0493196ecbb92d3cb76411a89d7a7bdb445eb7dfcbb5a77a7d4abc11bcbf65e248b0eaef2cdf482e93c4aaa4e381a8e9e37979cc3ab7cb23228e5fd8442275a config-aarch64 +581da20b2e0db48fcb29fe97ce6cf5d2e6a7092cbe2fd1b48cbdaddc1bc15d24e2470e56394624ff61b94b6ccf25035d07a18d9cbc4c16ac7f2865913a13c0d8 config-m68k a096a2dd1f2aa1068800fbddbc1a8b909253f5f2174527691731932a0d57c8262e8ed631a054099dedd1ced0709562f09a81040bbd0f72d1a584151456905ccf config-pmmx -e5f8f07c588ebbaa53166711b9940aa6d14a72e017df50300f3817c34a1abc2931f191431246d313ba85bc691c97f5094e01460ed98f4dbcd6e4780eefec10bc config-aarch64 +20834051bba37b1035dfed97431f36bb8ca973077a33d8186b0968d0d90c74573ad63a39b879437bc8231acc3a8a3b405c2b845b910c03ca4a5fbc65243addb6 config-ppc +dcf8bc3638b3234df3d66f5b804938113e859ffd1df4c7b689f476ea5d9c43d5df9c58dbb8b4def61e8f720554d9d11db6d6065ed5ded7482d5bb088d838f23e config-ppc64 4527b7951620953e83e824c41e2dbc5c49e92f13709500fd849813dc157897da33d177b901ce1304b317a51a7c19a561a891a02e463f98236ff9e6957131d65a config-sparc64 -581da20b2e0db48fcb29fe97ce6cf5d2e6a7092cbe2fd1b48cbdaddc1bc15d24e2470e56394624ff61b94b6ccf25035d07a18d9cbc4c16ac7f2865913a13c0d8 config-m68k -4b2cd7dd0010aaec617c756e7587be7fad6ff0ab3dbc1ed038e3dc72c9308fc9e347c6e5296c30711d914e286aa254600586e2ad954a5da226e6e4c1522b75b5 asound-syntax-fix.patch +a71f8446cc483c9e571b8793d6de92a15f9752cc85a0199fa0a62baa6da3ddb90e1e8354132789496074e4bb337706e56bf52e4cb331b33eb990c3a68eceba87 config-x86_64 61dcd633d72876566b7738dd08856b26850c935b4a81ab2364711335fe01c397083160f530b3382bbc239c6a8135be6a032e93039083ec2cefdae2902429a2e0 kernel.h -6f309a18c65c991240265afd200cc79a706f5d9e5d072838a9a641ab3676a5e4c32033f9767fc723ff4c45ee462169a0f77bd7dfe63b547d521dadd073f827a7 uapi-iphdr.patch -33d1565228bfeed362f9ebf3a4a260469902d96002e7805516f705fafd7a488dfbe7683d911f6cb3e5293d02af026fb8fe593c058b6361457d7333323b3eabe7 therm_windtunnel.patch -b83ed1db626211b38c2308902306ccb4f2e215f1d82356a0fe3798e227239586817ef341b5298e227cbf436ef3c19af80eb449cbd98c373f1de5dd461a1fdb4b windfarm.patch -e5667717e988d28b8450ffd06d6402212c26da992c2e8aa041f37e21cc3c1fbf54712a8216ebd3ef8ae59ac48c8ecdde5596a8c25028338f782b615c4a6c232c windfarm_pm112.patch" +6f309a18c65c991240265afd200cc79a706f5d9e5d072838a9a641ab3676a5e4c32033f9767fc723ff4c45ee462169a0f77bd7dfe63b547d521dadd073f827a7 uapi-iphdr.patch" diff --git a/system/easy-kernel/asound-syntax-fix.patch b/system/easy-kernel/asound-syntax-fix.patch deleted file mode 100644 index 682afb296..000000000 --- a/system/easy-kernel/asound-syntax-fix.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- linux-5.4/include/uapi/sound/asound.h.old 2019-12-28 10:44:33.650684482 +0000 -+++ linux-5.4/include/uapi/sound/asound.h 2019-12-28 10:45:28.854780162 +0000 -@@ -471,7 +471,7 @@ - - #ifndef __KERNEL__ - /* explicit padding avoids incompatibility between i386 and x86-64 */ --typedef struct { unsigned char pad[sizeof(time_t) - sizeof(int)] __time_pad; -+typedef struct { unsigned char pad[sizeof(time_t) - sizeof(int)] } __time_pad; - - struct snd_pcm_status { - snd_pcm_state_t state; /* stream state */ diff --git a/system/easy-kernel/config-aarch64 b/system/easy-kernel/config-aarch64 index 9241599cd..addafaddd 100644 --- a/system/easy-kernel/config-aarch64 +++ b/system/easy-kernel/config-aarch64 @@ -324,6 +324,7 @@ CONFIG_ARM64_ERRATUM_1418040=y CONFIG_ARM64_ERRATUM_1165522=y CONFIG_ARM64_ERRATUM_1286807=y CONFIG_ARM64_ERRATUM_1463225=y +CONFIG_ARM64_ERRATUM_1542419=y CONFIG_CAVIUM_ERRATUM_22375=y CONFIG_CAVIUM_ERRATUM_23144=y CONFIG_CAVIUM_ERRATUM_23154=y diff --git a/system/easy-kernel/therm_windtunnel.patch b/system/easy-kernel/therm_windtunnel.patch deleted file mode 100644 index 5cfb92d7f..000000000 --- a/system/easy-kernel/therm_windtunnel.patch +++ /dev/null @@ -1,136 +0,0 @@ -From 176cacef0119a441af14ccdfa125461635a1054d Mon Sep 17 00:00:00 2001 -From: Wolfram Sang <wsa@the-dreams.de> -Date: Tue, 25 Feb 2020 15:12:29 +0100 -Subject: [PATCH] macintosh: therm_windtunnel: fix regression when - instantiating devices - -commit 38b17afb0ebb9ecd41418d3c08bcf9198af4349d upstream. - -Removing attach_adapter from this driver caused a regression for at -least some machines. Those machines had the sensors described in their -DT, too, so they didn't need manual creation of the sensor devices. The -old code worked, though, because manual creation came first. Creation of -DT devices then failed later and caused error logs, but the sensors -worked nonetheless because of the manually created devices. - -When removing attach_adaper, manual creation now comes later and loses -the race. The sensor devices were already registered via DT, yet with -another binding, so the driver could not be bound to it. - -This fix refactors the code to remove the race and only manually creates -devices if there are no DT nodes present. Also, the DT binding is updated -to match both, the DT and manually created devices. Because we don't -know which device creation will be used at runtime, the code to start -the kthread is moved to do_probe() which will be called by both methods. - -Fixes: 3e7bed52719d ("macintosh: therm_windtunnel: drop using attach_adapter") -Link: https://bugzilla.kernel.org/show_bug.cgi?id=201723 -Reported-by: Erhard Furtner <erhard_f@mailbox.org> -Tested-by: Erhard Furtner <erhard_f@mailbox.org> -Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc) -Signed-off-by: Wolfram Sang <wsa@the-dreams.de> -Cc: stable@kernel.org # v4.19+ -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> ---- - drivers/macintosh/therm_windtunnel.c | 52 +++++++++++++++++----------- - 1 file changed, 31 insertions(+), 21 deletions(-) - -diff --git a/drivers/macintosh/therm_windtunnel.c b/drivers/macintosh/therm_windtunnel.c -index 8c744578122a..a0d87ed9da69 100644 ---- a/drivers/macintosh/therm_windtunnel.c -+++ b/drivers/macintosh/therm_windtunnel.c -@@ -300,9 +300,11 @@ static int control_loop(void *dummy) - /* i2c probing and setup */ - /************************************************************************/ - --static int --do_attach( struct i2c_adapter *adapter ) -+static void do_attach(struct i2c_adapter *adapter) - { -+ struct i2c_board_info info = { }; -+ struct device_node *np; -+ - /* scan 0x48-0x4f (DS1775) and 0x2c-2x2f (ADM1030) */ - static const unsigned short scan_ds1775[] = { - 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, -@@ -313,25 +315,24 @@ do_attach( struct i2c_adapter *adapter ) - I2C_CLIENT_END - }; - -- if( strncmp(adapter->name, "uni-n", 5) ) -- return 0; -- -- if( !x.running ) { -- struct i2c_board_info info; -+ if (x.running || strncmp(adapter->name, "uni-n", 5)) -+ return; - -- memset(&info, 0, sizeof(struct i2c_board_info)); -- strlcpy(info.type, "therm_ds1775", I2C_NAME_SIZE); -+ np = of_find_compatible_node(adapter->dev.of_node, NULL, "MAC,ds1775"); -+ if (np) { -+ of_node_put(np); -+ } else { -+ strlcpy(info.type, "MAC,ds1775", I2C_NAME_SIZE); - i2c_new_probed_device(adapter, &info, scan_ds1775, NULL); -+ } - -- strlcpy(info.type, "therm_adm1030", I2C_NAME_SIZE); -+ np = of_find_compatible_node(adapter->dev.of_node, NULL, "MAC,adm1030"); -+ if (np) { -+ of_node_put(np); -+ } else { -+ strlcpy(info.type, "MAC,adm1030", I2C_NAME_SIZE); - i2c_new_probed_device(adapter, &info, scan_adm1030, NULL); -- -- if( x.thermostat && x.fan ) { -- x.running = 1; -- x.poll_task = kthread_run(control_loop, NULL, "g4fand"); -- } - } -- return 0; - } - - static int -@@ -404,8 +405,8 @@ attach_thermostat( struct i2c_client *cl ) - enum chip { ds1775, adm1030 }; - - static const struct i2c_device_id therm_windtunnel_id[] = { -- { "therm_ds1775", ds1775 }, -- { "therm_adm1030", adm1030 }, -+ { "MAC,ds1775", ds1775 }, -+ { "MAC,adm1030", adm1030 }, - { } - }; - MODULE_DEVICE_TABLE(i2c, therm_windtunnel_id); -@@ -414,6 +415,7 @@ static int - do_probe(struct i2c_client *cl, const struct i2c_device_id *id) - { - struct i2c_adapter *adapter = cl->adapter; -+ int ret = 0; - - if( !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA - | I2C_FUNC_SMBUS_WRITE_BYTE) ) -@@ -421,11 +423,19 @@ do_probe(struct i2c_client *cl, const struct i2c_device_id *id) - - switch (id->driver_data) { - case adm1030: -- return attach_fan( cl ); -+ ret = attach_fan(cl); -+ break; - case ds1775: -- return attach_thermostat(cl); -+ ret = attach_thermostat(cl); -+ break; - } -- return 0; -+ -+ if (!x.running && x.thermostat && x.fan) { -+ x.running = 1; -+ x.poll_task = kthread_run(control_loop, NULL, "g4fand"); -+ } -+ -+ return ret; - } - - static struct i2c_driver g4fan_driver = { diff --git a/system/easy-kernel/windfarm.patch b/system/easy-kernel/windfarm.patch deleted file mode 100644 index bad7fe159..000000000 --- a/system/easy-kernel/windfarm.patch +++ /dev/null @@ -1,182 +0,0 @@ -From f19bbb24a1082b2790eb113fcc5cd55fca340f49 Mon Sep 17 00:00:00 2001 -From: Wolfram Sang <wsa@the-dreams.de> -Date: Tue, 3 Mar 2020 13:50:46 +0100 -Subject: [PATCH] macintosh: windfarm: fix MODINFO regression - -commit bcf3588d8ed3517e6ffaf083f034812aee9dc8e2 upstream. - -Commit af503716ac14 made sure OF devices get an OF style modalias with -I2C events. It assumed all in-tree users were converted, yet it missed -some Macintosh drivers. - -Add an OF module device table for all windfarm drivers to make them -automatically load again. - -Fixes: af503716ac14 ("i2c: core: report OF style module alias for devices registered via OF") -Link: https://bugzilla.kernel.org/show_bug.cgi?id=199471 -Reported-by: Erhard Furtner <erhard_f@mailbox.org> -Tested-by: Erhard Furtner <erhard_f@mailbox.org> -Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc) -Signed-off-by: Wolfram Sang <wsa@the-dreams.de> -Cc: stable@kernel.org # v4.17+ -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> ---- - drivers/macintosh/windfarm_ad7417_sensor.c | 7 +++++++ - drivers/macintosh/windfarm_fcu_controls.c | 7 +++++++ - drivers/macintosh/windfarm_lm75_sensor.c | 16 +++++++++++++++- - drivers/macintosh/windfarm_lm87_sensor.c | 7 +++++++ - drivers/macintosh/windfarm_max6690_sensor.c | 7 +++++++ - drivers/macintosh/windfarm_smu_sat.c | 7 +++++++ - 6 files changed, 50 insertions(+), 1 deletion(-) - -diff --git a/drivers/macintosh/windfarm_ad7417_sensor.c b/drivers/macintosh/windfarm_ad7417_sensor.c -index 125605987b44..e7dec328c7cf 100644 ---- a/drivers/macintosh/windfarm_ad7417_sensor.c -+++ b/drivers/macintosh/windfarm_ad7417_sensor.c -@@ -312,9 +312,16 @@ static const struct i2c_device_id wf_ad7417_id[] = { - }; - MODULE_DEVICE_TABLE(i2c, wf_ad7417_id); - -+static const struct of_device_id wf_ad7417_of_id[] = { -+ { .compatible = "ad7417", }, -+ { } -+}; -+MODULE_DEVICE_TABLE(of, wf_ad7417_of_id); -+ - static struct i2c_driver wf_ad7417_driver = { - .driver = { - .name = "wf_ad7417", -+ .of_match_table = wf_ad7417_of_id, - }, - .probe = wf_ad7417_probe, - .remove = wf_ad7417_remove, -diff --git a/drivers/macintosh/windfarm_fcu_controls.c b/drivers/macintosh/windfarm_fcu_controls.c -index 3c971297b6dc..89b48e8ac6ef 100644 ---- a/drivers/macintosh/windfarm_fcu_controls.c -+++ b/drivers/macintosh/windfarm_fcu_controls.c -@@ -582,9 +582,16 @@ static const struct i2c_device_id wf_fcu_id[] = { - }; - MODULE_DEVICE_TABLE(i2c, wf_fcu_id); - -+static const struct of_device_id wf_fcu_of_id[] = { -+ { .compatible = "fcu", }, -+ { } -+}; -+MODULE_DEVICE_TABLE(of, wf_fcu_of_id); -+ - static struct i2c_driver wf_fcu_driver = { - .driver = { - .name = "wf_fcu", -+ .of_match_table = wf_fcu_of_id, - }, - .probe = wf_fcu_probe, - .remove = wf_fcu_remove, -diff --git a/drivers/macintosh/windfarm_lm75_sensor.c b/drivers/macintosh/windfarm_lm75_sensor.c -index 282c28a17ea1..1e5fa09845e7 100644 ---- a/drivers/macintosh/windfarm_lm75_sensor.c -+++ b/drivers/macintosh/windfarm_lm75_sensor.c -@@ -14,6 +14,7 @@ - #include <linux/init.h> - #include <linux/wait.h> - #include <linux/i2c.h> -+#include <linux/of_device.h> - #include <asm/prom.h> - #include <asm/machdep.h> - #include <asm/io.h> -@@ -91,9 +92,14 @@ static int wf_lm75_probe(struct i2c_client *client, - const struct i2c_device_id *id) - { - struct wf_lm75_sensor *lm; -- int rc, ds1775 = id->driver_data; -+ int rc, ds1775; - const char *name, *loc; - -+ if (id) -+ ds1775 = id->driver_data; -+ else -+ ds1775 = !!of_device_get_match_data(&client->dev); -+ - DBG("wf_lm75: creating %s device at address 0x%02x\n", - ds1775 ? "ds1775" : "lm75", client->addr); - -@@ -164,9 +170,17 @@ static const struct i2c_device_id wf_lm75_id[] = { - }; - MODULE_DEVICE_TABLE(i2c, wf_lm75_id); - -+static const struct of_device_id wf_lm75_of_id[] = { -+ { .compatible = "lm75", .data = (void *)0}, -+ { .compatible = "ds1775", .data = (void *)1 }, -+ { } -+}; -+MODULE_DEVICE_TABLE(of, wf_lm75_of_id); -+ - static struct i2c_driver wf_lm75_driver = { - .driver = { - .name = "wf_lm75", -+ .of_match_table = wf_lm75_of_id, - }, - .probe = wf_lm75_probe, - .remove = wf_lm75_remove, -diff --git a/drivers/macintosh/windfarm_lm87_sensor.c b/drivers/macintosh/windfarm_lm87_sensor.c -index e44525b19071..1a1f8f3f0abc 100644 ---- a/drivers/macintosh/windfarm_lm87_sensor.c -+++ b/drivers/macintosh/windfarm_lm87_sensor.c -@@ -166,9 +166,16 @@ static const struct i2c_device_id wf_lm87_id[] = { - }; - MODULE_DEVICE_TABLE(i2c, wf_lm87_id); - -+static const struct of_device_id wf_lm87_of_id[] = { -+ { .compatible = "lm87cimt", }, -+ { } -+}; -+MODULE_DEVICE_TABLE(of, wf_lm87_of_id); -+ - static struct i2c_driver wf_lm87_driver = { - .driver = { - .name = "wf_lm87", -+ .of_match_table = wf_lm87_of_id, - }, - .probe = wf_lm87_probe, - .remove = wf_lm87_remove, -diff --git a/drivers/macintosh/windfarm_max6690_sensor.c b/drivers/macintosh/windfarm_max6690_sensor.c -index e666cc020683..1e7b03d44ad9 100644 ---- a/drivers/macintosh/windfarm_max6690_sensor.c -+++ b/drivers/macintosh/windfarm_max6690_sensor.c -@@ -120,9 +120,16 @@ static const struct i2c_device_id wf_max6690_id[] = { - }; - MODULE_DEVICE_TABLE(i2c, wf_max6690_id); - -+static const struct of_device_id wf_max6690_of_id[] = { -+ { .compatible = "max6690", }, -+ { } -+}; -+MODULE_DEVICE_TABLE(of, wf_max6690_of_id); -+ - static struct i2c_driver wf_max6690_driver = { - .driver = { - .name = "wf_max6690", -+ .of_match_table = wf_max6690_of_id, - }, - .probe = wf_max6690_probe, - .remove = wf_max6690_remove, -diff --git a/drivers/macintosh/windfarm_smu_sat.c b/drivers/macintosh/windfarm_smu_sat.c -index c84ec49c3741..cb75dc035616 100644 ---- a/drivers/macintosh/windfarm_smu_sat.c -+++ b/drivers/macintosh/windfarm_smu_sat.c -@@ -341,9 +341,16 @@ static const struct i2c_device_id wf_sat_id[] = { - }; - MODULE_DEVICE_TABLE(i2c, wf_sat_id); - -+static const struct of_device_id wf_sat_of_id[] = { -+ { .compatible = "smu-sat", }, -+ { } -+}; -+MODULE_DEVICE_TABLE(of, wf_sat_of_id); -+ - static struct i2c_driver wf_sat_driver = { - .driver = { - .name = "wf_smu_sat", -+ .of_match_table = wf_sat_of_id, - }, - .probe = wf_sat_probe, - .remove = wf_sat_remove, diff --git a/system/easy-kernel/windfarm_pm112.patch b/system/easy-kernel/windfarm_pm112.patch deleted file mode 100644 index 2b8e8a3ec..000000000 --- a/system/easy-kernel/windfarm_pm112.patch +++ /dev/null @@ -1,99 +0,0 @@ -From c6077abc067fb6bf57a2b1acffd918b1b9211047 Mon Sep 17 00:00:00 2001 -From: Michael Ellerman <mpe@ellerman.id.au> -Date: Thu, 23 Apr 2020 16:00:38 +1000 -Subject: [PATCH] drivers/macintosh: Fix memleak in windfarm_pm112 driver - -commit 93900337b9ac2f4eca427eff6d187be2dc3b5551 upstream. - -create_cpu_loop() calls smu_sat_get_sdb_partition() which does -kmalloc() and returns the allocated buffer. In fact it's called twice, -and neither buffer is freed. - -This results in a memory leak as reported by Erhard: - unreferenced object 0xc00000047081f840 (size 32): - comm "kwindfarm", pid 203, jiffies 4294880630 (age 5552.877s) - hex dump (first 32 bytes): - c8 06 02 7f ff 02 ff 01 fb bf 00 41 00 20 00 00 ...........A. .. - 00 07 89 37 00 a0 00 00 00 00 00 00 00 00 00 00 ...7............ - backtrace: - [<0000000083f0a65c>] .smu_sat_get_sdb_partition+0xc4/0x2d0 [windfarm_smu_sat] - [<000000003010fcb7>] .pm112_wf_notify+0x104c/0x13bc [windfarm_pm112] - [<00000000b958b2dd>] .notifier_call_chain+0xa8/0x180 - [<0000000070490868>] .blocking_notifier_call_chain+0x64/0x90 - [<00000000131d8149>] .wf_thread_func+0x114/0x1a0 - [<000000000d54838d>] .kthread+0x13c/0x190 - [<00000000669b72bc>] .ret_from_kernel_thread+0x58/0x64 - unreferenced object 0xc0000004737089f0 (size 16): - comm "kwindfarm", pid 203, jiffies 4294880879 (age 5552.050s) - hex dump (first 16 bytes): - c4 04 01 7f 22 11 e0 e6 ff 55 7b 12 ec 11 00 00 ...."....U{..... - backtrace: - [<0000000083f0a65c>] .smu_sat_get_sdb_partition+0xc4/0x2d0 [windfarm_smu_sat] - [<00000000b94ef7e1>] .pm112_wf_notify+0x1294/0x13bc [windfarm_pm112] - [<00000000b958b2dd>] .notifier_call_chain+0xa8/0x180 - [<0000000070490868>] .blocking_notifier_call_chain+0x64/0x90 - [<00000000131d8149>] .wf_thread_func+0x114/0x1a0 - [<000000000d54838d>] .kthread+0x13c/0x190 - [<00000000669b72bc>] .ret_from_kernel_thread+0x58/0x64 - -Fix it by rearranging the logic so we deal with each buffer -separately, which then makes it easy to free the buffer once we're -done with it. - -Fixes: ac171c46667c ("[PATCH] powerpc: Thermal control for dual core G5s") -Cc: stable@vger.kernel.org # v2.6.16+ -Reported-by: Erhard F. <erhard_f@mailbox.org> -Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> -Tested-by: Erhard F. <erhard_f@mailbox.org> -Link: https://lore.kernel.org/r/20200423060038.3308530-1-mpe@ellerman.id.au -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> ---- - drivers/macintosh/windfarm_pm112.c | 21 +++++++++++++-------- - 1 file changed, 13 insertions(+), 8 deletions(-) - -diff --git a/drivers/macintosh/windfarm_pm112.c b/drivers/macintosh/windfarm_pm112.c -index 4150301a89a5..e8377ce0a95a 100644 ---- a/drivers/macintosh/windfarm_pm112.c -+++ b/drivers/macintosh/windfarm_pm112.c -@@ -132,14 +132,6 @@ static int create_cpu_loop(int cpu) - s32 tmax; - int fmin; - -- /* Get PID params from the appropriate SAT */ -- hdr = smu_sat_get_sdb_partition(chip, 0xC8 + core, NULL); -- if (hdr == NULL) { -- printk(KERN_WARNING"windfarm: can't get CPU PID fan config\n"); -- return -EINVAL; -- } -- piddata = (struct smu_sdbp_cpupiddata *)&hdr[1]; -- - /* Get FVT params to get Tmax; if not found, assume default */ - hdr = smu_sat_get_sdb_partition(chip, 0xC4 + core, NULL); - if (hdr) { -@@ -152,6 +144,16 @@ static int create_cpu_loop(int cpu) - if (tmax < cpu_all_tmax) - cpu_all_tmax = tmax; - -+ kfree(hdr); -+ -+ /* Get PID params from the appropriate SAT */ -+ hdr = smu_sat_get_sdb_partition(chip, 0xC8 + core, NULL); -+ if (hdr == NULL) { -+ printk(KERN_WARNING"windfarm: can't get CPU PID fan config\n"); -+ return -EINVAL; -+ } -+ piddata = (struct smu_sdbp_cpupiddata *)&hdr[1]; -+ - /* - * Darwin has a minimum fan speed of 1000 rpm for the 4-way and - * 515 for the 2-way. That appears to be overkill, so for now, -@@ -174,6 +176,9 @@ static int create_cpu_loop(int cpu) - pid.min = fmin; - - wf_cpu_pid_init(&cpu_pid[cpu], &pid); -+ -+ kfree(hdr); -+ - return 0; - } - |