Re: [VLAN]: translate IF_OPER_DORMANT to netif_dormant_on()

2006-07-09 Thread Stefan Rompf
Am Freitag, 7. Juli 2006 23:33 schrieb Stephen Hemminger:

 Not really. The flag code last major change was to do the dormant
 stuff that HDLC wanted.

... and where the maintainer doesn't seem to care to use it now that the 
infrastructure is there. Sigh.

 IMHO VLAN device's should mirror the state of the underlying physical
 device.

 I can't really follow the thread well. What is broken?

The thread is still quite short and describes the problem, look at 
http://marc.theaimsgroup.com/?t=11520078264r=1w=2

Stefan
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: 2.6.17-mm3

2006-07-09 Thread Herbert Xu
Michal Piotrowski [EMAIL PROTECTED] wrote:
 
 It was moved, sorry.

I fail to spot any relevant backtraces for skge or indeed any part
of the networking stack.  Ingo/Arjan, perhaps you guys can figure
out what's wrong here.

In future perhaps you should consider posting the dmesg to the list
directly.

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmVHI~} [EMAIL PROTECTED]
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[AX.25] Use kzalloc

2006-07-09 Thread Ralf Baechle
Replace kzalloc instead of kmalloc + memset.

Signed-off-by: Ralf Baechle [EMAIL PROTECTED]

 net/ax25/af_ax25.c |3 +--
 net/ax25/ax25_dev.c|4 +---
 net/netrom/af_netrom.c |4 +---
 net/rose/af_rose.c |3 +--
 4 files changed, 4 insertions(+), 10 deletions(-)

