rpms/kernel/FC-3 jwltest-acpi-dsdt-initrd.patch, NONE, 1.1.20.1 jwltest-bonding-sysfs.patch, NONE, 1.1.38.1 jwltest-e1000-workqueue-flush.patch, NONE, 1.1.42.1 jwltest-ipw2100-1_1_0.patch, NONE, 1.1.40.1 jwltest-pci-d3hot-d0.patch, NONE, 1.1.6.1 modsign_exclude, NONE, 1.1.22.1 kernel-2.6.spec, 1.873, 1.873.2.1
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Wed Aug 31 20:40:51 UTC 2005
Author: linville
Update of /cvs/dist/rpms/kernel/FC-3
In directory cvs.devel.redhat.com:/tmp/cvs-serv17851
Modified Files:
Tag: private-linville-fc3-jwltest-22-branch
kernel-2.6.spec
Added Files:
Tag: private-linville-fc3-jwltest-22-branch
jwltest-acpi-dsdt-initrd.patch jwltest-bonding-sysfs.patch
jwltest-e1000-workqueue-flush.patch
jwltest-ipw2100-1_1_0.patch jwltest-pci-d3hot-d0.patch
modsign_exclude
Log Message:
jwltest-acpi-dsdt-initrd.patch:
drivers/acpi/Kconfig | 13 ++++
drivers/acpi/osl.c | 115 +++++++++++++++++++++++++++++++++++++-------
drivers/acpi/tables/tbget.c | 8 ++-
init/main.c | 16 +++---
4 files changed, 126 insertions(+), 26 deletions(-)
--- NEW FILE jwltest-acpi-dsdt-initrd.patch ---
--- linux-2.6.11/drivers/acpi/Kconfig.orig 2005-06-20 14:34:51.799322067 -0400
+++ linux-2.6.11/drivers/acpi/Kconfig 2005-06-20 14:31:03.953672203 -0400
@@ -343,4 +343,17 @@ config ACPI_CONTAINER
This is the ACPI generic container driver which supports
ACPI0004, PNP0A05 and PNP0A06 devices
+config ACPI_INITRD
+ bool "Read DSDT from initrd or initramfs"
+ depends on ACPI && BLK_DEV_INITRD && !ACPI_CUSTOM_DSDT
+ default n
+ help
+ The DSDT (Differentiated System Description Table) often needs to be
+ overridden because of broken BIOS implementations. If you want to use
+ a customized DSDT, please use the mkinitrd tool (mkinitrd package) to
+ attach the DSDT to the initrd or initramfs
+ (see http://gaugusch.at/kernel.shtml for details)
+ If there is no DSDT found in the initrd, the DSDT from the BIOS is
+ used. It is save to say yes here.
+
endmenu
--- linux-2.6.11/drivers/acpi/osl.c.orig 2005-06-20 14:34:51.793322866 -0400
+++ linux-2.6.11/drivers/acpi/osl.c 2005-06-20 14:31:03.955671937 -0400
@@ -44,7 +44,10 @@
#include <asm/uaccess.h>
#include <linux/efi.h>
-
+#ifdef CONFIG_ACPI_INITRD
+#include<linux/syscalls.h>
+#include <linux/initrd.h>
+#endif
#define _COMPONENT ACPI_OS_SERVICES
ACPI_MODULE_NAME ("osl")
@@ -246,25 +249,105 @@ acpi_os_predefined_override (const struc
return AE_OK;
}
-acpi_status
-acpi_os_table_override (struct acpi_table_header *existing_table,
- struct acpi_table_header **new_table)
-{
- if (!existing_table || !new_table)
- return AE_BAD_PARAMETER;
+#ifdef CONFIG_ACPI_INITRD
+static char *
+acpi_find_dsdt_initrd(void)
+{
+ static const char signature[] = "INITRDDSDT123DSDT123";
+ char *dsdt_start = NULL;
+ char *dsdt_buffer = NULL;
+ unsigned long len = 0, len2 = 0;
+ int fd;
+ char ramfs_dsdt_name[10] = "/DSDT.aml";
+ struct kstat stat;
+
+ /* try to get dsdt from tail of initrd */
+ if ((fd = sys_open(ramfs_dsdt_name, O_RDONLY, 0)) < 0) {
+ if (initrd_start) {
+ char *data = (char *)initrd_start;
+
+ printk(KERN_INFO PREFIX "Looking for DSDT in initrd...");
+
+ /* Search for the start signature */
+ while (data < (char *)initrd_end - sizeof(signature) - 4) {
+ if (!memcmp(data, signature, sizeof(signature))) {
+ data += sizeof(signature);
+ if (!memcmp(data, "DSDT", 4))
+ dsdt_start = data;
+ break;
+ }
+ data++;
+ }
-#ifdef CONFIG_ACPI_CUSTOM_DSDT
- if (strncmp(existing_table->signature, "DSDT", 4) == 0)
- *new_table = (struct acpi_table_header*)AmlCode;
- else
+ if (dsdt_start){
+ printk(PREFIX " found at offset %zu",
+ dsdt_start - (char *)initrd_start);
+ len = (char*) initrd_end - dsdt_start;
+ printk(", size: %lu bytes\n", len);
+ dsdt_buffer = ACPI_MEM_ALLOCATE(len + 1);
+ memcpy(dsdt_buffer, dsdt_start, len);
+ *(dsdt_buffer + len + 1)= '\0';
+ }
+ else
+ printk(" not found!\n");
+ }
+ }
+ /* get dsdt from initramfs */
+ else{
+ printk(KERN_INFO PREFIX "Looking for DSDT in initramfs...");
+ if (vfs_stat(ramfs_dsdt_name, &stat) < 0){
+ printk ("error getting stats for file %s\n", ramfs_dsdt_name);
+ return NULL;
+ }
+
+ len = stat.size;
+ dsdt_buffer = ACPI_MEM_ALLOCATE(len + 1);
+ if (!dsdt_buffer) {
+ printk("Could not allocate %lu bytes of memory\n", len);
+ return NULL;
+ }
+ printk (" found %s ...", ramfs_dsdt_name);
+
+ len2 = sys_read (fd, (char __user *) dsdt_buffer, len);
+ if (len2 < len ){
+ printk(PREFIX "\nError trying to read %lu bytes from %s\n",
+ len, ramfs_dsdt_name);
+ ACPI_MEM_FREE (dsdt_buffer);
+ dsdt_buffer = NULL;
+ }
+ else{
+ printk(" successfully read %lu bytes from %s\n",
+ len, ramfs_dsdt_name);
+ *(dsdt_buffer + len + 1) = '\0';
+ }
+ }
+ if (!dsdt_buffer)
+ printk(" not found!\n");
+ return dsdt_buffer;
+}
+#endif
+
+acpi_status
+ acpi_os_table_override (struct acpi_table_header *existing_table,
+ struct acpi_table_header **new_table)
+ {
+ if (!existing_table || !new_table)
+ return AE_BAD_PARAMETER;
+
*new_table = NULL;
-#else
- *new_table = NULL;
+ if (strncmp(existing_table->signature, "DSDT", 4) == 0) {
+#ifdef CONFIG_ACPI_CUSTOM_DSDT
+ *new_table = (struct acpi_table_header*)AmlCode;
+#elif defined(CONFIG_ACPI_INITRD)
+ *new_table = (struct acpi_table_header*)acpi_find_dsdt_initrd();
#endif
+ if (*new_table)
+ printk(KERN_INFO PREFIX "Using customized DSDT\n");
+ }
return AE_OK;
-}
-
-static irqreturn_t
+ }
+
+ static irqreturn_t
acpi_irq(int irq, void *dev_id, struct pt_regs *regs)
{
return (*acpi_irq_handler)(acpi_irq_context) ? IRQ_HANDLED : IRQ_NONE;
--- linux-2.6.11/drivers/acpi/tables/tbget.c.orig 2005-06-20 14:34:51.806321134 -0400
+++ linux-2.6.11/drivers/acpi/tables/tbget.c 2005-06-20 14:31:03.953672203 -0400
@@ -45,7 +45,6 @@
#include <acpi/acpi.h>
#include <acpi/actables.h>
-
#define _COMPONENT ACPI_TABLES
ACPI_MODULE_NAME ("tbget")
@@ -287,12 +286,17 @@ acpi_tb_table_override (
acpi_format_exception (status)));
return_ACPI_STATUS (status);
}
-
+
/* Copy the table info */
ACPI_REPORT_INFO (("Table [%4.4s] replaced by host OS\n",
table_info->pointer->signature));
+#ifdef CONFIG_ACPI_INITRD
+ if (new_table)
+ ACPI_MEM_FREE(new_table);
+#endif
+
return_ACPI_STATUS (AE_OK);
}
--- linux-2.6.11/init/main.c.orig 2005-06-20 14:34:51.886310479 -0400
+++ linux-2.6.11/init/main.c 2005-06-20 14:31:14.939208891 -0400
@@ -508,8 +508,6 @@ asmlinkage void __init start_kernel(void
#endif
check_bugs();
- acpi_early_init(); /* before LAPIC and SMP init */
-
/* Do the rest non-__init'ed, we're now alive */
rest_init();
}
@@ -635,6 +633,14 @@ static int init(void * unused)
*/
child_reaper = current;
+ /*
+ * Do this before initcalls, because some drivers want to access
+ * firmware files.
+ */
+ populate_rootfs();
+
+ acpi_early_init(); /* before LAPIC and SMP init */
+
/* Sets up cpus_possible() */
smp_prepare_cpus(max_cpus);
@@ -643,12 +649,6 @@ static int init(void * unused)
fixup_cpu_present_map();
smp_init();
- /*
- * Do this before initcalls, because some drivers want to access
- * firmware files.
- */
- populate_rootfs();
-
do_basic_setup();
sched_init_smp();
jwltest-bonding-sysfs.patch:
Makefile | 2
bond_3ad.c | 74 ++-
bond_alb.c | 61 +-
bond_main.c | 408 +++++++++++------
bond_sysfs.c | 1348 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
bonding.h | 35 +
6 files changed, 1733 insertions(+), 195 deletions(-)
--- NEW FILE jwltest-bonding-sysfs.patch ---
--- /dev/null 2005-06-02 17:56:11.397464344 -0400
+++ linux-2.6.12/drivers/net/bonding/bond_sysfs.c 2005-08-31 16:36:59.342760640 -0400
@@ -0,0 +1,1348 @@
+
+/*
+ * Copyright(c) 2004 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ *
+ * Changes:
+ *
+ * 2004/12/12 - Mitch Williams <mitch.a.williams at intel dot com>
+ * - Initial creation of sysfs interface.
+ *
+ */
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/device.h>
+#include <linux/sysdev.h>
+#include <linux/fs.h>
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/in.h>
+#include <linux/sysfs.h>
+#include <linux/string.h>
+#include <linux/ctype.h>
+#include <linux/inet.h>
+#include <linux/rtnetlink.h>
+
+/* #define BONDING_DEBUG 1 */
+#include "bonding.h"
+#define to_class_dev(obj) container_of(obj,struct class_device,kobj)
+#define to_net_dev(class) container_of(class, struct net_device, class_dev)
+#define to_bond(cd) ((struct bonding *)(to_net_dev(cd)->priv))
+
+/*---------------------------- Declarations -------------------------------*/
+
+/* Macros for real simple parsing of text. */
+#define eat_nonalnum(str,whence,max) \
+ while (whence < max) {if (!isalnum(str[whence])) whence++; else break;};
+#define find_next_nonalpha(str,whence,max) \
+ while (whence < max) {if (isalnum(str[whence])) whence++; else break;};
+
+extern struct list_head bond_dev_list;
+extern struct bond_params bonding_defaults;
+extern struct bond_parm_tbl bond_mode_tbl[];
+extern struct bond_parm_tbl bond_lacp_tbl[];
+
+static struct class *netdev_class;
+/*--------------------------- Data Structures -----------------------------*/
+
+/* Bonding sysfs lock. Why can't we just use the subsytem lock?
+ * Because kobject_register tries to acquire the subsystem lock. If
+ * we already hold the lock (which we would if the user was creating
+ * a new bond through the sysfs interface), we deadlock.
+ */
+
+struct rw_semaphore bonding_rwsem;
+
+
+
+
+/*------------------------------ Functions --------------------------------*/
+
+/*
+ * "show" function for the bond_masters attribute.
+ * The class parameter is ignored.
+ */
+static ssize_t bonding_show_bonds(struct class *cls, char *buffer)
+{
+ int res = 0;
+ struct bonding *bond;
+
+ down_read(&(bonding_rwsem));
+
+ list_for_each_entry(bond, &bond_dev_list, bond_list) {
+ res += sprintf(buffer + res, "%s ",
+ bond->dev->name);
+ if (res > (PAGE_SIZE - IFNAMSIZ)) {
+ dprintk("eek! too many bonds!\n");
+ break;
+ }
+ }
+ res += sprintf(buffer + res, "\n");
+ res++;
+ up_read(&(bonding_rwsem));
+ return res;
+}
+
+/*
+ * "store" function for the bond_masters attribute. This is what
+ * creates and deletes entire bonds.
+ *
+ * The class parameter is ignored.
+ *
+ * This function uses the eat_nonalnum and eat_alnum macros, define
+ * above. Why not use sscanf()? Scanf can get strings, but can't filter
+ * out inappropriate characters. For example, we can't have bonds named
+ * "foo/bar" or "foo*bar" or "Does this work?" as these aren't valid
+ * filenames. While we could use scanf to get strings and then validate
+ * them, this is quicker.
+ * The above examples give us these results:
+ * "foo/bar" gives two bonds, "foo" and "bar".
+ * "foo*bar" gives two bonds, "foo" and "bar".
+ * "Does this work?" gives three bonds, "Does", "this", and "work".
+ */
+
+static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t count)
+{
+ char name[IFNAMSIZ];
+ int i, res, found, pos = 0;
+ struct bonding *bond;
+ struct bonding *nxt;
+
+ down_write(&(bonding_rwsem));
+ /* First process adds */
+ eat_nonalnum(buffer, pos, count);
+ /* Pos now points to the first alpha character. */
+ i = pos;
+ find_next_nonalpha(buffer, i, count);
+ /* i now points to the next character past the end of the bond name. */
+ if (i - pos >= IFNAMSIZ) {
+ printk(KERN_ERR DRV_NAME "Interface name %.*s too large! Ignoring.\n",
+ i - pos, buffer + pos);
+ up_write(&(bonding_rwsem));
+ return -EPERM;
+ }
+ /* Copy the bond name so we can deal with it separately. */
+ strncpy(name, buffer + pos, i - pos);
+ /* Don't forget the null terminator! */
+ name[i - pos] = 0;
+ while (strlen(name)) {
+ /* Got a bond name in name. Is it already in the list? */
+ found = 0;
+ list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list) {
+ if (strnicmp(bond->dev->name, name, IFNAMSIZ) == 0) {
+ /* Temporarily set a meaningless flag. When
+ * we get done with the loop, we'll check all of these.
+ * If the bond doesn't have this flag set, then we need
+ * to remove the bond. If the flag has it set, then
+ * we can just clear the flag.
+ */
+ bond->flags |= IFF_DYNAMIC;
+ found = 1;
+ break; /* Found it, so go to next name */
+ }
+ }
+ if (found == 0) {
+ printk(KERN_INFO DRV_NAME ": %s is being created...\n", name);
+ res = bond_create(name, &bonding_defaults, &bond);
+ if (res) {
+ up_write(&(bonding_rwsem));
+ printk(KERN_INFO DRV_NAME ": %s interface already exists. Bond creation failed.\n", name);
+ return res;
+ }
+ printk(KERN_INFO DRV_NAME ": %s created.\n", name);
+ /* Set the flag so we don't delete
+ * this interface in the loop below.
+ */
+ bond->flags |= IFF_DYNAMIC;
+ }
+ /* Scan for the next name. i still has the location of
+ * the char just past the end of the last name we handled.
+ */
+ pos = i;
+ eat_nonalnum(buffer, pos, count);
+ i = pos;
+ find_next_nonalpha(buffer, i, count);
+ if (i - pos >= IFNAMSIZ) {
+ printk(KERN_ERR DRV_NAME
+ ": %.*s interface name too large! Ignoring.\n",
+ i - pos, buffer + pos);
+ up_write(&(bonding_rwsem));
+ return -EPERM;
+ }
+ strncpy(name, buffer + pos, i - pos);
+ name[i - pos] = 0;
+ } /* end of while loop and end of input */
+
[...2346 lines suppressed...]
- "are connected to 802.3ad compliant switch ports\n");
+ printk(KERN_ERR DRV_NAME ": %s: An illegal loopback occurred on "
+ "adapter (%s). Check the configuration to verify that all "
+ "Adapters are connected to 802.3ad compliant switch ports\n",
+ port->slave->dev->master->name, port->slave->dev->name);
__release_rx_machine_lock(port);
return;
}
@@ -1378,8 +1378,9 @@ static void ad_port_selection_logic(stru
}
}
if (!curr_port) { // meaning: the port was related to an aggregator but was not on the aggregator port list
- printk(KERN_WARNING DRV_NAME ": Warning: Port %d (on %s) was "
+ printk(KERN_WARNING DRV_NAME ": %s: Warning: Port %d (on %s) was "
"related to aggregator %d but was not on its port list\n",
+ port->slave->dev->master->name,
port->actor_port_number, port->slave->dev->name,
port->aggregator->aggregator_identifier);
}
@@ -1450,7 +1451,8 @@ static void ad_port_selection_logic(stru
dprintk("Port %d joined LAG %d(new LAG)\n", port->actor_port_number, port->aggregator->aggregator_identifier);
} else {
- printk(KERN_ERR DRV_NAME ": Port %d (on %s) did not find a suitable aggregator\n",
+ printk(KERN_ERR DRV_NAME ": %s: Port %d (on %s) did not find a suitable aggregator\n",
+ port->slave->dev->master->name,
port->actor_port_number, port->slave->dev->name);
}
}
@@ -1582,8 +1584,9 @@ static void ad_agg_selection_logic(struc
// check if any partner replys
if (best_aggregator->is_individual) {
- printk(KERN_WARNING DRV_NAME ": Warning: No 802.3ad response from the link partner "
- "for any adapters in the bond\n");
+ printk(KERN_WARNING DRV_NAME ": %s: Warning: No 802.3ad response from "
+ "the link partner for any adapters in the bond\n",
+ best_aggregator->slave->dev->master->name);
}
// check if there are more than one aggregator
@@ -1915,7 +1918,8 @@ int bond_3ad_bind_slave(struct slave *sl
struct aggregator *aggregator;
if (bond == NULL) {
- printk(KERN_ERR "The slave %s is not attached to its bond\n", slave->dev->name);
+ printk(KERN_ERR DRV_NAME ": %s: The slave %s is not attached to its bond\n",
+ slave->dev->master->name, slave->dev->name);
return -1;
}
@@ -1990,7 +1994,9 @@ void bond_3ad_unbind_slave(struct slave
// if slave is null, the whole port is not initialized
if (!port->slave) {
- printk(KERN_WARNING DRV_NAME ": Trying to unbind an uninitialized port on %s\n", slave->dev->name);
+ printk(KERN_WARNING DRV_NAME ": Warning: %s: Trying to "
+ "unbind an uninitialized port on %s\n",
+ slave->dev->master->name, slave->dev->name);
return;
}
@@ -2021,7 +2027,8 @@ void bond_3ad_unbind_slave(struct slave
dprintk("Some port(s) related to LAG %d - replaceing with LAG %d\n", aggregator->aggregator_identifier, new_aggregator->aggregator_identifier);
if ((new_aggregator->lag_ports == port) && new_aggregator->is_active) {
- printk(KERN_INFO DRV_NAME ": Removing an active aggregator\n");
+ printk(KERN_INFO DRV_NAME ": %s: Removing an active aggregator\n",
+ aggregator->slave->dev->master->name);
// select new active aggregator
select_new_active_agg = 1;
}
@@ -2051,15 +2058,17 @@ void bond_3ad_unbind_slave(struct slave
ad_agg_selection_logic(__get_first_agg(port));
}
} else {
- printk(KERN_WARNING DRV_NAME ": Warning: unbinding aggregator, "
- "and could not find a new aggregator for its ports\n");
+ printk(KERN_WARNING DRV_NAME ": %s: Warning: unbinding aggregator, "
+ "and could not find a new aggregator for its ports\n",
+ slave->dev->master->name);
}
} else { // in case that the only port related to this aggregator is the one we want to remove
select_new_active_agg = aggregator->is_active;
// clear the aggregator
ad_clear_agg(aggregator);
if (select_new_active_agg) {
- printk(KERN_INFO "Removing an active aggregator\n");
+ printk(KERN_INFO DRV_NAME ": %s: Removing an active aggregator\n",
+ slave->dev->master->name);
// select new active aggregator
ad_agg_selection_logic(__get_first_agg(port));
}
@@ -2085,7 +2094,8 @@ void bond_3ad_unbind_slave(struct slave
// clear the aggregator
ad_clear_agg(temp_aggregator);
if (select_new_active_agg) {
- printk(KERN_INFO "Removing an active aggregator\n");
+ printk(KERN_INFO DRV_NAME ": %s: Removing an active aggregator\n",
+ slave->dev->master->name);
// select new active aggregator
ad_agg_selection_logic(__get_first_agg(port));
}
@@ -2131,7 +2141,8 @@ void bond_3ad_state_machine_handler(stru
// select the active aggregator for the bond
if ((port = __get_first_port(bond))) {
if (!port->slave) {
- printk(KERN_WARNING DRV_NAME ": Warning: bond's first port is uninitialized\n");
+ printk(KERN_WARNING DRV_NAME ": %s: Warning: bond's first port is "
+ "uninitialized\n", bond->dev->name);
goto re_arm;
}
@@ -2143,7 +2154,8 @@ void bond_3ad_state_machine_handler(stru
// for each port run the state machines
for (port = __get_first_port(bond); port; port = __get_next_port(port)) {
if (!port->slave) {
- printk(KERN_WARNING DRV_NAME ": Warning: Found an uninitialized port\n");
+ printk(KERN_WARNING DRV_NAME ": %s: Warning: Found an uninitialized "
+ "port\n", bond->dev->name);
goto re_arm;
}
@@ -2184,7 +2196,8 @@ static void bond_3ad_rx_indication(struc
port = &(SLAVE_AD_INFO(slave).port);
if (!port->slave) {
- printk(KERN_WARNING DRV_NAME ": Warning: port of slave %s is uninitialized\n", slave->dev->name);
+ printk(KERN_WARNING DRV_NAME ": %s: Warning: port of slave %s is "
+ "uninitialized\n", slave->dev->name, slave->dev->master->name);
return;
}
@@ -2230,8 +2243,9 @@ void bond_3ad_adapter_speed_changed(stru
// if slave is null, the whole port is not initialized
if (!port->slave) {
- printk(KERN_WARNING DRV_NAME ": Warning: speed changed for uninitialized port on %s\n",
- slave->dev->name);
+ printk(KERN_WARNING DRV_NAME ": Warning: %s: speed "
+ "changed for uninitialized port on %s\n",
+ slave->dev->master->name, slave->dev->name);
return;
}
@@ -2257,8 +2271,9 @@ void bond_3ad_adapter_duplex_changed(str
// if slave is null, the whole port is not initialized
if (!port->slave) {
- printk(KERN_WARNING DRV_NAME ": Warning: duplex changed for uninitialized port on %s\n",
- slave->dev->name);
+ printk(KERN_WARNING DRV_NAME ": %s: Warning: duplex changed "
+ "for uninitialized port on %s\n",
+ slave->dev->master->name, slave->dev->name);
return;
}
@@ -2285,8 +2300,9 @@ void bond_3ad_handle_link_change(struct
// if slave is null, the whole port is not initialized
if (!port->slave) {
- printk(KERN_WARNING DRV_NAME ": Warning: link status changed for uninitialized port on %s\n",
- slave->dev->name);
+ printk(KERN_WARNING DRV_NAME ": Warning: %s: link status changed for "
+ "uninitialized port on %s\n",
+ slave->dev->master->name, slave->dev->name);
return;
}
@@ -2364,7 +2380,8 @@ int bond_3ad_xmit_xor(struct sk_buff *sk
}
if (bond_3ad_get_active_agg_info(bond, &ad_info)) {
- printk(KERN_DEBUG "ERROR: bond_3ad_get_active_agg_info failed\n");
+ printk(KERN_DEBUG DRV_NAME ": %s: Error: "
+ "bond_3ad_get_active_agg_info failed\n", dev->name);
goto out;
}
@@ -2373,7 +2390,9 @@ int bond_3ad_xmit_xor(struct sk_buff *sk
if (slaves_in_agg == 0) {
/*the aggregator is empty*/
- printk(KERN_DEBUG "ERROR: active aggregator is empty\n");
+ printk(KERN_DEBUG DRV_NAME ": %s: Error: active "
+ "aggregator is empty\n",
+ dev->name);
goto out;
}
@@ -2391,7 +2410,8 @@ int bond_3ad_xmit_xor(struct sk_buff *sk
}
if (slave_agg_no >= 0) {
- printk(KERN_ERR DRV_NAME ": Error: Couldn't find a slave to tx on for aggregator ID %d\n", agg_id);
+ printk(KERN_ERR DRV_NAME ": %s: Error: Couldn't find a slave to tx on "
+ "for aggregator ID %d\n", dev->name, agg_id);
goto out;
}
jwltest-e1000-workqueue-flush.patch:
e1000_main.c | 2 ++
1 files changed, 2 insertions(+)
--- NEW FILE jwltest-e1000-workqueue-flush.patch ---
--- linux-2.6.11/drivers/net/e1000/e1000_main.c.orig 2005-03-18 15:28:40.346833843 -0500
+++ linux-2.6.11/drivers/net/e1000/e1000_main.c 2005-03-18 15:29:22.822164850 -0500
@@ -666,6 +666,8 @@ e1000_remove(struct pci_dev *pdev)
struct e1000_adapter *adapter = netdev->priv;
uint32_t manc;
+ flush_scheduled_work();
+
if(adapter->hw.mac_type >= e1000_82540 &&
adapter->hw.media_type == e1000_media_type_copper) {
manc = E1000_READ_REG(&adapter->hw, MANC);
jwltest-ipw2100-1_1_0.patch:
Documentation/networking/README.ipw2100 | 162
drivers/net/wireless/Kconfig | 55
drivers/net/wireless/Makefile | 4
drivers/net/wireless/ieee80211/ieee80211.h | 83
drivers/net/wireless/ieee80211/ieee80211_crypt.c | 4
drivers/net/wireless/ieee80211/ieee80211_crypt.h | 6
drivers/net/wireless/ieee80211/ieee80211_crypt_ccmp.c | 3
drivers/net/wireless/ieee80211/ieee80211_crypt_tkip.c | 3
drivers/net/wireless/ieee80211/ieee80211_crypt_wep.c | 4
drivers/net/wireless/ieee80211/ieee80211_module.c | 50
drivers/net/wireless/ieee80211/ieee80211_rx.c | 226
drivers/net/wireless/ieee80211/ieee80211_tx.c | 113
drivers/net/wireless/ieee80211/ieee80211_wx.c | 148
drivers/net/wireless/ipw2100.c | 8649 +++++++++++++++++
drivers/net/wireless/ipw2100.h | 1278 ++
drivers/net/wireless/ipw2100/LICENSE | 339
drivers/net/wireless/ipw2100/Makefile | 15
drivers/net/wireless/ipw2100/ipw2100.c | 8972 ------------------
drivers/net/wireless/ipw2100/ipw2100.h | 1287 --
19 files changed, 10407 insertions(+), 10994 deletions(-)
--- NEW FILE jwltest-ipw2100-1_1_0.patch ---
--- /dev/null 2004-02-23 16:02:56.000000000 -0500
+++ linux-2.6.11/drivers/net/wireless/ipw2100.h 2005-05-25 15:14:31.599405022 -0400
@@ -0,0 +1,1278 @@
+/******************************************************************************
+
+ Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of version 2 of the GNU General Public License as
+ published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+
+ Contact Information:
+ James P. Ketrenos <ipw2100-admin at linux.intel.com>
+ Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+
+******************************************************************************/
+#ifndef _IPW2100_H
+#define _IPW2100_H
+
+#include <linux/sched.h>
+#include <linux/interrupt.h>
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/list.h>
+#include <linux/delay.h>
+#include <linux/skbuff.h>
+#include <asm/io.h>
+#include <linux/socket.h>
+#include <linux/if_arp.h>
+#include <linux/wireless.h>
+#include <linux/version.h>
+#include <net/iw_handler.h> // new driver API
+
+#include "ieee80211.h"
+
+#include <linux/workqueue.h>
+
+#ifndef IRQ_NONE
+typedef void irqreturn_t;
+#define IRQ_NONE
+#define IRQ_HANDLED
+#define IRQ_RETVAL(x)
+#endif
+
+#if WIRELESS_EXT < 17
+#define IW_QUAL_QUAL_INVALID 0x10
+#define IW_QUAL_LEVEL_INVALID 0x20
+#define IW_QUAL_NOISE_INVALID 0x40
+#endif
+
+#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,6,5) )
+#define pci_dma_sync_single_for_cpu pci_dma_sync_single
+#define pci_dma_sync_single_for_device pci_dma_sync_single
+#endif
+
+#ifndef HAVE_FREE_NETDEV
+#define free_netdev(x) kfree(x)
+#endif
+
+
+
+struct ipw2100_priv;
+struct ipw2100_tx_packet;
+struct ipw2100_rx_packet;
+
+#ifdef CONFIG_IPW_DEBUG
+enum { IPW_DEBUG_ENABLED = 1 };
+extern u32 ipw2100_debug_level;
+#define IPW_DEBUG(level, message...) \
+do { \
+ if (ipw2100_debug_level & (level)) { \
+ printk(KERN_DEBUG "ipw2100: %c %s ", \
+ in_interrupt() ? 'I' : 'U', __FUNCTION__); \
+ printk(message); \
+ } \
+} while (0)
+#else
+enum { IPW_DEBUG_ENABLED = 0 };
+#define IPW_DEBUG(level, message...) do {} while (0)
+#endif /* CONFIG_IPW_DEBUG */
+
+#define IPW_DL_UNINIT 0x80000000
+#define IPW_DL_NONE 0x00000000
+#define IPW_DL_ALL 0x7FFFFFFF
+
+/*
+ * To use the debug system;
+ *
+ * If you are defining a new debug classification, simply add it to the #define
+ * list here in the form of:
+ *
+ * #define IPW_DL_xxxx VALUE
+ *
+ * shifting value to the left one bit from the previous entry. xxxx should be
+ * the name of the classification (for example, WEP)
+ *
+ * You then need to either add a IPW2100_xxxx_DEBUG() macro definition for your
+ * classification, or use IPW_DEBUG(IPW_DL_xxxx, ...) whenever you want
+ * to send output to that classification.
+ *
+ * To add your debug level to the list of levels seen when you perform
+ *
+ * % cat /proc/net/ipw2100/debug_level
+ *
+ * you simply need to add your entry to the ipw2100_debug_levels array.
+ *
+ * If you do not see debug_level in /proc/net/ipw2100 then you do not have
+ * CONFIG_IPW_DEBUG defined in your kernel configuration
+ *
+ */
+
+#define IPW_DL_ERROR BIT(0)
+#define IPW_DL_WARNING BIT(1)
+#define IPW_DL_INFO BIT(2)
+#define IPW_DL_WX BIT(3)
+#define IPW_DL_HC BIT(5)
+#define IPW_DL_STATE BIT(6)
+
+#define IPW_DL_NOTIF BIT(10)
+#define IPW_DL_SCAN BIT(11)
+#define IPW_DL_ASSOC BIT(12)
+#define IPW_DL_DROP BIT(13)
+
+#define IPW_DL_IOCTL BIT(14)
+#define IPW_DL_RF_KILL BIT(17)
+
+
+#define IPW_DL_MANAGE BIT(15)
+#define IPW_DL_FW BIT(16)
+
+#define IPW_DL_FRAG BIT(21)
+#define IPW_DL_WEP BIT(22)
+#define IPW_DL_TX BIT(23)
+#define IPW_DL_RX BIT(24)
+#define IPW_DL_ISR BIT(25)
+#define IPW_DL_IO BIT(26)
+#define IPW_DL_TRACE BIT(28)
+
+#define IPW_DEBUG_ERROR(f, a...) printk(KERN_ERR DRV_NAME ": " f, ## a)
+#define IPW_DEBUG_WARNING(f, a...) printk(KERN_WARNING DRV_NAME ": " f, ## a)
+#define IPW_DEBUG_INFO(f...) IPW_DEBUG(IPW_DL_INFO, ## f)
+#define IPW_DEBUG_WX(f...) IPW_DEBUG(IPW_DL_WX, ## f)
+#define IPW_DEBUG_SCAN(f...) IPW_DEBUG(IPW_DL_SCAN, ## f)
+#define IPW_DEBUG_NOTIF(f...) IPW_DEBUG(IPW_DL_NOTIF, ## f)
+#define IPW_DEBUG_TRACE(f...) IPW_DEBUG(IPW_DL_TRACE, ## f)
+#define IPW_DEBUG_RX(f...) IPW_DEBUG(IPW_DL_RX, ## f)
+#define IPW_DEBUG_TX(f...) IPW_DEBUG(IPW_DL_TX, ## f)
+#define IPW_DEBUG_ISR(f...) IPW_DEBUG(IPW_DL_ISR, ## f)
+#define IPW_DEBUG_MANAGEMENT(f...) IPW_DEBUG(IPW_DL_MANAGE, ## f)
+#define IPW_DEBUG_WEP(f...) IPW_DEBUG(IPW_DL_WEP, ## f)
+#define IPW_DEBUG_HC(f...) IPW_DEBUG(IPW_DL_HC, ## f)
+#define IPW_DEBUG_FRAG(f...) IPW_DEBUG(IPW_DL_FRAG, ## f)
+#define IPW_DEBUG_FW(f...) IPW_DEBUG(IPW_DL_FW, ## f)
+#define IPW_DEBUG_RF_KILL(f...) IPW_DEBUG(IPW_DL_RF_KILL, ## f)
+#define IPW_DEBUG_DROP(f...) IPW_DEBUG(IPW_DL_DROP, ## f)
+#define IPW_DEBUG_IO(f...) IPW_DEBUG(IPW_DL_IO, ## f)
+#define IPW_DEBUG_IOCTL(f...) IPW_DEBUG(IPW_DL_IOCTL, ## f)
+#define IPW_DEBUG_STATE(f, a...) IPW_DEBUG(IPW_DL_STATE | IPW_DL_ASSOC | IPW_DL_INFO, f, ## a)
+#define IPW_DEBUG_ASSOC(f, a...) IPW_DEBUG(IPW_DL_ASSOC | IPW_DL_INFO, f, ## a)
+
+
+#define VERIFY(f) \
+{ \
+ int status = 0; \
+ status = f; \
+ if(status) \
+ return status; \
+}
+
+enum {
+ IPW_HW_STATE_DISABLED = 1,
+ IPW_HW_STATE_ENABLED = 0
+};
+
+struct ssid_context {
+ char ssid[IW_ESSID_MAX_SIZE + 1];
+ int ssid_len;
+ unsigned char bssid[ETH_ALEN];
+ int port_type;
+ int channel;
+
+};
+
+extern const char *port_type_str[];
+extern const char *band_str[];
+
+#define NUMBER_OF_BD_PER_COMMAND_PACKET 1
[...22261 lines suppressed...]
+- 802.1x (tested with XSupplicant 1.0.1)
+
+Enabled (but not supported) features:
- Monitor/RFMon mode
-- transmit power control
-- long/short preamble support
-- power states support (ACPI)
+- WPA/WPA2
-TODO
------------- ----- ----- ---- --- -- -
-- Fix bugs... The biggies:
- C3 corruption
- Fragmentation
+The distinction between officially supported and enabled is a reflection
+on the amount of validation and interoperability testing that has been
+performed on a given feature.
-Command Line Parameters
------------- ----- ----- ---- --- -- -
+===========================
+2. Command Line Parameters
+---------------------------
If the driver is built as a module, the following optional parameters are used
by entering them on the command line with the modprobe command using this
@@ -34,54 +61,82 @@ syntax:
modprobe ipw2100 [<option>=<VAL1><,VAL2>...]
-For example, to set the interface name for driver, entering:
-
- modprobe ipw2100 if_name=wlan%d
+For example, to disable the radio on driver loading, enter:
-results in the ipw2100 driver defaulting to the wlan prefix, with the system
-assigning a unique number in place of %d. The default interface name is eth%d.
+ modprobe ipw2100 disable=1
The ipw2100 driver supports the following module parameters:
Name Value Example:
debug 0x0-0xffffffff debug=1024
-if_name string if_name=wlan%d
mode 0,1,2 mode=1 /* AdHoc */
channel int channel=3 /* Only valid in AdHoc or Monitor */
associate boolean associate=0 /* Do NOT auto associate */
disable boolean disable=1 /* Do not power the HW */
-Radio Kill Switch
------------- ----- ----- ---- --- -- -
-Most laptops provide the ability for the user to physically disable the radio.
-Some vendors have implemented this as a physical switch that requires no
-software to turn the radio off and on. On other laptops, however, the switch
-is controlled through a button being pressed and a software driver then making
-calls to turn the radio off and on. This is referred to as a "software based
-RF kill switch"
+===========================
+3. Sysfs Helper Files
+---------------------------
-To determine if you have such a switch, you can check the contents of:
+There are several ways to control the behavior of the driver. Many of the
+general capabilities are exposed through the Wireless Tools (iwconfig). There
+are a few capabilities that are exposed through entries in the Linux Sysfs.
- /sys/bus/pci/drivers/ipw2100/*/rf_kill
-A value of:
+----- Driver Level ------
+For the driver level files, look in /sys/bus/pci/drivers/ipw2100/
+
+ debug_level
- Radio is {en,dis}abled by RF switch
+ This controls the same global as the 'debug' module parameter. For
+ information on the various debugging levels available, run the 'dvals'
+ script found in the driver source directory.
-means that you have an RF switch and the radio is in the state
-described.
+ NOTE: 'debug_level' is only enabled if CONFIG_IPW2100_DEBUG is turn
+ on.
-A value of:
+----- Device Level ------
+For the device level files look in
+
+ /sys/bus/pci/drivers/ipw2100/{PCI-ID}/
- Your hardware does not have an RF switch
+For example:
+ /sys/bus/pci/drivers/ipw2100/0000:02:01.0
-is self explanatory. In this case you should not need to worry about
-enabling the radio.
+For the device level files, see /sys/bus/pci/drivers/ipw2100:
+ rf_kill
+ read -
+ 0 = RF kill not enabled (radio on)
+ 1 = SW based RF kill active (radio off)
+ 2 = HW based RF kill active (radio off)
+ 3 = Both HW and SW RF kill active (radio off)
+ write -
+ 0 = If SW based RF kill active, turn the radio back on
+ 1 = If radio is on, activate SW based RF kill
+
+ NOTE: If you enable the SW based RF kill and then toggle the HW
+ based RF kill from ON -> OFF -> ON, the radio will NOT come back on
+
+
+===========================
+4. Radio Kill Switch
+---------------------------
+Most laptops provide the ability for the user to physically disable the radio.
+Some vendors have implemented this as a physical switch that requires no
+software to turn the radio off and on. On other laptops, however, the switch
+is controlled through a button being pressed and a software driver then making
+calls to turn the radio off and on. This is referred to as a "software based
+RF kill switch"
-Dynamic Firmware
------------- ----- ----- ---- --- -- -
+See the Sysfs helper file 'rf_kill' for determining the state of the RF switch
+on your system.
+
+
+===========================
+5. Dynamic Firmware
+---------------------------
As the firmware is licensed under a restricted use license, it can not be
included within the kernel sources. To enable the IPW2100 you will need a
firmware image to load into the wireless NIC's processors.
@@ -91,8 +146,9 @@ You can obtain these images from <http:/
See INSTALL for instructions on installing the firmware.
-Power Management
------------- ----- ----- ---- --- -- -
+===========================
+6. Power Management
+---------------------------
The IPW2100 supports the configuration of the Power Save Protocol
through a private wireless extension interface. The IPW2100 supports
the following different modes:
@@ -144,22 +200,33 @@ xxxx/yyyy will be replaced with 'off' --
level if `iwconfig eth1 power on` is invoked.
-Support
------------- ----- ----- ---- --- -- -
+===========================
+7. Support
+---------------------------
-For general information and support, go to:
+For general development information and support,
+go to:
http://ipw2100.sf.net/
-License
------------- ----- ----- ---- --- -- -
+The ipw2100 1.1.0 driver and firmware can be downloaded from:
+
+ http://support.intel.com
+
+For installation support on the ipw2100 1.1.0 driver on Linux kernels
+2.6.8 or greater, email support is available from:
+
+ http://supportmail.intel.com
+
+===========================
+8. License
+---------------------------
- Copyright(c) 2003 - 2004 Intel Corporation. All rights reserved.
+ Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 2 of the License, or (at your option)
- any later version.
+ under the terms of the GNU General Public License (version 2) as
+ published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
@@ -173,7 +240,7 @@ License
The full GNU General Public License is included in this distribution in the
file called LICENSE.
- Contact Information:
+ License Contact Information:
James P. Ketrenos <ipw2100-admin at linux.intel.com>
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
jwltest-pci-d3hot-d0.patch:
drivers/pci/pci.c | 52 ++++++++++++++++++++++++++++++++++++++++++++----
drivers/pci/setup-res.c | 2 -
include/linux/pci.h | 2 +
3 files changed, 51 insertions(+), 5 deletions(-)
--- NEW FILE jwltest-pci-d3hot-d0.patch ---
--- linux-2.6.11/include/linux/pci.h.orig 2005-07-07 15:59:04.994249756 -0400
+++ linux-2.6.11/include/linux/pci.h 2005-07-07 15:59:54.192699929 -0400
@@ -225,6 +225,7 @@
#define PCI_PM_CAP_PME_D3cold 0x8000 /* PME# from D3 (cold) */
#define PCI_PM_CTRL 4 /* PM control and status register */
#define PCI_PM_CTRL_STATE_MASK 0x0003 /* Current power state (D0 to D3) */
+#define PCI_PM_CTRL_NO_SOFT_RESET 0x0004 /* No reset for D3hot->D0 */
#define PCI_PM_CTRL_PME_ENABLE 0x0100 /* PME pin enable */
#define PCI_PM_CTRL_DATA_SEL_MASK 0x1e00 /* Data select (??) */
#define PCI_PM_CTRL_DATA_SCALE_MASK 0x6000 /* Data scale (??) */
@@ -811,6 +812,7 @@ void pci_clear_mwi(struct pci_dev *dev);
int __must_check pci_set_dma_mask(struct pci_dev *dev, u64 mask);
int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask);
int __must_check pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask);
+void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno);
int pci_assign_resource(struct pci_dev *dev, int i);
/* ROM control related routines */
--- linux-2.6.11/drivers/pci/setup-res.c.orig 2005-03-02 02:38:25.000000000 -0500
+++ linux-2.6.11/drivers/pci/setup-res.c 2005-07-07 15:59:13.956056664 -0400
@@ -33,7 +33,7 @@
#endif
-static void
+void
pci_update_resource(struct pci_dev *dev, struct resource *res, int resno)
{
struct pci_bus_region region;
--- linux-2.6.11/drivers/pci/pci.c.orig 2005-07-07 15:59:04.996249490 -0400
+++ linux-2.6.11/drivers/pci/pci.c 2005-07-07 15:59:13.955056797 -0400
@@ -227,6 +227,37 @@ pci_find_parent_resource(const struct pc
}
/**
+ * pci_restore_bars - restore a devices BAR values (e.g. after wake-up)
+ * @dev: PCI device to have its BARs restored
+ *
+ * Restore the BAR values for a given device, so as to make it
+ * accessible by its driver.
+ */
+static void
+pci_restore_bars(struct pci_dev *dev)
+{
+ int i, numres;
+
+ switch (dev->hdr_type) {
+ case PCI_HEADER_TYPE_NORMAL:
+ numres = 6;
+ break;
+ case PCI_HEADER_TYPE_BRIDGE:
+ numres = 2;
+ break;
+ case PCI_HEADER_TYPE_CARDBUS:
+ numres = 1;
+ break;
+ default:
+ /* Should never get here, but just in case... */
+ return;
+ }
+
+ for (i = 0; i < numres; i ++)
+ pci_update_resource(dev, &dev->resource[i], i);
+}
+
+/**
* pci_set_power_state - Set the power state of a PCI device
* @dev: PCI device to be suspended
* @state: PCI power state (D0, D1, D2, D3hot, D3cold) we're entering
@@ -244,7 +275,7 @@ pci_find_parent_resource(const struct pc
int
pci_set_power_state(struct pci_dev *dev, pci_power_t state)
{
- int pm;
+ int pm, need_restore = 0;
u16 pmcsr, pmc;
/* bound the state we're entering */
@@ -283,14 +314,17 @@ pci_set_power_state(struct pci_dev *dev,
return -EIO;
}
+ pci_read_config_word(dev, pm + PCI_PM_CTRL, &pmcsr);
+
/* If we're in D3, force entire word to 0.
* This doesn't affect PME_Status, disables PME_En, and
* sets PowerState to 0.
*/
- if (dev->current_state >= PCI_D3hot)
+ if (dev->current_state >= PCI_D3hot) {
+ if (!(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET))
+ need_restore = 1;
pmcsr = 0;
- else {
- pci_read_config_word(dev, pm + PCI_PM_CTRL, &pmcsr);
+ } else {
pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
pmcsr |= state;
}
@@ -306,6 +340,16 @@ pci_set_power_state(struct pci_dev *dev,
udelay(200);
dev->current_state = state;
+ /* According to section 5.4.1 of the "PCI BUS POWER MANAGEMENT
+ * INTERFACE SPECIFICATION, REV. 1.2", a device transitioning
+ * from D3hot to D0 _may_ perform an internal reset, thereby
+ * going to "D0 Uninitialized" rather than "D0 Initialized".
+ * In that case, we need to restore at least the BARs so that
+ * the device will be accessible to its driver.
+ */
+ if (need_restore)
+ pci_restore_bars(dev);
+
return 0;
}
--- NEW FILE modsign_exclude ---
################################################################################
#
# Some modules are intended to be loaded multiple times. GPG signing of
# modules eliminates this possibility, because the module name gets
# checked as part of the signing process.
#
# List any modules which are intended to be loaded multiple times each
# on a single line below. For each *.ko, a corresponding *-nosig.ko
# will be created without a GPG signature.
#
################################################################################
bonding.ko
Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-3/kernel-2.6.spec,v
retrieving revision 1.873
retrieving revision 1.873.2.1
diff -u -r1.873 -r1.873.2.1
--- kernel-2.6.spec 29 Aug 2005 23:47:46 -0000 1.873
+++ kernel-2.6.spec 31 Aug 2005 20:40:48 -0000 1.873.2.1
@@ -22,7 +22,8 @@
%define sublevel 12
%define kversion 2.6.%{sublevel}
%define rpmversion 2.6.%{sublevel}
-%define rhbsys %([ -r /etc/beehive-root -o -n "%{?__beehive_build}" ] && echo || echo .`whoami`@`hostname -s|sed s/-//`
+#%define rhbsys %([ -r /etc/beehive-root -o -n "%{?__beehive_build}" ] && echo || echo .`whoami`@`hostname -s|sed s/-//`)
+%define rhbsys .jwltest.22
%if %{FC3}
%define release %(R="$Revision$"; RR="${R##: }"; echo ${RR%%?})_FC3%{rhbsys}
%endif
@@ -173,6 +174,7 @@
Source10: COPYING.modules
Source11: genkey
+Source12: modsign_exclude
Source20: kernel-%{kversion}-i586.config
Source21: kernel-%{kversion}-i586-smp.config
@@ -276,6 +278,8 @@
Patch1301: linux-2.6.12-net-sundance-ip100A.patch
Patch1302: linux-2.6.12-net-make-orinoco-suck-less.patch
Patch1304: linux-2.6.12-net-atm-lanai-nodev-rmmod.patch
+Patch1305: jwltest-e1000-workqueue-flush.patch
+Patch1306: jwltest-bonding-sysfs.patch
# USB bits
Patch1400: linux-2.6.12-usb-old_scheme_first.patch
@@ -322,6 +326,7 @@
Patch1940: linux-2.6-powernow-k8-update.patch
Patch1950: linux-2.6-selinux-addrlen-checks.patch
Patch1960: linux-2.6-input-alps-typo.patch
+Patch1970: jwltest-acpi-dsdt-initrd.patch
Patch2000: linux-2.6.11-vm-taint.patch
Patch2001: linux-2.6.9-vm-oomkiller-debugging.patch
@@ -332,6 +337,8 @@
Patch2200: linux-2.6-alsa-snd-intel8x0m-semaphore.patch
+Patch2210: jwltest-pci-d3hot-d0.patch
+
Patch2999: linux-2.6.3-printopen.patch
#
@@ -342,6 +349,7 @@
Patch3020: linux-2.6.9-ipw2100.patch
Patch3021: linux-2.6.9-ipw2200.patch
Patch3022: linux-2.6.9-ieee80211.patch
+Patch3023: jwltest-ipw2100-1_1_0.patch
#
# 10000 to 20000 is for stuff that has to come last due to the
@@ -580,6 +588,10 @@
%patch1302 -p1
# Fix rmmod lanai
%patch1304 -p1
+# E1000 flush workqueues at remove
+%patch1305 -p1
+# Bonding sysfs support
+#%patch1306 -p1
# USB Bits.
# Enable both old and new style USB initialisation.
@@ -659,6 +671,8 @@
%patch1950 -p1
# ALPS typo fix.
%patch1960 -p1
+# Add DSDT override from initrd
+%patch1970 -p1
#
# VM related fixes.
@@ -679,6 +693,9 @@
# Fix 'semaphore is not ready' error in snd-intel8x0m
%patch2200 -p1
+# PCI PM D3hot boot patch
+%patch2210 -p1
+
#
# Local hack (off for any shipped kernels) to printk all files opened
# the first 180 seconds after boot for debugging userspace startup
@@ -694,6 +711,7 @@
%patch3020 -p1
%patch3021 -p1
%patch3022 -p1
+%patch3023 -p1 -E
#
# Patches 5000 to 6000 are reserved for new drivers that are about to
@@ -859,10 +877,12 @@
KEYFLAGS="$KEYFLAGS --secret-keyring ../kernel.sec"
KEYFLAGS="$KEYFLAGS --keyring ../kernel.pub"
export KEYFLAGS
- for i in ` find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f`
- do
+ for i in ` find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f` ; do
+ if [ x`echo \`basename $i \` | join - $RPM_SOURCE_DIR/modsign_exclude | wc -l` = x0 ]
+ then
sh ./scripts/modsign/modsign.sh $i Red
- mv -f $i.signed $i
+ mv -f $i.signed $i
+ fi
done
unset KEYFLAGS
%endif
More information about the fedora-cvs-commits
mailing list