rpms/kernel/devel linux-2.6-dmi-based-module-autoloading.patch, NONE, 1.1 patch-2.6.22-rc5-git8.bz2.sign, NONE, 1.1 .cvsignore, 1.634, 1.635 kernel-2.6.spec, 1.3234, 1.3235 linux-2.6-sched-cfs.patch, 1.5, 1.6 sources, 1.599, 1.600 upstream, 1.521, 1.522 patch-2.6.22-rc5-git6.bz2.sign, 1.1, NONE

Dave Jones (davej) fedora-extras-commits at redhat.com
Sun Jun 24 03:42:48 UTC 2007


Author: davej

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1993

Modified Files:
	.cvsignore kernel-2.6.spec linux-2.6-sched-cfs.patch sources 
	upstream 
Added Files:
	linux-2.6-dmi-based-module-autoloading.patch 
	patch-2.6.22-rc5-git8.bz2.sign 
Removed Files:
	patch-2.6.22-rc5-git6.bz2.sign 
Log Message:
* Sat Jun 23 2007 Dave Jones <davej at redhat.com>
- DMI based module autoloading.


linux-2.6-dmi-based-module-autoloading.patch:

--- NEW FILE linux-2.6-dmi-based-module-autoloading.patch ---
>From mzxreary at 0pointer.de  Sat May 19 20:03:21 2007
Date: Tue, 8 May 2007 22:07:02 +0200
From: Lennart Poettering <mzxreary at 0pointer.de>
To: <B.Steinbrink at gmx.de>, <kay.sievers at vrfy.org>, Greg KH <gregkh at suse.de>
Subject: DMI-based module autoloading
Message-ID: <20070508200702.GA6537 at tango.0pointer.de>
Content-Disposition: inline

From: Lennart Poettering <mzxreary at 0pointer.de>

The patch below adds DMI/SMBIOS based module autoloading to the Linux
kernel. The idea is to load laptop drivers automatically (and other
drivers which cannot be autoloaded otherwise), based on the DMI system
identification information of the BIOS.

Right now most distros manually try to load all available laptop
drivers on bootup in the hope that at least one of them loads
successfully. This patch does away with all that, and uses udev to
automatically load matching drivers on the right machines.

Basically the patch just exports the DMI information that has been
parsed by the kernel anyway to userspace via a sysfs device
/sys/class/dmi/id and makes sure that proper modalias attributes are
available. Besides adding the "modalias" attribute it also adds
attributes for a few other DMI fields which might be useful for
writing udev rules.

This patch is not an attempt to export the entire DMI/SMBIOS data to
userspace. We already have "dmidecode" which parses the complete DMI
info from userspace. The purpose of this patch is machine model
identification and good udev integration.

To take advantage of DMI based module autoloading, a driver should
export one or more MODULE_ALIAS fields similar to these:

MODULE_ALIAS("dmi:*:svnMICRO-STARINT'LCO.,LTD:pnMS-1013:pvr0131*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");
MODULE_ALIAS("dmi:*:svnMicro-StarInternational:pnMS-1058:pvr0581:rvnMSI:rnMS-1058:*:ct10:*");
MODULE_ALIAS("dmi:*:svnMicro-StarInternational:pnMS-1412:*:rvnMSI:rnMS-1412:*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");
MODULE_ALIAS("dmi:*:svnNOTEBOOK:pnSAM2000:pvr0131*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");

These lines are specific to my msi-laptop.c driver. They are basically
just a concatenation of a few carefully selected DMI fields with all
potentially bad characters stripped.

Besides laptop drivers, modules like "hdaps", the i2c modules
and the hwmon modules are good candidates for "dmi:" MODULE_ALIAS
lines.

Besides merely exporting the DMI data via sysfs the patch adds
support for a few more DMI fields. Especially the CHASSIS fields are
very useful to identify different laptop modules. The patch also adds
working MODULE_ALIAS lines to my msi-laptop.c driver.

I'd like to thank Kay Sievers for helping me to clean up this patch
for posting it on lkml.

Patch is against Linus' current GIT HEAD. Should probably apply to
older kernels as well without modification.


Signed-off-by: Lennart Poettering <mzxreary at 0pointer.de>
Signed-off-by: Kay Sievers <kay.sievers at vrfy.org>
Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>



---
 drivers/firmware/Kconfig    |    9 +
 drivers/firmware/Makefile   |    1 
 drivers/firmware/dmi-id.c   |  222 ++++++++++++++++++++++++++++++++++++++++++++
 drivers/firmware/dmi_scan.c |   73 +++++++++++++-
 drivers/misc/msi-laptop.c   |   44 ++++++++
 include/linux/dmi.h         |    8 +
 6 files changed, 348 insertions(+), 9 deletions(-)

--- a/drivers/firmware/Kconfig
+++ b/drivers/firmware/Kconfig
@@ -84,4 +84,13 @@ config DCDBAS
 	  Say Y or M here to enable the driver for use by Dell systems
 	  management software such as Dell OpenManage.
 
+config DMIID
+    bool "Export DMI identification via sysfs to userspace"
+    depends on DMI
+    default y
+	help
+	  Say Y here if you want to query SMBIOS/DMI system identification
+	  information from userspace through /sys/class/dmi/id/ or if you want
+	  DMI-based module auto-loading.
+
 endmenu
--- a/drivers/firmware/Makefile
+++ b/drivers/firmware/Makefile
@@ -7,3 +7,4 @@ obj-$(CONFIG_EFI_VARS)		+= efivars.o
 obj-$(CONFIG_EFI_PCDP)		+= pcdp.o
 obj-$(CONFIG_DELL_RBU)          += dell_rbu.o
 obj-$(CONFIG_DCDBAS)		+= dcdbas.o