Index: linux-net/net/ax25/ax25_dev.c
===
--- linux-net.orig/net/ax25/ax25_dev.c  2006-07-09 02:48:00.0 +0100
+++ linux-net/net/ax25/ax25_dev.c   2006-07-09 02:50:35.0 +0100
@@ -55,15 +55,13 @@ void ax25_dev_device_up(struct net_devic
 {
ax25_dev *ax25_dev;
 
-   if ((ax25_dev = kmalloc(sizeof(*ax25_dev), GFP_ATOMIC)) == NULL) {
+   if ((ax25_dev = kzalloc(sizeof(*ax25_dev), GFP_ATOMIC)) == NULL) {
printk(KERN_ERR AX.25: ax25_dev_device_up - out of memory\n);
return;
}
 
ax25_unregister_sysctl();
 
-   memset(ax25_dev, 0x00, sizeof(*ax25_dev));
-
dev-ax25_ptr = ax25_dev;
ax25_dev-dev = dev;
dev_hold(dev);
Index: linux-net/net/ax25/af_ax25.c
===
--- linux-net.orig/net/ax25/af_ax25.c   2006-07-09 02:48:01.0 +0100
+++ linux-net/net/ax25/af_ax25.c2006-07-09 02:50:35.0 +0100
@@ -486,10 +486,9 @@ ax25_cb *ax25_create_cb(void)
 {
ax25_cb *ax25;
 
-   if ((ax25 = kmalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
+   if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
return NULL;
 
-   memset(ax25, 0x00, sizeof(*ax25));
atomic_set(ax25-refcount, 1);
 
skb_queue_head_init(ax25-write_queue);
Index: linux-net/net/netrom/af_netrom.c
===
--- linux-net.orig/net/netrom/af_netrom.c   2006-07-09 02:48:01.0 
+0100
+++ linux-net/net/netrom/af_netrom.c2006-07-09 02:50:35.0 +0100
@@ -1382,14 +1382,12 @@ static int __init nr_proto_init(void)
return -1;
}
 
-   dev_nr = kmalloc(nr_ndevs * sizeof(struct net_device *), GFP_KERNEL);
+   dev_nr = kzalloc(nr_ndevs * sizeof(struct net_device *), GFP_KERNEL);
if (dev_nr == NULL) {
printk(KERN_ERR NET/ROM: nr_proto_init - unable to allocate 
device array\n);
return -1;
}
 
-   memset(dev_nr, 0x00, nr_ndevs * sizeof(struct net_device *));
-
for (i = 0; i  nr_ndevs; i++) {
char name[IFNAMSIZ];
struct net_device *dev;
Index: linux-net/net/rose/af_rose.c
===
--- linux-net.orig/net/rose/af_rose.c   2006-07-09 02:48:01.0 +0100
+++ linux-net/net/rose/af_rose.c2006-07-09 02:50:35.0 +0100
@@ -1490,14 +1490,13 @@ static int __init rose_proto_init(void)
 
rose_callsign = null_ax25_address;
 
-   dev_rose = kmalloc(rose_ndevs * sizeof(struct net_device *), 
GFP_KERNEL);
+   dev_rose = kzalloc(rose_ndevs * sizeof(struct net_device *), 
GFP_KERNEL);
if (dev_rose == NULL) {
printk(KERN_ERR ROSE: rose_proto_init - unable to allocate 
device structure\n);
rc = -ENOMEM;
goto out_proto_unregister;
}
 
-   memset(dev_rose, 0x00, rose_ndevs * sizeof(struct net_device*));
for (i = 0; i  rose_ndevs; i++) {
struct net_device *dev;
char name[IFNAMSIZ];
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] [VLAN]: Update iif when receiving via VLAN device

2006-07-09 Thread Jamal Hadi Salim
On Sun, 2006-09-07 at 08:52 -0400, Jamal Hadi Salim wrote:

Ok, didnt complete my thought there ..

 I dont like it, like i said, because it adds one more check
 in the first path. I was contemplating at some point even not doing the 


.. not doing the  check for device up and just shove the packet at it.

cheers,
jamal

PS:-  warning on response still applies.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[RFC 0/4] kevent: generic kernel event processing subsystem.

2006-07-09 Thread Evgeniy Polyakov
Hello developers.

I'm pleased to announce in linux-kernel@ mail list kevent subsystem 
which incorporates several AIO/kqueue design notes and ideas.
Kevent can be used both for edge and level notifications. It supports
socket notifications, network AIO (aio_send(), aio_recv() and
aio_sendfile()), inode notifications (create/remove),
generic poll()/select() notifications and timer notifications.

Short implementation details.
storage - each source of events (socket, inode, timer, aio) 
has structure kevent_storage incorporated into it, which is 
basically a list of registered interests for this source of events.
user - it is abstraction which holds all requested kevents. 
It is similar to FreeBSD's kqueue.

kevent - set of interests for given source of events or storage.

Each kevent now is queued into three lists:

* kevent_user-kevent_list - list of all registered kevents.
* kevent_user-ready_list - list of ready kevents.
* kevent_storage-list - list of all interests for given kevent_storage.

When kevent is queued into storage, it will live there until 
removed by kevent_dequeue(). When some activity is noticed in 
given storage, it scans it's kevent_storage-list for kevents 
which match activity event. If kevents are found and they are 
not already in the kevent_user-ready_list, they will be added 
there at the end.

It is possible wait until either requested number of kevents are 
ready or timeout elapsed or at least one kevent is ready, 
it's behaviour depends on parameters.

Any event can be added/removed/modified by ioctl or one control syscall.

It was tested against FreeBSD kqueue and Linux epoll and showed
very noticeble performance win.

Network asynchronous IO operations were tested against Linux synchronous
socket code and showed noticeble performance win.

I would like to hear some comments about the overall design,
implementation and plans about it's usefullness for generic kernel.
Kevent patches were discussed several times already (project was created 
quite long time ago), and there were present no major negative feedback
except some high-level API changes. The latest discussion can be found 
at [4].

Design notes, patches, userspace application and perfomance tests can be
found at project's homepages.

1. Kevent subsystem.
http://tservice.net.ru/~s0mbre/old/?section=projectsitem=kevent

2. Network AIO.
http://tservice.net.ru/~s0mbre/old/?section=projectsitem=naio

3. LWN article about kevent.
http://lwn.net/Articles/172844/

4. The latest discussion in netdev@ mail list.
http://thread.gmane.org/gmane.linux.network/37595/focus=37673

Signed-off-by: Evgeniy Polyakov [EMAIL PROTECTED]

-- 
Evgeniy Polyakov
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[RFC 3/4] kevent: fs/aio notifications.

2006-07-09 Thread Evgeniy Polyakov
This patch includes asynchronous propagation of file's data into VFS
cache and aio_sendfile() implementation.

Signed-off-by: Evgeniy Polyakov [EMAIL PROTECTED]

diff --git a/fs/bio.c b/fs/bio.c
index 6a0b9ad..a3ee530 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -119,7 +119,7 @@ void bio_free(struct bio *bio, struct bi
 /*
  * default destructor for a bio allocated with bio_alloc_bioset()
  */
-static void bio_fs_destructor(struct bio *bio)
+void bio_fs_destructor(struct bio *bio)
 {
bio_free(bio, fs_bio_set);
 }
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c
index 04af9c4..295fce9 100644
--- a/fs/ext2/inode.c
+++ b/fs/ext2/inode.c
@@ -685,6 +685,7 @@ ext2_writepages(struct address_space *ma
 }
 
 struct address_space_operations ext2_aops = {
+   .get_block  = ext2_get_block,
.readpage   = ext2_readpage,
.readpages  = ext2_readpages,
.writepage  = ext2_writepage,
diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c
index 2edd7ee..e44f5ad 100644
--- a/fs/ext3/inode.c
+++ b/fs/ext3/inode.c
@@ -1700,6 +1700,7 @@ static int ext3_journalled_set_page_dirt
 }
 
 static struct address_space_operations ext3_ordered_aops = {
+   .get_block  = ext3_get_block,
.readpage   = ext3_readpage,
.readpages  = ext3_readpages,
.writepage  = ext3_ordered_writepage,
diff --git a/fs/file_table.c b/fs/file_table.c
index bcea199..8759479 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
@@ -113,6 +113,9 @@ struct file *get_empty_filp(void)
if (security_file_alloc(f))
goto fail_sec;
 
+#ifdef CONFIG_KEVENT_POLL
+   kevent_storage_init(f, f-st);
+#endif
tsk = current;
INIT_LIST_HEAD(f-f_u.fu_list);
atomic_set(f-f_count, 1);
@@ -160,6 +163,9 @@ void fastcall __fput(struct file *file)
might_sleep();
 
fsnotify_close(file);
+#ifdef CONFIG_KEVENT_POLL
+   kevent_storage_fini(file-st);
+#endif
/*
 * The function eventpoll_release() should be the first called
 * in the file cleanup chain.
diff --git a/fs/inode.c b/fs/inode.c
index 3a2446a..0493935 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -22,6 +22,7 @@ #include linux/pagemap.h
 #include linux/cdev.h
 #include linux/bootmem.h
 #include linux/inotify.h
+#include linux/kevent.h
 #include linux/mount.h
 
 /*
@@ -166,12 +167,18 @@ #endif
}
memset(inode-u, 0, sizeof(inode-u));
inode-i_mapping = mapping;
+#if defined CONFIG_KEVENT
+   kevent_storage_init(inode, inode-st);
+#endif
}
return inode;
 }
 
 void destroy_inode(struct inode *inode) 
 {
+#if defined CONFIG_KEVENT_INODE || defined CONFIG_KEVENT_SOCKET
+   kevent_storage_fini(inode-st);
+#endif
BUG_ON(inode_has_buffers(inode));
security_inode_free(inode);
if (inode-i_sb-s_op-destroy_inode)
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
index 9857e50..578 100644
--- a/fs/reiserfs/inode.c
+++ b/fs/reiserfs/inode.c
@@ -2997,6 +2997,7 @@ int reiserfs_setattr(struct dentry *dent
 }
 
 struct address_space_operations reiserfs_address_space_operations = {
+   .get_block = reiserfs_get_block,
.writepage = reiserfs_writepage,
.readpage = reiserfs_readpage,
.readpages = reiserfs_readpages,
diff --git a/include/linux/fs.h b/include/linux/fs.h
index ecc8c2c..248f6a1 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -236,6 +236,9 @@ #include linux/mutex.h
 #include asm/atomic.h
 #include asm/semaphore.h
 #include asm/byteorder.h
+#ifdef CONFIG_KEVENT
+#include linux/kevent_storage.h
+#endif
 
 struct hd_geometry;
 struct iovec;
@@ -348,6 +351,8 @@ struct address_space;
 struct writeback_control;
 
 struct address_space_operations {
+   int  (*get_block)(struct inode *inode, sector_t iblock,
+   struct buffer_head *bh_result, int create);
int (*writepage)(struct page *page, struct writeback_control *wbc);
int (*readpage)(struct file *, struct page *);
void (*sync_page)(struct page *);
@@ -526,6 +531,10 @@ #ifdef CONFIG_INOTIFY
struct mutexinotify_mutex;  /* protects the watches list */
 #endif
 
+#ifdef CONFIG_KEVENT_INODE
+   struct kevent_storage   st;
+#endif
+
unsigned long   i_state;
unsigned long   dirtied_when;   /* jiffies of first dirtying */
 
@@ -659,6 +668,9 @@ #ifdef CONFIG_EPOLL
struct list_headf_ep_links;
spinlock_t  f_ep_lock;
 #endif /* #ifdef CONFIG_EPOLL */
+#ifdef CONFIG_KEVENT_POLL
+   struct kevent_storage   st;
+#endif
struct address_space*f_mapping;
 };
 extern spinlock_t files_lock;
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h
index cc5dec7..0acc8db 100644
--- a/include/linux/fsnotify.h
+++ b/include/linux/fsnotify.h
@@ -15,6 +15,7 @@ #ifdef __KERNEL__
 
 #include linux/dnotify.h
 #include 

[RFC 1/4] kevent: core files.

2006-07-09 Thread Evgeniy Polyakov
This patch includes core kevent files:
 - userspace controlling
 - kernelspace interfaces
 - initialisation
 - notification state machines

It might also inlclude parts from other subsystem (like network related
syscalls so it is possible that it will not compile without other
patches applied).

Signed-off-by: Evgeniy Polyakov [EMAIL PROTECTED]

diff --git a/arch/i386/kernel/syscall_table.S b/arch/i386/kernel/syscall_table.S
index af56987..93e23ff 100644
--- a/arch/i386/kernel/syscall_table.S
+++ b/arch/i386/kernel/syscall_table.S
@@ -316,3 +316,7 @@ ENTRY(sys_call_table)
.long sys_sync_file_range
.long sys_tee   /* 315 */
.long sys_vmsplice
+   .long sys_aio_recv
+   .long sys_aio_send
+   .long sys_aio_sendfile
+   .long sys_kevent_ctl
diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S
index 5a92fed..534d516 100644
--- a/arch/x86_64/ia32/ia32entry.S
+++ b/arch/x86_64/ia32/ia32entry.S
@@ -696,4 +696,8 @@ #endif
.quad sys_sync_file_range
.quad sys_tee
.quad compat_sys_vmsplice
+   .quad sys_aio_recv
+   .quad sys_aio_send
+   .quad sys_aio_sendfile
+   .quad sys_kevent_ctl
 ia32_syscall_end:  
diff --git a/include/asm-i386/unistd.h b/include/asm-i386/unistd.h
index de2ccc1..52f8642 100644
--- a/include/asm-i386/unistd.h
+++ b/include/asm-i386/unistd.h
@@ -322,10 +322,14 @@ #define __NR_splice   313
 #define __NR_sync_file_range   314
 #define __NR_tee   315
 #define __NR_vmsplice  316
+#define __NR_aio_recv  317
+#define __NR_aio_send  318
+#define __NR_aio_sendfile  319
+#define __NR_kevent_ctl320
 
 #ifdef __KERNEL__
 
-#define NR_syscalls 317
+#define NR_syscalls 321
 
 /*
  * user-visible error numbers are in the range -1 - -128: see
diff --git a/include/asm-x86_64/socket.h b/include/asm-x86_64/socket.h
index f2cdbea..1f31f86 100644
--- a/include/asm-x86_64/socket.h
+++ b/include/asm-x86_64/socket.h
@@ -49,4 +49,6 @@ #define SO_ACCEPTCONN 30
 
 #define SO_PEERSEC 31
 
+#define SO_ASYNC_SOCK  34
+
 #endif /* _ASM_SOCKET_H */
diff --git a/include/asm-x86_64/unistd.h b/include/asm-x86_64/unistd.h
index 0aff22b..352c34b 100644
--- a/include/asm-x86_64/unistd.h
+++ b/include/asm-x86_64/unistd.h
@@ -617,11 +617,18 @@ #define __NR_sync_file_range  277
 __SYSCALL(__NR_sync_file_range, sys_sync_file_range)
 #define __NR_vmsplice  278
 __SYSCALL(__NR_vmsplice, sys_vmsplice)
+#define __NR_aio_recv  279
+__SYSCALL(__NR_aio_recv, sys_aio_recv)
+#define __NR_aio_send  280
+__SYSCALL(__NR_aio_send, sys_aio_send)
+#define __NR_aio_sendfile  281
+__SYSCALL(__NR_aio_sendfile, sys_aio_sendfile)
+#define __NR_kevent_ctl282
+__SYSCALL(__NR_kevent_ctl, sys_kevent_ctl)
 
 #ifdef __KERNEL__
 
-#define __NR_syscall_max __NR_vmsplice
-
+#define __NR_syscall_max __NR_kevent_ctl
 #ifndef __NO_STUBS
 
 /* user-visible error numbers are in the range -1 - -4095 */

diff --git a/include/linux/kevent.h b/include/linux/kevent.h
new file mode 100644
index 000..e94a7bf
--- /dev/null
+++ b/include/linux/kevent.h
@@ -0,0 +1,263 @@
+/*
+ * kevent.h
+ * 
+ * 2006 Copyright (c) Evgeniy Polyakov [EMAIL PROTECTED]
+ * 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
+ */
+
+#ifndef __KEVENT_H
+#define __KEVENT_H
+
+/*
+ * Kevent request flags.
+ */
+
+#define KEVENT_REQ_ONESHOT 0x1 /* Process this event only once 
and then dequeue. */
+
+/*
+ * Kevent return flags.
+ */
+#define KEVENT_RET_BROKEN  0x1 /* Kevent is broken. */
+#define KEVENT_RET_DONE0x2 /* Kevent processing 
was finished successfully. */
+
+/*
+ * Kevent type set.
+ */
+#define KEVENT_SOCKET  0
+#define KEVENT_INODE   1
+#define KEVENT_TIMER   2
+#define KEVENT_POLL3
+#define KEVENT_NAIO4
+#define KEVENT_AIO 5
+#defineKEVENT_MAX  6
+
+/*
+ * Per-type event sets.
+ * Number of per-event sets should be exactly as number of kevent types.
+ */
+
+/*
+ * Timer events.
+ */
+#defineKEVENT_TIMER_FIRED  0x1
+
+/*
+ * Socket/network asynchronous IO events.
+ */
+#define   

[RFC 4/4] kevent: generic poll and timer notifications.

2006-07-09 Thread Evgeniy Polyakov
This patch includes generic poll/select and timer notifications.

Signed-off-by: Evgeniy Polyakov [EMAIL PROTECTED]

diff --git a/kernel/kevent/kevent_poll.c b/kernel/kevent/kevent_poll.c
new file mode 100644
index 000..4950e7c
--- /dev/null
+++ b/kernel/kevent/kevent_poll.c
@@ -0,0 +1,223 @@
+/*
+ * kevent_poll.c
+ * 
+ * 2006 Copyright (c) Evgeniy Polyakov [EMAIL PROTECTED]
+ * 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.
+ */
+
+#include linux/kernel.h
+#include linux/types.h
+#include linux/list.h
+#include linux/slab.h
+#include linux/spinlock.h
+#include linux/timer.h
+#include linux/file.h
+#include linux/kevent.h
+#include linux/poll.h
+#include linux/fs.h
+
+static kmem_cache_t *kevent_poll_container_cache;
+static kmem_cache_t *kevent_poll_priv_cache;
+
+struct kevent_poll_ctl
+{
+   struct poll_table_structpt;
+   struct kevent   *k;
+};
+
+struct kevent_poll_wait_container
+{
+   struct list_headcontainer_entry;
+   wait_queue_head_t   *whead;
+   wait_queue_twait;
+   struct kevent   *k;
+};
+
+struct kevent_poll_private
+{
+   struct list_headcontainer_list;
+   spinlock_t  container_lock;
+};
+
+static int kevent_poll_enqueue(struct kevent *k);
+static int kevent_poll_dequeue(struct kevent *k);
+static int kevent_poll_callback(struct kevent *k);
+
+static int kevent_poll_wait_callback(wait_queue_t *wait, 
+   unsigned mode, int sync, void *key)
+{
+   struct kevent_poll_wait_container *cont = 
+   container_of(wait, struct kevent_poll_wait_container, wait);
+   struct kevent *k = cont-k;
+   struct file *file = k-st-origin;
+   unsigned long flags;
+   u32 revents, event;
+
+   revents = file-f_op-poll(file, NULL);
+   spin_lock_irqsave(k-lock, flags);
+   event = k-event.event;
+   spin_unlock_irqrestore(k-lock, flags);
+
+   kevent_storage_ready(k-st, NULL, revents);
+
+   return 0;
+}
+
+static void kevent_poll_qproc(struct file *file, wait_queue_head_t *whead, 
+   struct poll_table_struct *poll_table)
+{
+   struct kevent *k = 
+   container_of(poll_table, struct kevent_poll_ctl, pt)-k;
+   struct kevent_poll_private *priv = k-priv;
+   struct kevent_poll_wait_container *cont;
+   unsigned long flags;
+
+   cont = kmem_cache_alloc(kevent_poll_container_cache, SLAB_KERNEL);
+   if (!cont) {
+   kevent_break(k);
+   return;
+   }
+   
+   cont-k = k;
+   init_waitqueue_func_entry(cont-wait, kevent_poll_wait_callback);
+   cont-whead = whead;
+
+   spin_lock_irqsave(priv-container_lock, flags);
+   list_add_tail(cont-container_entry, priv-container_list);
+   spin_unlock_irqrestore(priv-container_lock, flags);
+
+   add_wait_queue(whead, cont-wait);
+}
+
+static int kevent_poll_enqueue(struct kevent *k)
+{
+   struct file *file;
+   int err, ready = 0;
+   unsigned int revents;
+   struct kevent_poll_ctl ctl;
+   struct kevent_poll_private *priv;
+
+   file = fget(k-event.id.raw[0]);
+   if (!file)
+   return -ENODEV;
+
+   err = -EINVAL;
+   if (!file-f_op || !file-f_op-poll)
+   goto err_out_fput;
+
+   err = -ENOMEM;
+   priv = kmem_cache_alloc(kevent_poll_priv_cache, SLAB_KERNEL);
+   if (!priv)
+   goto err_out_fput;
+
+   spin_lock_init(priv-container_lock);
+   INIT_LIST_HEAD(priv-container_list);
+
+   k-priv = priv;
+
+   ctl.k = k;
+   init_poll_funcptr(ctl.pt, kevent_poll_qproc);
+
+   err = kevent_storage_enqueue(file-st, k);
+   if (err)
+   goto err_out_free;
+
+   revents = file-f_op-poll(file, ctl.pt);
+   if (revents  k-event.event) {
+   ready = 1;
+   kevent_poll_dequeue(k);
+   }
+   
+   return ready;
+
+err_out_free:
+   kmem_cache_free(kevent_poll_priv_cache, priv);
+err_out_fput:
+   fput(file);
+   return err;
+}
+
+static int kevent_poll_dequeue(struct kevent *k)
+{
+   struct file *file = k-st-origin;
+   struct kevent_poll_private *priv = k-priv;
+   struct kevent_poll_wait_container *w, *n;
+   unsigned long flags;
+
+   kevent_storage_dequeue(k-st, k);
+
+   spin_lock_irqsave(priv-container_lock, flags);
+   

[RFC 2/4] kevent: network notifications.

2006-07-09 Thread Evgeniy Polyakov
This patchset includes socket notifications and network asynchronous IO.

Signed-off-by: Evgeniy Polyakov [EMAIL PROTECTED]

diff --git a/include/asm-i386/socket.h b/include/asm-i386/socket.h
index 802ae76..3473f5c 100644
--- a/include/asm-i386/socket.h
+++ b/include/asm-i386/socket.h
@@ -49,4 +49,6 @@ #define SO_ACCEPTCONN 30
 
 #define SO_PEERSEC 31
 
+#define SO_ASYNC_SOCK  34
+
 #endif /* _ASM_SOCKET_H */

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 66f8819..ea914c3 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -1269,6 +1269,8 @@ extern struct sk_buff *skb_recv_datagram
 int noblock, int *err);
 extern unsigned intdatagram_poll(struct file *file, struct socket *sock,
 struct poll_table_struct *wait);
+extern intskb_copy_datagram(const struct sk_buff *from, 
+int offset, void *dst, int size);
 extern intskb_copy_datagram_iovec(const struct sk_buff *from,
   int offset, struct iovec *to,
   int size);
diff --git a/include/net/sock.h b/include/net/sock.h
index d10dfec..7a2bee3 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -47,6 +47,7 @@ #include linux/module.h
 #include linux/netdevice.h
 #include linux/skbuff.h  /* struct sk_buff */
 #include linux/security.h
+#include linux/kevent.h
 
 #include linux/filter.h
 
@@ -386,6 +387,8 @@ enum sock_flags {
SOCK_NO_LARGESEND, /* whether to sent large segments or not */
SOCK_LOCALROUTE, /* route locally only, %SO_DONTROUTE setting */
SOCK_QUEUE_SHRUNK, /* write queue has been shrunk recently */
+   SOCK_ASYNC,
+   SOCK_ASYNC_INUSE,
 };
 
 static inline void sock_copy_flags(struct sock *nsk, struct sock *osk)
@@ -445,6 +448,21 @@ static inline int sk_stream_memory_free(
 
 extern void sk_stream_rfree(struct sk_buff *skb);
 
+struct socket_alloc {
+   struct socket socket;
+   struct inode vfs_inode;
+};
+
+static inline struct socket *SOCKET_I(struct inode *inode)
+{
+   return container_of(inode, struct socket_alloc, vfs_inode)-socket;
+}
+
+static inline struct inode *SOCK_INODE(struct socket *socket)
+{
+   return container_of(socket, struct socket_alloc, socket)-vfs_inode;
+}
+
 static inline void sk_stream_set_owner_r(struct sk_buff *skb, struct sock *sk)
 {
skb-sk = sk;
@@ -472,6 +490,7 @@ static inline void sk_add_backlog(struct
sk-sk_backlog.tail = skb;
}
skb-next = NULL;
+   kevent_socket_notify(sk, KEVENT_SOCKET_RECV);
 }
 
 #define sk_wait_event(__sk, __timeo, __condition)  \
@@ -543,6 +562,12 @@ struct proto {
 
int (*backlog_rcv) (struct sock *sk, 
struct sk_buff *skb);
+   
+   int (*async_recv) (struct sock *sk, 
+   void *dst, size_t size);
+   int (*async_send) (struct sock *sk, 
+   struct page **pages, unsigned 
int poffset, 
+   size_t size);
 
/* Keeping track of sk's, looking them up, and port selection methods. 
*/
void(*hash)(struct sock *sk);
@@ -674,21 +699,6 @@ static inline struct kiocb *siocb_to_kio
return si-kiocb;
 }
 
-struct socket_alloc {
-   struct socket socket;
-   struct inode vfs_inode;
-};
-
-static inline struct socket *SOCKET_I(struct inode *inode)
-{
-   return container_of(inode, struct socket_alloc, vfs_inode)-socket;
-}
-
-static inline struct inode *SOCK_INODE(struct socket *socket)
-{
-   return container_of(socket, struct socket_alloc, socket)-vfs_inode;
-}
-
 extern void __sk_stream_mem_reclaim(struct sock *sk);
 extern int sk_stream_mem_schedule(struct sock *sk, int size, int kind);
 
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 5f4eb5c..820cd5a 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -364,6 +364,8 @@ extern int  compat_tcp_setsockopt(struc
int level, int optname,
char __user *optval, int optlen);
 extern voidtcp_set_keepalive(struct sock *sk, int val);
+extern int tcp_async_recv(struct sock *sk, void *dst, 
size_t size);
+extern int tcp_async_send(struct sock *sk, struct page 
**pages, unsigned int poffset, size_t size);
 extern int tcp_recvmsg(struct kiocb *iocb, struct sock *sk,
struct msghdr *msg,
size_t len, int nonblock, 
@@ -857,6 +859,7 @@ static inline int tcp_prequeue(struct so
 

Re: [PATCH 2/3] [VLAN]: Update iif when receiving via VLAN device

2006-07-09 Thread Thomas Graf
* Jamal Hadi Salim [EMAIL PROTECTED] 2006-07-09 08:52
 On Sun, 2006-09-07 at 01:46 +0200, Thomas Graf wrote:
  * Jamal Hadi Salim [EMAIL PROTECTED] 2006-07-08 10:14
 [..]
   There is no easy way to detect such a deadlock. I think it reduces to
   the same case as eth0-eth0, i.e:
  
  It's very simple. Just use the same method and add a flag if a mirred
  is currently in use as Herbert did to qdisc_run().
  
 
 But that would make it more complex in the sense it would require a lot
 more code.
 
 Another simpler approach is to check for recursion right in 

It's very interesting that you change from there is no easy way
to another simpler approach... in just one posting :-)

 dev_queue_xmit() - but i did not dare to do that because i could not
 justify it for any other code other than loops created by the action
 code. i.e something along the lines of:
 
 if (q-enqueue) {
   if (!spin_trylock(dev-queue_lock)) {
   printk(yikes recursed device %s\n,dev-name);
 goto tx_recursion_detected;
 }

That's not gonna work, dev-queue_lock may be held legimitately
by someone else than an underlying dev_queue_xmit() call.

 [BTW, notice how i used code to describe my view above ;-]

I'm very proud of you.

 Again, I was hoping that Herbert's stuff may change this view (and
 therefore give it more legitimacy) - but if the above can be accepted
 then we can forget touching mirred.

You need this:

if (test_and_set_bit(__LINK_STATE_ENQUEUEING, dev-state))
goto tx_recursion_detected;

spin_lock(queue_lock);
enqueue(...)
qdisc_run()
spin_unlock(queue_lock);

clear_bit(__LINK_TATE_ENQUEUEING, dev-state);

Unfortunately we'd still need __LINK_STATE_QDISC_RUNNING due
to net_tx_action().

 No Thomas - this is a valid check. As valid as mirred checking if device
 is up first. I dont like it, like i said, because it adds one more check
 in the first path. I was contemplating at some point even not doing the 

I'm not going to argue about this.

 By mirred deadlock i think you mean the deadlock that happens in
 dev_queue_xmit()? 

I meant the deadlock within mirred but the deadlock on queue_lock
is happening first anyway.

 What is still not clear above?

Frankly, I have no idea which deadlocks are intentional, what ideas
you have about ingress-egress, etc because it is not documented.
The list is very long. I'm not going to waste time trying to work
out a patch that will then not suit the ideas in your mind and on
your notes. You're maintaing this code, no?
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] [VLAN]: Update iif when receiving via VLAN device

2006-07-09 Thread Jamal Hadi Salim
On Sun, 2006-09-07 at 15:33 +0200, Thomas Graf wrote:
 * Jamal Hadi Salim [EMAIL PROTECTED] 2006-07-09 08:52
[..]
  Another simpler approach is to check for recursion right in 
 
 It's very interesting that you change from there is no easy way
 to another simpler approach... in just one posting :-)
 

I said there was no easy way of detecting - which is different from
preventing. Both approaches i showed were things i used (as far back as
last year) but did not find palatable to submit.
Hopefully we dont go into a tangent on this.

  if (q-enqueue) {
  if (!spin_trylock(dev-queue_lock)) {
  printk(yikes recursed device %s\n,dev-name);
  goto tx_recursion_detected;
  }
 
 That's not gonna work, dev-queue_lock may be held legimitately
 by someone else than an underlying dev_queue_xmit() call.
 

If there is a legitimate reason then it wont work. I cant think of one
though.

  [BTW, notice how i used code to describe my view above ;-]
 
 I'm very proud of you.
 

Thank you thank you

  Again, I was hoping that Herbert's stuff may change this view (and
  therefore give it more legitimacy) - but if the above can be accepted
  then we can forget touching mirred.
 
 You need this:
 
 if (test_and_set_bit(__LINK_STATE_ENQUEUEING, dev-state))
   goto tx_recursion_detected;
 
 spin_lock(queue_lock);
 enqueue(...)
 qdisc_run()
 spin_unlock(queue_lock);
 
 clear_bit(__LINK_TATE_ENQUEUEING, dev-state);
 
 Unfortunately we'd still need __LINK_STATE_QDISC_RUNNING due
 to net_tx_action().
 

This is also another approach that would work. If you think its simpler
go ahead and shoot a patch.

  By mirred deadlock i think you mean the deadlock that happens in
  dev_queue_xmit()? 
 
 I meant the deadlock within mirred but the deadlock on queue_lock
 is happening first anyway.
 

if you can stop things at the queue you wont have to worry about mirred.

  What is still not clear above?
 
 Frankly, I have no idea which deadlocks are intentional, what ideas
 you have about ingress-egress, etc because it is not documented.
 The list is very long. 

Ask one question at a time and i will answer. Some of the things we
discussed have no place to be commented-on in the code. But i think what
is obvious is:

A-*-A is a no-no.
And in some cases it is fine to let the user just fsck themselves
because then they will understand it is a bad idea [1] when shit
happens. OTOH, if there was a KISS way of doing it (as in the ifb case,
why not).

 I'm not going to waste time trying to work
 out a patch that will then not suit the ideas in your mind and on
 your notes. You're maintaing this code, no?

Yes, of course otherwise i wouldnt bother to comment on any patches.

cheers,
jamal

[1] there was a long discussion a few years back when i was still in
lkml on someone trying to redirect (i think) /dev/null - /dev/mem
(dont hold me accountable if those are not the right devices, just
absorb the moral of this instead). The consensus was it would be very
difficult to do without making a lot of changes and if someone wishes to
do that they deserved what they are getting.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] [VLAN]: Update iif when receiving via VLAN device

2006-07-09 Thread Thomas Graf
* Jamal Hadi Salim [EMAIL PROTECTED] 2006-07-09 10:03
 On Sun, 2006-09-07 at 15:33 +0200, Thomas Graf wrote:
  That's not gonna work, dev-queue_lock may be held legimitately
  by someone else than an underlying dev_queue_xmit() call.
  
 
 If there is a legitimate reason then it wont work. I cant think of one
 though.

See sch_generic.c, it's documented. A simple grep on queue_lock
would have told you the same.

 This is also another approach that would work. If you think its simpler
 go ahead and shoot a patch.

It's not simpler, it's correct, while your patch is wrong.

 A-*-A is a no-no.
 And in some cases it is fine to let the user just fsck themselves
 because then they will understand it is a bad idea [1] when shit
 happens. OTOH, if there was a KISS way of doing it (as in the ifb case,
 why not).

I remind you that you started mentioning this A-*-A case while
talking about tx deadlocks that were supposed to be prevented with
the !from check or something along that lines. I can't really tell
because you explain it differently in every posting.

 Yes, of course otherwise i wouldnt bother to comment on any patches.

So maintain the code and fix your bugs.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PKT_SCHED]: act_api: Fix module leak while flushing actions

2006-07-09 Thread Thomas Graf
Module reference needs to be given back if message header
construction fails.

Signed-off-by: Thomas Graf [EMAIL PROTECTED]

Index: net-2.6.git/net/sched/act_api.c
===
--- net-2.6.git.orig/net/sched/act_api.c
+++ net-2.6.git/net/sched/act_api.c
@@ -602,8 +602,8 @@ static int tca_action_flush(struct rtatt
return err;
 
 rtattr_failure:
-   module_put(a-ops-owner);
 nlmsg_failure:
+   module_put(a-ops-owner);
 err_out:
kfree_skb(skb);
kfree(a);
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] airo: make debug-like messages printed by airo_print_dbg()

2006-07-09 Thread Dan Williams
On Sat, 2006-07-08 at 17:59 +0200, Robert Schulze wrote:
 I don't think that messages like
 
 airo(eth1): cmd= 111
 
 airo(eth1): status= 7f11
 
 airo(eth1): Rsp0= 2
 
 airo(eth1): Rsp1= 0
 
 airo(eth1): Rsp2= 0
 
 are interesting to normal users, so switch them from airo_print_err() to 
 airo_print_dbg().
 Furthermore, remove implicit linefeed in those messages, as they are handled 
 by airo_print().

+1.  If you wanted to get a bit more creative, maybe collapse all of
these onto a single line to print something like:

airo(eth1): Command didn't complete. cmd:0x111 status:0x7f11 (Rsp: 2, 0,
0)

This message will only happen if the card hangs up and stops responding
to commands anyway, so we don't necessarily care about making the
message decipherable to anyone other than developers.

Dan

 with kind regards,
 Robert Schulze
 
 --- linux-2.6.17.1/drivers/net/wireless/airo.c.orig   2006-07-08 
 14:02:12.0 +0200
 +++ linux-2.6.17.1/drivers/net/wireless/airo.c2006-07-08 
 17:36:08.0 +0200
 @@ -3897,11 +3897,11 @@ static u16 issuecommand(struct airo_info
   pRsp-rsp1 = IN4500(ai, RESP1);
   pRsp-rsp2 = IN4500(ai, RESP2);
   if ((pRsp-status  0xff00)!=0  pCmd-cmd != CMD_SOFTRESET) {
 - airo_print_err(ai-dev-name, cmd= %x\n, pCmd-cmd);
 - airo_print_err(ai-dev-name, status= %x\n, pRsp-status);
 - airo_print_err(ai-dev-name, Rsp0= %x\n, pRsp-rsp0);
 - airo_print_err(ai-dev-name, Rsp1= %x\n, pRsp-rsp1);
 - airo_print_err(ai-dev-name, Rsp2= %x\n, pRsp-rsp2);
 + airo_print_dbg(ai-dev-name, cmd= %x, pCmd-cmd);
 + airo_print_dbg(ai-dev-name, status= %x, pRsp-status);
 + airo_print_dbg(ai-dev-name, Rsp0= %x, pRsp-rsp0);
 + airo_print_dbg(ai-dev-name, Rsp1= %x, pRsp-rsp1);
 + airo_print_dbg(ai-dev-name, Rsp2= %x, pRsp-rsp2);
   }
 
   // clear stuck command busy if necessary
 -
 To unsubscribe from this list: send the line unsubscribe netdev in
 the body of a message to [EMAIL PROTECTED]
 More majordomo info at  http://vger.kernel.org/majordomo-info.html

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC 1/4] kevent: core files.

2006-07-09 Thread Pekka Enberg

On 7/9/06, Evgeniy Polyakov [EMAIL PROTECTED] wrote:

+struct kevent *kevent_alloc(gfp_t mask)
+{
+   struct kevent *k;
+
+   if (kevent_cache)
+   k = kmem_cache_alloc(kevent_cache, mask);
+   else
+   k = kzalloc(sizeof(struct kevent), mask);
+
+   return k;
+}


What's this for? Why would kevent_cache be NULL? Note that you can use
kmem_cache_zalloc() for fixed size allocations that need to be zeroed.

On 7/9/06, Evgeniy Polyakov [EMAIL PROTECTED] wrote:

+
+void kevent_free(struct kevent *k)
+{
+   memset(k, 0xab, sizeof(struct kevent));


Why is slab poisoning not sufficient?


+   if (kevent_cache)
+   kmem_cache_free(kevent_cache, k);
+   else
+   kfree(k);
+}

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] [VLAN]: Update iif when receiving via VLAN device

2006-07-09 Thread Jamal Hadi Salim
On Sun, 2006-09-07 at 16:19 +0200, Thomas Graf wrote:
 * Jamal Hadi Salim [EMAIL PROTECTED] 2006-07-09 10:03
  On Sun, 2006-09-07 at 15:33 +0200, Thomas Graf wrote:
   That's not gonna work, dev-queue_lock may be held legimitately
   by someone else than an underlying dev_queue_xmit() call.
   
  
  If there is a legitimate reason then it wont work. I cant think of one
  though.
 
 See sch_generic.c, it's documented. A simple grep on queue_lock
 would have told you the same.
 

If you mean that the device will also try to grab the qlock there, then
that is fine still for the serialization. It all starts at
dev_queue_xmit.

  This is also another approach that would work. If you think its simpler
  go ahead and shoot a patch.
 
 It's not simpler, it's correct, while your patch is wrong.
 

Ok, calm down, will you? Man, you make it very hard to follow Daves
Tibetan approach. Let me tell you exactly how i feel about your
approach: It is unnecessarily complex. The approach i posted is not only
fine, it works with only 4-5 lines of code; i have numerous tests
against it over a long period of time. I was trying to be polite and
follow Daves advice not to insist it has to be done my way - it almost
seems impossible with you trying to nitpick on little unimportant
details.

  A-*-A is a no-no.
  And in some cases it is fine to let the user just fsck themselves
  because then they will understand it is a bad idea [1] when shit
  happens. OTOH, if there was a KISS way of doing it (as in the ifb case,
  why not).
 
 I remind you that you started mentioning this A-*-A case while
 talking about tx deadlocks that were supposed to be prevented with
 the !from check or something along that lines. I can't really tell
 because you explain it differently in every posting.
 

Because you are looking for preciseness at the micro/code level and i am
trying to explain at the conceptual/macro level (I have to adjust to
your mode but it is hard for me because i dont think at our level that
matters). When i sense you didnt understand me the last time, I try to
explain it better. The deadlock happens on transmit. If you want to be
precise, it happens when dev_queue_xmit is invoked. If you want more
preciseness, when the queue lock is contended. If you want more
preciseness, the code sample that i showed you should help illustrate
it.

  Yes, of course otherwise i wouldnt bother to comment on any patches.
 
 So maintain the code and fix your bugs.

Ok, I dont think this is gonna work - I may have to give up on getting
any resolution. 

Heres the suggestion again and you can still shoot a patch:
- If we can avoid doing anything at mirred that is the most preferable
approach. i.e get the change for free. In other words if it complicates
things it is not worth it. Someone redirecting eth0 to eth0 on egress
deserves whats happening to them.

- Try it against Herberts patch. It may resolve something or may require
an adjustment to Herberts patch so we can kill two birds with one stone
i.e get it for free. I dont know. I guess i shouldnt say i dont know
it is not precise, my point is you may find things when you attempt the
change. The patch is in Daves 2.6.18 tree.

- Iam fine with your suggestion to use a flag. The problem is not which
scheme you use - it is whether the change at such a crucial path in the
stack would be acceptable to other people.

Anyways, I am off.

cheers,
jamal

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC 1/4] kevent: core files.

2006-07-09 Thread Evgeniy Polyakov
On Sun, Jul 09, 2006 at 05:59:42PM +0300, Pekka Enberg ([EMAIL PROTECTED]) 
wrote:
 On 7/9/06, Evgeniy Polyakov [EMAIL PROTECTED] wrote:
 +struct kevent *kevent_alloc(gfp_t mask)
 +{
 +   struct kevent *k;
 +
 +   if (kevent_cache)
 +   k = kmem_cache_alloc(kevent_cache, mask);
 +   else
 +   k = kzalloc(sizeof(struct kevent), mask);
 +
 +   return k;
 +}
 
 What's this for? Why would kevent_cache be NULL? Note that you can use
 kmem_cache_zalloc() for fixed size allocations that need to be zeroed.

It can work without cache at all, i.e. if cache creation fails.
Well, it can be removed of course, since it does not hurt anything.

 On 7/9/06, Evgeniy Polyakov [EMAIL PROTECTED] wrote:
 +
 +void kevent_free(struct kevent *k)
 +{
 +   memset(k, 0xab, sizeof(struct kevent));
 
 Why is slab poisoning not sufficient?

Since that pointer is always known to be poisoned no matter if kernel
debugging option is turned on or off.

-- 
Evgeniy Polyakov
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: skge error; hangs w/ hardware memory hole

2006-07-09 Thread Anthony DeRobertis
Andi Kleen wrote:

 Is that a board with VIA chipset?

Yep.

 
 VIA doesn't seem to support PCI accesses with addresses 4GB and they also
 don't have a working GART IOMMU.
 
 It will likely work with iommu=force

I'll give this a try I do get a line in dmesg which reads:

PCI-DMA: Disabling IOMMU.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH RFC]rfkill - Hardware button support for Wireless cards

2006-07-09 Thread Ivo Van Doorn

Hi,

I have been quite busy lately, hence the reason for this late continuance
of the Hardware button support for Wireless cards discussion.
I have CC'ed the people who discussed this in earlier threads.

With the suggestions made by Vojtech Pavlik I have created the rfkill driver,
for which I would like to know if this is the acceptable approach.

This rfkill driver looks a bit like the previous version I had send,
but this version does pay attention if the input device has been opened
and if an event should be send to userspace in that case.

I was however unsure about where the KEY_RFKILL should be added
in linux/input.h. I again placed this driver in drivers/input/misc but perhaps
this should go into drivers/net instead?

I hope I am on the right track. :)

Signed-off-by Ivo van Doorn [EMAIL PROTECTED]

---
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index 4bad588..837021a 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -79,4 +79,19 @@ config HP_SDC_RTC
  Say Y here if you want to support the built-in real time clock
  of the HP SDC controller.

+config RFKILL
+   tristate RF button support
+   help
+ If you say yes here, the rfkill driver will be build
+ which allowed network devices to register their hardware
+ RF button which controls the radio state. This driver
+ will then create an input device for it.
+
+ When the input device is not used, the rfkill driver
+ will make sure that when the RF button is pressed the radio
+ is enabled or disabled accordingly. When the input device
+ has been opened by the user this radio control will be left
+ to the user, and rfkill will only send the RF button status
+ change to userspace.
+
endif
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index 415c491..e788a1b 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -11,3 +11,4 @@ obj-$(CONFIG_INPUT_UINPUT)+= uinput.o
obj-$(CONFIG_INPUT_WISTRON_BTNS)+= wistron_btns.o
obj-$(CONFIG_HP_SDC_RTC)+= hp_sdc_rtc.o
obj-$(CONFIG_INPUT_IXP4XX_BEEPER)   += ixp4xx-beeper.o
+obj-$(CONFIG_RFKILL)   += rfkill.o
diff --git a/drivers/input/misc/rfkill.c b/drivers/input/misc/rfkill.c
new file mode 100644
index 000..da576e5
--- /dev/null
+++ b/drivers/input/misc/rfkill.c
@@ -0,0 +1,209 @@
+/*
+   Copyright (C) 2006 Ivo van Doorn
+
+   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.
+ */
+
+#include linux/kernel.h
+#include linux/module.h
+#include linux/init.h
+#include linux/timer.h
+#include linux/rfkill.h
+
+#include asm/atomic.h
+
+MODULE_AUTHOR(Ivo van Doorn [EMAIL PROTECTED]);
+MODULE_VERSION(1.0);
+MODULE_DESCRIPTION(RF button support);
+MODULE_LICENSE(GPL);
+
+/*
+ * List of all registered buttons.
+ */
+static struct list_head rfkill_list;
+static spinlock_t rfkill_list_lock;
+
+/*
+ * Polling timer, poll_delay and use count.
+ */
+static struct timer_list poll_timer;
+static atomic_t poll_required;
+
+static void rfkill_toggle_radio(int new_status)
+{
+   struct list_head *entry;
+   struct rfkill *rfkill;
+
+   /*
+* Go through the list of all radio's to toggle the radio state.
+*/
+   list_for_each(entry, rfkill_list) {
+   rfkill =  list_entry(entry, struct rfkill, entry);
+
+   rfkill-current_status = new_status;
+
+   /*
+   * If the input_device has been opened
+   * all radio events should be send to user space.
+   */
+   if (rfkill-input_dev-users) {
+   input_report_key(rfkill-input_dev,
+   KEY_RFKILL, new_status);
+   input_sync(rfkill-input_dev);
+   }
+   
+   /*
+   * If the hardware does not toggle the radio status automaticly,
+   * we should take care of it.
+   */
+   if (new_status  rfkill-enable_radio)
+   rfkill-enable_radio(rfkill-data);
+   else if (!new_status  rfkill-disable_radio)
+   

Re: [PATCH 2/3] [VLAN]: Update iif when receiving via VLAN device

2006-07-09 Thread Thomas Graf
* Jamal Hadi Salim [EMAIL PROTECTED] 2006-07-09 11:00
 If you mean that the device will also try to grab the qlock there, then
 that is fine still for the serialization. It all starts at
 dev_queue_xmit.

Look at where dev-queue_lock is taken, whenever a qdisc or
filter is added, modified or deleted the lock is taken. Using
your approach packets get dropped while such an operation is
taking place. Your approach is wrong.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: rtl8139: NETDEV WATCHDOG: eth0: transmit timed out

2006-07-09 Thread Marcus Better
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Thomas Hellström wrote:
 Strange. I've also seen the i915 sending false interrupts on its own
 line, though.

Here's the interrupt table with i915 loaded:

~$ cat /proc/interrupts
   CPU0
  0: 401031  XT-PIC  timer
  1:   3681  XT-PIC  i8042
  2:  0  XT-PIC  cascade
  8:  0  XT-PIC  rtc
  9:  0  XT-PIC  acpi
 10:997  XT-PIC  yenta, Intel 82801CA-ICH3, Intel
82801CA-ICH3 Modem
 11:  93823  XT-PIC  uhci_hcd:usb1, uhci_hcd:usb2, eth0,
[EMAIL PROTECTED]::00:02.0
 12:  75631  XT-PIC  i8042
 14:  18284  XT-PIC  ide0
 15:  13901  XT-PIC  ide1
NMI:  0
ERR:  0

 Does the noirqdebug option fix the problem?

Yes, it appears to fix it.

Marcus

-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.3 (GNU/Linux)

iD8DBQFEsTArXjXn6TzcAQkRAn/vAKCZUAVd45xQae4FthvNr68x/jTS4QCgyE7N
CzPv0R9okmIjrsGykMXrfPk=
=gU6D
-END PGP SIGNATURE-
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] airo: make debug-like messages printed by airo_print_dbg()

2006-07-09 Thread Robert Schulze

Hi,

Dan Williams schrieb:
 This message will only happen if the card hangs up and stops responding
 to commands anyway, so we don't necessarily care about making the
 message decipherable to anyone other than developers.

Well, I get this message each time I insert my Cisco Aironet 350 PCMCIA card, 
which works obviously fine.
On card removal, I get:

airo(eth1): cmd= 21

airo(eth1): status= 

airo(eth1): Rsp0= 

airo(eth1): Rsp1= 

airo(eth1): Rsp2= 

four(!) times.

Besides, the messages can be read by issuing dmesg even after the patch, so no 
information gets lost.


with kind regards,

Robert Schulze
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[2.6 patch] drivers/net/wireless/zd1211rw/: possible cleanups

2006-07-09 Thread Adrian Bunk
This patch contains the following possible cleanups:
- make needlessly global functions static
- #if 0 unused functions

Please review which of these functions do make sense and which do 
conflict with pending patches.

Signed-off-by: Adrian Bunk [EMAIL PROTECTED]

---

 drivers/net/wireless/zd1211rw/zd_chip.c |   32 
 drivers/net/wireless/zd1211rw/zd_chip.h |   30 --
 drivers/net/wireless/zd1211rw/zd_mac.c  |4 +--
 drivers/net/wireless/zd1211rw/zd_mac.h  |6 
 drivers/net/wireless/zd1211rw/zd_usb.c  |4 +--
 drivers/net/wireless/zd1211rw/zd_util.c |4 +--
 drivers/net/wireless/zd1211rw/zd_util.h |6 
 7 files changed, 39 insertions(+), 47 deletions(-)

--- linux-2.6.18-rc1-mm1-full/drivers/net/wireless/zd1211rw/zd_chip.h.old   
2006-07-09 16:51:01.0 +0200
+++ linux-2.6.18-rc1-mm1-full/drivers/net/wireless/zd1211rw/zd_chip.h   
2006-07-09 19:01:05.0 +0200
@@ -690,15 +690,6 @@
return zd_usb_ioread16(chip-usb, value, addr);
 }
 
-int zd_ioread32v_locked(struct zd_chip *chip, u32 *values,
-   const zd_addr_t *addresses, unsigned int count);
-
-static inline int zd_ioread32_locked(struct zd_chip *chip, u32 *value,
-const zd_addr_t addr)
-{
-   return zd_ioread32v_locked(chip, value, (const zd_addr_t *)addr, 1);
-}
-
 static inline int zd_iowrite16_locked(struct zd_chip *chip, u16 value,
  zd_addr_t addr)
 {
@@ -728,9 +719,6 @@
return _zd_iowrite32v_locked(chip, ioreq, 1);
 }
 
-int zd_iowrite32a_locked(struct zd_chip *chip,
-const struct zd_ioreq32 *ioreqs, unsigned int count);
-
 static inline int zd_rfwrite_locked(struct zd_chip *chip, u32 value, u8 bits)
 {
ZD_ASSERT(mutex_is_locked(chip-mutex));
@@ -743,12 +731,7 @@
 /* Locking functions for reading and writing registers.
  * The different parameters are intentional.
  */
-int zd_ioread16(struct zd_chip *chip, zd_addr_t addr, u16 *value);
-int zd_iowrite16(struct zd_chip *chip, zd_addr_t addr, u16 value);
-int zd_ioread32(struct zd_chip *chip, zd_addr_t addr, u32 *value);
 int zd_iowrite32(struct zd_chip *chip, zd_addr_t addr, u32 value);
-int zd_ioread32v(struct zd_chip *chip, const zd_addr_t *addresses,
- u32 *values, unsigned int count);
 int zd_iowrite32a(struct zd_chip *chip, const struct zd_ioreq32 *ioreqs,
   unsigned int count);
 
@@ -760,7 +743,6 @@
 u8  zd_chip_get_channel(struct zd_chip *chip);
 int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain);
 void zd_get_e2p_mac_addr(struct zd_chip *chip, u8 *mac_addr);
-int zd_read_mac_addr(struct zd_chip *chip, u8 *mac_addr);
 int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr);
 int zd_chip_switch_radio_on(struct zd_chip *chip);
 int zd_chip_switch_radio_off(struct zd_chip *chip);
