rpms/kernel/devel patch-2.6.28-rc4.bz2.sign, NONE, 1.1 .cvsignore, 1.952, 1.953 git-cpufreq.patch, 1.3, 1.4 kernel.spec, 1.1124, 1.1125 linux-2.6-compile-fixes.patch, 1.178, 1.179 linux-2.6-firewire-git-pending.patch, 1.31, 1.32 linux-2.6-upstream-reverts.patch, 1.4, 1.5 sources, 1.914, 1.915 upstream, 1.826, 1.827 patch-2.6.27.4.bz2.sign, 1.1, NONE
Kyle McMartin
kyle at fedoraproject.org
Wed Nov 12 16:28:53 UTC 2008
Author: kyle
Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv27122
Modified Files:
.cvsignore git-cpufreq.patch kernel.spec
linux-2.6-compile-fixes.patch
linux-2.6-firewire-git-pending.patch
linux-2.6-upstream-reverts.patch sources upstream
Added Files:
patch-2.6.28-rc4.bz2.sign
Removed Files:
patch-2.6.27.4.bz2.sign
Log Message:
* Wed Nov 12 2008 Kyle McMartin <kyle at redhat.com>
- Linux 2.6.28-rc4
--- NEW FILE patch-2.6.28-rc4.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info
iD8DBQBJF4iFyGugalF9Dw4RAlBpAKCCfRgWkRx0tGEi+UPPkSwujljiRwCffv/a
7BXxjw5Vh1mjpgJOEckdb94=
=Bmlg
-----END PGP SIGNATURE-----
Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/.cvsignore,v
retrieving revision 1.952
retrieving revision 1.953
diff -u -r1.952 -r1.953
--- .cvsignore 26 Oct 2008 11:45:01 -0000 1.952
+++ .cvsignore 12 Nov 2008 16:28:22 -0000 1.953
@@ -5,3 +5,4 @@
kernel-2.6.27
linux-2.6.27.tar.bz2
patch-2.6.27.4.bz2
+patch-2.6.28-rc4.bz2
git-cpufreq.patch:
Index: git-cpufreq.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/git-cpufreq.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- git-cpufreq.patch 6 Oct 2008 19:55:32 -0000 1.3
+++ git-cpufreq.patch 12 Nov 2008 16:28:22 -0000 1.4
@@ -1,830 +0,0 @@
-diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
-index dd097b8..c24c4a4 100644
---- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
-+++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
-@@ -256,7 +256,8 @@ static u32 get_cur_val(const cpumask_t *mask)
- * Only IA32_APERF/IA32_MPERF ratio is architecturally defined and
- * no meaning should be associated with absolute values of these MSRs.
- */
--static unsigned int get_measured_perf(unsigned int cpu)
-+static unsigned int get_measured_perf(struct cpufreq_policy *policy,
-+ unsigned int cpu)
- {
- union {
- struct {
-@@ -326,7 +327,7 @@ static unsigned int get_measured_perf(unsigned int cpu)
-
- #endif
-
-- retval = per_cpu(drv_data, cpu)->max_freq * perf_percent / 100;
-+ retval = per_cpu(drv_data, policy->cpu)->max_freq * perf_percent / 100;
-
- put_cpu();
- set_cpus_allowed_ptr(current, &saved_mask);
-@@ -785,7 +786,11 @@ static int __init acpi_cpufreq_init(void)
- if (ret)
- return ret;
-
-- return cpufreq_register_driver(&acpi_cpufreq_driver);
-+ ret = cpufreq_register_driver(&acpi_cpufreq_driver);
-+ if (ret)
-+ free_percpu(acpi_perf_data);
-+
-+ return ret;
- }
-
- static void __exit acpi_cpufreq_exit(void)
-@@ -795,8 +800,6 @@ static void __exit acpi_cpufreq_exit(void)
- cpufreq_unregister_driver(&acpi_cpufreq_driver);
-
- free_percpu(acpi_perf_data);
--
-- return;
- }
-
- module_param(acpi_pstate_strict, uint, 0644);
-diff --git a/arch/x86/kernel/cpu/cpufreq/elanfreq.c b/arch/x86/kernel/cpu/cpufreq/elanfreq.c
-index e4a4bf8..fe613c9 100644
---- a/arch/x86/kernel/cpu/cpufreq/elanfreq.c
-+++ b/arch/x86/kernel/cpu/cpufreq/elanfreq.c
-@@ -25,8 +25,8 @@
- #include <linux/cpufreq.h>
-
- #include <asm/msr.h>
--#include <asm/timex.h>
--#include <asm/io.h>
-+#include <linux/timex.h>
-+#include <linux/io.h>
-
- #define REG_CSCIR 0x22 /* Chip Setup and Control Index Register */
- #define REG_CSCDR 0x23 /* Chip Setup and Control Data Register */
-@@ -82,7 +82,7 @@ static unsigned int elanfreq_get_cpu_frequency(unsigned int cpu)
- u8 clockspeed_reg; /* Clock Speed Register */
-
- local_irq_disable();
-- outb_p(0x80,REG_CSCIR);
-+ outb_p(0x80, REG_CSCIR);
- clockspeed_reg = inb_p(REG_CSCDR);
- local_irq_enable();
-
-@@ -98,10 +98,10 @@ static unsigned int elanfreq_get_cpu_frequency(unsigned int cpu)
- }
-
- /* 33 MHz is not 32 MHz... */
-- if ((clockspeed_reg & 0xE0)==0xA0)
-+ if ((clockspeed_reg & 0xE0) == 0xA0)
- return 33000;
-
-- return ((1<<((clockspeed_reg & 0xE0) >> 5)) * 1000);
-+ return (1<<((clockspeed_reg & 0xE0) >> 5)) * 1000;
- }
-
-
-@@ -117,7 +117,7 @@ static unsigned int elanfreq_get_cpu_frequency(unsigned int cpu)
- * There is no return value.
- */
-
--static void elanfreq_set_cpu_state (unsigned int state)
-+static void elanfreq_set_cpu_state(unsigned int state)
- {
- struct cpufreq_freqs freqs;
-
-@@ -144,20 +144,20 @@ static void elanfreq_set_cpu_state (unsigned int state)
- */
-
- local_irq_disable();
-- outb_p(0x40,REG_CSCIR); /* Disable hyperspeed mode */
-- outb_p(0x00,REG_CSCDR);
-+ outb_p(0x40, REG_CSCIR); /* Disable hyperspeed mode */
-+ outb_p(0x00, REG_CSCDR);
- local_irq_enable(); /* wait till internal pipelines and */
- udelay(1000); /* buffers have cleaned up */
-
- local_irq_disable();
-
- /* now, set the CPU clock speed register (0x80) */
-- outb_p(0x80,REG_CSCIR);
-- outb_p(elan_multiplier[state].val80h,REG_CSCDR);
-+ outb_p(0x80, REG_CSCIR);
-+ outb_p(elan_multiplier[state].val80h, REG_CSCDR);
-
- /* now, the hyperspeed bit in PMU Force Mode Register (0x40) */
-- outb_p(0x40,REG_CSCIR);
-- outb_p(elan_multiplier[state].val40h,REG_CSCDR);
-+ outb_p(0x40, REG_CSCIR);
-+ outb_p(elan_multiplier[state].val40h, REG_CSCDR);
- udelay(10000);
- local_irq_enable();
-
-@@ -173,12 +173,12 @@ static void elanfreq_set_cpu_state (unsigned int state)
- * for the hardware supported by the driver.
- */
-
--static int elanfreq_verify (struct cpufreq_policy *policy)
-+static int elanfreq_verify(struct cpufreq_policy *policy)
- {
- return cpufreq_frequency_table_verify(policy, &elanfreq_table[0]);
- }
-
--static int elanfreq_target (struct cpufreq_policy *policy,
-+static int elanfreq_target(struct cpufreq_policy *policy,
- unsigned int target_freq,
- unsigned int relation)
- {
-@@ -205,7 +205,7 @@ static int elanfreq_cpu_init(struct cpufreq_policy *policy)
-
- /* capability check */
- if ((c->x86_vendor != X86_VENDOR_AMD) ||
-- (c->x86 != 4) || (c->x86_model!=10))
-+ (c->x86 != 4) || (c->x86_model != 10))
- return -ENODEV;
-
- /* max freq */
-@@ -213,7 +213,7 @@ static int elanfreq_cpu_init(struct cpufreq_policy *policy)
- max_freq = elanfreq_get_cpu_frequency(0);
-
- /* table init */
-- for (i=0; (elanfreq_table[i].frequency != CPUFREQ_TABLE_END); i++) {
-+ for (i = 0; (elanfreq_table[i].frequency != CPUFREQ_TABLE_END); i++) {
- if (elanfreq_table[i].frequency > max_freq)
- elanfreq_table[i].frequency = CPUFREQ_ENTRY_INVALID;
- }
-@@ -224,7 +224,7 @@ static int elanfreq_cpu_init(struct cpufreq_policy *policy)
-
- result = cpufreq_frequency_table_cpuinfo(policy, elanfreq_table);
- if (result)
-- return (result);
-+ return result;
-
- cpufreq_frequency_table_get_attr(elanfreq_table, policy->cpu);
- return 0;
-@@ -260,7 +260,7 @@ __setup("elanfreq=", elanfreq_setup);
- #endif
-
-
--static struct freq_attr* elanfreq_attr[] = {
-+static struct freq_attr *elanfreq_attr[] = {
- &cpufreq_freq_attr_scaling_available_freqs,
- NULL,
- };
-@@ -284,9 +284,9 @@ static int __init elanfreq_init(void)
-
- /* Test if we have the right hardware */
- if ((c->x86_vendor != X86_VENDOR_AMD) ||
-- (c->x86 != 4) || (c->x86_model!=10)) {
-+ (c->x86 != 4) || (c->x86_model != 10)) {
- printk(KERN_INFO "elanfreq: error: no Elan processor found!\n");
-- return -ENODEV;
-+ return -ENODEV;
- }
- return cpufreq_register_driver(&elanfreq_driver);
- }
-@@ -298,7 +298,7 @@ static void __exit elanfreq_exit(void)
- }
-
-
--module_param (max_freq, int, 0444);
-+module_param(max_freq, int, 0444);
-
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("Robert Schwebel <r.schwebel at pengutronix.de>, Sven Geggus <sven at geggus.net>");
-diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k6.c b/arch/x86/kernel/cpu/cpufreq/powernow-k6.c
-index eb9b62b..b5ced80 100644
---- a/arch/x86/kernel/cpu/cpufreq/powernow-k6.c
-+++ b/arch/x86/kernel/cpu/cpufreq/powernow-k6.c
-@@ -15,12 +15,11 @@
- #include <linux/slab.h>
-
- #include <asm/msr.h>
--#include <asm/timex.h>
--#include <asm/io.h>
-+#include <linux/timex.h>
-+#include <linux/io.h>
-
--
--#define POWERNOW_IOPORT 0xfff0 /* it doesn't matter where, as long
-- as it is unused */
-+#define POWERNOW_IOPORT 0xfff0 /* it doesn't matter where, as long
-+ as it is unused */
-
- static unsigned int busfreq; /* FSB, in 10 kHz */
- static unsigned int max_multiplier;
-@@ -53,7 +52,7 @@ static int powernow_k6_get_cpu_multiplier(void)
-
- msrval = POWERNOW_IOPORT + 0x1;
- wrmsr(MSR_K6_EPMR, msrval, 0); /* enable the PowerNow port */
-- invalue=inl(POWERNOW_IOPORT + 0x8);
-+ invalue = inl(POWERNOW_IOPORT + 0x8);
- msrval = POWERNOW_IOPORT + 0x0;
- wrmsr(MSR_K6_EPMR, msrval, 0); /* disable it again */
-
-@@ -67,9 +66,9 @@ static int powernow_k6_get_cpu_multiplier(void)
- *
- * Tries to change the PowerNow! multiplier
- */
--static void powernow_k6_set_state (unsigned int best_i)
-+static void powernow_k6_set_state(unsigned int best_i)
- {
-- unsigned long outvalue=0, invalue=0;
-+ unsigned long outvalue = 0, invalue = 0;
- unsigned long msrval;
- struct cpufreq_freqs freqs;
-
-@@ -90,10 +89,10 @@ static void powernow_k6_set_state (unsigned int best_i)
-
- msrval = POWERNOW_IOPORT + 0x1;
- wrmsr(MSR_K6_EPMR, msrval, 0); /* enable the PowerNow port */
-- invalue=inl(POWERNOW_IOPORT + 0x8);
-+ invalue = inl(POWERNOW_IOPORT + 0x8);
- invalue = invalue & 0xf;
- outvalue = outvalue | invalue;
-- outl(outvalue ,(POWERNOW_IOPORT + 0x8));
-+ outl(outvalue , (POWERNOW_IOPORT + 0x8));
- msrval = POWERNOW_IOPORT + 0x0;
- wrmsr(MSR_K6_EPMR, msrval, 0); /* disable it again */
-
-@@ -124,7 +123,7 @@ static int powernow_k6_verify(struct cpufreq_policy *policy)
- *
- * sets a new CPUFreq policy
- */
--static int powernow_k6_target (struct cpufreq_policy *policy,
-+static int powernow_k6_target(struct cpufreq_policy *policy,
- unsigned int target_freq,
- unsigned int relation)
- {
-@@ -152,7 +151,7 @@ static int powernow_k6_cpu_init(struct cpufreq_policy *policy)
- busfreq = cpu_khz / max_multiplier;
-
- /* table init */
-- for (i=0; (clock_ratio[i].frequency != CPUFREQ_TABLE_END); i++) {
-+ for (i = 0; (clock_ratio[i].frequency != CPUFREQ_TABLE_END); i++) {
- if (clock_ratio[i].index > max_multiplier)
- clock_ratio[i].frequency = CPUFREQ_ENTRY_INVALID;
- else
-@@ -165,7 +164,7 @@ static int powernow_k6_cpu_init(struct cpufreq_policy *policy)
-
- result = cpufreq_frequency_table_cpuinfo(policy, clock_ratio);
- if (result)
-- return (result);
-+ return result;
-
- cpufreq_frequency_table_get_attr(clock_ratio, policy->cpu);
-
-@@ -176,8 +175,8 @@ static int powernow_k6_cpu_init(struct cpufreq_policy *policy)
- static int powernow_k6_cpu_exit(struct cpufreq_policy *policy)
- {
- unsigned int i;
-- for (i=0; i<8; i++) {
-- if (i==max_multiplier)
-+ for (i = 0; i < 8; i++) {
-+ if (i == max_multiplier)
- powernow_k6_set_state(i);
- }
- cpufreq_frequency_table_put_attr(policy->cpu);
-@@ -189,7 +188,7 @@ static unsigned int powernow_k6_get(unsigned int cpu)
- return busfreq * powernow_k6_get_cpu_multiplier();
- }
-
--static struct freq_attr* powernow_k6_attr[] = {
-+static struct freq_attr *powernow_k6_attr[] = {
- &cpufreq_freq_attr_scaling_available_freqs,
- NULL,
- };
-@@ -227,7 +226,7 @@ static int __init powernow_k6_init(void)
- }
-
- if (cpufreq_register_driver(&powernow_k6_driver)) {
-- release_region (POWERNOW_IOPORT, 16);
-+ release_region(POWERNOW_IOPORT, 16);
- return -EINVAL;
- }
-
-@@ -243,13 +242,13 @@ static int __init powernow_k6_init(void)
- static void __exit powernow_k6_exit(void)
- {
- cpufreq_unregister_driver(&powernow_k6_driver);
-- release_region (POWERNOW_IOPORT, 16);
-+ release_region(POWERNOW_IOPORT, 16);
- }
-
-
--MODULE_AUTHOR ("Arjan van de Ven <arjanv at redhat.com>, Dave Jones <davej at codemonkey.org.uk>, Dominik Brodowski <linux at brodo.de>");
--MODULE_DESCRIPTION ("PowerNow! driver for AMD K6-2+ / K6-3+ processors.");
--MODULE_LICENSE ("GPL");
-+MODULE_AUTHOR("Arjan van de Ven <arjanv at redhat.com>, Dave Jones <davej at codemonkey.org.uk>, Dominik Brodowski <linux at brodo.de>");
-+MODULE_DESCRIPTION("PowerNow! driver for AMD K6-2+ / K6-3+ processors.");
-+MODULE_LICENSE("GPL");
-
- module_init(powernow_k6_init);
- module_exit(powernow_k6_exit);
-diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
-index 8a67f16..31d6f53 100644
---- a/drivers/cpufreq/cpufreq.c
-+++ b/drivers/cpufreq/cpufreq.c
-@@ -1467,25 +1467,27 @@ int cpufreq_driver_target(struct cpufreq_policy *policy,
- unsigned int target_freq,
- unsigned int relation)
- {
-- int ret;
-+ int ret = -EINVAL;
-
- policy = cpufreq_cpu_get(policy->cpu);
- if (!policy)
-- return -EINVAL;
-+ goto no_policy;
-
- if (unlikely(lock_policy_rwsem_write(policy->cpu)))
-- return -EINVAL;
-+ goto fail;
-
- ret = __cpufreq_driver_target(policy, target_freq, relation);
-
- unlock_policy_rwsem_write(policy->cpu);
-
-+fail:
- cpufreq_cpu_put(policy);
-+no_policy:
- return ret;
- }
- EXPORT_SYMBOL_GPL(cpufreq_driver_target);
-
--int __cpufreq_driver_getavg(struct cpufreq_policy *policy)
-+int __cpufreq_driver_getavg(struct cpufreq_policy *policy, unsigned int cpu)
- {
- int ret = 0;
-
-@@ -1493,8 +1495,8 @@ int __cpufreq_driver_getavg(struct cpufreq_policy *policy)
- if (!policy)
- return -EINVAL;
-
-- if (cpu_online(policy->cpu) && cpufreq_driver->getavg)
-- ret = cpufreq_driver->getavg(policy->cpu);
-+ if (cpu_online(cpu) && cpufreq_driver->getavg)
-+ ret = cpufreq_driver->getavg(policy, cpu);
-
- cpufreq_cpu_put(policy);
- return ret;
-@@ -1717,13 +1719,17 @@ int cpufreq_update_policy(unsigned int cpu)
- {
- struct cpufreq_policy *data = cpufreq_cpu_get(cpu);
- struct cpufreq_policy policy;
-- int ret = 0;
-+ int ret;
-
-- if (!data)
-- return -ENODEV;
-+ if (!data) {
-+ ret = -ENODEV;
-+ goto no_policy;
-+ }
-
-- if (unlikely(lock_policy_rwsem_write(cpu)))
-- return -EINVAL;
-+ if (unlikely(lock_policy_rwsem_write(cpu))) {
-+ ret = -EINVAL;
-+ goto fail;
-+ }
-
- dprintk("updating policy for CPU %u\n", cpu);
- memcpy(&policy, data, sizeof(struct cpufreq_policy));
-@@ -1750,7 +1756,9 @@ int cpufreq_update_policy(unsigned int cpu)
-
- unlock_policy_rwsem_write(cpu);
-
-+fail:
- cpufreq_cpu_put(data);
-+no_policy:
- return ret;
- }
- EXPORT_SYMBOL(cpufreq_update_policy);
-diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
-index ac0bbf2..e265783 100644
---- a/drivers/cpufreq/cpufreq_conservative.c
-+++ b/drivers/cpufreq/cpufreq_conservative.c
-@@ -460,6 +460,7 @@ static void do_dbs_timer(struct work_struct *work)
-
- static inline void dbs_timer_init(void)
- {
-+ init_timer_deferrable(&dbs_work.timer);
- schedule_delayed_work(&dbs_work,
- usecs_to_jiffies(dbs_tuners_ins.sampling_rate));
- return;
-@@ -575,13 +576,15 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
- return 0;
- }
-
-+#ifndef CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
-+static
-+#endif
- struct cpufreq_governor cpufreq_gov_conservative = {
- .name = "conservative",
- .governor = cpufreq_governor_dbs,
- .max_transition_latency = TRANSITION_LATENCY_LIMIT,
- .owner = THIS_MODULE,
- };
--EXPORT_SYMBOL(cpufreq_gov_conservative);
-
- static int __init cpufreq_gov_dbs_init(void)
- {
-diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
-index 33855cb..2ab3c12 100644
---- a/drivers/cpufreq/cpufreq_ondemand.c
-+++ b/drivers/cpufreq/cpufreq_ondemand.c
-@@ -18,13 +18,19 @@
- #include <linux/jiffies.h>
- #include <linux/kernel_stat.h>
- #include <linux/mutex.h>
-+#include <linux/hrtimer.h>
-+#include <linux/tick.h>
-+#include <linux/ktime.h>
-
- /*
- * dbs is used in this file as a shortform for demandbased switching
- * It helps to keep variable names smaller, simpler
- */
-
-+#define DEF_FREQUENCY_DOWN_DIFFERENTIAL (10)
- #define DEF_FREQUENCY_UP_THRESHOLD (80)
-+#define MICRO_FREQUENCY_DOWN_DIFFERENTIAL (3)
-+#define MICRO_FREQUENCY_UP_THRESHOLD (95)
- #define MIN_FREQUENCY_UP_THRESHOLD (11)
- #define MAX_FREQUENCY_UP_THRESHOLD (100)
-
-@@ -57,6 +63,7 @@ enum {DBS_NORMAL_SAMPLE, DBS_SUB_SAMPLE};
- struct cpu_dbs_info_s {
- cputime64_t prev_cpu_idle;
- cputime64_t prev_cpu_wall;
-+ cputime64_t prev_cpu_nice;
- struct cpufreq_policy *cur_policy;
- struct delayed_work work;
- struct cpufreq_frequency_table *freq_table;
-@@ -86,21 +93,24 @@ static struct workqueue_struct *kondemand_wq;
- static struct dbs_tuners {
- unsigned int sampling_rate;
- unsigned int up_threshold;
-+ unsigned int down_differential;
- unsigned int ignore_nice;
- unsigned int powersave_bias;
- } dbs_tuners_ins = {
- .up_threshold = DEF_FREQUENCY_UP_THRESHOLD,
-+ .down_differential = DEF_FREQUENCY_DOWN_DIFFERENTIAL,
- .ignore_nice = 0,
- .powersave_bias = 0,
- };
-
--static inline cputime64_t get_cpu_idle_time(unsigned int cpu)
-+static inline cputime64_t get_cpu_idle_time_jiffy(unsigned int cpu,
-+ cputime64_t *wall)
- {
- cputime64_t idle_time;
-- cputime64_t cur_jiffies;
-+ cputime64_t cur_wall_time;
- cputime64_t busy_time;
-
-- cur_jiffies = jiffies64_to_cputime64(get_jiffies_64());
-+ cur_wall_time = jiffies64_to_cputime64(get_jiffies_64());
- busy_time = cputime64_add(kstat_cpu(cpu).cpustat.user,
- kstat_cpu(cpu).cpustat.system);
-
-@@ -113,7 +123,37 @@ static inline cputime64_t get_cpu_idle_time(unsigned int cpu)
- kstat_cpu(cpu).cpustat.nice);
- }
-
-- idle_time = cputime64_sub(cur_jiffies, busy_time);
-+ idle_time = cputime64_sub(cur_wall_time, busy_time);
-+ if (wall)
-+ *wall = cur_wall_time;
-+
-+ return idle_time;
-+}
-+
-+static inline cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall)
-+{
-+ u64 idle_time = get_cpu_idle_time_us(cpu, wall);
-+
-+ if (idle_time == -1ULL)
-+ return get_cpu_idle_time_jiffy(cpu, wall);
-+
-+ if (dbs_tuners_ins.ignore_nice) {
-+ cputime64_t cur_nice;
-+ unsigned long cur_nice_jiffies;
-+ struct cpu_dbs_info_s *dbs_info;
-+
-+ dbs_info = &per_cpu(cpu_dbs_info, cpu);
-+ cur_nice = cputime64_sub(kstat_cpu(cpu).cpustat.nice,
-+ dbs_info->prev_cpu_nice);
-+ /*
-+ * Assumption: nice time between sampling periods will be
-+ * less than 2^32 jiffies for 32 bit sys
-+ */
-+ cur_nice_jiffies = (unsigned long)
-+ cputime64_to_jiffies64(cur_nice);
-+ dbs_info->prev_cpu_nice = kstat_cpu(cpu).cpustat.nice;
-+ return idle_time + jiffies_to_usecs(cur_nice_jiffies);
-+ }
- return idle_time;
- }
-
-@@ -277,8 +317,8 @@ static ssize_t store_ignore_nice_load(struct cpufreq_policy *policy,
- for_each_online_cpu(j) {
- struct cpu_dbs_info_s *dbs_info;
- dbs_info = &per_cpu(cpu_dbs_info, j);
-- dbs_info->prev_cpu_idle = get_cpu_idle_time(j);
-- dbs_info->prev_cpu_wall = get_jiffies_64();
-+ dbs_info->prev_cpu_idle = get_cpu_idle_time(j,
-+ &dbs_info->prev_cpu_wall);
- }
- mutex_unlock(&dbs_mutex);
-
-@@ -334,9 +374,7 @@ static struct attribute_group dbs_attr_group = {
-
- static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)
- {
-- unsigned int idle_ticks, total_ticks;
-- unsigned int load = 0;
-- cputime64_t cur_jiffies;
-+ unsigned int max_load_freq;
-
- struct cpufreq_policy *policy;
- unsigned int j;
-@@ -346,13 +384,7 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)
-
- this_dbs_info->freq_lo = 0;
- policy = this_dbs_info->cur_policy;
-- cur_jiffies = jiffies64_to_cputime64(get_jiffies_64());
-- total_ticks = (unsigned int) cputime64_sub(cur_jiffies,
-- this_dbs_info->prev_cpu_wall);
-- this_dbs_info->prev_cpu_wall = get_jiffies_64();
-
-- if (!total_ticks)
-- return;
- /*
- * Every sampling_rate, we check, if current idle time is less
- * than 20% (default), then we try to increase frequency
-@@ -365,27 +397,44 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)
- * 5% (default) of current frequency
- */
-
-- /* Get Idle Time */
-- idle_ticks = UINT_MAX;
-+ /* Get Absolute Load - in terms of freq */
-+ max_load_freq = 0;
-+
- for_each_cpu_mask_nr(j, policy->cpus) {
-- cputime64_t total_idle_ticks;
-- unsigned int tmp_idle_ticks;
- struct cpu_dbs_info_s *j_dbs_info;
-+ cputime64_t cur_wall_time, cur_idle_time;
-+ unsigned int idle_time, wall_time;
-+ unsigned int load, load_freq;
-+ int freq_avg;
-
- j_dbs_info = &per_cpu(cpu_dbs_info, j);
-- total_idle_ticks = get_cpu_idle_time(j);
-- tmp_idle_ticks = (unsigned int) cputime64_sub(total_idle_ticks,
-+
-+ cur_idle_time = get_cpu_idle_time(j, &cur_wall_time);
-+
-+ wall_time = (unsigned int) cputime64_sub(cur_wall_time,
-+ j_dbs_info->prev_cpu_wall);
-+ j_dbs_info->prev_cpu_wall = cur_wall_time;
-+
-+ idle_time = (unsigned int) cputime64_sub(cur_idle_time,
- j_dbs_info->prev_cpu_idle);
-- j_dbs_info->prev_cpu_idle = total_idle_ticks;
-+ j_dbs_info->prev_cpu_idle = cur_idle_time;
-+
-+ if (unlikely(!wall_time || wall_time < idle_time))
-+ continue;
-+
-+ load = 100 * (wall_time - idle_time) / wall_time;
-+
-+ freq_avg = __cpufreq_driver_getavg(policy, j);
-+ if (freq_avg <= 0)
-+ freq_avg = policy->cur;
-
-- if (tmp_idle_ticks < idle_ticks)
-- idle_ticks = tmp_idle_ticks;
-+ load_freq = load * freq_avg;
-+ if (load_freq > max_load_freq)
-+ max_load_freq = load_freq;
- }
-- if (likely(total_ticks > idle_ticks))
-- load = (100 * (total_ticks - idle_ticks)) / total_ticks;
-
- /* Check for frequency increase */
-- if (load > dbs_tuners_ins.up_threshold) {
-+ if (max_load_freq > dbs_tuners_ins.up_threshold * policy->cur) {
- /* if we are already at full speed then break out early */
- if (!dbs_tuners_ins.powersave_bias) {
- if (policy->cur == policy->max)
-@@ -412,15 +461,13 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)
- * can support the current CPU usage without triggering the up
- * policy. To be safe, we focus 10 points under the threshold.
- */
-- if (load < (dbs_tuners_ins.up_threshold - 10)) {
-- unsigned int freq_next, freq_cur;
--
-- freq_cur = __cpufreq_driver_getavg(policy);
-- if (!freq_cur)
-- freq_cur = policy->cur;
--
-- freq_next = (freq_cur * load) /
-- (dbs_tuners_ins.up_threshold - 10);
-+ if (max_load_freq <
-+ (dbs_tuners_ins.up_threshold - dbs_tuners_ins.down_differential) *
-+ policy->cur) {
-+ unsigned int freq_next;
-+ freq_next = max_load_freq /
-+ (dbs_tuners_ins.up_threshold -
-+ dbs_tuners_ins.down_differential);
-
- if (!dbs_tuners_ins.powersave_bias) {
- __cpufreq_driver_target(policy, freq_next,
-@@ -526,8 +573,8 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
- j_dbs_info = &per_cpu(cpu_dbs_info, j);
- j_dbs_info->cur_policy = policy;
-
-- j_dbs_info->prev_cpu_idle = get_cpu_idle_time(j);
-- j_dbs_info->prev_cpu_wall = get_jiffies_64();
-+ j_dbs_info->prev_cpu_idle = get_cpu_idle_time(j,
-+ &j_dbs_info->prev_cpu_wall);
- }
- this_dbs_info->cpu = cpu;
- /*
-@@ -579,22 +626,42 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
- return 0;
- }
-
-+#ifndef CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND
-+static
-+#endif
- struct cpufreq_governor cpufreq_gov_ondemand = {
- .name = "ondemand",
- .governor = cpufreq_governor_dbs,
- .max_transition_latency = TRANSITION_LATENCY_LIMIT,
- .owner = THIS_MODULE,
- };
--EXPORT_SYMBOL(cpufreq_gov_ondemand);
-
- static int __init cpufreq_gov_dbs_init(void)
- {
-+ int err;
-+ cputime64_t wall;
-+ u64 idle_time;
-+ int cpu = get_cpu();
-+
-+ idle_time = get_cpu_idle_time_us(cpu, &wall);
-+ put_cpu();
-+ if (idle_time != -1ULL) {
-+ /* Idle micro accounting is supported. Use finer thresholds */
-+ dbs_tuners_ins.up_threshold = MICRO_FREQUENCY_UP_THRESHOLD;
-+ dbs_tuners_ins.down_differential =
-+ MICRO_FREQUENCY_DOWN_DIFFERENTIAL;
-+ }
-+
- kondemand_wq = create_workqueue("kondemand");
- if (!kondemand_wq) {
- printk(KERN_ERR "Creation of kondemand failed\n");
- return -EFAULT;
- }
-- return cpufreq_register_governor(&cpufreq_gov_ondemand);
-+ err = cpufreq_register_governor(&cpufreq_gov_ondemand);
-+ if (err)
-+ destroy_workqueue(kondemand_wq);
-+
-+ return err;
- }
-
- static void __exit cpufreq_gov_dbs_exit(void)
-diff --git a/drivers/cpufreq/cpufreq_performance.c b/drivers/cpufreq/cpufreq_performance.c
-index e8e1451..7e2e515 100644
---- a/drivers/cpufreq/cpufreq_performance.c
-+++ b/drivers/cpufreq/cpufreq_performance.c
-@@ -36,12 +36,14 @@ static int cpufreq_governor_performance(struct cpufreq_policy *policy,
- return 0;
- }
-
-+#ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE_MODULE
-+static
-+#endif
- struct cpufreq_governor cpufreq_gov_performance = {
- .name = "performance",
- .governor = cpufreq_governor_performance,
- .owner = THIS_MODULE,
- };
--EXPORT_SYMBOL(cpufreq_gov_performance);
-
-
- static int __init cpufreq_gov_performance_init(void)
-diff --git a/drivers/cpufreq/cpufreq_powersave.c b/drivers/cpufreq/cpufreq_powersave.c
-index 88d2f44..e6db5fa 100644
---- a/drivers/cpufreq/cpufreq_powersave.c
-+++ b/drivers/cpufreq/cpufreq_powersave.c
-@@ -35,12 +35,14 @@ static int cpufreq_governor_powersave(struct cpufreq_policy *policy,
- return 0;
- }
-
-+#ifndef CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE
-+static
-+#endif
- struct cpufreq_governor cpufreq_gov_powersave = {
- .name = "powersave",
- .governor = cpufreq_governor_powersave,
- .owner = THIS_MODULE,
- };
--EXPORT_SYMBOL(cpufreq_gov_powersave);
-
- static int __init cpufreq_gov_powersave_init(void)
- {
-diff --git a/drivers/cpufreq/cpufreq_userspace.c b/drivers/cpufreq/cpufreq_userspace.c
-index 32244aa..1442bba 100644
---- a/drivers/cpufreq/cpufreq_userspace.c
-+++ b/drivers/cpufreq/cpufreq_userspace.c
-@@ -187,6 +187,9 @@ static int cpufreq_governor_userspace(struct cpufreq_policy *policy,
- }
-
-
-+#ifndef CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE
-+static
-+#endif
- struct cpufreq_governor cpufreq_gov_userspace = {
- .name = "userspace",
- .governor = cpufreq_governor_userspace,
-@@ -194,7 +197,6 @@ struct cpufreq_governor cpufreq_gov_userspace = {
- .show_setspeed = show_speed,
- .owner = THIS_MODULE,
- };
--EXPORT_SYMBOL(cpufreq_gov_userspace);
-
- static int __init cpufreq_gov_userspace_init(void)
- {
-diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
-index 6fd5668..1ee608f 100644
---- a/include/linux/cpufreq.h
-+++ b/include/linux/cpufreq.h
-@@ -187,7 +187,8 @@ extern int __cpufreq_driver_target(struct cpufreq_policy *policy,
- unsigned int relation);
-
-
--extern int __cpufreq_driver_getavg(struct cpufreq_policy *policy);
-+extern int __cpufreq_driver_getavg(struct cpufreq_policy *policy,
-+ unsigned int cpu);
-
- int cpufreq_register_governor(struct cpufreq_governor *governor);
- void cpufreq_unregister_governor(struct cpufreq_governor *governor);
-@@ -226,7 +227,9 @@ struct cpufreq_driver {
- unsigned int (*get) (unsigned int cpu);
-
- /* optional */
-- unsigned int (*getavg) (unsigned int cpu);
-+ unsigned int (*getavg) (struct cpufreq_policy *policy,
-+ unsigned int cpu);
-+
- int (*exit) (struct cpufreq_policy *policy);
- int (*suspend) (struct cpufreq_policy *policy, pm_message_t pmsg);
- int (*resume) (struct cpufreq_policy *policy);
-diff --git a/include/linux/tick.h b/include/linux/tick.h
-index 8cf8cfe..98921a3 100644
---- a/include/linux/tick.h
-+++ b/include/linux/tick.h
-@@ -126,7 +126,7 @@ static inline ktime_t tick_nohz_get_sleep_length(void)
- return len;
- }
- static inline void tick_nohz_stop_idle(int cpu) { }
--static inline u64 get_cpu_idle_time_us(int cpu, u64 *unused) { return 0; }
-+static inline u64 get_cpu_idle_time_us(int cpu, u64 *unused) { return -1; }
- # endif /* !NO_HZ */
-
- #endif
-diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
-index cb02324..a4d2193 100644
---- a/kernel/time/tick-sched.c
-+++ b/kernel/time/tick-sched.c
-@@ -20,6 +20,7 @@
- #include <linux/profile.h>
- #include <linux/sched.h>
- #include <linux/tick.h>
-+#include <linux/module.h>
-
- #include <asm/irq_regs.h>
-
-@@ -190,9 +191,17 @@ u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time)
- {
- struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
-
-- *last_update_time = ktime_to_us(ts->idle_lastupdate);
-+ if (!tick_nohz_enabled)
-+ return -1;
-+
-+ if (ts->idle_active)
-+ *last_update_time = ktime_to_us(ts->idle_lastupdate);
-+ else
-+ *last_update_time = ktime_to_us(ktime_get());
-+
- return ktime_to_us(ts->idle_sleeptime);
- }
-+EXPORT_SYMBOL_GPL(get_cpu_idle_time_us);
-
- /**
- * tick_nohz_stop_sched_tick - stop the idle tick from the idle task
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1124
retrieving revision 1.1125
diff -u -r1.1124 -r1.1125
--- kernel.spec 9 Nov 2008 20:02:51 -0000 1.1124
+++ kernel.spec 12 Nov 2008 16:28:22 -0000 1.1125
@@ -3,7 +3,7 @@
# For a stable, released kernel, released_kernel should be 1. For rawhide
# and/or a kernel built from an rc or git snapshot, released_kernel should
# be 0.
-%define released_kernel 1
+%define released_kernel 0
# Versions of various parts
@@ -36,7 +36,7 @@
%if 0%{?released_kernel}
# Do we have a -stable update to apply?
-%define stable_update 4
+%define stable_update 0
# Is it a -stable RC?
%define stable_rc 0
# Set rpm version accordingly
@@ -55,7 +55,7 @@
# The next upstream release sublevel (base_sublevel+1)
%define upstream_sublevel %(expr %{base_sublevel} + 1)
# The rc snapshot level
-%define rcrev 0
+%define rcrev 4
# The git snapshot level
%define gitrev 0
# Set rpm version accordingly
@@ -1095,14 +1095,14 @@
ApplyPatch linux-2.6-upstream-reverts.patch -R
fi
-ApplyPatch git-cpufreq.patch
+#ApplyPatch git-cpufreq.patch
ApplyPatch linux-2.6-hotfixes.patch
# Roland's utrace ptrace replacement.
-ApplyPatch linux-2.6-utrace.patch
-ApplyPatch linux-2.6-x86-tracehook.patch
-ApplyPatch linux-2.6.27-x86-tracehook-syscall-arg-order.patch
+#ApplyPatch linux-2.6-utrace.patch
+#ApplyPatch linux-2.6-x86-tracehook.patch
+#ApplyPatch linux-2.6.27-x86-tracehook-syscall-arg-order.patch
ApplyPatch linux-2.6-x86-mtrr-kill-bogus-warning.patch
@@ -1110,13 +1110,13 @@
ApplyPatch linux-2.6-sysrq-c.patch
# scheduler
-ApplyPatch linux-2.6-sched-features-disable-hrtick.patch
-ApplyPatch linux-2.6-sched_clock-prevent-scd-clock-from-moving-backwards
+#ApplyPatch linux-2.6-sched-features-disable-hrtick.patch
+#ApplyPatch linux-2.6-sched_clock-prevent-scd-clock-from-moving-backwards
# Architecture patches
# x86(-64)
# don't oops in get_wchan()
-ApplyPatch linux-2.6-x86-avoid-dereferencing-beyond-stack-THREAD_SIZE.patch
+#ApplyPatch linux-2.6-x86-avoid-dereferencing-beyond-stack-THREAD_SIZE.patch
#
# PowerPC
@@ -1146,65 +1146,64 @@
#
# Exec shield
#
-ApplyPatch linux-2.6-execshield.patch
-ApplyPatch linux-2.6-xen-execshield-add-xen-specific-load_user_cs_desc.patch
-
-ApplyPatch linux-2.6-xen-execshield-only-define-load_user_cs_desc-on-32-bit.patch
+#ApplyPatch linux-2.6-execshield.patch
+#ApplyPatch linux-2.6-xen-execshield-add-xen-specific-load_user_cs_desc.patch
+#ApplyPatch linux-2.6-xen-execshield-only-define-load_user_cs_desc-on-32-bit.patch
#
# bugfixes to drivers and filesystems
#
# ext4/jbd changes up to 2.6.28-rc3-git6
-ApplyPatch linux-2.6.27-ext4-2.6.28-rc3-git6.patch
+#ApplyPatch linux-2.6.27-ext4-2.6.28-rc3-git6.patch
# Fixups for the upstream ext4 code to build cleanly in 2.6.27.
-ApplyPatch linux-2.6.27-ext4-2.6.28-backport-fixups.patch
+#ApplyPatch linux-2.6.27-ext4-2.6.28-backport-fixups.patch
# CVE-2008-3528, ext-fs dir corruption
-ApplyPatch linux-2.6.27-ext-dir-corruption-fix.patch
+#ApplyPatch linux-2.6.27-ext-dir-corruption-fix.patch
# xfs
# USB
-ApplyPatch linux-2.6-usb-ehci-hcd-respect-nousb.patch
+#ApplyPatch linux-2.6-usb-ehci-hcd-respect-nousb.patch
# fix I/O errors on jmicron usb-ata bridge
-ApplyPatch linux-2.6-usb-storage-unusual-devs-jmicron-ata-bridge.patch
+#ApplyPatch linux-2.6-usb-storage-unusual-devs-jmicron-ata-bridge.patch
# Add the ability to turn FIPS-compliant mode on or off at boot
-ApplyPatch linux-2.6-crypto-fips_enable.patch
+#ApplyPatch linux-2.6-crypto-fips_enable.patch
# ACPI
ApplyPatch linux-2.6-defaults-acpi-video.patch
ApplyPatch linux-2.6-acpi-video-dos.patch
-ApplyPatch linux-2.6-acpi-clear-wake-status.patch
-ApplyPatch linux-2.6-acpi-ignore-reset_reg_sup.patch
-ApplyPatch linux-2.6-acpi-handle-ec-init-failure.patch
+#ApplyPatch linux-2.6-acpi-clear-wake-status.patch
+#ApplyPatch linux-2.6-acpi-ignore-reset_reg_sup.patch
+#ApplyPatch linux-2.6-acpi-handle-ec-init-failure.patch
# Various low-impact patches to aid debugging.
ApplyPatch linux-2.6-debug-sizeof-structs.patch
ApplyPatch linux-2.6-debug-nmi-timeout.patch
-ApplyPatch linux-2.6-debug-taint-vm.patch
+#ApplyPatch linux-2.6-debug-taint-vm.patch
ApplyPatch linux-2.6-debug-spinlock-taint.patch
ApplyPatch linux-2.6-debug-vm-would-have-oomkilled.patch
-ApplyPatch linux-2.6-mm-pagefault-enable-ints.patch
+#ApplyPatch linux-2.6-mm-pagefault-enable-ints.patch
ApplyPatch linux-2.6-debug-always-inline-kzalloc.patch
#
# /dev/crash driver for the crashdump analysis tool
#
-ApplyPatch linux-2.6-crash-driver.patch
+#ApplyPatch linux-2.6-crash-driver.patch
#
# PCI
#
# disable message signaled interrupts
-ApplyPatch linux-2.6-defaults-pci_no_msi.patch
+#ApplyPatch linux-2.6-defaults-pci_no_msi.patch
# update the pciehp driver
-ApplyPatch linux-2.6-pciehp-update.patch
+#ApplyPatch linux-2.6-pciehp-update.patch
# default to enabling passively listening for hotplug events
-ApplyPatch linux-2.6-defaults-pciehp.patch
+#ApplyPatch linux-2.6-defaults-pciehp.patch
#
# SCSI Bits.
@@ -1222,15 +1221,15 @@
# Disable easy to trigger printk's.
ApplyPatch linux-2.6-net-silence-noisy-printks.patch
# Fix tcp option ordering.
-ApplyPatch linux-2.6-net-tcp-option-ordering.patch
+#ApplyPatch linux-2.6-net-tcp-option-ordering.patch
# Misc fixes
# The input layer spews crap no-one cares about.
ApplyPatch linux-2.6-input-kill-stupid-messages.patch
# Dell can't make keyboards
-ApplyPatch linux-2.6-input-dell-keyboard-keyup.patch
+#ApplyPatch linux-2.6-input-dell-keyboard-keyup.patch
# kill annoying applesmc debug messages
-ApplyPatch linux-2.6.27-hwmon-applesmc-2.6.28.patch
+#ApplyPatch linux-2.6.27-hwmon-applesmc-2.6.28.patch
# Allow to use 480600 baud on 16C950 UARTs
ApplyPatch linux-2.6-serial-460800.patch
@@ -1250,16 +1249,16 @@
# ia64 ata quirk
ApplyPatch linux-2.6-ata-quirk.patch
# fix it821x raid volumes
-ApplyPatch linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch
+#ApplyPatch linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch
# fix overlow with large disk
-ApplyPatch linux-2.6-libata-avoid-overflow-with-large-disks.patch
+#ApplyPatch linux-2.6-libata-avoid-overflow-with-large-disks.patch
# fix spot's iwlwifi, hopefully...
#ApplyPatch linux-2.6-iwlwifi-use-dma_alloc_coherent.patch
# make jarod's iwl4965 not panic near N APs, hopefully
-ApplyPatch linux-2.6-iwlagn-downgrade-BUG_ON-in-interrupt.patch
+#ApplyPatch linux-2.6-iwlagn-downgrade-BUG_ON-in-interrupt.patch
# iwl3945 fix for stable ad-hoc mode connections (#459401)
-ApplyPatch linux-2.6-iwl3945-ibss-tsf-fix.patch
+#ApplyPatch linux-2.6-iwl3945-ibss-tsf-fix.patch
# hostap hack to still work w/ quetionable skb->cb usage
ApplyPatch linux-2.6-hostap-skb-cb-hack.patch
@@ -1267,89 +1266,89 @@
ApplyPatch linux-2.6-at76.patch
# NFS Client mounts hang when exported directory do not exist
-ApplyPatch linux-2.6-nfs-client-mounts-hang.patch
+#ApplyPatch linux-2.6-nfs-client-mounts-hang.patch
# implement whitelist for ac97
-ApplyPatch linux-2.6-alsa-ac97-whitelist.patch
-ApplyPatch linux-2.6-alsa-ac97-whitelist-AD1981B.patch
+#ApplyPatch linux-2.6-alsa-ac97-whitelist.patch
+#ApplyPatch linux-2.6-alsa-ac97-whitelist-AD1981B.patch
# build id related enhancements
-ApplyPatch linux-2.6-default-mmf_dump_elf_headers.patch
+#ApplyPatch linux-2.6-default-mmf_dump_elf_headers.patch
# http://www.lirc.org/
-ApplyPatch linux-2.6.27-lirc.patch
+#ApplyPatch linux-2.6.27-lirc.patch
# http://hg.jannau.net/hdpvr/
-ApplyPatch linux-2.6-hdpvr.patch
+#ApplyPatch linux-2.6-hdpvr.patch
# Fix the return code CD accesses when the CDROM drive door is closed
# but the drive isn't yet ready.
ApplyPatch linux-2.6-cdrom-door-status.patch
# fix sysfs links for the cciss driver
-ApplyPatch linux-2.6-blk-cciss-fix-regression-sysfs-symlink-missing.patch
+#ApplyPatch linux-2.6-blk-cciss-fix-regression-sysfs-symlink-missing.patch
# fix RTC on systems with broken PnP
-ApplyPatch linux-2.6-rtc-cmos-look-for-pnp-rtc-first.patch
-ApplyPatch linux-2.6-x86-register-platform-rtc-if-pnp-doesnt-describe-it.patch
+#ApplyPatch linux-2.6-rtc-cmos-look-for-pnp-rtc-first.patch
+#ApplyPatch linux-2.6-x86-register-platform-rtc-if-pnp-doesnt-describe-it.patch
ApplyPatch linux-2.6-e1000-ich9.patch
-ApplyPatch linux-2.6-e1000e-add-support-for-the-82567LM-4-device.patch
-ApplyPatch linux-2.6-e1000e-add-support-for-82567LM-3-and-82567LF-3-ICH10D-parts.patch
-ApplyPatch linux-2.6-e1000e-add-support-for-new-82574L-part.patch
+#ApplyPatch linux-2.6-e1000e-add-support-for-the-82567LM-4-device.patch
+#ApplyPatch linux-2.6-e1000e-add-support-for-82567LM-3-and-82567LF-3-ICH10D-parts.patch
+#ApplyPatch linux-2.6-e1000e-add-support-for-new-82574L-part.patch
-ApplyPatch linux-2.6-netdev-r8169-2.6.28.patch
+#ApplyPatch linux-2.6-netdev-r8169-2.6.28.patch
-ApplyPatch linux-2.6-eeepc-laptop-update.patch
-ApplyPatch linux-2.6-toshiba-acpi-update.patch
+#ApplyPatch linux-2.6-eeepc-laptop-update.patch
+#ApplyPatch linux-2.6-toshiba-acpi-update.patch
# atl2 network driver
-ApplyPatch linux-2.6-netdev-atl2.patch
+#ApplyPatch linux-2.6-netdev-atl2.patch
ApplyPatch linux-2.6-net-tulip-interrupt.patch
ApplyPatch linux-2.6-olpc-speaker-out.patch
-ApplyPatch linux-2.6-olpc-touchpad.patch
+#ApplyPatch linux-2.6-olpc-touchpad.patch
# Nouveau DRM + drm fixes
-ApplyPatch nvidia-agp.patch
-ApplyPatch linux-2.6-agp-intel-cantiga-fix.patch
-ApplyPatch drm-next.patch
-ApplyPatch drm-intel-gem-x86-64-faster.patch
-ApplyPatch drm-modesetting-radeon.patch
+#ApplyPatch nvidia-agp.patch
+#ApplyPatch linux-2.6-agp-intel-cantiga-fix.patch
+#ApplyPatch drm-next.patch
+#ApplyPatch drm-intel-gem-x86-64-faster.patch
+#ApplyPatch drm-modesetting-radeon.patch
#ApplyPatch drm-modesetting-i915.patch
ApplyPatch drm-nouveau.patch
# linux1394 git patches
-ApplyPatch linux-2.6-firewire-git-update.patch
+#ApplyPatch linux-2.6-firewire-git-update.patch
C=$(wc -l $RPM_SOURCE_DIR/linux-2.6-firewire-git-pending.patch | awk '{print $1}')
if [ "$C" -gt 10 ]; then
ApplyPatch linux-2.6-firewire-git-pending.patch
fi
# get rid of imacfb and make efifb work everywhere it was used
-ApplyPatch linux-2.6-merge-efifb-imacfb.patch
+#ApplyPatch linux-2.6-merge-efifb-imacfb.patch
# Sony Vaio suspend fix
-ApplyPatch linux-2.6.27-sony-laptop-suspend-fix.patch
+#ApplyPatch linux-2.6.27-sony-laptop-suspend-fix.patch
-ApplyPatch linux-2.6-dmi-autoload.patch
+#ApplyPatch linux-2.6-dmi-autoload.patch
# silence piix3 in quiet boot (ie, qemu)
ApplyPatch linux-2.6-piix3-silence-quirk.patch
# Hush IOMMU warnings, you typically can't fix them anyway
-ApplyPatch linux-2.6-quiet-iommu.patch
+#ApplyPatch linux-2.6-quiet-iommu.patch
# silence the ACPI blacklist code
ApplyPatch linux-2.6-silence-acpi-blacklist.patch
# it's... it's ALIVE!
-ApplyPatch linux-2.6-amd64-yes-i-know-you-live.patch
+#ApplyPatch linux-2.6-amd64-yes-i-know-you-live.patch
# hush pci bar allocation failures
-ApplyPatch linux-2.6.27-pci-hush-allocation-failures.patch
+#ApplyPatch linux-2.6.27-pci-hush-allocation-failures.patch
# EC storms aren't anything you can fix, shut up already
-ApplyPatch linux-2.6.27-acpi-ec-drizzle.patch
+#ApplyPatch linux-2.6.27-acpi-ec-drizzle.patch
# SELinux on ppc64 without plymouth can't boot
-ApplyPatch linux-2.6-selinux-empty-tty-files.patch
+#ApplyPatch linux-2.6-selinux-empty-tty-files.patch
ApplyPatch disable-p4-cpufreq-ui.patch
@@ -1937,6 +1936,9 @@
# You probably want to be commiting to F-10/ rather than devel/
%changelog
+* Wed Nov 12 2008 Kyle McMartin <kyle at redhat.com>
+- Linux 2.6.28-rc4
+
* Sun Nov 09 2008 Eric Sandeen <sandeen at redhat.com>
- Pull back ext4 updates from 2.6.28-rc3-git6
linux-2.6-compile-fixes.patch:
Index: linux-2.6-compile-fixes.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-compile-fixes.patch,v
retrieving revision 1.178
retrieving revision 1.179
diff -u -r1.178 -r1.179
--- linux-2.6-compile-fixes.patch 8 Oct 2008 22:32:46 -0000 1.178
+++ linux-2.6-compile-fixes.patch 12 Nov 2008 16:28:22 -0000 1.179
@@ -11,14 +11,15 @@
Signed-off-by: Dave Jones <davej at redhat.com>
diff --git a/arch/powerpc/sysdev/fsl_lbc.c b/arch/powerpc/sysdev/fsl_lbc.c
-index 422c8fa..1c6c522 100644
+index 0494ee5..43a9e56 100644
--- a/arch/powerpc/sysdev/fsl_lbc.c
+++ b/arch/powerpc/sysdev/fsl_lbc.c
-@@ -16,6 +16,7 @@
+@@ -23,6 +23,8 @@
#include <asm/fsl_lbc.h>
- spinlock_t fsl_lbc_lock = __SPIN_LOCK_UNLOCKED(fsl_lbc_lock);
+ static spinlock_t fsl_lbc_lock = __SPIN_LOCK_UNLOCKED(fsl_lbc_lock);
+EXPORT_SYMBOL(fsl_lbc_lock);
++
+ static struct fsl_lbc_regs __iomem *fsl_lbc_regs;
- struct fsl_lbc_regs __iomem *fsl_lbc_regs;
- EXPORT_SYMBOL(fsl_lbc_regs);
+ static char __initdata *compat_lbc[] = {
linux-2.6-firewire-git-pending.patch:
Index: linux-2.6-firewire-git-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-firewire-git-pending.patch,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- linux-2.6-firewire-git-pending.patch 29 Oct 2008 15:32:05 -0000 1.31
+++ linux-2.6-firewire-git-pending.patch 12 Nov 2008 16:28:22 -0000 1.32
@@ -3,128 +3,3 @@
# tree (and/or in by the time your read this), which we want...
#
-Date: Fri, 26 Sep 2008 16:35:45 -0400
-From: Jay Fenlason <fenlason at redhat.com>
-Subject: [Patch] fix two resource allocation bugs in fw-cdev.c
-
-Bug #1: the resource_handle used to number resources will eventually
-wrap, potentially resulting in two resources having the same handle.
-This will lead to a system crash when the wrong resource is freed.
-
-A better fix for this bug would be to use the idr functions rather
-than keeping a linked list of resources. I will include that in a
-future patch.
-
-Bug #2: the release_client_resource() function does not check the type
-of the resource it is being asked to free. Because the handle numbers
-can come directly from userspace, a malicious or buggy program may
-free resources that it shouldn't, possibly causing a program crash.
-
-Signed-off-by: Jay Fenlason <fenlason at redhat.com>
-
---
-
- fw-cdev.c | 32 +++++++++++++++++++++++++-------
- 1 file changed, 25 insertions(+), 7 deletions(-)
-
-diff -rup linux-2.6/drivers/firewire/fw-cdev.c linux-2.6.firewire/drivers/firewire/fw-cdev.c
---- linux-2.6/drivers/firewire/fw-cdev.c 2008-09-22 14:56:02.000000000 -0400
-+++ linux-2.6.firewire/drivers/firewire/fw-cdev.c 2008-09-25 16:13:00.000000000 -0400
-@@ -77,7 +77,6 @@ struct client {
- u32 version;
- struct fw_device *device;
- spinlock_t lock;
-- u32 resource_handle;
- struct list_head resource_list;
- struct list_head event_list;
- wait_queue_head_t wait;
-@@ -321,13 +320,32 @@ add_client_resource(struct client *clien
- unsigned long flags;
-
- spin_lock_irqsave(&client->lock, flags);
-- list_add_tail(&resource->link, &client->resource_list);
-- resource->handle = client->resource_handle++;
-+ if (list_empty(&client->resource_list)
-+ || list_first_entry(&client->resource_list,
-+ struct client_resource,
-+ link)->handle > 0) {
-+ resource->handle = 0;
-+ list_add(&resource->link, &client->resource_list);
-+ } else {
-+ struct client_resource *c_tmp, *c_tmp2;
-+
-+ c_tmp2 = NULL;
-+ list_for_each_entry(c_tmp, &client->resource_list,
-+ link) {
-+ if (c_tmp2 && c_tmp->handle != c_tmp2->handle+1)
-+ break;
-+ c_tmp2 = c_tmp;
-+ }
-+ BUG_ON(c_tmp2 == NULL);
-+ resource->handle = c_tmp2->handle+1;
-+ list_add(&resource->link, &c_tmp2->link);
-+ }
- spin_unlock_irqrestore(&client->lock, flags);
- }
-
- static int
- release_client_resource(struct client *client, u32 handle,
-+ void (*func)(struct client *client, struct client_resource *r),
- struct client_resource **resource)
- {
- struct client_resource *r;
-@@ -335,7 +353,7 @@ release_client_resource(struct client *c
-
- spin_lock_irqsave(&client->lock, flags);
- list_for_each_entry(r, &client->resource_list, link) {
-- if (r->handle == handle) {
-+ if (r->handle == handle && r->release == func) {
- list_del(&r->link);
- break;
- }
-@@ -555,7 +573,7 @@ static int ioctl_deallocate(struct clien
- {
- struct fw_cdev_deallocate *request = buffer;
-
-- return release_client_resource(client, request->handle, NULL);
-+ return release_client_resource(client, request->handle, release_address_handler, NULL);
- }
-
- static int ioctl_send_response(struct client *client, void *buffer)
-@@ -564,7 +582,7 @@ static int ioctl_send_response(struct cl
- struct client_resource *resource;
- struct request *r;
-
-- if (release_client_resource(client, request->handle, &resource) < 0)
-+ if (release_client_resource(client, request->handle, release_request, &resource) < 0)
- return -EINVAL;
- r = container_of(resource, struct request, resource);
- if (request->length < r->length)
-@@ -646,7 +664,7 @@ static int ioctl_remove_descriptor(struc
- {
- struct fw_cdev_remove_descriptor *request = buffer;
-
-- return release_client_resource(client, request->handle, NULL);
-+ return release_client_resource(client, request->handle, release_descriptor, NULL);
- }
-
- static void
-
-----------------------
-Date: Wed, 22 Oct 2008 15:59:42 -0400
-From: Jay Fenlason <fenlason at redhat.com>
-Subject: firewire: typo in comment
-
-Signed-off-by: Jay Fenlason <fenlason at redhat.com>
-diff -upr linux-2.6/drivers/firewire/fw-card.c linux-2.6.fw/drivers/firewire/fw-card.c
---- linux-2.6/drivers/firewire/fw-card.c 2008-10-07 11:26:15.000000000 -0400
-+++ linux-2.6.fw/drivers/firewire/fw-card.c 2008-10-22 14:40:14.000000000 -0400
-@@ -76,7 +76,7 @@ generate_config_rom(struct fw_card *card
- * controller, block reads to the config rom accesses the host
- * memory, but quadlet read access the hardware bus info block
- * registers. That's just crack, but it means we should make
-- * sure the contents of bus info block in host memory mathces
-+ * sure the contents of bus info block in host memory matches
- * the version stored in the OHCI registers.
- */
-
linux-2.6-upstream-reverts.patch:
Index: linux-2.6-upstream-reverts.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-upstream-reverts.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-upstream-reverts.patch 24 Oct 2008 23:44:38 -0000 1.4
+++ linux-2.6-upstream-reverts.patch 12 Nov 2008 16:28:22 -0000 1.5
@@ -1,283 +1 @@
-From 4b40893918203ee1a1f6a114316c2a19c072e9bd Mon Sep 17 00:00:00 2001
-From: Matthias Hopf <mhopf at suse.de>
-Date: Sat, 18 Oct 2008 07:18:05 +1000
-Subject: drm/i915: fix ioremap of a user address for non-root (CVE-2008-3831)
-
-From: Matthias Hopf <mhopf at suse.de>
-
-commit 4b40893918203ee1a1f6a114316c2a19c072e9bd upstream
-
-Olaf Kirch noticed that the i915_set_status_page() function of the i915
-kernel driver calls ioremap with an address offset that is supplied by
-userspace via ioctl. The function zeroes the mapped memory via memset
-and tells the hardware about the address. Turns out that access to that
-ioctl is not restricted to root so users could probably exploit that to
-do nasty things. We haven't tried to write actual exploit code though.
-
-It only affects the Intel G33 series and newer.
-
-Signed-off-by: Dave Airlie <airlied at redhat.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- drivers/gpu/drm/i915/i915_dma.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/gpu/drm/i915/i915_dma.c
-+++ b/drivers/gpu/drm/i915/i915_dma.c
-@@ -836,7 +836,7 @@ struct drm_ioctl_desc i915_ioctls[] = {
- DRM_IOCTL_DEF(DRM_I915_SET_VBLANK_PIPE, i915_vblank_pipe_set, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
- DRM_IOCTL_DEF(DRM_I915_GET_VBLANK_PIPE, i915_vblank_pipe_get, DRM_AUTH ),
- DRM_IOCTL_DEF(DRM_I915_VBLANK_SWAP, i915_vblank_swap, DRM_AUTH),
-- DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH),
-+ DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
- };
-
- int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
-From sandeen at redhat.com Thu Oct 23 13:13:44 2008
-From: Eric Sandeen <sandeen at redhat.com>
-Date: Wed, 22 Oct 2008 10:11:52 -0500
-Subject: ext[234]: Avoid printk floods in the face of directory corruption (CVE-2008-3528)
-To: stable at kernel.org
-Cc: ext4 development <linux-ext4 at vger.kernel.org>
-Message-ID: <48FF42B8.3030606 at redhat.com>
-
-From: Eric Sandeen <sandeen at redhat.com>
-
-This is a trivial backport of the following upstream commits:
-
-- bd39597cbd42a784105a04010100e27267481c67 (ext2)
-- cdbf6dba28e8e6268c8420857696309470009fd9 (ext3)
-- 9d9f177572d9e4eba0f2e18523b44f90dd51fe74 (ext4)
-
-This addresses CVE-2008-3528
-
-ext[234]: Avoid printk floods in the face of directory corruption
-
-Note: some people thinks this represents a security bug, since it
-might make the system go away while it is printing a large number of
-console messages, especially if a serial console is involved. Hence,
-it has been assigned CVE-2008-3528, but it requires that the attacker
-either has physical access to your machine to insert a USB disk with a
-corrupted filesystem image (at which point why not just hit the power
-button), or is otherwise able to convince the system administrator to
-mount an arbitrary filesystem image (at which point why not just
-include a setuid shell or world-writable hard disk device file or some
-such). Me, I think they're just being silly. --tytso
-
-Signed-off-by: Eric Sandeen <sandeen at redhat.com>
-Signed-off-by: "Theodore Ts'o" <tytso at mit.edu>
-Cc: linux-ext4 at vger.kernel.org
-Cc: Eugene Teo <eugeneteo at kernel.sg>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- fs/ext2/dir.c | 60 +++++++++++++++++++++++++++++++++-------------------------
- fs/ext3/dir.c | 10 ++++++---
- fs/ext4/dir.c | 11 +++++++---
- 3 files changed, 50 insertions(+), 31 deletions(-)
-
---- a/fs/ext2/dir.c
-+++ b/fs/ext2/dir.c
-@@ -103,7 +103,7 @@ static int ext2_commit_chunk(struct page
- return err;
- }
-
--static void ext2_check_page(struct page *page)
-+static void ext2_check_page(struct page *page, int quiet)
- {
- struct inode *dir = page->mapping->host;
- struct super_block *sb = dir->i_sb;
-@@ -146,10 +146,10 @@ out:
- /* Too bad, we had an error */
-
- Ebadsize:
-- ext2_error(sb, "ext2_check_page",
-- "size of directory #%lu is not a multiple of chunk size",
-- dir->i_ino
-- );
-+ if (!quiet)
-+ ext2_error(sb, __func__,
-+ "size of directory #%lu is not a multiple "
-+ "of chunk size", dir->i_ino);
- goto fail;
- Eshort:
- error = "rec_len is smaller than minimal";
-@@ -166,32 +166,36 @@ Espan:
- Einumber:
- error = "inode out of bounds";
- bad_entry:
-- ext2_error (sb, "ext2_check_page", "bad entry in directory #%lu: %s - "
-- "offset=%lu, inode=%lu, rec_len=%d, name_len=%d",
-- dir->i_ino, error, (page->index<<PAGE_CACHE_SHIFT)+offs,
-- (unsigned long) le32_to_cpu(p->inode),
-- rec_len, p->name_len);
-+ if (!quiet)
-+ ext2_error(sb, __func__, "bad entry in directory #%lu: : %s - "
-+ "offset=%lu, inode=%lu, rec_len=%d, name_len=%d",
-+ dir->i_ino, error, (page->index<<PAGE_CACHE_SHIFT)+offs,
-+ (unsigned long) le32_to_cpu(p->inode),
-+ rec_len, p->name_len);
- goto fail;
- Eend:
-- p = (ext2_dirent *)(kaddr + offs);
-- ext2_error (sb, "ext2_check_page",
-- "entry in directory #%lu spans the page boundary"
-- "offset=%lu, inode=%lu",
-- dir->i_ino, (page->index<<PAGE_CACHE_SHIFT)+offs,
-- (unsigned long) le32_to_cpu(p->inode));
-+ if (!quiet) {
-+ p = (ext2_dirent *)(kaddr + offs);
-+ ext2_error(sb, "ext2_check_page",
-+ "entry in directory #%lu spans the page boundary"
-+ "offset=%lu, inode=%lu",
-+ dir->i_ino, (page->index<<PAGE_CACHE_SHIFT)+offs,
-+ (unsigned long) le32_to_cpu(p->inode));
-+ }
- fail:
- SetPageChecked(page);
- SetPageError(page);
- }
-
--static struct page * ext2_get_page(struct inode *dir, unsigned long n)
-+static struct page * ext2_get_page(struct inode *dir, unsigned long n,
-+ int quiet)
- {
- struct address_space *mapping = dir->i_mapping;
- struct page *page = read_mapping_page(mapping, n, NULL);
- if (!IS_ERR(page)) {
- kmap(page);
- if (!PageChecked(page))
-- ext2_check_page(page);
-+ ext2_check_page(page, quiet);
- if (PageError(page))
- goto fail;
- }
-@@ -292,7 +296,7 @@ ext2_readdir (struct file * filp, void *
- for ( ; n < npages; n++, offset = 0) {
- char *kaddr, *limit;
- ext2_dirent *de;
-- struct page *page = ext2_get_page(inode, n);
-+ struct page *page = ext2_get_page(inode, n, 0);
-
- if (IS_ERR(page)) {
- ext2_error(sb, __func__,
-@@ -361,6 +365,7 @@ struct ext2_dir_entry_2 * ext2_find_entr
- struct page *page = NULL;
- struct ext2_inode_info *ei = EXT2_I(dir);
- ext2_dirent * de;
-+ int dir_has_error = 0;
-
- if (npages == 0)
- goto out;
-@@ -374,7 +379,7 @@ struct ext2_dir_entry_2 * ext2_find_entr
- n = start;
- do {
- char *kaddr;
-- page = ext2_get_page(dir, n);
-+ page = ext2_get_page(dir, n, dir_has_error);
- if (!IS_ERR(page)) {
- kaddr = page_address(page);
- de = (ext2_dirent *) kaddr;
-@@ -391,7 +396,9 @@ struct ext2_dir_entry_2 * ext2_find_entr
- de = ext2_next_entry(de);
- }
- ext2_put_page(page);
-- }
-+ } else
-+ dir_has_error = 1;
-+
- if (++n >= npages)
- n = 0;
- /* next page is past the blocks we've got */
-@@ -414,7 +421,7 @@ found:
-
- struct ext2_dir_entry_2 * ext2_dotdot (struct inode *dir, struct page **p)
- {
-- struct page *page = ext2_get_page(dir, 0);
-+ struct page *page = ext2_get_page(dir, 0, 0);
- ext2_dirent *de = NULL;
-
- if (!IS_ERR(page)) {
-@@ -487,7 +494,7 @@ int ext2_add_link (struct dentry *dentry
- for (n = 0; n <= npages; n++) {
- char *dir_end;
-
-- page = ext2_get_page(dir, n);
-+ page = ext2_get_page(dir, n, 0);
- err = PTR_ERR(page);
- if (IS_ERR(page))
- goto out;
-@@ -655,14 +662,17 @@ int ext2_empty_dir (struct inode * inode
- {
- struct page *page = NULL;
- unsigned long i, npages = dir_pages(inode);
-+ int dir_has_error = 0;
-
- for (i = 0; i < npages; i++) {
- char *kaddr;
- ext2_dirent * de;
-- page = ext2_get_page(inode, i);
-+ page = ext2_get_page(inode, i, dir_has_error);
-
-- if (IS_ERR(page))
-+ if (IS_ERR(page)) {
-+ dir_has_error = 1;
- continue;
-+ }
-
- kaddr = page_address(page);
- de = (ext2_dirent *)kaddr;
---- a/fs/ext3/dir.c
-+++ b/fs/ext3/dir.c
-@@ -102,6 +102,7 @@ static int ext3_readdir(struct file * fi
- int err;
- struct inode *inode = filp->f_path.dentry->d_inode;
- int ret = 0;
-+ int dir_has_error = 0;
-
- sb = inode->i_sb;
-
-@@ -148,9 +149,12 @@ static int ext3_readdir(struct file * fi
- * of recovering data when there's a bad sector
- */
- if (!bh) {
-- ext3_error (sb, "ext3_readdir",
-- "directory #%lu contains a hole at offset %lu",
-- inode->i_ino, (unsigned long)filp->f_pos);
-+ if (!dir_has_error) {
-+ ext3_error(sb, __func__, "directory #%lu "
-+ "contains a hole at offset %lld",
-+ inode->i_ino, filp->f_pos);
-+ dir_has_error = 1;
-+ }
- /* corrupt size? Maybe no more blocks to read */
- if (filp->f_pos > inode->i_blocks << 9)
- break;
---- a/fs/ext4/dir.c
-+++ b/fs/ext4/dir.c
-@@ -102,6 +102,7 @@ static int ext4_readdir(struct file * fi
- int err;
- struct inode *inode = filp->f_path.dentry->d_inode;
- int ret = 0;
-+ int dir_has_error = 0;
-
- sb = inode->i_sb;
-
-@@ -148,9 +149,13 @@ static int ext4_readdir(struct file * fi
- * of recovering data when there's a bad sector
- */
- if (!bh) {
-- ext4_error (sb, "ext4_readdir",
-- "directory #%lu contains a hole at offset %lu",
-- inode->i_ino, (unsigned long)filp->f_pos);
-+ if (!dir_has_error) {
-+ ext4_error(sb, __func__, "directory #%lu "
-+ "contains a hole at offset %Lu",
-+ inode->i_ino,
-+ (unsigned long long) filp->f_pos);
-+ dir_has_error = 1;
-+ }
- /* corrupt size? Maybe no more blocks to read */
- if (filp->f_pos > inode->i_blocks << 9)
- break;
+nil
Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/sources,v
retrieving revision 1.914
retrieving revision 1.915
diff -u -r1.914 -r1.915
--- sources 26 Oct 2008 11:45:02 -0000 1.914
+++ sources 12 Nov 2008 16:28:22 -0000 1.915
@@ -1,2 +1,2 @@
b3e78977aa79d3754cb7f8143d7ddabd linux-2.6.27.tar.bz2
-fa7cb6cf1ee5e796e89905806ffc6f01 patch-2.6.27.4.bz2
+71bf4c787973ea01693af4571c00fa4e patch-2.6.28-rc4.bz2
Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/upstream,v
retrieving revision 1.826
retrieving revision 1.827
diff -u -r1.826 -r1.827
--- upstream 26 Oct 2008 11:45:02 -0000 1.826
+++ upstream 12 Nov 2008 16:28:22 -0000 1.827
@@ -1,2 +1,2 @@
linux-2.6.27.tar.bz2
-patch-2.6.27.4.bz2
+patch-2.6.28-rc4.bz2
--- patch-2.6.27.4.bz2.sign DELETED ---
More information about the fedora-extras-commits
mailing list