+obj-$(CONFIG_DMIID)		+= dmi-id.o
--- /dev/null
+++ b/drivers/firmware/dmi-id.c
@@ -0,0 +1,222 @@
+/*
+ * Export SMBIOS/DMI info via sysfs to userspace
+ *
+ * Copyright 2007, Lennart Poettering
+ *
+ * Licensed under GPLv2
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/dmi.h>
+#include <linux/device.h>
+#include <linux/autoconf.h>
+
+#define DEFINE_DMI_ATTR(_name, _mode, _show)		\
+static struct device_attribute sys_dmi_##_name##_attr =	\
+	__ATTR(_name, _mode, _show, NULL);
+
+#define DEFINE_DMI_ATTR_WITH_SHOW(_name, _mode, _field)			\
+static ssize_t sys_dmi_##_name##_show(struct device *dev,		\
+				      struct device_attribute *attr,	\
+				      char *page)			\
+{									\
+	ssize_t len;							\
+	len = scnprintf(page, PAGE_SIZE, "%s\n", dmi_get_system_info(_field)); \
+	page[len-1] = '\n';						\
+	return len;							\
+}									\
+DEFINE_DMI_ATTR(_name, _mode, sys_dmi_##_name##_show);
+
+DEFINE_DMI_ATTR_WITH_SHOW(bios_vendor,		0444, DMI_BIOS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(bios_version,		0444, DMI_BIOS_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(bios_date,		0444, DMI_BIOS_DATE);
+DEFINE_DMI_ATTR_WITH_SHOW(sys_vendor,		0444, DMI_SYS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(product_name,		0444, DMI_PRODUCT_NAME);
+DEFINE_DMI_ATTR_WITH_SHOW(product_version,	0444, DMI_PRODUCT_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(product_serial,	0400, DMI_PRODUCT_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(product_uuid,		0400, DMI_PRODUCT_UUID);
+DEFINE_DMI_ATTR_WITH_SHOW(board_vendor,		0444, DMI_BOARD_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(board_name,		0444, DMI_BOARD_NAME);
+DEFINE_DMI_ATTR_WITH_SHOW(board_version,	0444, DMI_BOARD_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(board_serial,		0400, DMI_BOARD_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(board_asset_tag,	0444, DMI_BOARD_ASSET_TAG);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_vendor,	0444, DMI_CHASSIS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_type,		0444, DMI_CHASSIS_TYPE);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_version,	0444, DMI_CHASSIS_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_serial,	0400, DMI_CHASSIS_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_asset_tag,	0444, DMI_CHASSIS_ASSET_TAG);
+
+static void ascii_filter(char *d, const char *s)
+{
+	/* Filter out characters we don't want to see in the modalias string */
+	for (; *s; s++)
+		if (*s > ' ' && *s < 127 && *s != ':')
+			*(d++) = *s;
+
+	*d = 0;
+}
+
+static ssize_t get_modalias(char *buffer, size_t buffer_size)
+{
+	static const struct mafield {
+		const char *prefix;
+		int field;
+	} fields[] = {
+		{ "bvn", DMI_BIOS_VENDOR },
+		{ "bvr", DMI_BIOS_VERSION },
+		{ "bd",  DMI_BIOS_DATE },
+		{ "svn", DMI_SYS_VENDOR },
+		{ "pn",  DMI_PRODUCT_NAME },
+		{ "pvr", DMI_PRODUCT_VERSION },
+		{ "rvn", DMI_BOARD_VENDOR },
+		{ "rn",  DMI_BOARD_NAME },
+		{ "rvr", DMI_BOARD_VERSION },
+		{ "cvn", DMI_CHASSIS_VENDOR },
+		{ "ct",  DMI_CHASSIS_TYPE },
+		{ "cvr", DMI_CHASSIS_VERSION },
+		{ NULL,  DMI_NONE }
+	};
+
+	ssize_t l, left;
+	char *p;
+	const struct mafield *f;
+
+	strcpy(buffer, "dmi");
+	p = buffer + 3; left = buffer_size - 4;
+
+	for (f = fields; f->prefix && left > 0; f++) {
+		const char *c;
+		char *t;
+
+		c = dmi_get_system_info(f->field);
+		if (!c)
+			continue;
+
+		t = kmalloc(strlen(c) + 1, GFP_KERNEL);
+		if (!t)
+			break;
+		ascii_filter(t, c);
+		l = scnprintf(p, left, ":%s%s", f->prefix, t);
+		kfree(t);
+
+		p += l;
+		left -= l;
+	}
+
+	p[0] = ':';
+	p[1] = 0;
+
+	return p - buffer + 1;
+}
+
+static ssize_t sys_dmi_modalias_show(struct device *dev,
+				     struct device_attribute *attr, char *page)
+{
+	ssize_t r;
+	r = get_modalias(page, PAGE_SIZE-1);
+	page[r] = '\n';
+	page[r+1] = 0;
+	return r+1;
+}
+
+DEFINE_DMI_ATTR(modalias, 0444, sys_dmi_modalias_show);
+
+static struct attribute *sys_dmi_attributes[DMI_STRING_MAX+2];
+
+static struct attribute_group sys_dmi_attribute_group = {
+	.attrs = sys_dmi_attributes,
+};
+
+static struct attribute_group* sys_dmi_attribute_groups[] = {
+	&sys_dmi_attribute_group,
+	NULL
+};
+
+static int dmi_dev_uevent(struct device *dev, char **envp,
+			    int num_envp, char *buffer, int buffer_size)
+{
+	strcpy(buffer, "MODALIAS=");
+	get_modalias(buffer+9, buffer_size-9);
+	envp[0] = buffer;
+	envp[1] = NULL;
+
+	return 0;
+}
+
+static struct class dmi_class = {
+	.name = "dmi",
+	.dev_release = (void(*)(struct device *)) kfree,
+	.dev_uevent = dmi_dev_uevent,
+};
+
+static struct device *dmi_dev;
+
+/* Initialization */
+
+#define ADD_DMI_ATTR(_name, _field) \
+	if (dmi_get_system_info(_field)) \
+		sys_dmi_attributes[i++] = & sys_dmi_##_name##_attr.attr;
+
+extern int dmi_available;
+
+int __init dmi_id_init(void)
+{
+	int ret, i;
+
+	if (!dmi_available)
+		return -ENODEV;
+
+	/* Not necessarily all DMI fields are available on all
+	 * systems, hence let's built an attribute table of just
+	 * what's available */
+	i = 0;
+	ADD_DMI_ATTR(bios_vendor,       DMI_BIOS_VENDOR);
+	ADD_DMI_ATTR(bios_version,      DMI_BIOS_VERSION);
+	ADD_DMI_ATTR(bios_date,         DMI_BIOS_DATE);
+	ADD_DMI_ATTR(sys_vendor,        DMI_SYS_VENDOR);
+	ADD_DMI_ATTR(product_name,      DMI_PRODUCT_NAME);
+	ADD_DMI_ATTR(product_version,   DMI_PRODUCT_VERSION);
+	ADD_DMI_ATTR(product_serial,    DMI_PRODUCT_SERIAL);
+	ADD_DMI_ATTR(product_uuid,      DMI_PRODUCT_UUID);
+	ADD_DMI_ATTR(board_vendor,      DMI_BOARD_VENDOR);
+	ADD_DMI_ATTR(board_name,        DMI_BOARD_NAME);
+	ADD_DMI_ATTR(board_version,     DMI_BOARD_VERSION);
+	ADD_DMI_ATTR(board_serial,      DMI_BOARD_SERIAL);
+	ADD_DMI_ATTR(board_asset_tag,   DMI_BOARD_ASSET_TAG);
+	ADD_DMI_ATTR(chassis_vendor,    DMI_CHASSIS_VENDOR);
+	ADD_DMI_ATTR(chassis_type,      DMI_CHASSIS_TYPE);
+	ADD_DMI_ATTR(chassis_version,   DMI_CHASSIS_VERSION);
+	ADD_DMI_ATTR(chassis_serial,    DMI_CHASSIS_SERIAL);
+	ADD_DMI_ATTR(chassis_asset_tag, DMI_CHASSIS_ASSET_TAG);
+	sys_dmi_attributes[i++] = &sys_dmi_modalias_attr.attr;
+
+	ret = class_register(&dmi_class);
+	if (ret)
+		return ret;
+
+	dmi_dev = kzalloc(sizeof(*dmi_dev), GFP_KERNEL);
+	if (!dmi_dev) {
+		ret = -ENOMEM;
+		goto fail_class_unregister;
+	}
+
+	dmi_dev->class = &dmi_class;
+	strcpy(dmi_dev->bus_id, "id");
+	dmi_dev->groups = sys_dmi_attribute_groups;
+
+	ret = device_register(dmi_dev);
+	if (ret)
+		goto fail_class_unregister;
+
+	return 0;
+
+fail_class_unregister:
+
+	class_unregister(&dmi_class);
+
+	return ret;
+}
+
+arch_initcall(dmi_id_init);
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -84,6 +84,7 @@ static int __init dmi_checksum(u8 *buf)
 
 static char *dmi_ident[DMI_STRING_MAX];
 static LIST_HEAD(dmi_devices);