@@ -771,20 +753,24 @@
 int zd_chip_enable_hwint(struct zd_chip *chip);
 int zd_chip_disable_hwint(struct zd_chip *chip);
 
+#if 0
 static inline int zd_get_encryption_type(struct zd_chip *chip, u32 *type)
 {
return zd_ioread32(chip, CR_ENCRYPTION_TYPE, type);
 }
+#endif  /*  0  */
 
 static inline int zd_set_encryption_type(struct zd_chip *chip, u32 type)
 {
return zd_iowrite32(chip, CR_ENCRYPTION_TYPE, type);
 }
 
+#if 0
 static inline int zd_chip_get_basic_rates(struct zd_chip *chip, u16 *cr_rates)
 {
return zd_ioread16(chip, CR_BASIC_RATE_TBL, cr_rates);
 }
+#endif  /*  0  */
 
 int zd_chip_set_basic_rates(struct zd_chip *chip, u16 cr_rates);
 
@@ -803,16 +789,12 @@
LED_STATUS = 3,
 };
 
-int zd_chip_led_status(struct zd_chip *chip, int led, enum led_status status);
-int zd_chip_led_flip(struct zd_chip *chip, int led,
-const unsigned int *phases_msecs, unsigned int count);
-
-int zd_set_beacon_interval(struct zd_chip *chip, u32 interval);
-
+#if 0
 static inline int zd_get_beacon_interval(struct zd_chip *chip, u32 *interval)
 {
return zd_ioread32(chip, CR_BCN_INTERVAL, interval);
 }
