[openib-general] [PATCH RFC 09/10] ofed_1_2 Backport Chelsio to 2.6.11
Vladimir Sokolovsky
vlad at mellanox.co.il
Thu Jan 18 08:14:02 PST 2007
Applied.
Regards,
Vladimir
On Wed, 2007-01-17 at 13:50 -0600, Steve Wise wrote:
> Backport Chelsio to 2.6.11
>
> Signed-off-by: Steve Wise <swise at opengridcomputing.com>
> ---
>
> .../backport/2.6.11/include/linux/ethtool.h | 9 +
> .../backport/2.6.11/include/linux/genalloc.h | 42 +++++
> .../backport/2.6.11/include/linux/interrupt.h | 17 ++
> kernel_addons/backport/2.6.11/include/linux/mm.h | 8 +
> .../backport/2.6.11/include/linux/netdevice.h | 9 +
> .../backport/2.6.11/include/linux/random.h | 15 ++
> .../backport/2.6.11/include/linux/skbuff.h | 2
> kernel_addons/backport/2.6.11/include/linux/slab.h | 19 --
> .../backport/2.6.11/include/linux/types.h | 2
> .../backport/2.6.11/include/linux/workqueue.h | 8 +
> kernel_addons/backport/2.6.11/include/net/dst.h | 16 ++
> .../backport/2.6.11/include/net/netevent.h | 33 ++++
> .../backport/2.6.11/include/src/genalloc.c | 198 +++++++++++++++++++++++
> .../backport/2.6.11/include/src/netevent.c | 71 ++++++++
> .../backport/2.6.11/cxgb3_main_to_2_6_13.patch | 12 +
> .../backport/2.6.11/cxgb3_makefile_to_2_6_19.patch | 12 +
> .../backport/2.6.11/linux_stuff_to_2_6_17.patch | 24 +++
> .../2.6.11/mthca_provider_3465_to_2_6_11.patch | 13 --
> .../backport/2.6.11/t3_hw_to_2_6_13.patch | 13 ++
> 19 files changed, 492 insertions(+), 31 deletions(-)
>
> diff --git a/kernel_addons/backport/2.6.11/include/linux/ethtool.h b/kernel_addons/backport/2.6.11/include/linux/ethtool.h
> new file mode 100644
> index 0000000..d03127c
> --- /dev/null
> +++ b/kernel_addons/backport/2.6.11/include/linux/ethtool.h
> @@ -0,0 +1,9 @@
> +#ifndef BACKPORT_LINUX_ETHTOOL_TO_2_6_13
> +#define BACKPORT_LINUX_ETHTOOL_TO_2_6_13
> +
> +#include_next <linux/ethtool.h>
> +
> +#define ADVERTISED_Pause (1 << 13)
> +#define ADVERTISED_Asym_Pause (1 << 14)
> +
> +#endif
> diff --git a/kernel_addons/backport/2.6.11/include/linux/genalloc.h b/kernel_addons/backport/2.6.11/include/linux/genalloc.h
> new file mode 100644
> index 0000000..3c23c68
> --- /dev/null
> +++ b/kernel_addons/backport/2.6.11/include/linux/genalloc.h
> @@ -0,0 +1,42 @@
> +/*
> + * Basic general purpose allocator for managing special purpose memory
> + * not managed by the regular kmalloc/kfree interface.
> + * Uses for this includes on-device special memory, uncached memory
> + * etc.
> + *
> + * This source code is licensed under the GNU General Public License,
> + * Version 2. See the file COPYING for more details.
> + */
> +
> +
> +/*
> + * General purpose special memory pool descriptor.
> + */
> +struct gen_pool {
> + rwlock_t lock;
> + struct list_head chunks; /* list of chunks in this pool */
> + int min_alloc_order; /* minimum allocation order */
> +};
> +
> +/*
> + * General purpose special memory pool chunk descriptor.
> + */
> +struct gen_pool_chunk {
> + spinlock_t lock;
> + struct list_head next_chunk; /* next chunk in pool */
> + unsigned long start_addr; /* starting address of memory chunk */
> + unsigned long end_addr; /* ending address of memory chunk */
> + unsigned long bits[0]; /* bitmap for allocating memory chunk */
> +};
> +
> +extern struct gen_pool *ib_gen_pool_create(int, int);
> +extern int ib_gen_pool_add(struct gen_pool *, unsigned long, size_t, int);
> +extern void ib_gen_pool_destroy(struct gen_pool *);
> +extern unsigned long ib_gen_pool_alloc(struct gen_pool *, size_t);
> +extern void ib_gen_pool_free(struct gen_pool *, unsigned long, size_t);
> +
> +#define gen_pool_create ib_gen_pool_create
> +#define gen_pool_add ib_gen_pool_add
> +#define gen_pool_destroy ib_gen_pool_destroy
> +#define gen_pool_alloc ib_gen_pool_alloc
> +#define gen_pool_free ib_gen_pool_free
> diff --git a/kernel_addons/backport/2.6.11/include/linux/interrupt.h b/kernel_addons/backport/2.6.11/include/linux/interrupt.h
> new file mode 100644
> index 0000000..66e66a9
> --- /dev/null
> +++ b/kernel_addons/backport/2.6.11/include/linux/interrupt.h
> @@ -0,0 +1,17 @@
> +#ifndef BACKPORT_LINUX_INTERRUPT_TO_2_6_18
> +#define BACKPORT_LINUX_INTERRUPT_TO_2_6_18
> +#include_next <linux/interrupt.h>
> +
> +static inline int
> +backport_request_irq(unsigned int irq,
> + irqreturn_t (*handler)(int, void *),
> + unsigned long flags, const char *dev_name, void *dev_id)
> +{
> + return request_irq(irq,
> + (irqreturn_t (*)(int, void *, struct pt_regs *))handler,
> + flags, dev_name, dev_id);
> +}
> +
> +#define request_irq backport_request_irq
> +
> +#endif
> diff --git a/kernel_addons/backport/2.6.11/include/linux/mm.h b/kernel_addons/backport/2.6.11/include/linux/mm.h
> new file mode 100644
> index 0000000..1a1cf11
> --- /dev/null
> +++ b/kernel_addons/backport/2.6.11/include/linux/mm.h
> @@ -0,0 +1,8 @@
> +#ifndef BACKPORT_LINUX_MM_TO_2_6_11
> +#define BACKPORT_LINUX_MM_TO_2_6_11
> +
> +#include_next <linux/mm.h>
> +
> +#define io_remap_pfn_range remap_pfn_range
> +
> +#endif
> diff --git a/kernel_addons/backport/2.6.11/include/linux/netdevice.h b/kernel_addons/backport/2.6.11/include/linux/netdevice.h
> index 5641019..2f12781 100644
> --- a/kernel_addons/backport/2.6.11/include/linux/netdevice.h
> +++ b/kernel_addons/backport/2.6.11/include/linux/netdevice.h
> @@ -15,4 +15,13 @@ static inline void netif_tx_unlock(struc
> spin_unlock(&dev->xmit_lock);
> }
>
> +static inline int __netif_rx_schedule_prep(struct net_device *dev)
> +{
> + return !test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state);
> +}
> +
> +#undef SET_ETHTOOL_OPS
> +#define SET_ETHTOOL_OPS(netdev, ops) \
> + (netdev)->ethtool_ops = (struct ethtool_ops *)(ops)
> +
> #endif
> diff --git a/kernel_addons/backport/2.6.11/include/linux/random.h b/kernel_addons/backport/2.6.11/include/linux/random.h
> new file mode 100644
> index 0000000..2ea2e1f
> --- /dev/null
> +++ b/kernel_addons/backport/2.6.11/include/linux/random.h
> @@ -0,0 +1,15 @@
> +#ifndef BACKPORT_LINUX_RANDOM_TO_2_6_18
> +#define BACKPORT_LINUX_RANDOM_TO_2_6_18
> +#include_next <linux/random.h>
> +
> +static inline u32 backport_random32(void)
> +{
> + u32 v;
> +
> + get_random_bytes(&v, sizeof(u32));
> + return v;
> +}
> +
> +#define random32 backport_random32
> +
> +#endif
> diff --git a/kernel_addons/backport/2.6.11/include/linux/skbuff.h b/kernel_addons/backport/2.6.11/include/linux/skbuff.h
> index a4d9195..62bfb3b 100644
> --- a/kernel_addons/backport/2.6.11/include/linux/skbuff.h
> +++ b/kernel_addons/backport/2.6.11/include/linux/skbuff.h
> @@ -4,6 +4,7 @@ #define LINUX_SKBUFF_H_BACKPORT
> #include_next <linux/skbuff.h>
>
> #define CHECKSUM_PARTIAL CHECKSUM_HW
> +#define CHECKSUM_COMPLETE CHECKSUM_HW
>
> /**
> * skb_header_release - release reference to header
> @@ -17,5 +18,6 @@ static inline void skb_header_release(st
> {
> }
>
> +#define gso_size tso_size
>
> #endif
> diff --git a/kernel_addons/backport/2.6.11/include/linux/slab.h b/kernel_addons/backport/2.6.11/include/linux/slab.h
> index bd9671d..9d82afa 100644
> --- a/kernel_addons/backport/2.6.11/include/linux/slab.h
> +++ b/kernel_addons/backport/2.6.11/include/linux/slab.h
> @@ -22,12 +22,6 @@ static inline char *kstrdup(const char *
> return s;
> }
>
> -#endif
> -#include_next <linux/slab.h>
> -
> -#ifndef BACKPORT_LINUX_STRING_TO_2_6_18
> -#define BACKPORT_LINUX_STRING_TO_2_6_18
> -
> static inline
> void *kmemdup(const void *src, size_t len, gfp_t gfp)
> {
> @@ -39,19 +33,10 @@ void *kmemdup(const void *src, size_t le
> return p;
> }
>
> -#endif
> -#ifndef BACKPORT_LINUX_STRING_TO_2_6_18
> -#define BACKPORT_LINUX_STRING_TO_2_6_18
> -
> static inline
> -void *kmemdup(const void *src, size_t len, gfp_t gfp)
> +void *kmalloc_node(size_t size, gfp_t flags, int nid)
> {
> - void *p;
> -
> - p = kmalloc(len, gfp);
> - if (p)
> - memcpy(p, src, len);
> - return p;
> + return kmalloc(size, flags);
> }
>
> #endif
> diff --git a/kernel_addons/backport/2.6.11/include/linux/types.h b/kernel_addons/backport/2.6.11/include/linux/types.h
> index c06977a..53c7a33 100644
> --- a/kernel_addons/backport/2.6.11/include/linux/types.h
> +++ b/kernel_addons/backport/2.6.11/include/linux/types.h
> @@ -7,4 +7,6 @@ #ifdef __KERNEL__
> typedef unsigned int gfp_t;
> #endif
>
> +#define BITS_PER_BYTE 8
> +
> #endif
> diff --git a/kernel_addons/backport/2.6.11/include/linux/workqueue.h b/kernel_addons/backport/2.6.11/include/linux/workqueue.h
> index 330f47f..c054ed2 100644
> --- a/kernel_addons/backport/2.6.11/include/linux/workqueue.h
> +++ b/kernel_addons/backport/2.6.11/include/linux/workqueue.h
> @@ -26,6 +26,12 @@ backport_cancel_delayed_work(struct dela
> return cancel_delayed_work(&work->work);
> }
>
> +static inline void cancel_rearming_delayed_workqueue(struct workqueue_struct *wq,
> + struct delayed_work *dwork)
> +{
> + while (!cancel_delayed_work(&dwork->work))
> + flush_workqueue(wq);
> +}
>
> #undef INIT_WORK
> #define INIT_WORK(_work, _func) backport_INIT_WORK(_work, _func)
> @@ -33,7 +39,7 @@ #define INIT_DELAYED_WORK(_work, _func)
>
> #undef DECLARE_WORK
> #define DECLARE_WORK(n, f) \
> - struct work_struct n = __WORK_INITIALIZER(n, f, &(n))
> + struct work_struct n = __WORK_INITIALIZER(n, (void (*)(void *))f, &(n))
> #define DECLARE_DELAYED_WORK(n, f) \
> struct delayed_work n = { .work = __WORK_INITIALIZER(n.work, f, &(n.work)) }
>
> diff --git a/kernel_addons/backport/2.6.11/include/net/dst.h b/kernel_addons/backport/2.6.11/include/net/dst.h
> new file mode 100644
> index 0000000..ec5e7b4
> --- /dev/null
> +++ b/kernel_addons/backport/2.6.11/include/net/dst.h
> @@ -0,0 +1,16 @@
> +#ifndef BACKPORT_NET_DST_2_6_11
> +#define BACKPORT_NET_DST_2_6_11
> +
> +#include_next <net/dst.h>
> +
> +static inline u32 dst_mtu(struct dst_entry *dst)
> +{
> + u32 mtu = dst_metric(dst, RTAX_MTU);
> + /*
> + * Alexey put it here, so ask him about it :)
> + */
> + barrier();
> + return mtu;
> +}
> +
> +#endif
> diff --git a/kernel_addons/backport/2.6.11/include/net/netevent.h b/kernel_addons/backport/2.6.11/include/net/netevent.h
> new file mode 100644
> index 0000000..e5d2162
> --- /dev/null
> +++ b/kernel_addons/backport/2.6.11/include/net/netevent.h
> @@ -0,0 +1,33 @@
> +#ifndef _NET_EVENT_H
> +#define _NET_EVENT_H
> +
> +/*
> + * Generic netevent notifiers
> + *
> + * Authors:
> + * Tom Tucker <tom at opengridcomputing.com>
> + * Steve Wise <swise at opengridcomputing.com>
> + *
> + * Changes:
> + */
> +#ifdef __KERNEL__
> +
> +#include <net/dst.h>
> +
> +struct netevent_redirect {
> + struct dst_entry *old;
> + struct dst_entry *new;
> +};
> +
> +enum netevent_notif_type {
> + NETEVENT_NEIGH_UPDATE = 1, /* arg is struct neighbour ptr */
> + NETEVENT_PMTU_UPDATE, /* arg is struct dst_entry ptr */
> + NETEVENT_REDIRECT, /* arg is struct netevent_redirect ptr */
> +};
> +
> +extern int register_netevent_notifier(struct notifier_block *nb);
> +extern int unregister_netevent_notifier(struct notifier_block *nb);
> +extern int call_netevent_notifiers(unsigned long val, void *v);
> +
> +#endif
> +#endif
> diff --git a/kernel_addons/backport/2.6.11/include/src/genalloc.c b/kernel_addons/backport/2.6.11/include/src/genalloc.c
> new file mode 100644
> index 0000000..75ae68c
> --- /dev/null
> +++ b/kernel_addons/backport/2.6.11/include/src/genalloc.c
> @@ -0,0 +1,198 @@
> +/*
> + * Basic general purpose allocator for managing special purpose memory
> + * not managed by the regular kmalloc/kfree interface.
> + * Uses for this includes on-device special memory, uncached memory
> + * etc.
> + *
> + * Copyright 2005 (C) Jes Sorensen <jes at trained-monkey.org>
> + *
> + * This source code is licensed under the GNU General Public License,
> + * Version 2. See the file COPYING for more details.
> + */
> +
> +#include <linux/module.h>
> +#include <linux/genalloc.h>
> +
> +
> +/**
> + * gen_pool_create - create a new special memory pool
> + * @min_alloc_order: log base 2 of number of bytes each bitmap bit represents
> + * @nid: node id of the node the pool structure should be allocated on, or -1
> + *
> + * Create a new special memory pool that can be used to manage special purpose
> + * memory not managed by the regular kmalloc/kfree interface.
> + */
> +struct gen_pool *gen_pool_create(int min_alloc_order, int nid)
> +{
> + struct gen_pool *pool;
> +
> + pool = kmalloc_node(sizeof(struct gen_pool), GFP_KERNEL, nid);
> + if (pool != NULL) {
> + rwlock_init(&pool->lock);
> + INIT_LIST_HEAD(&pool->chunks);
> + pool->min_alloc_order = min_alloc_order;
> + }
> + return pool;
> +}
> +EXPORT_SYMBOL(gen_pool_create);
> +
> +/**
> + * gen_pool_add - add a new chunk of special memory to the pool
> + * @pool: pool to add new memory chunk to
> + * @addr: starting address of memory chunk to add to pool
> + * @size: size in bytes of the memory chunk to add to pool
> + * @nid: node id of the node the chunk structure and bitmap should be
> + * allocated on, or -1
> + *
> + * Add a new chunk of special memory to the specified pool.
> + */
> +int gen_pool_add(struct gen_pool *pool, unsigned long addr, size_t size,
> + int nid)
> +{
> + struct gen_pool_chunk *chunk;
> + int nbits = size >> pool->min_alloc_order;
> + int nbytes = sizeof(struct gen_pool_chunk) +
> + (nbits + BITS_PER_BYTE - 1) / BITS_PER_BYTE;
> +
> + chunk = kmalloc_node(nbytes, GFP_KERNEL, nid);
> + if (unlikely(chunk == NULL))
> + return -1;
> +
> + memset(chunk, 0, nbytes);
> + spin_lock_init(&chunk->lock);
> + chunk->start_addr = addr;
> + chunk->end_addr = addr + size;
> +
> + write_lock(&pool->lock);
> + list_add(&chunk->next_chunk, &pool->chunks);
> + write_unlock(&pool->lock);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(gen_pool_add);
> +
> +/**
> + * gen_pool_destroy - destroy a special memory pool
> + * @pool: pool to destroy
> + *
> + * Destroy the specified special memory pool. Verifies that there are no
> + * outstanding allocations.
> + */
> +void gen_pool_destroy(struct gen_pool *pool)
> +{
> + struct list_head *_chunk, *_next_chunk;
> + struct gen_pool_chunk *chunk;
> + int order = pool->min_alloc_order;
> + int bit, end_bit;
> +
> +
> + write_lock(&pool->lock);
> + list_for_each_safe(_chunk, _next_chunk, &pool->chunks) {
> + chunk = list_entry(_chunk, struct gen_pool_chunk, next_chunk);
> + list_del(&chunk->next_chunk);
> +
> + end_bit = (chunk->end_addr - chunk->start_addr) >> order;
> + bit = find_next_bit(chunk->bits, end_bit, 0);
> + BUG_ON(bit < end_bit);
> +
> + kfree(chunk);
> + }
> + kfree(pool);
> + return;
> +}
> +EXPORT_SYMBOL(gen_pool_destroy);
> +
> +/**
> + * gen_pool_alloc - allocate special memory from the pool
> + * @pool: pool to allocate from
> + * @size: number of bytes to allocate from the pool
> + *
> + * Allocate the requested number of bytes from the specified pool.
> + * Uses a first-fit algorithm.
> + */
> +unsigned long gen_pool_alloc(struct gen_pool *pool, size_t size)
> +{
> + struct list_head *_chunk;
> + struct gen_pool_chunk *chunk;
> + unsigned long addr, flags;
> + int order = pool->min_alloc_order;
> + int nbits, bit, start_bit, end_bit;
> +
> + if (size == 0)
> + return 0;
> +
> + nbits = (size + (1UL << order) - 1) >> order;
> +
> + read_lock(&pool->lock);
> + list_for_each(_chunk, &pool->chunks) {
> + chunk = list_entry(_chunk, struct gen_pool_chunk, next_chunk);
> +
> + end_bit = (chunk->end_addr - chunk->start_addr) >> order;
> + end_bit -= nbits + 1;
> +
> + spin_lock_irqsave(&chunk->lock, flags);
> + bit = -1;
> + while (bit + 1 < end_bit) {
> + bit = find_next_zero_bit(chunk->bits, end_bit, bit + 1);
> + if (bit >= end_bit)
> + break;
> +
> + start_bit = bit;
> + if (nbits > 1) {
> + bit = find_next_bit(chunk->bits, bit + nbits,
> + bit + 1);
> + if (bit - start_bit < nbits)
> + continue;
> + }
> +
> + addr = chunk->start_addr +
> + ((unsigned long)start_bit << order);
> + while (nbits--)
> + __set_bit(start_bit++, &chunk->bits);
> + spin_unlock_irqrestore(&chunk->lock, flags);
> + read_unlock(&pool->lock);
> + return addr;
> + }
> + spin_unlock_irqrestore(&chunk->lock, flags);
> + }
> + read_unlock(&pool->lock);
> + return 0;
> +}
> +EXPORT_SYMBOL(gen_pool_alloc);
> +
> +/**
> + * gen_pool_free - free allocated special memory back to the pool
> + * @pool: pool to free to
> + * @addr: starting address of memory to free back to pool
> + * @size: size in bytes of memory to free
> + *
> + * Free previously allocated special memory back to the specified pool.
> + */
> +void gen_pool_free(struct gen_pool *pool, unsigned long addr, size_t size)
> +{
> + struct list_head *_chunk;
> + struct gen_pool_chunk *chunk;
> + unsigned long flags;
> + int order = pool->min_alloc_order;
> + int bit, nbits;
> +
> + nbits = (size + (1UL << order) - 1) >> order;
> +
> + read_lock(&pool->lock);
> + list_for_each(_chunk, &pool->chunks) {
> + chunk = list_entry(_chunk, struct gen_pool_chunk, next_chunk);
> +
> + if (addr >= chunk->start_addr && addr < chunk->end_addr) {
> + BUG_ON(addr + size > chunk->end_addr);
> + spin_lock_irqsave(&chunk->lock, flags);
> + bit = (addr - chunk->start_addr) >> order;
> + while (nbits--)
> + __clear_bit(bit++, &chunk->bits);
> + spin_unlock_irqrestore(&chunk->lock, flags);
> + break;
> + }
> + }
> + BUG_ON(nbits > 0);
> + read_unlock(&pool->lock);
> +}
> +EXPORT_SYMBOL(gen_pool_free);
> diff --git a/kernel_addons/backport/2.6.11/include/src/netevent.c b/kernel_addons/backport/2.6.11/include/src/netevent.c
> new file mode 100644
> index 0000000..5ffadd1
> --- /dev/null
> +++ b/kernel_addons/backport/2.6.11/include/src/netevent.c
> @@ -0,0 +1,71 @@
> +/*
> + * Network event notifiers
> + *
> + * Authors:
> + * Tom Tucker <tom at opengridcomputing.com>
> + * Steve Wise <swise at opengridcomputing.com>
> + *
> + * 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.
> + *
> + * Fixes:
> + */
> +
> +#include <linux/module.h>
> +#include <linux/skbuff.h>
> +#include <linux/rtnetlink.h>
> +#include <linux/notifier.h>
> +
> +static struct notifier_block *netevent_notif_chain;
> +
> +/**
> + * register_netevent_notifier - register a netevent notifier block
> + * @nb: notifier
> + *
> + * Register a notifier to be called when a netevent occurs.
> + * The notifier passed is linked into the kernel structures and must
> + * not be reused until it has been unregistered. A negative errno code
> + * is returned on a failure.
> + */
> +int register_netevent_notifier(struct notifier_block *nb)
> +{
> + int err;
> +
> + err = notifier_chain_register(&netevent_notif_chain, nb);
> + return err;
> +}
> +
> +/**
> + * netevent_unregister_notifier - unregister a netevent notifier block
> + * @nb: notifier
> + *
> + * Unregister a notifier previously registered by
> + * register_neigh_notifier(). The notifier is unlinked into the
> + * kernel structures and may then be reused. A negative errno code
> + * is returned on a failure.
> + */
> +
> +int unregister_netevent_notifier(struct notifier_block *nb)
> +{
> + return notifier_chain_unregister(&netevent_notif_chain, nb);
> +}
> +
> +/**
> + * call_netevent_notifiers - call all netevent notifier blocks
> + * @val: value passed unmodified to notifier function
> + * @v: pointer passed unmodified to notifier function
> + *
> + * Call all neighbour notifier blocks. Parameters and return value
> + * are as for notifier_call_chain().
> + */
> +
> +int call_netevent_notifiers(unsigned long val, void *v)
> +{
> + return notifier_call_chain(&netevent_notif_chain, val, v);
> +}
> +
> +EXPORT_SYMBOL_GPL(register_netevent_notifier);
> +EXPORT_SYMBOL_GPL(unregister_netevent_notifier);
> +EXPORT_SYMBOL_GPL(call_netevent_notifiers);
> diff --git a/kernel_patches/backport/2.6.11/cxgb3_main_to_2_6_13.patch b/kernel_patches/backport/2.6.11/cxgb3_main_to_2_6_13.patch
> new file mode 100644
> index 0000000..e6781f3
> --- /dev/null
> +++ b/kernel_patches/backport/2.6.11/cxgb3_main_to_2_6_13.patch
> @@ -0,0 +1,12 @@
> +diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
> +index dfa035a..414ea84 100755
> +--- a/drivers/net/cxgb3/cxgb3_main.c
> ++++ b/drivers/net/cxgb3/cxgb3_main.c
> +@@ -1526,7 +1526,6 @@ static const struct ethtool_ops cxgb_eth
> + .get_wol = get_wol,
> + .get_tso = ethtool_op_get_tso,
> + .set_tso = ethtool_op_set_tso,
> +- .get_perm_addr = ethtool_op_get_perm_addr
> + };
> +
> + static int in_range(int val, int lo, int hi)
> diff --git a/kernel_patches/backport/2.6.11/cxgb3_makefile_to_2_6_19.patch b/kernel_patches/backport/2.6.11/cxgb3_makefile_to_2_6_19.patch
> new file mode 100644
> index 0000000..ad7e7f4
> --- /dev/null
> +++ b/kernel_patches/backport/2.6.11/cxgb3_makefile_to_2_6_19.patch
> @@ -0,0 +1,12 @@
> +diff --git a/drivers/net/cxgb3/Makefile b/drivers/net/cxgb3/Makefile
> +index 3434679..bb008b6 100755
> +--- a/drivers/net/cxgb3/Makefile
> ++++ b/drivers/net/cxgb3/Makefile
> +@@ -1,6 +1,7 @@
> + #
> + # Chelsio T3 driver
> + #
> ++NOSTDINC_FLAGS:= $(NOSTDINC_FLAGS) $(LINUXINCLUDE)
> +
> + obj-$(CONFIG_CHELSIO_T3) += cxgb3.o
> +
> diff --git a/kernel_patches/backport/2.6.11/linux_stuff_to_2_6_17.patch b/kernel_patches/backport/2.6.11/linux_stuff_to_2_6_17.patch
> new file mode 100644
> index 0000000..eb2285f
> --- /dev/null
> +++ b/kernel_patches/backport/2.6.11/linux_stuff_to_2_6_17.patch
> @@ -0,0 +1,24 @@
> +diff --git a/drivers/infiniband/core/genalloc.c b/drivers/infiniband/core/genalloc.c
> +new file mode 100644
> +index 0000000..58cf933
> +--- /dev/null
> ++++ b/drivers/infiniband/core/genalloc.c
> +@@ -0,0 +1 @@
> ++#include "src/genalloc.c"
> +diff --git a/drivers/infiniband/core/netevent.c b/drivers/infiniband/core/netevent.c
> +new file mode 100644
> +index 0000000..58cf933
> +--- /dev/null
> ++++ b/drivers/infiniband/core/netevent.c
> +@@ -0,0 +1 @@
> ++#include "src/netevent.c"
> +diff --git a/drivers/infiniband/core/Makefile b/drivers/infiniband/core/Makefile
> +index 50fb1cd..456bfd0 100644
> +--- a/drivers/infiniband/core/Makefile
> ++++ b/drivers/infiniband/core/Makefile
> +@@ -30,3 +30,5 @@ ib_ucm-y := ucm.o
> +
> + ib_uverbs-y := uverbs_main.o uverbs_cmd.o uverbs_mem.o \
> + uverbs_marshall.o
> ++
> ++ib_core-y += genalloc.o netevent.o
> diff --git a/kernel_patches/backport/2.6.11/mthca_provider_3465_to_2_6_11.patch b/kernel_patches/backport/2.6.11/mthca_provider_3465_to_2_6_11.patch
> deleted file mode 100644
> index 402c00a..0000000
> --- a/kernel_patches/backport/2.6.11/mthca_provider_3465_to_2_6_11.patch
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -Index: linux-kernel/drivers/infiniband/hw/mthca/mthca_provider.c
> -===================================================================
> ---- linux-kernel.orig/drivers/infiniband/hw/mthca/mthca_provider.c 2005-11-24 15:17:58.000000000 +0200
> -+++ linux-kernel/drivers/infiniband/hw/mthca/mthca_provider.c 2005-11-24 15:20:19.000000000 +0200
> -@@ -359,7 +359,7 @@ static int mthca_mmap_uar(struct ib_ucon
> -
> - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
> -
> -- if (io_remap_pfn_range(vma, vma->vm_start,
> -+ if (remap_pfn_range(vma, vma->vm_start,
> - to_mucontext(context)->uar.pfn,
> - PAGE_SIZE, vma->vm_page_prot))
> - return -EAGAIN;
> diff --git a/kernel_patches/backport/2.6.11/t3_hw_to_2_6_13.patch b/kernel_patches/backport/2.6.11/t3_hw_to_2_6_13.patch
> new file mode 100644
> index 0000000..611e9dc
> --- /dev/null
> +++ b/kernel_patches/backport/2.6.11/t3_hw_to_2_6_13.patch
> @@ -0,0 +1,13 @@
> +diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c
> +index 14ea6b9..f13f581 100755
> +--- a/drivers/net/cxgb3/t3_hw.c
> ++++ b/drivers/net/cxgb3/t3_hw.c
> +@@ -3357,8 +3357,6 @@ int __devinit t3_prep_adapter(struct ada
> +
> + memcpy(adapter->port[i]->dev_addr, hw_addr,
> + ETH_ALEN);
> +- memcpy(adapter->port[i]->perm_addr, hw_addr,
> +- ETH_ALEN);
> + init_link_config(&p->link_config, p->port_type->caps);
> + p->phy.ops->power_down(&p->phy, 1);
> + if (!(p->port_type->caps & SUPPORTED_IRQ))
>
> _______________________________________________
> openib-general mailing list
> openib-general at openib.org
> http://openib.org/mailman/listinfo/openib-general
>
> To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
More information about the general
mailing list