From 02ab2469161ecc11999eee9f7f190507265b2eca Mon Sep 17 00:00:00 2001 From: cvs2git Date: Sat, 11 Jul 2009 22:02:05 +0000 Subject: [PATCH] This commit was manufactured by cvs2git to create branch 'LINUX_2_6_27'. Cherrypick from master 2009-05-03 11:03:48 UTC Karol Krenski '- reading temperature sensor embedded inside Intel Atom': kernel-atom-coretemp.patch -> 1.1 Cherrypick from master 2009-07-11 22:02:05 UTC hawk '- fix for drivers/md/dm.c patch in 2.6.27.26': kernel-md_driver_fix.patch -> 1.1 --- kernel-atom-coretemp.patch | 89 ++++++++++++++++++++++++++++++++++++++ kernel-md_driver_fix.patch | 13 ++++++ 2 files changed, 102 insertions(+) create mode 100644 kernel-atom-coretemp.patch create mode 100644 kernel-md_driver_fix.patch diff --git a/kernel-atom-coretemp.patch b/kernel-atom-coretemp.patch new file mode 100644 index 00000000..b83b7600 --- /dev/null +++ b/kernel-atom-coretemp.patch @@ -0,0 +1,89 @@ +Index: linux-2.6.27-rc2/Documentation/hwmon/coretemp +=================================================================== +--- linux-2.6.27-rc2.orig/Documentation/hwmon/coretemp 2008-08-10 20:33:20.355228221 +0200 ++++ linux-2.6.27-rc2/Documentation/hwmon/coretemp 2008-08-09 20:09:42.000000000 +0200 +@@ -4,7 +4,7 @@ + Supported chips: + * All Intel Core family + Prefix: 'coretemp' +- CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17 ++ CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17, 0x1c + Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual + Volume 3A: System Programming Guide + http://softwarecommunity.intel.com/Wiki/Mobility/720.htm +@@ -14,10 +14,11 @@ + Description + ----------- + +-This driver permits reading temperature sensor embedded inside Intel Core CPU. +-Temperature is measured in degrees Celsius and measurement resolution is +-1 degree C. Valid temperatures are from 0 to TjMax degrees C, because +-the actual value of temperature register is in fact a delta from TjMax. ++This driver permits reading temperature sensor embedded inside Intel ++Core and Intel Atom CPUs. Temperature is measured in degrees Celsius ++and measurement resolution is 1 degree C. Valid temperatures are from 0 ++to TjMax degrees C, because the actual value of temperature register is ++in fact a delta from TjMax. + + Temperature known as TjMax is the maximum junction temperature of processor. + Intel defines this temperature as 85C or 100C. At this temperature, protection +@@ -35,4 +36,5 @@ + + The TjMax temperature is set to 85 degrees C if undocumented model specific + register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as +-(sometimes) documented in processor datasheet. ++(sometimes) documented in processor datasheet. The Intel Atom has TjMax 95C ++as per the specification. +Index: linux-2.6.27-rc2/drivers/hwmon/coretemp.c +=================================================================== +--- linux-2.6.27/drivers/hwmon/coretemp.c.orig 2008-10-10 00:13:53.000000000 +0200 ++++ linux-2.6.27/drivers/hwmon/coretemp.c 2009-03-23 10:05:12.000000000 +0100 +@@ -1,7 +1,7 @@ + /* + * coretemp.c - Linux kernel module for hardware monitoring + * +- * Copyright (C) 2007 Rudolf Marek ++ * Copyright (C) 2007, 2008 Rudolf Marek + * + * Inspired from many hwmon drivers + * +@@ -244,8 +244,14 @@ + } + } + +- data->tjmax = adjust_tjmax(c, data->id, &pdev->dev); +- platform_set_drvdata(pdev, data); ++ /* Intel Atom has only fixed TjMax at 95C */ ++ ++ if (c->x86_model == 0x1c) { ++ data->tjmax = 95000; ++ } else { ++ /* Adjust the TjMax for the rest of Core2 family */ ++ data->tjmax = adjust_tjmax(c, data->id, &pdev->dev); ++ } + + /* read the still undocumented IA32_TEMPERATURE_TARGET it exists + on older CPUs but not in this register */ +@@ -265,6 +271,8 @@ + } + } + ++ platform_set_drvdata(pdev, data); ++ + if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group))) + goto exit_dev; + +@@ -413,11 +421,11 @@ + for_each_online_cpu(i) { + struct cpuinfo_x86 *c = &cpu_data(i); + +- /* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A */ ++ /* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1a, 0x1c */ + if ((c->cpuid_level < 0) || (c->x86 != 0x6) || + !((c->x86_model == 0xe) || (c->x86_model == 0xf) || + (c->x86_model == 0x16) || (c->x86_model == 0x17) || +- (c->x86_model == 0x1A))) { ++ (c->x86_model == 0x1a) || (c->x86_model == 0x1c))) { + + /* supported CPU not found, but report the unknown + family 6 CPU */ diff --git a/kernel-md_driver_fix.patch b/kernel-md_driver_fix.patch new file mode 100644 index 00000000..f453769a --- /dev/null +++ b/kernel-md_driver_fix.patch @@ -0,0 +1,13 @@ +--- linux-2.6.27/drivers/md/dm.c.orig 2009-07-11 23:27:16.000000000 +0200 ++++ linux-2.6.27/drivers/md/dm.c 2009-07-11 23:31:44.581632901 +0200 +@@ -265,10 +265,6 @@ + goto out; + } + +- if (test_bit(DMF_FREEING, &md->flags) || +- test_bit(DMF_DELETING, &md->flags)) +- return NULL; +- + dm_get(md); + atomic_inc(&md->open_count); + -- 2.44.0