+#endif  /*  0  */
 
 struct rx_status;
 
--- linux-2.6.18-rc1-mm1-full/drivers/net/wireless/zd1211rw/zd_chip.c.old   
2006-07-09 16:51:15.0 +0200
+++ linux-2.6.18-rc1-mm1-full/drivers/net/wireless/zd1211rw/zd_chip.c   
2006-07-09 19:05:19.0 +0200
@@ -87,8 +87,8 @@
 /* Read a variable number of 32-bit values. Parameter count is not allowed to
  * exceed USB_MAX_IOREAD32_COUNT.
  */
-int zd_ioread32v_locked(struct zd_chip *chip, u32 *values, const zd_addr_t 
*addr,
-unsigned int count)
+static int zd_ioread32v_locked(struct zd_chip *chip, u32 *values,
+  const zd_addr_t *addr, unsigned int count)
 {
int r;
int i;
@@ -135,6 +135,12 @@
return r;
 }
 
+static int zd_ioread32_locked(struct zd_chip *chip, u32 *value,
+const zd_addr_t addr)
+{
+   return zd_ioread32v_locked(chip, value, 

Re: [PATCH] airo: make debug-like messages printed by airo_print_dbg()

2006-07-09 Thread Michael Tokarev
Robert Schulze wrote:
 Hi,
 
 Dan Williams schrieb:
 This message will only happen if the card hangs up and stops responding
 to commands anyway, so we don't necessarily care about making the
 message decipherable to anyone other than developers.
 
 Well, I get this message each time I insert my Cisco Aironet 350 PCMCIA
 card, which works obviously fine.
[]
 Besides, the messages can be read by issuing dmesg even after the patch,
 so no information gets lost.

The fact that you're getting that message indicates that something's wrong,
at least from the kernel's point of view.  So it better be understand and
fixed, instead of being hidden in debugging output.  If it's visible in
dmesg but isn't visible in syslog (default syslog configuration does not
capture any debugging messages), far less people will notice it.

I'd vote for making it one-line, but with current KERN_ERR priority.

/mjt (who don't even have the hardware in question)
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PKT_SCHED]: act_api: Fix module leak while flushing actions

2006-07-09 Thread David Miller
From: Thomas Graf [EMAIL PROTECTED]
Date: Sun, 9 Jul 2006 16:20:43 +0200

 Module reference needs to be given back if message header
 construction fails.
 
 Signed-off-by: Thomas Graf [EMAIL PROTECTED]

Applied, thanks Thomas.

This reminds me of something, not only are non-networking developers
getting tripped up constantly about these magic code labels referenced
from the netlink macros, they are tripping us up as well.

I really think it's time, at a minimum, to explicitly mention the
labels as an argument to the macros, or something like that.

I'll try to cons something up when I get a chance.  The current
situation is too error prone.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [VLAN]: translate IF_OPER_DORMANT to netif_dormant_on()

2006-07-09 Thread David Miller
From: Stefan Rompf [EMAIL PROTECTED]
Date: Sun, 9 Jul 2006 10:49:31 +0200

 Am Freitag, 7. Juli 2006 23:33 schrieb Stephen Hemminger:
 
  Not really. The flag code last major change was to do the dormant
  stuff that HDLC wanted.
 
 ... and where the maintainer doesn't seem to care to use it now that the 
 infrastructure is there. Sigh.

Yes, this is very unfortunate.  They made the loudest noise about
wanting the change, yet they aren't even responsible enough to submit
the HDLC patches necessary to make use of it.  This was apparently
needed to fix HDLC, so where's the followup?

This is why the HDLC maintainers shouldn't be surprised if we flat
out ignore them the next time they complain about anything.  They
have proven that they are pure whiners.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] d80211: make sleeping in hw-config possible