+int dmi_available;
 
 /*
  *	Save a DMI string
@@ -102,6 +103,51 @@ static void __init dmi_save_ident(struct
 	dmi_ident[slot] = p;
 }
 
+static void __init dmi_save_uuid(struct dmi_header *dm, int slot, int index)
+{
+	u8 *d = (u8*) dm + index;
+	char *s;
+	int is_ff = 1, is_00 = 1, i;
+
+	if (dmi_ident[slot])
+		return;
+
+	for (i = 0; i < 16 && (is_ff || is_00); i++) {
+		if(d[i] != 0x00) is_ff = 0;
+		if(d[i] != 0xFF) is_00 = 0;
+	}
+
+	if (is_ff || is_00)
+		return;
+
+	s = dmi_alloc(16*2+4+1);
+	if (!s)
+		return;
+
+	sprintf(s,
+		"%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
+		d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],
+		d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]);
+
+        dmi_ident[slot] = s;
+}
+
+static void __init dmi_save_type(struct dmi_header *dm, int slot, int index)
+{
+	u8 *d = (u8*) dm + index;
+	char *s;
+
+	if (dmi_ident[slot])
+		return;
+
+	s = dmi_alloc(4);
+	if (!s)
+		return;
+
+	sprintf(s, "%u", *d & 0x7F);
+	dmi_ident[slot] = s;
+}
+
 static void __init dmi_save_devices(struct dmi_header *dm)
 {
 	int i, count = (dm->length - sizeof(struct dmi_header)) / 2;
@@ -192,11 +238,21 @@ static void __init dmi_decode(struct dmi
 		dmi_save_ident(dm, DMI_PRODUCT_NAME, 5);
 		dmi_save_ident(dm, DMI_PRODUCT_VERSION, 6);
 		dmi_save_ident(dm, DMI_PRODUCT_SERIAL, 7);
+		dmi_save_uuid(dm, DMI_PRODUCT_UUID, 8);
 		break;
 	case 2:		/* Base Board Information */
 		dmi_save_ident(dm, DMI_BOARD_VENDOR, 4);
 		dmi_save_ident(dm, DMI_BOARD_NAME, 5);
 		dmi_save_ident(dm, DMI_BOARD_VERSION, 6);
+		dmi_save_ident(dm, DMI_BOARD_SERIAL, 7);
+		dmi_save_ident(dm, DMI_BOARD_ASSET_TAG, 8);
+		break;
+	case 3:		/* Chassis Information */
+		dmi_save_ident(dm, DMI_CHASSIS_VENDOR, 4);
+		dmi_save_type(dm, DMI_CHASSIS_TYPE, 5);
+		dmi_save_ident(dm, DMI_CHASSIS_VERSION, 6);
+		dmi_save_ident(dm, DMI_CHASSIS_SERIAL, 7);
+		dmi_save_ident(dm, DMI_CHASSIS_ASSET_TAG, 8);
 		break;
 	case 10:	/* Onboard Devices Information */
 		dmi_save_devices(dm);