2006-07-09 Thread Michael Buesch
Hi John,

Please apply this to wireless-dev.

--

This patch makes sleeping in the hw-config callback possible
by removing the only atomic caller. The atomic caller was
a timer and is replaced by a workqueue.

In general, allowing to sleep in the config callback is a
good thing. bcm43xx must be able to sleep here, as it is
required to lock a mutex.
But there are other good reasons to sleep here. We might
want to sleep for a grace period on channel switch, for example.

Signed-off-by: Michael Buesch [EMAIL PROTECTED]

Index: wireless-dev-dscapeports/net/d80211/ieee80211.c
===
--- wireless-dev-dscapeports.orig/net/d80211/ieee80211.c2006-06-17 
21:26:10.0 +0200
+++ wireless-dev-dscapeports/net/d80211/ieee80211.c 2006-07-09 
20:01:42.0 +0200
@@ -4327,8 +4327,7 @@
del_timer_sync(local-rate_limit_timer);
if (local-stat_time)
del_timer_sync(local-stat_timer);
-   if (local-scan_timer.data)
-   del_timer_sync(local-scan_timer);
+   cancel_rearming_delayed_work(local-scan_work);
ieee80211_rx_bss_list_deinit(dev);
 
rtnl_lock();
Index: wireless-dev-dscapeports/net/d80211/ieee80211_i.h
===
--- wireless-dev-dscapeports.orig/net/d80211/ieee80211_i.h  2006-06-17 
21:26:10.0 +0200
+++ wireless-dev-dscapeports/net/d80211/ieee80211_i.h   2006-07-09 
19:52:07.0 +0200
@@ -17,6 +17,7 @@
 #include linux/list.h
 #include linux/netdevice.h
 #include linux/skbuff.h
+#include linux/workqueue.h
 #include ieee80211_key.h
 #include sta_info.h
 
@@ -407,7 +408,7 @@
int scan_channel_idx;
enum { SCAN_SET_CHANNEL, SCAN_SEND_PROBE } scan_state;
unsigned long last_scan_completed;
-   struct timer_list scan_timer;
+   struct work_struct scan_work;
int scan_oper_channel;
int scan_oper_channel_val;
int scan_oper_power_level;
Index: wireless-dev-dscapeports/net/d80211/ieee80211_iface.c
===
--- wireless-dev-dscapeports.orig/net/d80211/ieee80211_iface.c  2006-06-17 
21:26:10.0 +0200
+++ wireless-dev-dscapeports/net/d80211/ieee80211_iface.c   2006-07-09 
20:03:32.0 +0200
@@ -271,8 +271,8 @@
case IEEE80211_IF_TYPE_STA:
case IEEE80211_IF_TYPE_IBSS:
del_timer_sync(sdata-u.sta.timer);
-   if (local-scan_timer.data == (unsigned long) sdata-dev)
-   del_timer_sync(local-scan_timer);
+   if (local-scan_work.data == sdata-dev)
+   cancel_rearming_delayed_work(local-scan_work);
kfree(sdata-u.sta.extra_ie);
sdata-u.sta.extra_ie = NULL;
kfree(sdata-u.sta.assocreq_ies);
Index: wireless-dev-dscapeports/net/d80211/ieee80211_sta.c
===
--- wireless-dev-dscapeports.orig/net/d80211/ieee80211_sta.c2006-06-17 
21:26:10.0 +0200
+++ wireless-dev-dscapeports/net/d80211/ieee80211_sta.c 2006-07-09 
20:21:44.0 +0200
@@ -2422,15 +2422,16 @@
 }
 
 