@@ -243,18 +299,20 @@ void __init dmi_scan_machine(void)
 		if (efi.smbios == EFI_INVALID_TABLE_ADDR)
 			goto out;
 
-               /* This is called as a core_initcall() because it isn't
-                * needed during early boot.  This also means we can
-                * iounmap the space when we're done with it.
-		*/
+		/* This is called as a core_initcall() because it isn't
+		 * needed during early boot.  This also means we can
+		 * iounmap the space when we're done with it.
+		 */
 		p = dmi_ioremap(efi.smbios, 32);
 		if (p == NULL)
 			goto out;
 
 		rc = dmi_present(p + 0x10); /* offset of _DMI_ string */
 		dmi_iounmap(p, 32);
-		if (!rc)
+		if (!rc) {
+			dmi_available = 1;
 			return;
+		}
 	}
 	else {
 		/*
@@ -268,8 +326,10 @@ void __init dmi_scan_machine(void)
 
 		for (q = p; q < p + 0x10000; q += 16) {
 			rc = dmi_present(q);
-			if (!rc)
+			if (!rc) {
+				dmi_available = 1;
 				return;
+			}
 		}
 	}
  out:	printk(KERN_INFO "DMI not present or invalid.\n");
@@ -404,3 +464,4 @@ int dmi_get_year(int field)
 
 	return year;
 }
+
--- a/drivers/misc/msi-laptop.c
+++ b/drivers/misc/msi-laptop.c
@@ -23,6 +23,8 @@
  * msi-laptop.c - MSI S270 laptop support. This laptop is sold under
  * various brands, including "Cytron/TCM/Medion/Tchibo MD96100".
  *
+ * Driver also supports S271, S420 models.
+ *
  * This driver exports a few files in /sys/devices/platform/msi-laptop-pf/:
  *
  *   lcd_level - Screen brightness: contains a single integer in the
@@ -281,25 +283,56 @@ static struct platform_device *msipf_dev
 
 /* Initialization */
 
+static int dmi_check_cb(struct dmi_system_id *id)
+{
+        printk("msi-laptop: Identified laptop model '%s'.\n", id->ident);
+        return 0;
+}
+
 static struct dmi_system_id __initdata msi_dmi_table[] = {
 	{
 		.ident = "MSI S270",
 		.matches = {
 			DMI_MATCH(DMI_SYS_VENDOR, "MICRO-STAR INT'L CO.,LTD"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "MS-1013"),
-		}
+			DMI_MATCH(DMI_PRODUCT_VERSION, "0131"),
+			DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-STAR INT'L CO.,LTD")
+		},
+		.callback = dmi_check_cb
+	},
+	{
+		.ident = "MSI S271",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "MS-1058"),
+			DMI_MATCH(DMI_PRODUCT_VERSION, "0581"),
+			DMI_MATCH(DMI_BOARD_NAME, "MS-1058")
+		},
+		.callback = dmi_check_cb
+	},
+	{
+		.ident = "MSI S420",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "MS-1412"),
+			DMI_MATCH(DMI_BOARD_VENDOR, "MSI"),
+			DMI_MATCH(DMI_BOARD_NAME, "MS-1412")
+		},
+		.callback = dmi_check_cb
 	},
 	{
 		.ident = "Medion MD96100",
 		.matches = {
 			DMI_MATCH(DMI_SYS_VENDOR, "NOTEBOOK"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "SAM2000"),
-		}
+			DMI_MATCH(DMI_PRODUCT_VERSION, "0131"),
+			DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-STAR INT'L CO.,LTD")
+		},
+		.callback = dmi_check_cb
 	},
 	{ }
 };
 