-static void ieee80211_sta_scan_timer(unsigned long ptr)
+static void ieee80211_sta_scan_work(void *_data)
 {
-   struct net_device *dev = (struct net_device *) ptr;
+   struct net_device *dev = _data;
struct ieee80211_local *local = dev-ieee80211_ptr;
 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
struct ieee80211_hw_modes *mode;
struct ieee80211_channel *chan;
int skip;
union iwreq_data wrqu;
+   unsigned long next_delay = 0;
 
if (!local-sta_scanning)
return;
@@ -2498,29 +2499,27 @@
local-scan_channel_idx = 0;
}
 
-   if (skip) {
-   local-scan_timer.expires = jiffies;
+   if (skip)
break;
-   }
 
-   local-scan_timer.expires = jiffies + IEEE80211_PROBE_DELAY;
+   next_delay = IEEE80211_PROBE_DELAY;
local-scan_state = SCAN_SEND_PROBE;
break;
case SCAN_SEND_PROBE:
if (ieee80211_active_scan(local)) {
ieee80211_send_probe_req(dev, NULL, local-scan_ssid,
 local-scan_ssid_len);
-   local-scan_timer.expires =
-   jiffies + IEEE80211_CHANNEL_TIME;
-   } else {
-   local-scan_timer.expires =
-   jiffies + IEEE80211_PASSIVE_CHANNEL_TIME;
-   }
+   next_delay = IEEE80211_CHANNEL_TIME;
+   } else
+   next_delay = IEEE80211_PASSIVE_CHANNEL_TIME;
local-scan_state = 

Re: [2.6 patch] net/atm/clip.c: fix PROC_FS=n compile

2006-07-09 Thread David Miller
From: Adrian Bunk [EMAIL PROTECTED]
Date: Sat, 8 Jul 2006 22:20:01 +0200

 This patch fixes the following compile error with CONFIG_PROC_FS=n by 
 reverting commit dcdb02752ff13a64433c36f2937a58d93ae7a19e:

Applied, thanks Adrian.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [AX.25] Use kzalloc

2006-07-09 Thread David Miller
From: Ralf Baechle [EMAIL PROTECTED]
Date: Sun, 9 Jul 2006 02:52:00 +0100

 Replace kzalloc instead of kmalloc + memset.
 
 Signed-off-by: Ralf Baechle [EMAIL PROTECTED]

Applied, thanks Ralf.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PKT_SCHED]: act_api: Fix module leak while flushing actions

2006-07-09 Thread Thomas Graf
* David Miller [EMAIL PROTECTED] 2006-07-09 11:38
 From: Thomas Graf [EMAIL PROTECTED]
 Date: Sun, 9 Jul 2006 16:20:43 +0200
 
  Module reference needs to be given back if message header
  construction fails.
  
  Signed-off-by: Thomas Graf [EMAIL PROTECTED]
 
 Applied, thanks Thomas.
 
 This reminds me of something, not only are non-networking developers
 getting tripped up constantly about these magic code labels referenced
 from the netlink macros, they are tripping us up as well.
 
 I really think it's time, at a minimum, to explicitly mention the
 labels as an argument to the macros, or something like that.
 
 I'll try to cons something up when I get a chance.  The current
 situation is too error prone.

I agree, that's why the new netlink api offers label free
methods. The transformation patches for 2.6.19 converting
all netlink users to use the new api will resolved these
issues.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [VLAN]: translate IF_OPER_DORMANT to netif_dormant_on()

2006-07-09 Thread Krzysztof Halasa
David Miller [EMAIL PROTECTED] writes:

  Not really. The flag code last major change was to do the dormant
  stuff that HDLC wanted.
 
 ... and where the maintainer doesn't seem to care to use it now that the 
 infrastructure is there. Sigh.

This is very different from what I proposed and doesn't fit very well.
We've been discussing this to death.

 Yes, this is very unfortunate.  They made the loudest noise about
 wanting the change, yet they aren't even responsible enough to submit
 the HDLC patches necessary to make use of it.  This was apparently
 needed to fix HDLC, so where's the followup?

I'm still thinking how to use it safely. Should it be implemented
sanely, things would be different.

 This is why the HDLC maintainers shouldn't be surprised if we flat
 out ignore them the next time they complain about anything.

You are correct - some time ago, I was really surprised. Now, especially
having received that private mail from you - the situation is obvious.

I'm a single developer BTW.
-- 
Krzysztof Halasa
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] d80211: make sleeping in hw-config possible

2006-07-09 Thread Ivo Van Doorn

Hi,


Please apply this to wireless-dev.

--

This patch makes sleeping in the hw-config callback possible
by removing the only atomic caller. The atomic caller was
a timer and is replaced by a workqueue.

In general, allowing to sleep in the config callback is a
good thing. bcm43xx must be able to sleep here, as it is
required to lock a mutex.
But there are other good reasons to sleep here. We might
want to sleep for a grace period on channel switch, for example.


Excellent work.
Sleeping in hw-config is a much desired feature for rt2x00 as well,
this is especially beneficial for the USB drivers who always need sleeping.

Ivo
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] airo: make debug-like messages printed by airo_print_dbg()

2006-07-09 Thread Robert Schulze

Hi,

ok lets keep that message to be visible to anybody, but put it into one line.
Thanks for your comments.
Now, I will track down what causes the error on my machine, I think it has 
something todo with pcmcia...

with kind regards,

Robert Schulze

--- linux-2.6.17.1/drivers/net/wireless/airo.c.orig 2006-07-08 
14:02:12.0 +0200
+++ linux-2.6.17.1/drivers/net/wireless/airo.c  2006-07-10 00:19:15.0 
+0200
@@ -3897,11 +3897,10 @@ static u16 issuecommand(struct airo_info
pRsp-rsp1 = IN4500(ai, RESP1);
pRsp-rsp2 = IN4500(ai, RESP2);
if ((pRsp-status  0xff00)!=0  pCmd-cmd != CMD_SOFTRESET) {
-   airo_print_err(ai-dev-name, cmd= %x\n, pCmd-cmd);
-   airo_print_err(ai-dev-name, status= %x\n, pRsp-status);
-   airo_print_err(ai-dev-name, Rsp0= %x\n, pRsp-rsp0);
-   airo_print_err(ai-dev-name, Rsp1= %x\n, pRsp-rsp1);
-   airo_print_err(ai-dev-name, Rsp2= %x\n, pRsp-rsp2);
+   airo_print_err(ai-dev-name,
+   cmd:%x status:%x rsp0:%x rsp1:%x rsp2:%x
+   pCmd-cmd, pRsp-status, pRsp-rsp0, pRsp-rsp1,
+   pRsp-rsp2);
}

// clear stuck command busy if necessary
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[AX.25] Get rid of the last volatile.

2006-07-09 Thread Ralf Baechle
This volatile makes no sense - not even wearing pink shades ...

Signed-off-by: Ralf Baechle [EMAIL PROTECTED]

diff --git a/net/ax25/ax25_in.c b/net/ax25/ax25_in.c
index 4cf8754..e9d9429 100644
--- a/net/ax25/ax25_in.c
+++ b/net/ax25/ax25_in.c
@@ -102,8 +102,8 @@ static int ax25_rx_fragment(ax25_cb *ax2
 int ax25_rx_iframe(ax25_cb *ax25, struct sk_buff *skb)
 {
int (*func)(struct sk_buff *, ax25_cb *);
-   volatile int queued = 0;
unsigned char pid;
+   int queued = 0;
 
if (skb == NULL) return 0;
 
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] d80211: make sleeping in hw-config possible

2006-07-09 Thread Michael Buesch
On Sunday 09 July 2006 20:47, you wrote:
 ===
 --- wireless-dev-dscapeports.orig/net/d80211/ieee80211.c  2006-06-17 
 21:26:10.0 +0200
 +++ wireless-dev-dscapeports/net/d80211/ieee80211.c   2006-07-09 
 20:01:42.0 +0200
 @@ -4327,8 +4327,7 @@
   del_timer_sync(local-rate_limit_timer);
   if (local-stat_time)
   del_timer_sync(local-stat_timer);
 - if (local-scan_timer.data)
 - del_timer_sync(local-scan_timer);
 + cancel_rearming_delayed_work(local-scan_work);
   ieee80211_rx_bss_list_deinit(dev);
  
   rtnl_lock();

There seems to be a problem. It sometimes loops inside of
cancel_rearming_delayed_work forever. So I tried to fix it like this:
if (local-scan_work.data)
cancel_rearming_delayed_work(local-scan_work);
This fixes the case where we don't scan (have no STA), so don't
initialize the work struct.

But it still loops infinite, sometimes.
Any suggestions?

-- 
Greetings Michael.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[IPV4] inetpeer: Get rid of volatile from peer_total

2006-07-09 Thread Herbert Xu
Hi Dave:

Just joining on the fun on volatile :)

[IPV4] inetpeer: Get rid of volatile from peer_total

The variable peer_total is protected by a lock.  The volatile marker
makes no sense.  This shaves off 20 bytes on i386.

Signed-off-by: Herbert Xu [EMAIL PROTECTED]

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmVHI~} [EMAIL PROTECTED]
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
index 2160874..03ff62e 100644
--- a/net/ipv4/inetpeer.c
+++ b/net/ipv4/inetpeer.c
@@ -86,7 +86,7 @@ static struct inet_peer *peer_root = pee
 static DEFINE_RWLOCK(peer_pool_lock);
 #define PEER_MAXDEPTH 40 /* sufficient for about 2^27 nodes */
 
-static volatile int peer_total;
+static int peer_total;
 /* Exported for sysctl_net_ipv4.  */
 int inet_peer_threshold = 65536 + 128; /* start to throw entries more
 * aggressively at this stage */
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[2.6 patch] netfilter: fix SYSCTL=n compile

2006-07-09 Thread Adrian Bunk
On Sun, Jul 09, 2006 at 05:37:35AM +0200, Patrick McHardy wrote:
 Adrian Bunk wrote:
  This patch fixes the following compile error with CONFIG_SYSCTL=n 
  introduced by commit 39a27a35c5c1b5be499a0576a35c45a011788bf8:
 
 My fault I guess.
 
  --  snip  --
  
  ...
LD  .tmp_vmlinux1
  net/built-in.o: In function `tcp_error':
  ip_conntrack_proto_tcp.c:(.text+0x77af6): undefined reference to 
  `ip_conntrack_checksum'
  net/built-in.o: In function `udp_error':
  ip_conntrack_proto_udp.c:(.text+0x78456): undefined reference to 
  `ip_conntrack_checksum'
  net/built-in.o: In function `icmp_error':
  ip_conntrack_proto_icmp.c:(.text+0x7868f): undefined reference to 
  `ip_conntrack_checksum'
  make: *** [.tmp_vmlinux1] Error 1
 
 Thanks Adrian. Usually all bugs in ip_conntrack are duplicated in
 nf_conntrack, please update your patch to take care of that as well.

Correct, updated patch below.

cu
Adrian


--  snip  --


This patch fixes the following compile errors with CONFIG_SYSCTL=n 
introduced by commit 39a27a35c5c1b5be499a0576a35c45a011788bf8:

--  snip  --

...
  LD  .tmp_vmlinux1
net/built-in.o: In function `tcp_error':
ip_conntrack_proto_tcp.c:(.text+0x77af6): undefined reference to 
`ip_conntrack_checksum'
net/built-in.o: In function `udp_error':
ip_conntrack_proto_udp.c:(.text+0x78456): undefined reference to 
`ip_conntrack_checksum'
net/built-in.o: In function `icmp_error':
ip_conntrack_proto_icmp.c:(.text+0x7868f): undefined reference to 
`ip_conntrack_checksum'
make: *** [.tmp_vmlinux1] Error 1

--  snip  --

...
  LD  .tmp_vmlinux1
net/built-in.o: In function `tcp_error':
nf_conntrack_proto_tcp.c:(.text+0x46b44): undefined reference to 
`nf_conntrack_checksum'
net/built-in.o: In function `udp_error':
nf_conntrack_proto_udp.c:(.text+0x474f5): undefined reference to 
`nf_conntrack_checksum'
net/built-in.o: In function `icmp_error':
nf_conntrack_proto_icmp.c:(.text+0x8e5f4): undefined reference to 
`nf_conntrack_checksum'
net/built-in.o: In function `icmpv6_error':
nf_conntrack_proto_icmpv6.c:(.text+0xd3f54): undefined reference to 
`nf_conntrack_checksum'
make: *** [.tmp_vmlinux1] Error 1

--  snip  --

Signed-off-by: Adrian Bunk [EMAIL PROTECTED]

---

 net/ipv4/netfilter/ip_conntrack_standalone.c |4 ++--
 net/netfilter/nf_conntrack_standalone.c  |4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

--- linux-2.6.17-mm6-full/net/ipv4/netfilter/ip_conntrack_standalone.c.old  
2006-07-08 15:32:32.0 +0200
+++ linux-2.6.17-mm6-full/net/ipv4/netfilter/ip_conntrack_standalone.c  
2006-07-08 15:33:30.0 +0200
@@ -534,6 +534,8 @@
 
 /* Sysctl support */
 
+int ip_conntrack_checksum = 1;
+
 #ifdef CONFIG_SYSCTL
 
 /* From ip_conntrack_core.c */
@@ -568,8 +570,6 @@
 static int log_invalid_proto_min = 0;
 static int log_invalid_proto_max = 255;
 
-int ip_conntrack_checksum = 1;
-
 static struct ctl_table_header *ip_ct_sysctl_header;
 
 static ctl_table ip_ct_sysctl_table[] = {

--- linux-2.6.18-rc1-mm1-full/net/netfilter/nf_conntrack_standalone.c.old   
2006-07-09 21:18:04.0 +0200
+++ linux-2.6.18-rc1-mm1-full/net/netfilter/nf_conntrack_standalone.c   
2006-07-09 21:18:27.0 +0200
@@ -428,6 +428,8 @@
 
 /* Sysctl support */
 
+int nf_conntrack_checksum = 1;
+
 #ifdef CONFIG_SYSCTL
 
 /* From nf_conntrack_core.c */
@@ -459,8 +461,6 @@
 static int log_invalid_proto_min = 0;
 static int log_invalid_proto_max = 255;
 
-int nf_conntrack_checksum = 1;
-
 static struct ctl_table_header *nf_ct_sysctl_header;
 
 static ctl_table nf_ct_sysctl_table[] = {

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [VLAN]: translate IF_OPER_DORMANT to netif_dormant_on()

2006-07-09 Thread David Miller
From: Krzysztof Halasa [EMAIL PROTECTED]
Date: Sun, 09 Jul 2006 22:05:43 +0200

 I'm a single developer BTW.

So am I, and I've been keeping the core networking and the sparc64
port afloat for more than 10 years.

In comparison, very little is being asked of you.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PKT_SCHED]: act_api: Fix module leak while flushing actions

2006-07-09 Thread David Miller
From: Thomas Graf [EMAIL PROTECTED]
Date: Sun, 9 Jul 2006 21:57:34 +0200

 * David Miller [EMAIL PROTECTED] 2006-07-09 11:38
  I'll try to cons something up when I get a chance.  The current
  situation is too error prone.
 
 I agree, that's why the new netlink api offers label free
 methods. The transformation patches for 2.6.19 converting
 all netlink users to use the new api will resolved these
 issues.

Awesome, I look forward to seeing those patches.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [AX.25] Get rid of the last volatile.

2006-07-09 Thread David Miller
From: Ralf Baechle [EMAIL PROTECTED]
Date: Sun, 9 Jul 2006 23:37:45 +0100

 This volatile makes no sense - not even wearing pink shades ...
 
 Signed-off-by: Ralf Baechle [EMAIL PROTECTED]

Applied, thanks Ralf :)
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [IPV4] inetpeer: Get rid of volatile from peer_total

2006-07-09 Thread David Miller
From: Herbert Xu [EMAIL PROTECTED]
Date: Mon, 10 Jul 2006 09:07:11 +1000

 [IPV4] inetpeer: Get rid of volatile from peer_total
 
 The variable peer_total is protected by a lock.  The volatile marker
 makes no sense.  This shaves off 20 bytes on i386.
 
 Signed-off-by: Herbert Xu [EMAIL PROTECTED]

Applied, thanks.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] airo: make debug-like messages printed by airo_print_dbg()

2006-07-09 Thread Dan Williams
On Mon, 2006-07-10 at 00:23 +0200, Robert Schulze wrote:
 Hi,
 
 ok lets keep that message to be visible to anybody, but put it into one line.
 Thanks for your comments.
 Now, I will track down what causes the error on my machine, I think it has 
 something todo with pcmcia...

Looks good.  This will happen any time the driver tries to talk to the
card but can't.  So you might want to try looking at whether the card is
already pulled out or its resources have been deallocated before this
code runs.  Obviously we can talk to the card up until it's been pulled
out and the kernel notifies us that the card has been unplugged, but
perhaps there's a codepath that tries to mistakenly handle both
hot-unplug and module removal by writing something to that card (like
reset commands).  I've seen that before in other places.

Dan

 with kind regards,
 
 Robert Schulze
 
 --- linux-2.6.17.1/drivers/net/wireless/airo.c.orig   2006-07-08 
 14:02:12.0 +0200
 +++ linux-2.6.17.1/drivers/net/wireless/airo.c2006-07-10 
 00:19:15.0 +0200
 @@ -3897,11 +3897,10 @@ static u16 issuecommand(struct airo_info
   pRsp-rsp1 = IN4500(ai, RESP1);
   pRsp-rsp2 = IN4500(ai, RESP2);
   if ((pRsp-status  0xff00)!=0  pCmd-cmd != CMD_SOFTRESET) {
 - airo_print_err(ai-dev-name, cmd= %x\n, pCmd-cmd);
 - airo_print_err(ai-dev-name, status= %x\n, pRsp-status);
 - airo_print_err(ai-dev-name, Rsp0= %x\n, pRsp-rsp0);
 - airo_print_err(ai-dev-name, Rsp1= %x\n, pRsp-rsp1);
 - airo_print_err(ai-dev-name, Rsp2= %x\n, pRsp-rsp2);
 + airo_print_err(ai-dev-name,
 + cmd:%x status:%x rsp0:%x rsp1:%x rsp2:%x
 + pCmd-cmd, pRsp-status, pRsp-rsp0, pRsp-rsp1,
 + pRsp-rsp2);
   }
 
   // clear stuck command busy if necessary

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [2.6 patch] netfilter: fix SYSCTL=n compile

2006-07-09 Thread Patrick McHardy
Adrian Bunk wrote:
 This patch fixes the following compile errors with CONFIG_SYSCTL=n 
 introduced by commit 39a27a35c5c1b5be499a0576a35c45a011788bf8:

Thanks, applied.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html