-
 static int __init msi_init(void)
 {
 	int ret;
@@ -394,3 +427,8 @@ MODULE_AUTHOR("Lennart Poettering");
 MODULE_DESCRIPTION("MSI Laptop Support");
 MODULE_VERSION(MSI_DRIVER_VERSION);
 MODULE_LICENSE("GPL");
+
+MODULE_ALIAS("dmi:*:svnMICRO-STARINT'LCO.,LTD:pnMS-1013:pvr0131*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");
+MODULE_ALIAS("dmi:*:svnMicro-StarInternational:pnMS-1058:pvr0581:rvnMSI:rnMS-1058:*:ct10:*");
+MODULE_ALIAS("dmi:*:svnMicro-StarInternational:pnMS-1412:*:rvnMSI:rnMS-1412:*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");
+MODULE_ALIAS("dmi:*:svnNOTEBOOK:pnSAM2000:pvr0131*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");
--- a/include/linux/dmi.h
+++ b/include/linux/dmi.h
@@ -12,9 +12,17 @@ enum dmi_field {
 	DMI_PRODUCT_NAME,
 	DMI_PRODUCT_VERSION,
 	DMI_PRODUCT_SERIAL,
+	DMI_PRODUCT_UUID,
 	DMI_BOARD_VENDOR,
 	DMI_BOARD_NAME,
 	DMI_BOARD_VERSION,
+	DMI_BOARD_SERIAL,
+	DMI_BOARD_ASSET_TAG,
+	DMI_CHASSIS_VENDOR,
+	DMI_CHASSIS_TYPE,
+	DMI_CHASSIS_VERSION,
+	DMI_CHASSIS_SERIAL,
+	DMI_CHASSIS_ASSET_TAG,
 	DMI_STRING_MAX,
 };
 
From: Adrian Bunk <bunk at stusta.de>

Make the needlessly global dmi_id_init() static.

Signed-off-by: Adrian Bunk <bunk at stusta.de>
Cc: Lennart Poettering <mzxreary at 0pointer.de>
Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
---

 drivers/firmware/dmi-id.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff -puN drivers/firmware/dmi-id.c~fix-2-gregkh-driver-dmi-based-module-autoloading drivers/firmware/dmi-id.c
--- a/drivers/firmware/dmi-id.c~fix-2-gregkh-driver-dmi-based-module-autoloading
+++ a/drivers/firmware/dmi-id.c
@@ -161,7 +161,7 @@ static struct device *dmi_dev;
 
 extern int dmi_available;
 
-int __init dmi_id_init(void)
+static int __init dmi_id_init(void)
 {
 	int ret, i;
 
_


--- NEW FILE patch-2.6.22-rc5-git8.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD8DBQBGfMVsyGugalF9Dw4RAm84AJ9s5k7Kva4n4tz+lTiRP5MLr8lPLwCdGZK/
H1pGgfaI0o9l2Xgbsrt4Nvk=
=5AVM
-----END PGP SIGNATURE-----


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/.cvsignore,v
retrieving revision 1.634
retrieving revision 1.635
diff -u -r1.634 -r1.635
--- .cvsignore	22 Jun 2007 18:09:10 -0000	1.634
+++ .cvsignore	24 Jun 2007 03:42:11 -0000	1.635
@@ -4,4 +4,4 @@
 kernel-2.6.21
 linux-2.6.21.tar.bz2
 patch-2.6.22-rc5.bz2
-patch-2.6.22-rc5-git6.bz2
+patch-2.6.22-rc5-git8.bz2


Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel-2.6.spec,v
retrieving revision 1.3234
retrieving revision 1.3235
diff -u -r1.3234 -r1.3235
--- kernel-2.6.spec	22 Jun 2007 18:09:10 -0000	1.3234
+++ kernel-2.6.spec	24 Jun 2007 03:42:11 -0000	1.3235
@@ -414,7 +414,7 @@
 %else
 # Here should be only the patches up to the upstream canonical Linus tree.
 Patch00: patch-2.6.22-rc5.bz2
-Patch01: patch-2.6.22-rc5-git6.bz2
+Patch01: patch-2.6.22-rc5-git8.bz2
 %endif
 
 %if !%{nopatches}
@@ -496,6 +496,7 @@
 Patch870: xen-11668-hvm_disable_fix.patch
 Patch880: xen-dom0-reboot.patch
 Patch900: linux-2.6-sched-cfs.patch
+Patch1000: linux-2.6-dmi-based-module-autoloading.patch
 
 %endif
 
@@ -905,7 +906,7 @@
 
 # Update to latest upstream.
 ApplyPatch patch-2.6.22-rc5.bz2
-ApplyPatch patch-2.6.22-rc5-git6.bz2
+ApplyPatch patch-2.6.22-rc5-git8.bz2
 
 %endif
 %if !%{nopatches}
@@ -1134,6 +1135,9 @@
 ApplyPatch linux-2.6-warnings-emptymacros.patch
 ApplyPatch linux-2.6-warnings-register.patch
 
+# DMI based module autoloading.
+ApplyPatch linux-2.6-dmi-based-module-autoloading.patch
+
 # END OF PATCH APPLICATIONS
 %endif
 
@@ -2084,6 +2088,13 @@
 %endif
 
 %changelog
+* Sat Jun 23 2007 Dave Jones <davej at redhat.com>
+- DMI based module autoloading.
+
+* Sat Jun 23 2007 Dave Jones <davej at redhat.com>
+- 2.6.22-rc5-git8.
+- Update to latest upstream cfs scheduler.
+
 * Fri Jun 22 2007 Dave Jones <davej at redhat.com>
 - 2.6.22-rc5-git6.
 

linux-2.6-sched-cfs.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.5 -r 1.6 linux-2.6-sched-cfs.patch
Index: linux-2.6-sched-cfs.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-sched-cfs.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- linux-2.6-sched-cfs.patch	22 Jun 2007 18:09:10 -0000	1.5
+++ linux-2.6-sched-cfs.patch	24 Jun 2007 03:42:12 -0000	1.6
@@ -1,7 +1,7 @@
-Index: linux/Documentation/kernel-parameters.txt
+Index: linux-cfs-2.6.22-git.q/Documentation/kernel-parameters.txt
 ===================================================================
---- linux.orig/Documentation/kernel-parameters.txt
-+++ linux/Documentation/kernel-parameters.txt
+--- linux-cfs-2.6.22-git.q.orig/Documentation/kernel-parameters.txt
++++ linux-cfs-2.6.22-git.q/Documentation/kernel-parameters.txt
 @@ -1019,49 +1019,6 @@ and is between 256 and 4096 characters. 
  
  	mga=		[HW,DRM]
@@ -52,10 +52,10 @@
  	mousedev.tap_time=
  			[MOUSE] Maximum time between finger touching and
  			leaving touchpad surface for touch to be considered
-Index: linux/Documentation/sched-design-CFS.txt
+Index: linux-cfs-2.6.22-git.q/Documentation/sched-design-CFS.txt
 ===================================================================
 --- /dev/null
-+++ linux/Documentation/sched-design-CFS.txt
++++ linux-cfs-2.6.22-git.q/Documentation/sched-design-CFS.txt
 @@ -0,0 +1,119 @@
 +
 +This is the CFS scheduler.
@@ -176,10 +176,10 @@
 +   iterators of the scheduling modules are used. The balancing code got
 +   quite a bit simpler as a result.
 +
-Index: linux/arch/i386/kernel/smpboot.c
+Index: linux-cfs-2.6.22-git.q/arch/i386/kernel/smpboot.c
 ===================================================================
---- linux.orig/arch/i386/kernel/smpboot.c
-+++ linux/arch/i386/kernel/smpboot.c
+--- linux-cfs-2.6.22-git.q.orig/arch/i386/kernel/smpboot.c
++++ linux-cfs-2.6.22-git.q/arch/i386/kernel/smpboot.c
 @@ -941,17 +941,6 @@ exit:
  }
  #endif
@@ -206,19 +206,10 @@
  
  	set_cpu_sibling_map(0);
  
-Index: linux/arch/i386/kernel/syscall_table.S
+Index: linux-cfs-2.6.22-git.q/arch/i386/kernel/tsc.c
 ===================================================================
---- linux.orig/arch/i386/kernel/syscall_table.S
-+++ linux/arch/i386/kernel/syscall_table.S
-@@ -323,3 +323,4 @@ ENTRY(sys_call_table)
- 	.long sys_signalfd
- 	.long sys_timerfd
- 	.long sys_eventfd
-+	.long sys_sched_yield_to
-Index: linux/arch/i386/kernel/tsc.c
-===================================================================
---- linux.orig/arch/i386/kernel/tsc.c
-+++ linux/arch/i386/kernel/tsc.c
+--- linux-cfs-2.6.22-git.q.orig/arch/i386/kernel/tsc.c
++++ linux-cfs-2.6.22-git.q/arch/i386/kernel/tsc.c
 @@ -4,6 +4,7 @@
   * See comments there for proper credits.
   */
@@ -250,10 +241,10 @@
  	if (!tsc_unstable) {
  		tsc_unstable = 1;
  		tsc_enabled = 0;
-Index: linux/arch/ia64/kernel/setup.c
+Index: linux-cfs-2.6.22-git.q/arch/ia64/kernel/setup.c
 ===================================================================
---- linux.orig/arch/ia64/kernel/setup.c
-+++ linux/arch/ia64/kernel/setup.c
+--- linux-cfs-2.6.22-git.q.orig/arch/ia64/kernel/setup.c
++++ linux-cfs-2.6.22-git.q/arch/ia64/kernel/setup.c
 @@ -805,7 +805,6 @@ static void __cpuinit
  get_max_cacheline_size (void)
  {
@@ -281,10 +272,10 @@
  	if (max > ia64_max_cacheline_size)
  		ia64_max_cacheline_size = max;
  }
-Index: linux/arch/mips/kernel/smp.c
+Index: linux-cfs-2.6.22-git.q/arch/mips/kernel/smp.c
 ===================================================================
---- linux.orig/arch/mips/kernel/smp.c
-+++ linux/arch/mips/kernel/smp.c
+--- linux-cfs-2.6.22-git.q.orig/arch/mips/kernel/smp.c
++++ linux-cfs-2.6.22-git.q/arch/mips/kernel/smp.c
 @@ -51,16 +51,6 @@ int __cpu_logical_map[NR_CPUS];		/* Map 
  EXPORT_SYMBOL(phys_cpu_present_map);
  EXPORT_SYMBOL(cpu_online_map);
@@ -310,10 +301,10 @@
  	plat_prepare_cpus(max_cpus);
  #ifndef CONFIG_HOTPLUG_CPU
  	cpu_present_map = cpu_possible_map;
-Index: linux/arch/sparc/kernel/smp.c
+Index: linux-cfs-2.6.22-git.q/arch/sparc/kernel/smp.c
 ===================================================================
---- linux.orig/arch/sparc/kernel/smp.c
-+++ linux/arch/sparc/kernel/smp.c
+--- linux-cfs-2.6.22-git.q.orig/arch/sparc/kernel/smp.c
++++ linux-cfs-2.6.22-git.q/arch/sparc/kernel/smp.c
 @@ -68,16 +68,6 @@ void __cpuinit smp_store_cpu_info(int id
  	cpu_data(id).prom_node = cpu_node;
  	cpu_data(id).mid = cpu_get_hwmid(cpu_node);
@@ -331,10 +322,10 @@
  	if (cpu_data(id).mid < 0)
  		panic("No MID found for CPU%d at node 0x%08d", id, cpu_node);
  }
-Index: linux/arch/sparc64/kernel/smp.c
+Index: linux-cfs-2.6.22-git.q/arch/sparc64/kernel/smp.c
 ===================================================================
---- linux.orig/arch/sparc64/kernel/smp.c
-+++ linux/arch/sparc64/kernel/smp.c
+--- linux-cfs-2.6.22-git.q.orig/arch/sparc64/kernel/smp.c
++++ linux-cfs-2.6.22-git.q/arch/sparc64/kernel/smp.c
 @@ -1163,32 +1163,6 @@ int setup_profiling_timer(unsigned int m
  	return -EINVAL;
  }
@@ -376,10 +367,31 @@
  }
  
  void __devinit smp_prepare_boot_cpu(void)
-Index: linux/fs/proc/array.c
+Index: linux-cfs-2.6.22-git.q/block/cfq-iosched.c
+===================================================================
+--- linux-cfs-2.6.22-git.q.orig/block/cfq-iosched.c
++++ linux-cfs-2.6.22-git.q/block/cfq-iosched.c
+@@ -1278,6 +1278,8 @@ static void cfq_init_prio_data(struct cf
+ 			/*
+ 			 * no prio set, place us in the middle of the BE classes
+ 			 */
++			if (tsk->policy == SCHED_IDLE)
++				goto set_class_idle;
+ 			cfqq->ioprio = task_nice_ioprio(tsk);
+ 			cfqq->ioprio_class = IOPRIO_CLASS_BE;
+ 			break;
+@@ -1290,6 +1292,7 @@ static void cfq_init_prio_data(struct cf
+ 			cfqq->ioprio_class = IOPRIO_CLASS_BE;
+ 			break;
+ 		case IOPRIO_CLASS_IDLE:
++ set_class_idle:
+ 			cfqq->ioprio_class = IOPRIO_CLASS_IDLE;
+ 			cfqq->ioprio = 7;
+ 			cfq_clear_cfqq_idle_window(cfqq);
+Index: linux-cfs-2.6.22-git.q/fs/proc/array.c
 ===================================================================
---- linux.orig/fs/proc/array.c
-+++ linux/fs/proc/array.c
+--- linux-cfs-2.6.22-git.q.orig/fs/proc/array.c
++++ linux-cfs-2.6.22-git.q/fs/proc/array.c
 @@ -165,7 +165,6 @@ static inline char * task_state(struct t
  	rcu_read_lock();
  	buffer += sprintf(buffer,
@@ -502,10 +514,10 @@
  		cputime_to_clock_t(cutime),
  		cputime_to_clock_t(cstime),
  		priority,
-Index: linux/fs/proc/base.c
+Index: linux-cfs-2.6.22-git.q/fs/proc/base.c
 ===================================================================
---- linux.orig/fs/proc/base.c
-+++ linux/fs/proc/base.c
+--- linux-cfs-2.6.22-git.q.orig/fs/proc/base.c
++++ linux-cfs-2.6.22-git.q/fs/proc/base.c
 @@ -296,7 +296,7 @@ static int proc_pid_wchan(struct task_st
   */
  static int proc_pid_schedstat(struct task_struct *task, char *buffer)
@@ -598,10 +610,10 @@
  	INF("cmdline",   S_IRUGO, pid_cmdline),
  	INF("stat",      S_IRUGO, tid_stat),
  	INF("statm",     S_IRUGO, pid_statm),
-Index: linux/include/asm-generic/bitops/sched.h
+Index: linux-cfs-2.6.22-git.q/include/asm-generic/bitops/sched.h
 ===================================================================
---- linux.orig/include/asm-generic/bitops/sched.h
-+++ linux/include/asm-generic/bitops/sched.h
+--- linux-cfs-2.6.22-git.q.orig/include/asm-generic/bitops/sched.h
++++ linux-cfs-2.6.22-git.q/include/asm-generic/bitops/sched.h
 @@ -6,28 +6,23 @@
  
  /*
@@ -639,38 +651,10 @@
  #else
  #error BITS_PER_LONG not defined
  #endif
-Index: linux/include/asm-i386/unistd.h
-===================================================================
---- linux.orig/include/asm-i386/unistd.h
-+++ linux/include/asm-i386/unistd.h
-@@ -329,10 +329,11 @@
- #define __NR_signalfd		321
- #define __NR_timerfd		322
- #define __NR_eventfd		323
[...4074 lines suppressed...]
++static struct task_struct *load_balance_start_idle(struct rq *rq)
++{
++	return NULL;
++}
 +
-+static unsigned long update_load_fair(struct rq *rq)
++static void task_tick_idle(struct rq *rq, struct task_struct *curr)
 +{
-+	return update_load_cfs_rq(&rq->cfs);
 +}
 +
 +/*
-+ * All the scheduling class methods:
++ * Simple, special scheduling class for the per-CPU idle tasks:
 + */
-+struct sched_class fair_sched_class __read_mostly = {
-+	.enqueue_task		= enqueue_task_fair,
-+	.dequeue_task		= dequeue_task_fair,
-+	.yield_task		= yield_task_fair,
++struct sched_class idle_sched_class __read_mostly = {
++	/* no enqueue/yield_task for idle tasks */
 +
-+	.check_preempt_curr	= check_preempt_curr_fair,
++	/* dequeue is not valid, we print a debug message there: */
++	.dequeue_task		= dequeue_task_idle,
 +
-+	.pick_next_task		= pick_next_task_fair,
-+	.put_prev_task		= put_prev_task_fair,
++	.check_preempt_curr	= check_preempt_curr_idle,
 +
-+	.load_balance_start	= load_balance_start_fair,
-+	.load_balance_next	= load_balance_next_fair,
-+	.update_load		= update_load_fair,
-+	.task_tick		= task_tick_fair,
-+	.task_new		= task_new_fair,
++	.pick_next_task		= pick_next_task_idle,
++	.put_prev_task		= put_prev_task_idle,
++
++	.load_balance_start	= load_balance_start_idle,
++	/* no .load_balance_next for idle tasks */
++
++	.task_tick		= task_tick_idle,
++	/* no .task_new for idle tasks */
 +};
-Index: linux/kernel/sched_rt.c
+Index: linux-cfs-2.6.22-git.q/kernel/sched_rt.c
 ===================================================================
 --- /dev/null
-+++ linux/kernel/sched_rt.c
-@@ -0,0 +1,219 @@
++++ linux-cfs-2.6.22-git.q/kernel/sched_rt.c
+@@ -0,0 +1,215 @@
 +/*
 + * Real-Time Scheduling Class (mapped to the SCHED_FIFO and SCHED_RR
 + * policies)
@@ -5944,7 +6562,7 @@
 +}
 +
 +static void
-+yield_task_rt(struct rq *rq, struct task_struct *p, struct task_struct *p_to)
++yield_task_rt(struct rq *rq, struct task_struct *p)
 +{
 +	requeue_task_rt(rq, p);
 +}
@@ -6059,7 +6677,10 @@
 +	 * RR tasks need a special form of timeslice management.
 +	 * FIFO tasks have no timeslices.
 +	 */
-+	if ((p->policy == SCHED_RR) && !--p->time_slice) {
++	if (p->policy != SCHED_RR)
++		return;
++
++	if (!(--p->time_slice)) {
 +		p->time_slice = static_prio_timeslice(p->static_prio);
 +		set_tsk_need_resched(p);
 +
@@ -6077,12 +6698,6 @@
 +	activate_task(rq, p, 1);
 +}
 +
-+static unsigned long update_load_rt(struct rq *rq)
-+{
-+	/* Temporal approach. */
-+	return rq->rt.raw_weighted_load;
-+}
-+
 +static struct sched_class rt_sched_class __read_mostly = {
 +	.enqueue_task		= enqueue_task_rt,
 +	.dequeue_task		= dequeue_task_rt,
@@ -6095,15 +6710,14 @@
 +
 +	.load_balance_start	= load_balance_start_rt,
 +	.load_balance_next	= load_balance_next_rt,
-+	.update_load		= update_load_rt,
 +
 +	.task_tick		= task_tick_rt,
 +	.task_new		= task_new_rt,
 +};
-Index: linux/kernel/sched_stats.h
+Index: linux-cfs-2.6.22-git.q/kernel/sched_stats.h
 ===================================================================
 --- /dev/null
-+++ linux/kernel/sched_stats.h
++++ linux-cfs-2.6.22-git.q/kernel/sched_stats.h
 @@ -0,0 +1,235 @@
 +
 +#ifdef CONFIG_SCHEDSTATS
@@ -6142,12 +6756,12 @@
 +		/* domain-specific stats */
 +		preempt_disable();
 +		for_each_domain(cpu, sd) {
-+			enum idle_type itype;
++			enum cpu_idle_type itype;
 +			char mask_str[NR_CPUS];
 +
 +			cpumask_scnprintf(mask_str, NR_CPUS, sd->span);
 +			seq_printf(seq, "domain%d %s", dcnt++, mask_str);
-+			for (itype = SCHED_IDLE; itype < MAX_IDLE_TYPES;
++			for (itype = CPU_IDLE; itype < CPU_MAX_IDLE_TYPES;
 +					itype++) {
 +				seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu "
 +						"%lu",
@@ -6340,10 +6954,10 @@
 +#define sched_info_switch(t, next)	do { } while (0)
 +#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */
 +
-Index: linux/kernel/softirq.c
+Index: linux-cfs-2.6.22-git.q/kernel/softirq.c
 ===================================================================
---- linux.orig/kernel/softirq.c
-+++ linux/kernel/softirq.c
+--- linux-cfs-2.6.22-git.q.orig/kernel/softirq.c
++++ linux-cfs-2.6.22-git.q/kernel/softirq.c
 @@ -488,7 +488,6 @@ void __init softirq_init(void)
  
  static int ksoftirqd(void * __bind_cpu)
@@ -6352,16 +6966,18 @@
  	current->flags |= PF_NOFREEZE;
  
  	set_current_state(TASK_INTERRUPTIBLE);
-Index: linux/kernel/sysctl.c
+Index: linux-cfs-2.6.22-git.q/kernel/sysctl.c
 ===================================================================
---- linux.orig/kernel/sysctl.c
-+++ linux/kernel/sysctl.c
-@@ -206,8 +206,60 @@ static ctl_table root_table[] = {
+--- linux-cfs-2.6.22-git.q.orig/kernel/sysctl.c
++++ linux-cfs-2.6.22-git.q/kernel/sysctl.c
+@@ -206,8 +206,84 @@ static ctl_table root_table[] = {
  	{ .ctl_name = 0 }
  };
  
-+static unsigned long min_sched_granularity_ns = 100000; /* 100 usecs */
-+static unsigned long max_sched_granularity_ns = 1000000000; /* 1 second */
++static unsigned long min_sched_granularity_ns = 100000;		/* 100 usecs */
++static unsigned long max_sched_granularity_ns = 1000000000;	/* 1 second */
++static unsigned long min_wakeup_granularity_ns;			/* 0 usecs */
++static unsigned long max_wakeup_granularity_ns = 1000000000;	/* 1 second */
 +
  static ctl_table kern_table[] = {
  	{
@@ -6377,14 +6993,36 @@
 +	},
 +	{
 +		.ctl_name	= CTL_UNNUMBERED,
++		.procname	= "sched_wakeup_granularity_ns",
++		.data		= &sysctl_sched_wakeup_granularity,
++		.maxlen		= sizeof(unsigned int),
++		.mode		= 0644,
++		.proc_handler	= &proc_dointvec_minmax,
++		.strategy	= &sysctl_intvec,
++		.extra1		= &min_wakeup_granularity_ns,
++		.extra2		= &max_wakeup_granularity_ns,
++	},
++	{
++		.ctl_name	= CTL_UNNUMBERED,
 +		.procname	= "sched_batch_wakeup_granularity_ns",
 +		.data		= &sysctl_sched_batch_wakeup_granularity,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= &proc_dointvec_minmax,
 +		.strategy	= &sysctl_intvec,
-+		.extra1		= &min_sched_granularity_ns,
-+		.extra2		= &max_sched_granularity_ns,
++		.extra1		= &min_wakeup_granularity_ns,
++		.extra2		= &max_wakeup_granularity_ns,
++	},
++	{
++		.ctl_name	= CTL_UNNUMBERED,
++		.procname	= "sched_stat_granularity_ns",
++		.data		= &sysctl_sched_stat_granularity,
++		.maxlen		= sizeof(unsigned int),
++		.mode		= 0644,
++		.proc_handler	= &proc_dointvec_minmax,
++		.strategy	= &sysctl_intvec,
++		.extra1		= &min_wakeup_granularity_ns,
++		.extra2		= &max_wakeup_granularity_ns,
 +	},
 +	{
 +		.ctl_name	= CTL_UNNUMBERED,


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/sources,v
retrieving revision 1.599
retrieving revision 1.600
diff -u -r1.599 -r1.600
--- sources	22 Jun 2007 18:09:10 -0000	1.599
+++ sources	24 Jun 2007 03:42:12 -0000	1.600
@@ -1,3 +1,3 @@
 1b515f588078dfa7f4bab2634bd17e80  linux-2.6.21.tar.bz2
 807de5a9464e23dfc6336ddc1c07c24f  patch-2.6.22-rc5.bz2
-88093526ce9b627e25b3995225ca63d9  patch-2.6.22-rc5-git6.bz2
+5051671283dc0ded75c5952c896fbc54  patch-2.6.22-rc5-git8.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/upstream,v
retrieving revision 1.521
retrieving revision 1.522
diff -u -r1.521 -r1.522
--- upstream	22 Jun 2007 18:09:10 -0000	1.521
+++ upstream	24 Jun 2007 03:42:12 -0000	1.522
@@ -1,3 +1,3 @@
 linux-2.6.21.tar.bz2
 patch-2.6.22-rc5.bz2
-patch-2.6.22-rc5-git6.bz2
+patch-2.6.22-rc5-git8.bz2


--- patch-2.6.22-rc5-git6.bz2.sign DELETED ---




More information about the fedora-extras-commits mailing list