From arjanv@redhat.com Wed Sep 1 00:03:29 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 00:03:37 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i8173TkB000493 for ; Wed, 1 Sep 2004 00:03:29 -0700 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.10/8.12.10) with ESMTP id i81738S0014472; Wed, 1 Sep 2004 03:03:13 -0400 Received: from [172.31.3.35] (arjanv.cipe.redhat.com [10.0.2.48]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i81732322346; Wed, 1 Sep 2004 03:03:02 -0400 Subject: Re: [Announce] Update on ipw2100, ipw2200, and support for Intel PRO/Wireless 2915ABG From: Arjan van de Ven Reply-To: arjanv@redhat.com To: James Ketrenos Cc: Linux kernel mailing list , Netdev In-Reply-To: <4134E8EA.9080605@linux.intel.com> References: <4134E8EA.9080605@linux.intel.com> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-X7szBpNK5mljMglKnPP8" Organization: Red Hat UK Message-Id: <1094022177.2801.1.camel@laptop.fenrus.com> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 (1.4.6-2) Date: Wed, 01 Sep 2004 09:02:57 +0200 X-archive-position: 8295 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: arjanv@redhat.com Precedence: bulk X-list: netdev --=-X7szBpNK5mljMglKnPP8 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On Tue, 2004-08-31 at 23:08, James Ketrenos wrote: > It's been a while since I've updated lkml and netdev on the progress of > the ipw projects. Given the recent announcement by Intel for the > introduction of Intel PRO/Wireless 2915 ABG Network Connection miniPCI > adapter, I thought now was a good time... you guys seem to be doing a really great job on these drivers; thanks! --=-X7szBpNK5mljMglKnPP8 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) iD8DBQBBNXQgxULwo51rQBIRAvHCAJwOJrJP6DLAJuGhAuK9d1qoOUQJZgCghNlA Msq9xpw2hH+gug8KYZg9s0c= =kpDZ -----END PGP SIGNATURE----- --=-X7szBpNK5mljMglKnPP8-- From ricklind@us.ibm.com Wed Sep 1 01:33:53 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 01:33:59 -0700 (PDT) Received: from e2.ny.us.ibm.com (e2.ny.us.ibm.com [32.97.182.102]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i818XlqM005862 for ; Wed, 1 Sep 2004 01:33:53 -0700 Received: from northrelay04.pok.ibm.com (northrelay04.pok.ibm.com [9.56.224.206]) by e2.ny.us.ibm.com (8.12.10/8.12.9) with ESMTP id i818XOKK349602; Wed, 1 Sep 2004 04:33:24 -0400 Received: from owlet.beaverton.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by northrelay04.pok.ibm.com (8.12.10/NCO/VER6.6) with ESMTP id i818YXrm160062; Wed, 1 Sep 2004 04:34:34 -0400 Received: from owlet.beaverton.ibm.com (rick@localhost) by owlet.beaverton.ibm.com (8.11.6/8.11.6) with ESMTP id i818XPZ04210; Wed, 1 Sep 2004 01:33:26 -0700 Message-Id: <200409010833.i818XPZ04210@owlet.beaverton.ibm.com> To: Nivedita Singhvi cc: Andrew Morton , netdev@oss.sgi.com, linux-kernel@vger.kernel.org Subject: Re: Fw: Re: 2.6.9-rc1-mm2 In-reply-to: Your message of "Tue, 31 Aug 2004 17:49:10 PDT." <41351C86.7000704@us.ibm.com> Date: Wed, 01 Sep 2004 01:33:25 -0700 From: Rick Lindsley X-archive-position: 8296 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: ricklind@us.ibm.com Precedence: bulk X-list: netdev Thanks for pointing out the specific config options. Granted a more recent config is warranted .. the one I'm using is 2.6.0-based. But considering I ran make oldconfig on this and chose the defaults in each and every case, should I end up with a config that doesn't compile? Is there still a config issue here, especially considering that both rc1 and rc1-mm1 compiled fine using this method? Or is make oldconfig only going to help for a version or two back? Rick From akpm@osdl.org Wed Sep 1 01:43:51 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 01:43:57 -0700 (PDT) Received: from mail.osdl.org (fw.osdl.org [65.172.181.6]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i818hpT5006334 for ; Wed, 1 Sep 2004 01:43:51 -0700 Received: from bix (build.pdx.osdl.net [172.20.1.2]) by mail.osdl.org (8.11.6/8.11.6) with SMTP id i818h7114811; Wed, 1 Sep 2004 01:43:07 -0700 Date: Wed, 1 Sep 2004 01:41:18 -0700 From: Andrew Morton To: Rick Lindsley Cc: niv@us.ibm.com, netdev@oss.sgi.com, linux-kernel@vger.kernel.org Subject: Re: Fw: Re: 2.6.9-rc1-mm2 Message-Id: <20040901014118.45204bcb.akpm@osdl.org> In-Reply-To: <200409010833.i818XPZ04210@owlet.beaverton.ibm.com> References: <41351C86.7000704@us.ibm.com> <200409010833.i818XPZ04210@owlet.beaverton.ibm.com> X-Mailer: Sylpheed version 0.9.7 (GTK+ 1.2.10; i386-redhat-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-archive-position: 8297 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: akpm@osdl.org Precedence: bulk X-list: netdev Rick Lindsley wrote: > > But considering I ran make oldconfig on this and chose > the defaults in each and every case, should I end up with a config that > doesn't compile? No, you shouldn't. This indicates a Kconfig bug. From yoshfuji@linux-ipv6.org Wed Sep 1 02:01:51 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 02:01:56 -0700 (PDT) Received: from yue.st-paulia.net ([203.178.140.15]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i8191pPF007324 for ; Wed, 1 Sep 2004 02:01:51 -0700 Received: from localhost (localhost [127.0.0.1]) by yue.st-paulia.net (Postfix) with ESMTP id B532333CE6; Wed, 1 Sep 2004 18:02:37 +0900 (JST) Date: Wed, 01 Sep 2004 18:02:36 +0900 (JST) Message-Id: <20040901.180236.102852119.yoshfuji@linux-ipv6.org> To: thomasz@hostmaster.org Cc: linux-kernel@vger.kernel.org, netdev@oss.sgi.com Subject: Re: 2.6.9-rc1 oops From: YOSHIFUJI Hideaki / =?iso-2022-jp?B?GyRCNUhGIzFRTEAbKEI=?= In-Reply-To: <1094028647.16908.42.camel@hostmaster.org> References: <1093945177.16908.14.camel@hostmaster.org> <1094028647.16908.42.camel@hostmaster.org> Organization: USAGI Project X-URL: http://www.yoshifuji.org/%7Ehideaki/ X-Fingerprint: 9022 65EB 1ECF 3AD1 0BDF 80D8 4807 F894 E062 0EEA X-PGP-Key-URL: http://www.yoshifuji.org/%7Ehideaki/hideaki@yoshifuji.org.asc X-Face: "5$Al-.M>NJ%a'@hhZdQm:."qn~PA^gq4o*>iCFToq*bAi#4FRtx}enhuQKz7fNqQz\BYU] $~O_5m-9'}MIs`XGwIEscw;e5b>n"B_?j/AkL~i/MEaZBLP X-Mailer: Mew version 2.2 on Emacs 20.7 / Mule 4.1 (AOI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-archive-position: 8298 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: yoshfuji@linux-ipv6.org Precedence: bulk X-list: netdev In article <1094028647.16908.42.camel@hostmaster.org> (at Wed, 01 Sep 2004 10:50:47 +0200), Thomas Zehetbauer says: > I have now created a bug report for this issue: > http://bugzilla.kernel.org/show_bug.cgi?id=3323 (Plase use netdev...) I think this is already fixed in current bk tree. --yoshfuji From zhikui.chen@rus.uni-stuttgart.de Wed Sep 1 03:23:58 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 03:24:07 -0700 (PDT) Received: from uni-stuttgart.de (mbox.rus.uni-stuttgart.de [129.69.1.9]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81ANuWY011252 for ; Wed, 1 Sep 2004 03:23:57 -0700 Received: from [129.69.30.152] (HELO rus.uni-stuttgart.de) by uni-stuttgart.de (CommuniGate Pro SMTP 4.0.3) with ESMTP id 8883643; Wed, 01 Sep 2004 12:23:47 +0200 Message-ID: <4135A32A.4030901@rus.uni-stuttgart.de> Date: Wed, 01 Sep 2004 12:23:38 +0200 From: Zhikui Chen User-Agent: Mozilla Thunderbird 0.5 (Windows/20040207) X-Accept-Language: en-us, en MIME-Version: 1.0 To: hadi@cyberus.ca CC: dccp@ietf.org, netdev@oss.sgi.com, acme@conectiva.com.br Subject: Re: HELP for dccp implementation. References: <412CC269.8080907@rus.uni-stuttgart.de> <1093454747.1034.85.camel@jzny.localdomain> In-Reply-To: <1093454747.1034.85.camel@jzny.localdomain> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-archive-position: 8299 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: zhikui.chen@rus.uni-stuttgart.de Precedence: bulk X-list: netdev Hi, all If I assign a value such as 0x ee9fbc00 to sk in dccp_rcv (before lookup calling), and comment lookkup calling, I get a error report from bh_lock_sock(sk) calling inside dccp_rcv, which error report is spin_is_locked on uninitialized spinlock ee9fbc00, and spin_lock (:ee9fbc00) already locked by /73. Do you know its reason? Thanks, Best regards, Zhikui i there, >Could you please work with >Arnaldo Carvalho de Melo since he is >already working on this - this way we could have a coherent >implementation. >He is quiet knowledgeable on the internals of Linux and you could bring >in the protocol expertise. > >cheers, >jamal > >On Wed, 2004-08-25 at 12:46, Zhikui Chen wrote: > > >>Hi, dear all >> >>I could not assign __sk_head(head) value to sk in lookup_listen. >> >>I have writen the partial code for receive the request packet at server >>accodring to kernel TCP stuff, which is almost closed to TCP stuff. >> >>Anyone can tell me the reason or any hints? Thanks in advance. >> >>The details is following: >> >>The server for receiveing request packet firstly has following steps: >>1. Initialize dccp sock, >>2. dccp bind >>3. get_port >>3. hash >>4. accpet and waiting packet >>5. calling dccp_rcv to get packet ( I have checked dccp_rcv got the >>request packet). >>6. to get sk value by call dccp_lookup >>7 .... >> >>My problem is still in geting sk value, The follwing is my printing out: >> >>Aug 25 09:28:38 localhost kernel: DCCP: Hash tables configured >>(established 262144 bind 65536) >> >>dccp_init_sock: >>dccp_sock_init_common: >>allocated cctp successfully >>allocated pkt vectors successfully >>dccp_bind. >>New dccp_get_port start.65536 >>New dccp_get_port start.else:start >>db not found. >>bind hash add:sk:ee9fbc00,node:0,snum:7000 >>New dccp_get_port start.OK. sk:ee9fbc00,node:0 >>New dccp_get_port start.65536 >>New dccp_get_port start.else:start >>hlist_empty(&db->owners) not empty. >>New dccp_get_port start.OK. sk:ee9fbc00,node:ee5a0444 >>__dccp_v4_hash, list:c04eb670,num:7000,c0558780 >>__dccp_v4_hash, list:c04eb670,sk:ee9fbc00 >>dccp_accept start.7000,sk->sk_family=2,sk->sk_state=1,sk:ee9fbc00 >>dccp_accept 1 ..flags=2 >>dccp_accept 2 .. >>dccp_accept 3 ..timeo=2147483647,sk:ee9fbc00 >>wait_for_incoming_connection: >>dccp wait for connect start!sk:ee9fbc00 >>dccp wait for connect start!..sk:ee9fbc00 >>dccp_rcv start.ee9d3580 >>dccp_rcv: sk->sk_state=0, type=0,dh->dport=22555 >>dccp_v4_lookup >>__dccp_v4_lookup. >>dccp_v4_lookup_connection. >>hash 13291 >>dccp_v4_lookup_connection. head:f7619f58,node:eeaf5834,sk:ee9d3580 >>dccp_v4_lookup_connection. head:f7619f58,node:,sk:0 >>dccp_bhash_size: 65536,ntohs(dport):7000 >>first of head is not empty >>dccp_v4_lookup_listen: head: c04eb670,c0558780,__sk_head(head):ee9fbc00 >>dccp_v4_lookup_listen:sk: 0 >>dccp_rcv: unable to find socket() >> >>At print out, dccp_bind did not call get_port and inet_sk(sk) is >>assigned a port number which is 7000 from application. >> >>For printing __sk_head(head):ee9fbc00, I let sk = NULL in the >>dccp_v4_lookup_listen. >>HASH_TABLE = 32 or 128 I have the same result. >>And the source code is enclosed. >> >>Best regards, >> >>Zhikui >> >>------------------------------------------------------------------------ >> >>struct dccp_hashinfo __cacheline_aligned dccp_hashinfo = { >> .__dccp_lhash_lock = RW_LOCK_UNLOCKED, >> .__dccp_lhash_users = ATOMIC_INIT(0), >> .__dccp_lhash_wait >> = __WAIT_QUEUE_HEAD_INITIALIZER(dccp_hashinfo.__dccp_lhash_wait), >> .__dccp_portalloc_lock = SPIN_LOCK_UNLOCKED >>}; >> >> >> >> >>struct sockaddr_dccp { >> struct sockaddr_in in; >> __u32 service; >>}; >> >>static __inline__ int dccp_hashfn(__u32 laddr, __u16 lport, >> __u32 faddr, __u16 fport) >>{ >> int h = (laddr ^ lport) ^ (faddr ^ fport); >> h ^= h >> 16; >> h ^= h >> 8; >> return h & (dccp_ehash_size - 1);; >>} >> >>static __inline__ int dccp_sk_hashfn(struct sock *sk) >>{ >> struct inet_opt *inet = inet_sk(sk); >> __u32 laddr = inet->rcv_saddr; >> __u16 lport = inet->num; >> __u32 faddr = inet->daddr; >> __u16 fport = inet->dport; >> >> return dccp_hashfn(laddr, lport, faddr, fport); >>} >> >>kmem_cache_t *dccp_bucket_cachep; >> >>struct dccp_bind_bucket *dccp_bucket_create(struct dccp_bind_hashbucket *head, >> unsigned short snum) >>{ >> struct dccp_bind_bucket *db = kmem_cache_alloc(dccp_bucket_cachep, >> SLAB_ATOMIC); >> if (db) { >> db->port = snum; >> db->fastreuse = 0; >> INIT_HLIST_HEAD(&db->owners); >> hlist_add_head(&db->node, &head->chain); >> } >> return db; >>} >> >>void dccp_bucket_destroy(struct dccp_bind_bucket *db) >>{ >> if (hlist_empty(&db->owners)) { >> __hlist_del(&db->node); >> kmem_cache_free(dccp_bucket_cachep, db); >> } >>} >> >>/******************************************************************************/ >> >>static int parse_uaddr(struct sockaddr *uaddr, int addr_len, struct sockaddr_in **iaddr, struct sockaddr_dccp **dccp_addr){ >> if(addr_len < sizeof(struct sockaddr_in)) return -1; >> if(addr_len >= sizeof(struct sockaddr_dccp)){ >> *dccp_addr = (struct sockaddr_dccp *)uaddr; >> *iaddr = &((*dccp_addr)->in); >> }else{ >> *dccp_addr = NULL; >> *iaddr = (struct sockaddr_in *)uaddr; >> } >> return 0; >>} >> >>/******************************************************************************/ >>/* refer to net/ipv4/af_inet.c:inet_bind() */ >>static int dccp_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len){ >> printk("dccp_bind.\n"); >> struct sockaddr_in *iaddr; >> struct sockaddr_dccp *dccp_addr; >> struct inet_opt *inet = inet_sk(sk); >> int addr_type; >> int err; >> unsigned short port; >> >> if(parse_uaddr(uaddr, addr_len, &iaddr, &dccp_addr)) return -EINVAL; >> >> addr_type = inet_addr_type(iaddr->sin_addr.s_addr); >> if( inet->freebind == 0 >> && iaddr->sin_addr.s_addr != INADDR_ANY && addr_type != RTN_LOCAL >> && addr_type != RTN_MULTICAST && addr_type != RTN_BROADCAST) >> return -EADDRNOTAVAIL; >> >> port = ntohs(iaddr->sin_port); >> if(port && port < PROT_SOCK && !capable(CAP_NET_BIND_SERVICE)) >> return -EACCES; >> >> lock_sock(sk); >> >> if(sk->sk_state != DCCP_STATE_CLOSED) ERR(-EISCONN); >> >> if(inet->num) ERR(-EINVAL); >> >> inet->rcv_saddr = inet->saddr = iaddr->sin_addr.s_addr; >> if(addr_type == RTN_MULTICAST || addr_type == RTN_BROADCAST) >> inet->saddr = 0; >> >> if(dccp_addr) dccp_sk(sk)->service = dccp_addr->service; >> else dccp_sk(sk)->service = 0; >>/*Note if we comment sk_port->getport() function calling, we should assign a local listen port number for building a listen hash and adding hash to node.*/ >>/* >> if(sk->sk_prot->get_port(sk, port) != 0){ >> inet->saddr = inet->rcv_saddr = 0; >> ERR(-EADDRINUSE); >> } >>*/ >> if(inet->rcv_saddr) sk->sk_userlocks |= SOCK_BINDADDR_LOCK; >> if(port) sk->sk_userlocks |= SOCK_BINDPORT_LOCK; >> inet->num = port;/*added 24.08.04, Note if we comment sk_port->getport() function calling, we should assign a local listen port number for building a listen hash and adding hash to node.*/ >> inet->dport = inet->daddr = 0; >> sk_dst_reset(sk); >> err = 0; >>out: >> release_sock(sk); >> return err; >>} >> >>void dccp_bind_hash(struct sock *sk, struct dccp_bind_bucket *db, >> unsigned short snum) >>{ >> inet_sk(sk)->num = snum; >> sk_add_bind_node(sk, &db->owners); >> dccp_sk(sk)->bind_hash = db; >>} >> >>static inline int dccp_bind_conflict(struct sock *sk, struct dccp_bind_bucket *db) >>{ >> printk("dccp_bind_conflict is called.\n"); >> const u32 sk_rcv_saddr = dccp_v4_rcv_saddr(sk); >> struct sock *sk2; >> struct hlist_node *node; >> int reuse = sk->sk_reuse; >> >> sk_for_each_bound(sk2, node, &db->owners) { >> if (sk != sk2 && >> !dccp_v6_ipv6only(sk2) && >> (!sk->sk_bound_dev_if || >> !sk2->sk_bound_dev_if || >> sk->sk_bound_dev_if == sk2->sk_bound_dev_if)) { >> if (!reuse || !sk2->sk_reuse || >> sk2->sk_state == DCCP_STATE_LISTEN) { >> const u32 sk2_rcv_saddr = dccp_v4_rcv_saddr(sk2); >> if (!sk2_rcv_saddr || !sk_rcv_saddr || >> sk2_rcv_saddr == sk_rcv_saddr) >> break; >> } >> } >> } >> return node != NULL; >>} >> >>/* Obtain a reference to a local port for the given sock, >> * if snum is zero it means select any available local port. >> */ >>static int dccp_get_port(struct sock *sk, unsigned short snum) >>{ >> printk("New dccp_get_port start.%d, inet_sk(sk)->num=%d\n",dccp_bhash_size,inet_sk(sk)->num); >> struct dccp_bind_hashbucket *head; >> >> struct hlist_node *node; >> struct dccp_bind_bucket *db; >> int ret; >> >> if(inet_sk(sk)->num !=snum) >> snum=inet_sk(sk)->num; >> local_bh_disable(); >> if (!snum) { >> int low = sysctl_local_port_range[0]; >> int high = sysctl_local_port_range[1]; >> int remaining = (high - low) + 1; >> int rover; >> >> spin_lock(&dccp_portalloc_lock); >> rover = dccp_port_rover; >> do { >> printk("New dccp_get_port start.rover:%d\n",rover); >> rover++; >> if (rover < low || rover > high) >> rover = low; >> head = &dccp_bhash[dccp_bhashfn(rover)]; >> spin_lock(&head->lock); >> db_for_each(db, node, &head->chain) >> if (db->port == rover) >> goto next; >> break; >> next: >> spin_unlock(&head->lock); >> } while (--remaining > 0); >> dccp_port_rover = rover; >> spin_unlock(&dccp_portalloc_lock); >> >> /* Exhausted local port range during search? */ >> ret = 1; >> if (remaining <= 0) >> goto fail; >> >> /* OK, here is the one we will use. HEAD is >> * non-NULL and we hold it's mutex. >> */ >> printk("New dccp_get_port start.if:OK\n"); >> snum = rover; >> } else { >> printk("New dccp_get_port start.else:start\n"); >> head = &dccp_bhash[dccp_bhashfn(snum)]; >> spin_lock(&head->lock); >> db_for_each(db, node, &head->chain) >> if (db->port == snum) >> goto db_found; >> } >> db = NULL; >> goto db_not_found; >>db_found: >> if (!hlist_empty(&db->owners)) { >> printk("hlist_empty(&db->owners) not empty.\n"); >> if (sk->sk_reuse > 1) >> goto success; >> if (db->fastreuse > 0 && >> sk->sk_reuse && sk->sk_state != DCCP_STATE_LISTEN) { >> goto success; >> } else { >> ret = 1; >> if (dccp_bind_conflict(sk, db)) >> goto fail_unlock; >> } >> } >>db_not_found: >> printk("db not found.\n"); >> ret = 1; >> if (!db && (db = dccp_bucket_create(head, snum)) == NULL) >> goto fail_unlock; >> if (hlist_empty(&db->owners)) { >> if (sk->sk_reuse && sk->sk_state != DCCP_STATE_LISTEN) >> db->fastreuse = 1; >> else >> db->fastreuse = 0; >> } else if (db->fastreuse && >> (!sk->sk_reuse || sk->sk_state == DCCP_STATE_LISTEN)) >> db->fastreuse = 0; >>success: >> if (!dccp_sk(sk)->bind_hash){ >> dccp_bind_hash(sk, db, snum); >> printk("bind hash add:sk:%x,node:%x,snum:%d\n",sk,node,snum); >> } >> BUG_TRAP(dccp_sk(sk)->bind_hash == db); >> ret = 0; >> >>fail_unlock: >> spin_unlock(&head->lock); >>fail: >> local_bh_enable(); >> printk("New dccp_get_port start.OK. sk:%x,node:%x\n",sk,node); >> return ret; >>} >>/*****************************************************************************/ >>static int wait_for_incoming_connection(struct sock *sk, long timeo) >>{ >> printk("wait_for_incoming_connection: \n"); >> DECLARE_WAITQUEUE(wait, current); >> int err; >> struct dccp_opt *tp = dccp_sk(sk); >> >> /* >> * True wake-one mechanism for incoming connections: only >> * one process gets woken up, not the 'whole herd'. >> * Since we do not 'race & poll' for established sockets >> * anymore, the common case will execute the loop only once. >> * >> * Subtle issue: "add_wait_queue_exclusive()" will be added >> * after any current non-exclusive waiters, and we know that >> * it will always _stay_ after any new non-exclusive waiters >> * because all non-exclusive waiters are added at the >> * beginning of the wait-queue. As such, it's ok to "drop" >> * our exclusiveness temporarily when we get woken up without >> * having to remove and re-insert us on the wait queue. >> */ >> add_wait_queue_exclusive(sk->sk_sleep, &wait); >> printk("dccp wait for connect start!sk:%x\n",sk); >> for (;;) { >> current->state = TASK_INTERRUPTIBLE; >> release_sock(sk); >> printk("dccp wait for connect start!..sk:%x\n",sk); >> if (tp->accept_queue == NULL){ >> timeo = schedule_timeout(timeo); >> } >> printk("dccp wait for connect start .1!sk_state=%d, sk_family=%d\n",sk->sk_state,sk->sk_family); >> lock_sock(sk); >> err = 0; >> if (tp->accept_queue){ >> break; >> } >> err = -EINVAL; >> printk("dccp wait for connect start .1!sk_state=%d, sk_family=%d\n",sk->sk_state,sk->sk_family); >> if (sk->sk_state != DCCP_STATE_LISTEN){ >> printk("dccp wait for connect start .01!sk_state=%d\n",sk->sk_state); >> break; >> } >> err = sock_intr_errno(timeo); >> printk("dccp wait for connect start .2!\n"); >> if (signal_pending(current)){ >> break; >> } >> err = -EAGAIN; >> if (!timeo) >> break; >> } >> printk("dccp wait for connect end!\n"); >> current->state = TASK_RUNNING; >> remove_wait_queue(sk->sk_sleep, &wait); >> printk("dccp wait for connect end ok err=%d\n",err); >> return err; >>} >> >>struct sock *dccp_accept(struct sock *sk, int flags, int *err){ >> struct dccp_opt *tp = dccp_sk(sk); >> int error; >> struct sock *newsk = NULL; >> >> lock_sock(sk); >> >> printk("dccp_accept start.%d,sk->sk_family=%d,sk->sk_state=%d,sk:%x\n",inet_sk(sk)->num,sk->sk_family,sk->sk_state,sk); >> /* this socket must be listening */ >> error = -EINVAL; >> printk("dccp_accept 1 ..flags=%d\n",flags); >> if(sk->sk_state != DCCP_STATE_LISTEN) >> goto out; >> printk("dccp_accept 2 ..\n"); >> >> /* Find already established connection */ >> if(!tp->accept_queue){ >> long timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); >> printk("dccp_accept 3 ..timeo=%d,sk:%x\n",timeo,sk); >> >> error = -EAGAIN; >> if(!timeo) >> goto out; >> >> error = wait_for_incoming_connection(sk, timeo); >>// error = wait_for_connection(sk, timeo); >> printk("dccp_accept 4 ..\n"); >> //sleep(1000); >> if(error) goto out; >> BUG_TRAP(tp->accept_queue); >> } >> printk("dccp_accept 5 ..\n"); >> newsk = tp->accept_queue; >> tp->accept_queue = sk_next(newsk);//newsk->sk_bind_next; >> if(tp->accept_queue == NULL) tp->accept_queue_tail = NULL; >> BUG_TRAP(sk->sk_ack_backlog); >> sk->sk_ack_backlog -- ; /* since we are removing one */ >> dccp_sk(newsk)->flag_hashandle = 1; >>#if 0 >> /* remove from accept queue, will be referenced by socket */ >> sock_put(newsk); /* removed from the queue */ >> sock_hold(newsk); >>#endif >> >> error = 0; >>out: >> printk("dccp_accept 6 ..err=%d\n",err); >> release_sock(sk); >> *err = error; >> return newsk; >>} >> >>void dccp_listen_wlock(void) >>{ >> write_lock(&dccp_lhash_lock); >> >> if (atomic_read(&dccp_lhash_users)) { >> DEFINE_WAIT(wait); >> >> for (;;) { >> prepare_to_wait_exclusive(&dccp_lhash_wait, >> &wait, TASK_UNINTERRUPTIBLE); >> if (!atomic_read(&dccp_lhash_users)) >> break; >> write_unlock_bh(&dccp_lhash_lock); >> schedule(); >> write_lock_bh(&dccp_lhash_lock); >> } >> >> finish_wait(&dccp_lhash_wait, &wait); >> } >>} >> >>static __inline__ void __dccp_v4_hash(struct sock *sk, const int listen_possible) >>{ >> struct hlist_head *list; >> rwlock_t *lock; >> >> BUG_TRAP(sk_unhashed(sk)); >> if (listen_possible && sk->sk_state == DCCP_STATE_LISTEN) { >> list = &dccp_listening_hash[dccp_sk_listen_hashfn(sk)]; >> >> printk("__dccp_v4_hash, list:%x,num:%d,%x\n",list,inet_sk(sk)->num,&dccp_hash[inet_sk(sk)->num & (DCCP_HTABLE_SIZE - 1)]); >> lock = &dccp_lhash_lock; >> dccp_listen_wlock(); >> } else { >> list = &dccp_ehash[(sk->sk_hashent = dccp_sk_hashfn(sk))].chain; >> lock = &dccp_ehash[sk->sk_hashent].lock; >> write_lock(lock); >> } >> __sk_add_node(sk, list); >> sock_prot_inc_use(sk->sk_prot); >> write_unlock(lock); >> if (listen_possible && sk->sk_state == DCCP_STATE_LISTEN) >> wake_up(&dccp_lhash_wait); >> printk("__dccp_v4_hash, list:%x,sk:%x\n",list,sk); >>} >> >>static void dccp_v4_hash(struct sock *sk) >>{ >> if (sk->sk_state != DCCP_STATE_CLOSED) { >> local_bh_disable(); >> __dccp_v4_hash(sk, 1); >> local_bh_enable(); >> } >>} >> >>void dccp_unhash(struct sock *sk) >>{ >> rwlock_t *lock; >> >> if (sk_unhashed(sk)) >> goto ende; >> >> if (sk->sk_state == DCCP_STATE_LISTEN) { >> local_bh_disable(); >> dccp_listen_wlock(); >> lock = &dccp_lhash_lock; >> } else { >> struct dccp_ehash_bucket *head = &dccp_ehash[sk->sk_hashent]; >> lock = &head->lock; >> write_lock_bh(&head->lock); >> } >> >> if (__sk_del_node_init(sk)) >> sock_prot_dec_use(sk->sk_prot); >> write_unlock_bh(lock); >> >> ende: >> if (sk->sk_state == DCCP_STATE_LISTEN) >> wake_up(&dccp_lhash_wait); >>} >> >>/*****************************************************************************/ >>static struct sock *__dccp_v4_lookup_listen(struct hlist_head *head, u32 daddr, >> unsigned short hnum, int dif) >>{ >> struct sock *result = NULL, *sk; >> struct hlist_node *node; >> int score, hiscore; >> >> printk("__dccp_v4_lookup_listen: sk:%x,node:%x,head:%x,sk_state:%d\n",sk,node,head,sk->sk_state); >> hiscore=-1; >> sk_for_each(sk, node, head) { >> struct inet_opt *inet = inet_sk(sk); >> >> if (inet->num == hnum && !ipv6_only_sock(sk)) { >> __u32 rcv_saddr = inet->rcv_saddr; >> >> score = (sk->sk_family == PF_INET ? 1 : 0); >> if (rcv_saddr) { >> if (rcv_saddr != daddr) >> continue; >> score+=2; >> } >> if (sk->sk_bound_dev_if) { >> if (sk->sk_bound_dev_if != dif) >> continue; >> score+=2; >> } >> if (score == 5) >> return sk; >> if (score > hiscore) { >> hiscore = score; >> result = sk; >> } >> } >> } >> printk("dccp_v4_lookup_listen:sk:%x,result:%x\n",sk,result); >> return result; >>} >> >>/* Optimize the common listener case. */ >>inline struct sock *dccp_v4_lookup_listen(u32 daddr, u16 hnum,int dif) >>{ >> struct sock *sk = NULL; >> struct hlist_head *head; >> >> read_lock(&dccp_lhash_lock); >> printk("dccp_bhash_size: %d,ntohs(dport):%d\n",dccp_bhash_size,hnum); >> head = &dccp_listening_hash[dccp_lhashfn(hnum)]; >> >> if(head->first) >> printk("first of head is not empty\n"); >> >> printk("dccp_v4_lookup_listen: head: %x,%x,__sk_head(head):%x\n",head,&dccp_hash[hnum & (DCCP_HTABLE_SIZE - 1)],__sk_head(head)); >> >> if (!hlist_empty(head)) { >> struct inet_opt *inet = inet_sk((sk = __sk_head(head))); >> printk("dccp_v4_lookup_listen:sk: %x\n",sk); >> >> if (inet->num == hnum && !sk->sk_node.next && >> (!inet->rcv_saddr || inet->rcv_saddr == daddr) && >> (sk->sk_family == PF_INET || !ipv6_only_sock(sk)) && >> !sk->sk_bound_dev_if) >> goto sherry_cache; >> sk = __dccp_v4_lookup_listen(head, daddr, hnum, dif); >> } >> else >> printk("hlist_empty(head) is empty.\n"); >> if (sk) { >>sherry_cache: >> sock_hold(sk); >> } >> printk("dccp_v4_lookup_listen:sk: %x\n",sk); >> read_unlock(&dccp_lhash_lock); >> return sk; >>} >> >> >>/*****************************************************************************/ >> >>static inline struct sock *dccp_v4_lookup_connection(u32 saddr, u16 sport, u32 daddr, u16 hnum, int dif){ >> printk("dccp_v4_lookup_connection.\n"); >> struct dccp_ehash_bucket *head; >> DCCP_V4_ADDR_COOKIE(acookie, saddr, daddr) >> __u32 ports = DCCP_COMBINED_PORTS(sport, hnum); >> struct sock *sk; >> struct hlist_node *node; >> int hash = dccp_hashfn(daddr, hnum, saddr, sport); >> printk("hash %d\n",hash); >> head = &dccp_ehash[hash]; >> printk("dccp_v4_lookup_connection. head:%x,node:%x,sk:%x\n",head,node,sk); >> read_lock(&head->lock); >> sk_for_each(sk, node, &head->chain) { >> if (DCCP_IPV4_MATCH(sk, acookie, saddr, daddr, ports, dif)) >> goto hit; >> } >> >> sk_for_each(sk, node, &(head + dccp_ehash_size)->chain) { >> if (DCCP_IPV4_DW_MATCH(sk, acookie, saddr, daddr, ports, dif)) >> goto hit; >> } >> sk = NULL; >>out: >> read_unlock(&head->lock); >> printk("dccp_v4_lookup_connection. head:%x,node:,sk:%x\n",head,sk); >> return sk; >>hit: >> sock_hold(sk); >> goto out; >>} >> >>/*****************************************************************************/ >> >>static inline struct sock *__dccp_v4_lookup(u32 saddr, u16 sport, u32 daddr, u16 dport,int dif){ >> printk("__dccp_v4_lookup.\n"); >> >> struct sock *sk = dccp_v4_lookup_connection(saddr, sport, daddr, ntohs(dport), dif); >> return sk ? : dccp_v4_lookup_listen(daddr, ntohs(dport),dif); >>} >> >>inline struct sock *dccp_v4_lookup(u32 saddr, u16 sport, u32 daddr, >> u16 dport, int dif) >>{ >> printk("dccp_v4_lookup\n"); >> struct sock *sk; >> >> local_bh_disable(); >> sk = __dccp_v4_lookup(saddr, sport, daddr, dport, dif); >> local_bh_enable(); >> >> return sk; >>} >> >>Best regards, >> >>Zhikui >> >> >> >> >> > > > > From vatsa@in.ibm.com Wed Sep 1 04:34:48 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 04:35:01 -0700 (PDT) Received: from e6.ny.us.ibm.com (e6.ny.us.ibm.com [32.97.182.106]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81BYlS7017442 for ; Wed, 1 Sep 2004 04:34:48 -0700 Received: from northrelay04.pok.ibm.com (northrelay04.pok.ibm.com [9.56.224.206]) by e6.ny.us.ibm.com (8.12.10/8.12.9) with ESMTP id i81BYOnt158880; Wed, 1 Sep 2004 07:34:24 -0400 Received: from snowy.in.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by northrelay04.pok.ibm.com (8.12.10/NCO/VER6.6) with ESMTP id i81BZSGY128368; Wed, 1 Sep 2004 07:35:32 -0400 Received: by snowy.in.ibm.com (Postfix, from userid 502) id 981C424E32; Wed, 1 Sep 2004 17:06:41 +0530 (IST) Date: Wed, 1 Sep 2004 17:06:41 +0530 From: Srivatsa Vaddagiri To: Andi Kleen Cc: davem@redhat.com, netdev@oss.sgi.com, linux-kernel@vger.kernel.org, Dipankar , paulmck@us.ibm.com Subject: Re: [RFC] Use RCU for tcp_ehash lookup Message-ID: <20040901113641.GA3918@in.ibm.com> Reply-To: vatsa@in.ibm.com References: <20040831125941.GA5534@in.ibm.com> <20040831135419.GA17642@wotan.suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20040831135419.GA17642@wotan.suse.de> User-Agent: Mutt/1.4.1i X-archive-position: 8300 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: vatsa@in.ibm.com Precedence: bulk X-list: netdev On Tue, Aug 31, 2004 at 03:54:20PM +0200, Andi Kleen wrote: > I bet also when you just do rdtsc timing for the TCP receive > path the cycle numbers will be way down (excluding the copy). I got cycle numbers for the lookup routine (with CONFIG_PREEMPT turned off). They were taken on a 900MHz 8way Intel P3 SMP box. The results are as below: ------------------------------------------------------------------------------- | 2.6.8.1 | 2.6.8.1 + my patch ------------------------------------------------------------------------------- Average cycles | | spent in | | __tcp_v4_lookup_established | 2970.65 | 668.227 | (~3.3 micro-seconds) | (~0.74 microseconds) ------------------------------------------------------------------------------- This repesents improvement by a factor of 77.5%! > > And it should also fix the performance problems with > cat /proc/net/tcp on ppc64/ia64 for large hash tables because the rw locks > are gone. But spinlocks are in! Would that still improve the performance compared to rw locks? (See me earlier note where I have explained that lookup done for /proc/net/tcp is _not_ lock-free yet). > I haven't studied it in detail (yet), just two minor style > comments: [snip] > Can you rewrite that without goto? [snip] > And that too. I have avoided the goto's in the updated patch below. Thanks!! --- linux-2.6.8.1-vatsa/include/net/sock.h | 22 +++++++++-- linux-2.6.8.1-vatsa/include/net/tcp.h | 24 +++++++++--- linux-2.6.8.1-vatsa/net/core/sock.c | 11 +++++ linux-2.6.8.1-vatsa/net/ipv4/tcp.c | 2 - linux-2.6.8.1-vatsa/net/ipv4/tcp_diag.c | 11 +++-- linux-2.6.8.1-vatsa/net/ipv4/tcp_ipv4.c | 50 ++++++++++++++++----------- linux-2.6.8.1-vatsa/net/ipv4/tcp_minisocks.c | 47 ++++++++++++++++++++----- linux-2.6.8.1-vatsa/net/ipv6/tcp_ipv6.c | 22 +++++++---- 8 files changed, 135 insertions(+), 54 deletions(-) diff -puN include/net/sock.h~tcp_ehash include/net/sock.h --- linux-2.6.8.1/include/net/sock.h~tcp_ehash 2004-08-25 18:06:42.000000000 +0530 +++ linux-2.6.8.1-vatsa/include/net/sock.h 2004-09-01 10:09:43.000000000 +0530 @@ -50,6 +50,7 @@ #include #include +#include #include #include @@ -178,6 +179,7 @@ struct sock_common { * @sk_error_report - callback to indicate errors (e.g. %MSG_ERRQUEUE) * @sk_backlog_rcv - callback to process the backlog * @sk_destruct - called at sock freeing time, i.e. when all refcnt == 0 + * @sk_rcu - RCU callback structure */ struct sock { /* @@ -266,6 +268,7 @@ struct sock { int (*sk_backlog_rcv)(struct sock *sk, struct sk_buff *skb); void (*sk_destruct)(struct sock *sk); + struct rcu_head sk_rcu; }; /* @@ -350,7 +353,7 @@ static __inline__ int sk_del_node_init(s static __inline__ void __sk_add_node(struct sock *sk, struct hlist_head *list) { - hlist_add_head(&sk->sk_node, list); + hlist_add_head_rcu(&sk->sk_node, list); } static __inline__ void sk_add_node(struct sock *sk, struct hlist_head *list) @@ -371,7 +374,7 @@ static __inline__ void sk_add_bind_node( } #define sk_for_each(__sk, node, list) \ - hlist_for_each_entry(__sk, node, list, sk_node) + hlist_for_each_entry_rcu(__sk, node, list, sk_node) #define sk_for_each_from(__sk, node) \ if (__sk && ({ node = &(__sk)->sk_node; 1; })) \ hlist_for_each_entry_from(__sk, node, sk_node) @@ -703,6 +706,7 @@ extern void FASTCALL(release_sock(struct extern struct sock * sk_alloc(int family, int priority, int zero_it, kmem_cache_t *slab); extern void sk_free(struct sock *sk); +extern void sk_free_rcu(struct rcu_head *head); extern struct sk_buff *sock_wmalloc(struct sock *sk, unsigned long size, int force, @@ -888,8 +892,18 @@ static inline void sk_filter_charge(stru /* Ungrab socket and destroy it, if it was the last reference. */ static inline void sock_put(struct sock *sk) { - if (atomic_dec_and_test(&sk->sk_refcnt)) - sk_free(sk); + while (atomic_dec_and_test(&sk->sk_refcnt)) { + /* Restore ref count and schedule callback. + * If we don't restore ref count, then the callback can be + * scheduled by more than one CPU. + */ + atomic_inc(&sk->sk_refcnt); + + if (atomic_read(&sk->sk_refcnt) == 1) { + call_rcu(&sk->sk_rcu, sk_free_rcu); + break; + } + } } /* Detach socket from process context. diff -puN include/net/tcp.h~tcp_ehash include/net/tcp.h --- linux-2.6.8.1/include/net/tcp.h~tcp_ehash 2004-08-25 18:06:42.000000000 +0530 +++ linux-2.6.8.1-vatsa/include/net/tcp.h 2004-09-01 10:13:40.000000000 +0530 @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -44,7 +45,7 @@ * for the rest. I'll experiment with dynamic table growth later. */ struct tcp_ehash_bucket { - rwlock_t lock; + spinlock_t lock; struct hlist_head chain; } __attribute__((__aligned__(8))); @@ -222,12 +223,13 @@ struct tcp_tw_bucket { struct in6_addr tw_v6_rcv_saddr; int tw_v6_ipv6only; #endif + struct rcu_head tw_rcu; }; static __inline__ void tw_add_node(struct tcp_tw_bucket *tw, struct hlist_head *list) { - hlist_add_head(&tw->tw_node, list); + hlist_add_head_rcu(&tw->tw_node, list); } static __inline__ void tw_add_bind_node(struct tcp_tw_bucket *tw, @@ -305,14 +307,22 @@ static inline int tcp_v6_ipv6only(const #endif extern kmem_cache_t *tcp_timewait_cachep; +extern void tcp_tw_free(struct rcu_head *head); static inline void tcp_tw_put(struct tcp_tw_bucket *tw) { - if (atomic_dec_and_test(&tw->tw_refcnt)) { -#ifdef INET_REFCNT_DEBUG - printk(KERN_DEBUG "tw_bucket %p released\n", tw); -#endif - kmem_cache_free(tcp_timewait_cachep, tw); + while (atomic_dec_and_test(&tw->tw_refcnt)) { + /* Restore ref count and schedule callback. + * If we don't restore ref count, then the callback can be + * scheduled by more than one CPU. + */ + + atomic_inc(&tw->tw_refcnt); + + if (atomic_read(&tw->tw_refcnt) == 1) { + call_rcu(&tw->tw_rcu, tcp_tw_free); + break; + } } } diff -puN net/core/sock.c~tcp_ehash net/core/sock.c --- linux-2.6.8.1/net/core/sock.c~tcp_ehash 2004-08-25 18:06:42.000000000 +0530 +++ linux-2.6.8.1-vatsa/net/core/sock.c 2004-08-26 16:53:14.000000000 +0530 @@ -657,6 +657,16 @@ void sk_free(struct sock *sk) module_put(owner); } +/* RCU callback to free a socket */ + +void sk_free_rcu(struct rcu_head *head) +{ + struct sock *sk = container_of(head, struct sock, sk_rcu); + + if (atomic_dec_and_test(&sk->sk_refcnt)) + sk_free(sk); +} + void __init sk_init(void) { sk_cachep = kmem_cache_create("sock", sizeof(struct sock), 0, @@ -1347,6 +1357,7 @@ EXPORT_SYMBOL(__lock_sock); EXPORT_SYMBOL(__release_sock); EXPORT_SYMBOL(sk_alloc); EXPORT_SYMBOL(sk_free); +EXPORT_SYMBOL(sk_free_rcu); EXPORT_SYMBOL(sk_send_sigurg); EXPORT_SYMBOL(sock_alloc_send_pskb); EXPORT_SYMBOL(sock_alloc_send_skb); diff -puN net/ipv4/tcp_ipv4.c~tcp_ehash net/ipv4/tcp_ipv4.c --- linux-2.6.8.1/net/ipv4/tcp_ipv4.c~tcp_ehash 2004-08-25 18:06:42.000000000 +0530 +++ linux-2.6.8.1-vatsa/net/ipv4/tcp_ipv4.c 2004-08-25 18:07:27.000000000 +0530 @@ -351,7 +351,8 @@ void tcp_listen_wlock(void) static __inline__ void __tcp_v4_hash(struct sock *sk, const int listen_possible) { struct hlist_head *list; - rwlock_t *lock; + rwlock_t *lock = NULL; + spinlock_t *slock = NULL; BUG_TRAP(sk_unhashed(sk)); if (listen_possible && sk->sk_state == TCP_LISTEN) { @@ -360,14 +361,16 @@ static __inline__ void __tcp_v4_hash(str tcp_listen_wlock(); } else { list = &tcp_ehash[(sk->sk_hashent = tcp_sk_hashfn(sk))].chain; - lock = &tcp_ehash[sk->sk_hashent].lock; - write_lock(lock); + slock = &tcp_ehash[sk->sk_hashent].lock; + spin_lock(slock); } __sk_add_node(sk, list); sock_prot_inc_use(sk->sk_prot); - write_unlock(lock); - if (listen_possible && sk->sk_state == TCP_LISTEN) + if (listen_possible && sk->sk_state == TCP_LISTEN) { + write_unlock(lock); wake_up(&tcp_lhash_wait); + } else + spin_unlock(slock); } static void tcp_v4_hash(struct sock *sk) @@ -381,7 +384,8 @@ static void tcp_v4_hash(struct sock *sk) void tcp_unhash(struct sock *sk) { - rwlock_t *lock; + rwlock_t *lock = NULL; + spinlock_t *slock = NULL; if (sk_unhashed(sk)) goto ende; @@ -392,17 +396,20 @@ void tcp_unhash(struct sock *sk) lock = &tcp_lhash_lock; } else { struct tcp_ehash_bucket *head = &tcp_ehash[sk->sk_hashent]; - lock = &head->lock; - write_lock_bh(&head->lock); + slock = &head->lock; + spin_lock_bh(&head->lock); } if (__sk_del_node_init(sk)) sock_prot_dec_use(sk->sk_prot); - write_unlock_bh(lock); + if (sk->sk_state != TCP_LISTEN) + spin_unlock_bh(slock); + else { + write_unlock_bh(lock); ende: - if (sk->sk_state == TCP_LISTEN) wake_up(&tcp_lhash_wait); + } } /* Don't inline this cruft. Here are some nice properties to @@ -494,7 +501,7 @@ static inline struct sock *__tcp_v4_look */ int hash = tcp_hashfn(daddr, hnum, saddr, sport); head = &tcp_ehash[hash]; - read_lock(&head->lock); + rcu_read_lock(); sk_for_each(sk, node, &head->chain) { if (TCP_IPV4_MATCH(sk, acookie, saddr, daddr, ports, dif)) goto hit; /* You sunk my battleship! */ @@ -507,7 +514,7 @@ static inline struct sock *__tcp_v4_look } sk = NULL; out: - read_unlock(&head->lock); + rcu_read_unlock(); return sk; hit: sock_hold(sk); @@ -559,7 +566,7 @@ static int __tcp_v4_check_established(st struct hlist_node *node; struct tcp_tw_bucket *tw; - write_lock(&head->lock); + spin_lock(&head->lock); /* Check TIME-WAIT sockets first. */ sk_for_each(sk2, node, &(head + tcp_ehash_size)->chain) { @@ -614,7 +621,7 @@ unique: BUG_TRAP(sk_unhashed(sk)); __sk_add_node(sk, &head->chain); sock_prot_inc_use(sk->sk_prot); - write_unlock(&head->lock); + spin_unlock(&head->lock); if (twp) { *twp = tw; @@ -630,7 +637,7 @@ unique: return 0; not_unique: - write_unlock(&head->lock); + spin_unlock(&head->lock); return -EADDRNOTAVAIL; } @@ -2228,7 +2235,10 @@ static void *established_get_first(struc struct hlist_node *node; struct tcp_tw_bucket *tw; - read_lock(&tcp_ehash[st->bucket].lock); + /* Take the spinlock. Otherwise a dancing socket + * (__tcp_tw_hashdance) may be reported twice! + */ + spin_lock(&tcp_ehash[st->bucket].lock); sk_for_each(sk, node, &tcp_ehash[st->bucket].chain) { if (sk->sk_family != st->family) { continue; @@ -2245,7 +2255,7 @@ static void *established_get_first(struc rc = tw; goto out; } - read_unlock(&tcp_ehash[st->bucket].lock); + spin_unlock(&tcp_ehash[st->bucket].lock); st->state = TCP_SEQ_STATE_ESTABLISHED; } out: @@ -2272,10 +2282,10 @@ get_tw: cur = tw; goto out; } - read_unlock(&tcp_ehash[st->bucket].lock); + spin_unlock(&tcp_ehash[st->bucket].lock); st->state = TCP_SEQ_STATE_ESTABLISHED; if (++st->bucket < tcp_ehash_size) { - read_lock(&tcp_ehash[st->bucket].lock); + spin_lock(&tcp_ehash[st->bucket].lock); sk = sk_head(&tcp_ehash[st->bucket].chain); } else { cur = NULL; @@ -2385,7 +2395,7 @@ static void tcp_seq_stop(struct seq_file case TCP_SEQ_STATE_TIME_WAIT: case TCP_SEQ_STATE_ESTABLISHED: if (v) - read_unlock(&tcp_ehash[st->bucket].lock); + spin_unlock(&tcp_ehash[st->bucket].lock); local_bh_enable(); break; } diff -puN net/ipv4/tcp.c~tcp_ehash net/ipv4/tcp.c --- linux-2.6.8.1/net/ipv4/tcp.c~tcp_ehash 2004-08-25 18:06:42.000000000 +0530 +++ linux-2.6.8.1-vatsa/net/ipv4/tcp.c 2004-08-25 18:07:27.000000000 +0530 @@ -2258,7 +2258,7 @@ void __init tcp_init(void) if (!tcp_ehash) panic("Failed to allocate TCP established hash table\n"); for (i = 0; i < (tcp_ehash_size << 1); i++) { - tcp_ehash[i].lock = RW_LOCK_UNLOCKED; + tcp_ehash[i].lock = SPIN_LOCK_UNLOCKED; INIT_HLIST_HEAD(&tcp_ehash[i].chain); } diff -puN net/ipv4/tcp_diag.c~tcp_ehash net/ipv4/tcp_diag.c --- linux-2.6.8.1/net/ipv4/tcp_diag.c~tcp_ehash 2004-08-25 18:06:42.000000000 +0530 +++ linux-2.6.8.1-vatsa/net/ipv4/tcp_diag.c 2004-08-25 18:07:27.000000000 +0530 @@ -522,7 +522,10 @@ skip_listen_ht: if (i > s_i) s_num = 0; - read_lock_bh(&head->lock); + /* Take the spinlock. Otherwise a dancing socket + * (__tcp_tw_hashdance) may be reported twice! + */ + spin_lock_bh(&head->lock); num = 0; sk_for_each(sk, node, &head->chain) { @@ -542,7 +545,7 @@ skip_listen_ht: if (tcpdiag_fill(skb, sk, r->tcpdiag_ext, NETLINK_CB(cb->skb).pid, cb->nlh->nlmsg_seq) <= 0) { - read_unlock_bh(&head->lock); + spin_unlock_bh(&head->lock); goto done; } ++num; @@ -568,13 +571,13 @@ skip_listen_ht: if (tcpdiag_fill(skb, sk, r->tcpdiag_ext, NETLINK_CB(cb->skb).pid, cb->nlh->nlmsg_seq) <= 0) { - read_unlock_bh(&head->lock); + spin_unlock_bh(&head->lock); goto done; } ++num; } } - read_unlock_bh(&head->lock); + spin_unlock_bh(&head->lock); } done: diff -puN net/ipv4/tcp_minisocks.c~tcp_ehash net/ipv4/tcp_minisocks.c --- linux-2.6.8.1/net/ipv4/tcp_minisocks.c~tcp_ehash 2004-08-25 18:06:42.000000000 +0530 +++ linux-2.6.8.1-vatsa/net/ipv4/tcp_minisocks.c 2004-08-26 16:58:08.000000000 +0530 @@ -64,14 +64,14 @@ static void tcp_timewait_kill(struct tcp /* Unlink from established hashes. */ ehead = &tcp_ehash[tw->tw_hashent]; - write_lock(&ehead->lock); + spin_lock(&ehead->lock); if (hlist_unhashed(&tw->tw_node)) { - write_unlock(&ehead->lock); + spin_unlock(&ehead->lock); return; } __hlist_del(&tw->tw_node); sk_node_init(&tw->tw_node); - write_unlock(&ehead->lock); + spin_unlock(&ehead->lock); /* Disassociate with bind bucket. */ bhead = &tcp_bhash[tcp_bhashfn(tw->tw_num)]; @@ -308,17 +308,28 @@ static void __tcp_tw_hashdance(struct so tw_add_bind_node(tw, &tw->tw_tb->owners); spin_unlock(&bhead->lock); - write_lock(&ehead->lock); + spin_lock(&ehead->lock); - /* Step 2: Remove SK from established hash. */ - if (__sk_del_node_init(sk)) - sock_prot_dec_use(sk->sk_prot); + /* + * We have to be carefull here since there could be racing + * (lock-free) lookups happening on other CPUs. If we remove SK first + * and then add TW, then there is a tiny window where this socket is + * in neither the established half nor in the TIMEWAIT half of the ehash + * table. Lookups occuring in that window can drop packets! + * Hence we first add TW and then remove SK, with a barrier in between. + */ - /* Step 3: Hash TW into TIMEWAIT half of established hash table. */ + /* Step 2: Hash TW into TIMEWAIT half of established hash table. */ tw_add_node(tw, &(ehead + tcp_ehash_size)->chain); atomic_inc(&tw->tw_refcnt); - write_unlock(&ehead->lock); + smp_wmb(); + + /* Step 3: Remove SK from established hash. */ + if (__sk_del_node_init(sk)) + sock_prot_dec_use(sk->sk_prot); + + spin_unlock(&ehead->lock); } /* @@ -1069,11 +1080,29 @@ int tcp_child_process(struct sock *paren return ret; } +/* RCU callback to free a timewait bucket */ + +void tcp_tw_free(struct rcu_head *head) +{ + struct tcp_tw_bucket *tw = + container_of(head, struct tcp_tw_bucket, tw_rcu); + + if (atomic_dec_and_test(&tw->tw_refcnt)) { +#ifdef INET_REFCNT_DEBUG + printk(KERN_DEBUG "tw_bucket %p released\n", tw); +#endif + kmem_cache_free(tcp_timewait_cachep, tw); + } +} + + + EXPORT_SYMBOL(tcp_check_req); EXPORT_SYMBOL(tcp_child_process); EXPORT_SYMBOL(tcp_create_openreq_child); EXPORT_SYMBOL(tcp_timewait_state_process); EXPORT_SYMBOL(tcp_tw_deschedule); +EXPORT_SYMBOL(tcp_tw_free); #ifdef CONFIG_SYSCTL EXPORT_SYMBOL(sysctl_tcp_tw_recycle); diff -puN net/ipv6/tcp_ipv6.c~tcp_ehash net/ipv6/tcp_ipv6.c --- linux-2.6.8.1/net/ipv6/tcp_ipv6.c~tcp_ehash 2004-08-25 18:06:42.000000000 +0530 +++ linux-2.6.8.1-vatsa/net/ipv6/tcp_ipv6.c 2004-08-25 18:07:27.000000000 +0530 @@ -210,7 +210,8 @@ fail: static __inline__ void __tcp_v6_hash(struct sock *sk) { struct hlist_head *list; - rwlock_t *lock; + rwlock_t *lock = NULL; + spinlock_t *slock = NULL; BUG_TRAP(sk_unhashed(sk)); @@ -221,13 +222,16 @@ static __inline__ void __tcp_v6_hash(str } else { sk->sk_hashent = tcp_v6_sk_hashfn(sk); list = &tcp_ehash[sk->sk_hashent].chain; - lock = &tcp_ehash[sk->sk_hashent].lock; - write_lock(lock); + slock = &tcp_ehash[sk->sk_hashent].lock; + spin_lock(slock); } __sk_add_node(sk, list); sock_prot_inc_use(sk->sk_prot); - write_unlock(lock); + if (sk->sk_state == TCP_LISTEN) + write_unlock(lock); + else + spin_unlock(slock); } @@ -307,7 +311,7 @@ static inline struct sock *__tcp_v6_look */ hash = tcp_v6_hashfn(daddr, hnum, saddr, sport); head = &tcp_ehash[hash]; - read_lock(&head->lock); + rcu_read_lock(); sk_for_each(sk, node, &head->chain) { /* For IPV6 do the cheaper port and family tests first. */ if(TCP_IPV6_MATCH(sk, saddr, daddr, ports, dif)) @@ -326,12 +330,12 @@ static inline struct sock *__tcp_v6_look goto hit; } } - read_unlock(&head->lock); + rcu_read_unlock(); return NULL; hit: sock_hold(sk); - read_unlock(&head->lock); + rcu_read_unlock(); return sk; } @@ -452,7 +456,7 @@ static int tcp_v6_check_established(stru struct hlist_node *node; struct tcp_tw_bucket *tw; - write_lock_bh(&head->lock); + spin_lock_bh(&head->lock); /* Check TIME-WAIT sockets first. */ sk_for_each(sk2, node, &(head + tcp_ehash_size)->chain) { @@ -491,7 +495,7 @@ unique: __sk_add_node(sk, &head->chain); sk->sk_hashent = hash; sock_prot_inc_use(sk->sk_prot); - write_unlock_bh(&head->lock); + spin_unlock_bh(&head->lock); if (tw) { /* Silly. Should hash-dance instead... */ _ -- Thanks and Regards, Srivatsa Vaddagiri, Linux Technology Center, IBM Software Labs, Bangalore, INDIA - 560017 From DanE@aiinet.com Wed Sep 1 07:13:35 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 07:13:42 -0700 (PDT) Received: from aiexchange.ai.aiinet.com (ai181-26.aiinet.com [205.245.181.26]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81EDZc4021183 for ; Wed, 1 Sep 2004 07:13:35 -0700 X-MimeOLE: Produced By Microsoft Exchange V6.5.7226.0 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C4902D.D3F1B09D" Subject: RE: [Bridge] BCP status Date: Wed, 1 Sep 2004 10:13:17 -0400 Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: [Bridge] BCP status Thread-Index: AcSQBeEZdLXyu5JNTQGZbEJfr4S2kAAIN/oA From: "Eble, Dan" To: "Petter Larsen" Cc: , X-archive-position: 8301 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: DanE@aiinet.com Precedence: bulk X-list: netdev This is a multi-part message in MIME format. ------_=_NextPart_001_01C4902D.D3F1B09D Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: Petter Larsen [mailto:petter.larsen@morecom.no]=20 > Subject: RE: [Bridge] BCP status >=20 > Ok. The patches that you sent to the mailing list in March,=20 > are they the latest from your side? You mentioned that you had some=20 > plug-ins for HDLC ppp-layer drivers. =20 >=20 > Are you working on this now, or are you finished?=20 Nothing is ever finished; however, I have not worked on it for months. Kernel BCP patch: http://marc.theaimsgroup.com/?l=3Dlinux-ppp&m=3D107814944215772&w=3D2 No changes since then, AFAICT. PPP daemon BCP patch: http://marc.theaimsgroup.com/?l=3Dlinux-ppp&m=3D107772784930462&w=3D2 No changes since then, AFAICT. PPP daemon "wanppp" plugin: http://marc.theaimsgroup.com/?l=3Dlinux-ppp&m=3D105526128502635&w=3D2 It looks current except for a correction of spelling (s/compliled/compiled/) and the addition of prototypes for wanppp_cleanup() and wanppp_close(). Kernel generic HDLC to generic PPP layer: http://marc.theaimsgroup.com/?l=3Dlinux-net&m=3D105525978800615&w=3D2 This has changed slightly. I have attached our latest drivers/net/wan/hdlc_ppp.c. --=20 Dan Eble _____ . Software Engineer | _ |/| Applied Innovation Inc. | |_| | | http://www.aiinet.com/ |__/|_|_| ------_=_NextPart_001_01C4902D.D3F1B09D Content-Type: application/octet-stream; name="hdlc_ppp.c" Content-Transfer-Encoding: base64 Content-Description: hdlc_ppp.c Content-Disposition: attachment; filename="hdlc_ppp.c" LyoKICogR2VuZXJpYyBIRExDIHN1cHBvcnQgcm91dGluZXMgZm9yIExpbnV4CiAqIFBvaW50LXRv LXBvaW50IHByb3RvY29sIHN1cHBvcnQKICoKICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMyBL cnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogKiB1 bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQogKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICov CgojaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2lu Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgojaW5jbHVkZSA8bGludXgvc2xhYi5oPgojaW5jbHVkZSA8 bGludXgvcG9sbC5oPgojaW5jbHVkZSA8bGludXgvZXJybm8uaD4KI2luY2x1ZGUgPGxpbnV4L2lm X2FycC5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgojaW5jbHVkZSA8bGludXgvc2tidWZmLmg+ CiNpbmNsdWRlIDxsaW51eC9wa3Rfc2NoZWQuaD4KI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2Uu aD4KI2luY2x1ZGUgPGxpbnV4L2xhcGIuaD4KI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgoj aW5jbHVkZSA8bGludXgvaGRsYy5oPgojaW5jbHVkZSA8bGludXgvcHBwX2RlZnMuaD4KI2luY2x1 ZGUgPGxpbnV4L2lmX3BwcC5oPgojaW5jbHVkZSA8bGludXgvcHBwX2NoYW5uZWwuaD4KCi8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogKiBDb25zdGFudHMgYW5kIFN0cnVjdHVyZXMKICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCgovKiBUaGUgUFBQIGhlYWRlciBpbmNsdWRlcyB0aGUgSERMQyBhZGRyZXNzICYgY29udHJv bCBieXRlcywKICogc28gZG8gbm90IGNvdW50IHRoZW0gaW4gTVRVIGFkanVzdG1lbnRzLgogKi8K I2RlZmluZSBQUFBfT1ZFUkhFQUQJKFBQUF9IRFJMRU4gLSAyKQoKLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CiAqIFByb3RvdHlwZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpzdGF0aWMgaW50IGhkbGNfcHBwX3Jl Z2lzdGVyKGhkbGNfZGV2aWNlICpoZGxjKTsKc3RhdGljIHZvaWQgaGRsY19wcHBfdW5yZWdpc3Rl cihoZGxjX2RldmljZSAqaGRsYyk7CnN0YXRpYyB2b2lkIGhkbGNfcHBwX25ldGlmX3J4KHN0cnVj dCBza19idWZmICpza2IpOwpzdGF0aWMgaW50IGhkbGNfZ2VucHBwX3N0YXJ0X3htaXQoc3RydWN0 IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopOwpzdGF0aWMgaW50IGhkbGNfZ2VucHBw X2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7 CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKICogVmFyaWFibGVzCiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKc3Rh dGljIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgaGRsY19nZW5wcHBfb3BzID0KewoJLnN0YXJ0X3ht aXQgPQloZGxjX2dlbnBwcF9zdGFydF94bWl0LAoJLmlvY3RsID0JaGRsY19nZW5wcHBfaW9jdGwK fTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgogKiBJbmxpbmUgRnVuY3Rpb25zCiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwoKLyoqIEdldCB0aGUgUFBQIGNoYW5uZWwgb3duZWQgYnkgYW4gSERMQyBkZXZpY2UuICov CnN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBwcHBfY2hhbm5lbCogaGRsY190b19jaGFuKGhkbGNf ZGV2aWNlICpoZGxjKQp7CglyZXR1cm4gKHN0cnVjdCBwcHBfY2hhbm5lbCopJmhkbGMtPnN0YXRl LnBwcC5jaGFuOwp9CgovKiogR2V0IGFuIEhETEMgZGV2aWNlIGZyb20gaXRzIFBQUCBjaGFubmVs LiAqLwpzdGF0aWMgX19pbmxpbmVfXyBoZGxjX2RldmljZSogY2hhbl90b19oZGxjKHN0cnVjdCBw cHBfY2hhbm5lbCAqY2hhbikKewoJcmV0dXJuIChoZGxjX2RldmljZSopY2hhbi0+cHJpdmF0ZTsK fQoKLyoqIENoZWNrIFVQLCBSVU5OSU5HLCBhbmQgY2FycmllciBhbGwgYXQgb25jZS4gKi8Kc3Rh dGljIF9faW5saW5lX18gaW50IG5ldGlmX2dvb2RfdG9fZ28oc3RydWN0IG5ldF9kZXZpY2UgKmRl dikKewoJcmV0dXJuIChkZXYtPmZsYWdzICYgSUZGX1VQKSAmJgoJCW5ldGlmX3J1bm5pbmcoZGV2 KSAmJgoJCW5ldGlmX2NhcnJpZXJfb2soZGV2KTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEZ1 bmN0aW9ucwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKgogKiBJbml0aWFsaXplIGFuZCByZWdpc3Rl ciBhIFBQUCBjaGFubmVsIHdpdGggdGhlIGdlbmVyaWMgUFBQIGxheWVyLgogKgogKiBoZGxjX3Bw cF9yZWdpc3RlcigpIGlzIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dCB3aGlsZSB0aGUKICog aW50ZXJmYWNlIGlzIGRvd24uCiAqLwpzdGF0aWMgaW50IGhkbGNfcHBwX3JlZ2lzdGVyKGhkbGNf ZGV2aWNlICpoZGxjKQp7CglzdHJ1Y3QgbmV0X2RldmljZSAqY29uc3QgZGV2ID0gaGRsY190b19k ZXYoaGRsYyk7CglzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNvbnN0IGNoYW4gPSBoZGxjX3RvX2NoYW4o aGRsYyk7CglpbnQgb2xkX210dSwgbmV3X210dTsKCWludCBlcnI7CgoJLyoKCSAqIFNhdmUgdGhl IG9sZCBNVFUgYW5kIHVzZSBvbmUgbW9yZSBhZGVxdWF0ZSBmb3IgUFBQLgoJICovCglvbGRfbXR1 ID0gZGV2LT5tdHU7CgoJLyogVHJ5IGFuIE1UVSBmb3IgYnJpZGdpbmcgRXRoZXJuZXQgZnJhbWVz LiAqLwoJbmV3X210dSA9IFBQUF9PVkVSSEVBRCArQkNQXzgwMl8zX0hEUkxFTiArIEVUSF9GUkFN RV9MRU4gKyBFVEhfRkNTX0xFTjsKCWlmIChkZXYtPm10dSA8IG5ld19tdHUpCgkJZGV2LT5jaGFu Z2VfbXR1KGRldiwgbmV3X210dSk7CgoJLyogSWYgdGhhdCBNVFUgZGlkbid0IHdvcmssIHRyeSBp dCB3aXRob3V0IHJvb20gZm9yIHRoZSBFdGhlcm5ldCBGQ1MsCgkgKiB3aGljaCBpcyBvcHRpb25h bCBmb3IgQkNQIGVuY2Fwc3VsYXRpb24uICovCgluZXdfbXR1IC09IEVUSF9GQ1NfTEVOOwoJaWYg KGRldi0+bXR1IDwgbmV3X210dSkKCQlkZXYtPmNoYW5nZV9tdHUoZGV2LCBuZXdfbXR1KTsKCgkv KiBJZiAqdGhhdCogZGlkbid0IHdvcmssIHRyeSB0aGUgZGVmYXVsdCBQUFAgTVRVLiAqLwoJbmV3 X210dSA9IFBQUF9PVkVSSEVBRCArIFBQUF9NVFU7CglpZiAoZGV2LT5tdHUgPCBuZXdfbXR1KQoJ CWRldi0+Y2hhbmdlX210dShkZXYsIG5ld19tdHUpOwoKCS8qIE1UVSBzaG91bGQgbm90IGJlIGNo YW5nZWQgd2hpbGUgUFBQIG1vZGUgaXMgaW4gZWZmZWN0LiAqLwoJaGRsYy0+bXR1X2xvY2tlZCA9 IDE7CgoJLyogcmVzZXQgdGhlIFBQUCBzdGF0ZSAqLwoJbWVtc2V0KCZoZGxjLT5zdGF0ZS5wcHAs IDAsIHNpemVvZihoZGxjLT5zdGF0ZS5wcHApKTsKCWNoYW4tPnByaXZhdGUgPSBoZGxjOwoJY2hh bi0+b3BzID0gJmhkbGNfZ2VucHBwX29wczsKCgkvKiBUaGUgY2hhbm5lbCBNVFUgaXMgdGhlIHVu ZGVybHlpbmcgSERMQyBNVFUgcmVkdWNlZCBieSB0aGUKCSAqIG92ZXJoZWFkIFBQUCByZXF1aXJl cy4KCSAqLwoJY2hhbi0+bXR1ID0gZGV2LT5tdHUgLSBQUFBfT1ZFUkhFQUQ7CgoJLyogY2hhbi0+ aGRybGVuIGlzIHRoZSBoZWFkcm9vbSB0aGUgZ2VuZXJpYyBQUFAgbGF5ZXIgd2lsbAoJICogcmVz ZXJ2ZSBvbiBidWZmZXJzIGl0IHNlbmRzIHRvIHRoaXMgZHJpdmVyLiAgV2UgbmVlZCBlbm91Z2gK CSAqIGZvciB0aGUgSERMQyBhZGRyZXNzIGFuZCBjb250cm9sIGJ5dGVzLiAqLwoJY2hhbi0+aGRy bGVuID0gMjsKCiAJLyogVGhlIHBwcF9jaGFubmVsIG9iamVjdCBtdXN0IGV4aXN0IGZyb20gdGhl IHRpbWUgdGhhdAoJICogcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgdW50aWwgYWZ0 ZXIgdGhlIGNhbGwgdG8KCSAqIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSByZXR1cm5zLgoJICov CgllcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChjaGFuKTsKCWlmICghZXJyKQoJewoJCWhkbGMt Pm9wZW4gPSBOVUxMOwoJCWhkbGMtPnN0b3AgPSBOVUxMOwoJCWhkbGMtPnByb3RvX2RldGFjaCA9 IGhkbGNfcHBwX3VucmVnaXN0ZXI7CgkJaGRsYy0+bmV0aWZfcnggPSBoZGxjX3BwcF9uZXRpZl9y eDsKCQloZGxjLT50eXBlX3RyYW5zID0gTlVMTDsJLyogZm9yY2UgdXNlIG9mIG5ldGlmX3J4KCkg Ki8KCQloZGxjLT5wcm90byA9IElGX1BST1RPX1BQUDsKCgkJZGV2LT5oYXJkX3N0YXJ0X3htaXQg PSBoZGxjLT54bWl0OwoJCWRldi0+aGFyZF9oZWFkZXIgPSBOVUxMOwoJCWRldi0+dHlwZSA9IEFS UEhSRF9QUFA7CgkJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAyOwoJCWRldi0+YWRkcl9sZW4gPSAx OwoJCWRldi0+YnJvYWRjYXN0WzBdID0gUFBQX0FMTFNUQVRJT05TOwoJCWRldi0+ZGV2X2FkZHJb MF0gPSAwOwkJLyogbm90IGltcG9ydGFudCBmb3IgUFBQICovCgoJCWhkbGMtPnN0YXRlLnBwcC5z ZXR0aW5ncy5jaGFubmVsID0KCQkJcHBwX2NoYW5uZWxfaW5kZXgoaGRsY190b19jaGFuKGhkbGMp KTsKCgkJZ290byBTdWNjZXNzOwoJfQoKCS8qIHJlc3RvcmUgb2xkIE1UVSAqLwoJaGRsYy0+bXR1 X2xvY2tlZCA9IDA7CglpZiAoZGV2LT5tdHUgIT0gb2xkX210dSkKCQlkZXYtPmNoYW5nZV9tdHUo ZGV2LCBvbGRfbXR1KTsKCiBTdWNjZXNzOgoJcmV0dXJuIGVycjsKfQoKCgovKioKICogQ2xvc2Ug dGhlIGNoYW5uZWwgdG8gdGhlIGdlbmVyaWMgUFBQIGxheWVyLgogKgogKiBoZGxjX3BwcF91bnJl Z2lzdGVyKCkgaXMgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0IHdoaWxlIHRoZQogKiBpbnRl cmZhY2UgaXMgZG93bi4KICovCnN0YXRpYyB2b2lkIGhkbGNfcHBwX3VucmVnaXN0ZXIoaGRsY19k ZXZpY2UgKmhkbGMpCnsKCXN0cnVjdCBwcHBfY2hhbm5lbCAqY29uc3QgY2hhbiA9IGhkbGNfdG9f Y2hhbihoZGxjKTsKCXN0cnVjdCBuZXRfZGV2aWNlICpjb25zdCBkZXYgPSBoZGxjX3RvX2Rldiho ZGxjKTsKCgkvKiBObyB0aHJlYWQgbWF5IGJlIGluIGEgY2FsbCB0byBhbnkgb2YgcHBwX2lucHV0 KCksCgkgKiBwcHBfaW5wdXRfZXJyb3IoKSwgcHBwX291dHB1dF93YWtldXAoKSwgcHBwX2NoYW5u ZWxfaW5kZXgoKQoJICogb3IgcHBwX3VuaXRfbnVtYmVyKCkgZm9yIGEgY2hhbm5lbCBhdCB0aGUg dGltZSB0aGF0CgkgKiBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkgaXMgY2FsbGVkIGZvciB0aGF0 IGNoYW5uZWwuCgkgKi8KCS8qIEJ5IHRoZSB0aW1lIGEgY2FsbCB0byBwcHBfdW5yZWdpc3Rlcl9j aGFubmVsKCkgcmV0dXJucywgbm8KCSAqIHRocmVhZCB3aWxsIGJlIGV4ZWN1dGluZyBpbiBhIGNh bGwgZnJvbSB0aGUgZ2VuZXJpYyBsYXllcgoJICogdG8gdGhhdCBjaGFubmVsJ3Mgc3RhcnRfeG1p dCgpIG9yIGlvY3RsKCkgZnVuY3Rpb24sIGFuZCB0aGUKCSAqIGdlbmVyaWMgbGF5ZXIgd2lsbCBu b3QgY2FsbCBlaXRoZXIgb2YgdGhvc2UgZnVuY3Rpb25zCgkgKiBzdWJzZXF1ZW50bHkuCgkgKi8K CXBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoY2hhbik7CgoJaGRsYy0+bXR1X2xvY2tlZCA9IDA7Cglo ZGxjLT5zdGF0ZS5wcHAuc2V0dGluZ3MuY2hhbm5lbCA9IC0xOwoJZGV2LT5oYXJkX2hlYWRlcl9s ZW4gPSAxNjsKfQoKCgovKioKICogUmVjZWl2ZSBhIGJ1ZmZlciBmcm9tIHRoZSBoYXJkd2FyZSwg c3RyaXAgdGhlIFBQUCBoZWFkZXIsIGFuZCBwYXNzCiAqIHRoZSByZXN0IHRvIHRoZSBnZW5lcmlj IFBQUCBsYXllci4KICovCnN0YXRpYyB2b2lkIGhkbGNfcHBwX25ldGlmX3J4KHN0cnVjdCBza19i dWZmICpza2IpCnsKCXN0cnVjdCBwcHBfY2hhbm5lbCAqY29uc3QgY2hhbiA9IGhkbGNfdG9fY2hh bihkZXZfdG9faGRsYyhza2ItPmRldikpOwoJdW5zaWduZWQgY2hhciAqcDsKCgkvKiBzdHJpcCBh ZGRyZXNzL2NvbnRyb2wgZmllbGQgaWYgcHJlc2VudCAqLwoJcCA9IHNrYi0+ZGF0YTsKCWlmIChw WzBdID09IFBQUF9BTExTVEFUSU9OUyAmJiBwWzFdID09IFBQUF9VSSkgewoJCS8qIGNob3Agb2Zm IGFkZHJlc3MvY29udHJvbCAqLwoJCWlmIChza2ItPmxlbiA8IDMpCgkJCWdvdG8gZXJyOwoJCXAg PSBza2JfcHVsbChza2IsIDIpOwoJfQoKCS8qIGRlY29tcHJlc3MgcHJvdG9jb2wgZmllbGQgaWYg Y29tcHJlc3NlZCAqLwoJaWYgKHBbMF0gJiAxKSB7CgkJLyogcHJvdG9jb2wgaXMgY29tcHJlc3Nl ZCAqLwoJCXNrYl9wdXNoKHNrYiwgMSlbMF0gPSAwOwoJfSBlbHNlIGlmIChza2ItPmxlbiA8IDIp CgkJZ290byBlcnI7CgoJLyogcGFzcyB0byBnZW5lcmljIGxheWVyICovCglwcHBfaW5wdXQoY2hh biwgc2tiKTsKCXJldHVybjsKCiBlcnI6CglrZnJlZV9za2Ioc2tiKTsKCXBwcF9pbnB1dF9lcnJv cihjaGFuLCAwKTsKfQoKCgovKioKICogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdt ZW50KSBvbiB0aGlzIGNoYW5uZWwuCiAqIFJldHVybnMgMSBpZiBpdCB3YXMgYWNjZXB0ZWQsIDAg dG8gcXVldWUgaXQgZm9yIGxhdGVyLgogKgogKiBUaGUgZ2VuZXJpYyBsYXllciB3aWxsIG5vdCBj YWxsIHRoZSBzdGFydF94bWl0KCkgZnVuY3Rpb24gZm9yIGEKICogY2hhbm5lbCB3aGlsZSBhbnkg dGhyZWFkIGlzIGFscmVhZHkgZXhlY3V0aW5nIGluIHRoYXQgZnVuY3Rpb24gZm9yCiAqIHRoYXQg Y2hhbm5lbC4KICoKICogVGhlIGdlbmVyaWMgbGF5ZXIgbWF5IGNhbGwgdGhlIGNoYW5uZWwgc3Rh cnRfeG1pdCgpIGZ1bmN0aW9uIGF0CiAqIHNvZnRpcnEvQkggbGV2ZWwgYnV0IHdpbGwgbm90IGNh bGwgaXQgYXQgaW50ZXJydXB0IGxldmVsLiAgVGh1cyB0aGUKICogc3RhcnRfeG1pdCgpIGZ1bmN0 aW9uIG1heSBub3QgYmxvY2suCiAqLwpzdGF0aWMgaW50IGhkbGNfZ2VucHBwX3N0YXJ0X3htaXQo c3RydWN0IHBwcF9jaGFubmVsICpjaGFuLAoJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7Cglo ZGxjX2RldmljZSAqY29uc3QgaGRsYyA9IGNoYW5fdG9faGRsYyhjaGFuKTsKCXN0cnVjdCBuZXRf ZGV2aWNlICpjb25zdCBkZXYgPSBoZGxjX3RvX2RldihoZGxjKTsKCWludCBwcm90bzsKCXVuc2ln bmVkIGNoYXIgKmRhdGE7CglpbnQgaXNsY3A7CgoJaWYgKCFuZXRpZl9nb29kX3RvX2dvKGRldikp IHsKCQkvKiogQHRvZG8gSW5zdGVhZCwgcmV0dXJuIDAgdG8gbWFrZSBnZW5lcmljIGxheWVyCgkJ ICogcXVldWUgdGhlIHBhY2tldC4gIFRoYXQgd2lsbCByZXF1aXJlIGNhbGxpbmcKCQkgKiBwcHBf b3V0cHV0X3dha2V1cCgpIGF0IGFuIGFwcHJvcHJpYXRlIHRpbWUuICovCgkJa2ZyZWVfc2tiKHNr Yik7CgkJKytoZGxjLT5zdGF0cy50eF9kcm9wcGVkOwoJCXJldHVybiAxOwoJfQoKCWRhdGEgID0g c2tiLT5kYXRhOwoJcHJvdG8gPSAoZGF0YVswXSA8PCA4KSArIGRhdGFbMV07CgoJLyogTENQIHBh Y2tldHMgd2l0aCBjb2RlcyBiZXR3ZWVuIDEgKGNvbmZpZ3VyZS1yZXF1ZXN0KQoJICogYW5kIDcg KGNvZGUtcmVqZWN0KSBtdXN0IGJlIHNlbnQgYXMgdGhvdWdoIG5vIG9wdGlvbnMKCSAqIGhhdmUg YmVlbiBuZWdvdGlhdGVkLgoJICovCglpc2xjcCA9IHByb3RvID09IFBQUF9MQ1AgJiYgMSA8PSBk YXRhWzJdICYmIGRhdGFbMl0gPD0gNzsKCgkvKiBjb21wcmVzcyBwcm90b2NvbCBmaWVsZCBpZiBv cHRpb24gZW5hYmxlZCAqLwoJaWYgKGRhdGFbMF0gPT0gMCAmJiAoaGRsYy0+c3RhdGUucHBwLmZs YWdzICYgU0NfQ09NUF9QUk9UKSAmJiAhaXNsY3ApCgkJc2tiX3B1bGwoc2tiLDEpOwoKCS8qIHBy ZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi8KCWlmICgoaGRsYy0+ c3RhdGUucHBwLmZsYWdzICYgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkgewoJCWlmIChza2Jf aGVhZHJvb20oc2tiKSA8IDIpIHsKCQkJc3RydWN0IHNrX2J1ZmYgKm5wa3QgPSBkZXZfYWxsb2Nf c2tiKHNrYi0+bGVuICsgMik7CgkJCWlmIChucGt0ID09IE5VTEwpIHsKCQkJCWtmcmVlX3NrYihz a2IpOwoJCQkJKytoZGxjLT5zdGF0cy50eF9kcm9wcGVkOwoJCQkJcmV0dXJuIDE7CgkJCX0KCQkJ c2tiX3Jlc2VydmUobnBrdCwyKTsKCQkJbWVtY3B5KHNrYl9wdXQobnBrdCxza2ItPmxlbiksIHNr Yi0+ZGF0YSwgc2tiLT5sZW4pOwoJCQlrZnJlZV9za2Ioc2tiKTsKCQkJc2tiID0gbnBrdDsKCQl9 CgkJc2tiX3B1c2goc2tiLDIpOwoJCXNrYi0+ZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUzsKCQlz a2ItPmRhdGFbMV0gPSBQUFBfVUk7Cgl9CgoJc2tiLT5kZXYgPSBkZXY7Cglza2ItPm5oLnJhdyA9 IHNrYi0+ZGF0YTsKCglkZXZfcXVldWVfeG1pdChza2IpOwoJcmV0dXJuIDE7Cn0KCgoKLyoqCiAq IEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLgogKgog KiBUaGUgZ2VuZXJpYyBsYXllciB3aWxsIG9ubHkgY2FsbCB0aGUgY2hhbm5lbCBpb2N0bCgpIGZ1 bmN0aW9uIGluCiAqIHByb2Nlc3MgY29udGV4dC4KICoKICogVGhlIGdlbmVyaWMgbGF5ZXIgd2ls bCBub3QgY2FsbCB0aGUgaW9jdGwoKSBmdW5jdGlvbiBmb3IgYSBjaGFubmVsCiAqIHdoaWxlIGFu eSB0aHJlYWQgaXMgYWxyZWFkeSBleGVjdXRpbmcgaW4gdGhhdCBmdW5jdGlvbiBmb3IgdGhhdAog KiBjaGFubmVsLgogKi8Kc3RhdGljIGludCBoZGxjX2dlbnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2No YW5uZWwgKmNoYW4sCgkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcp CnsKCWhkbGNfZGV2aWNlICpjb25zdCBoZGxjID0gY2hhbl90b19oZGxjKGNoYW4pOwoJc3RydWN0 IG5ldF9kZXZpY2UgKmNvbnN0IGRldiA9IGhkbGNfdG9fZGV2KGhkbGMpOwoJaW50IHZhbDsKCWlu dCBlcnI7CgoJZXJyID0gLUVGQVVMVDsKCXN3aXRjaCAoY21kKSB7CgljYXNlIFBQUElPQ0dNUlU6 CgkJaWYgKHB1dF91c2VyKGRldi0+bXR1IC0gUFBQX09WRVJIRUFELCAoaW50ICopIGFyZykpCgkJ CWJyZWFrOwoJCWVyciA9IDA7CgkJYnJlYWs7CgoJY2FzZSBQUFBJT0NTTVJVOgoJCWlmIChnZXRf dXNlcih2YWwsIChpbnQgKikgYXJnKSkKCQkJYnJlYWs7CgoJCWlmICh2YWwgPiBkZXYtPm10dSAt IFBQUF9PVkVSSEVBRCkKCQkJZXJyID0gLUVJTlZBTDsKCQllbHNlCgkJCWVyciA9IDA7CgkJYnJl YWs7CgoJY2FzZSBQUFBJT0NTRkxBR1M6CgkJaWYgKGdldF91c2VyKHZhbCwgKGludCAqKSBhcmcp KQoJCQlicmVhazsKCQl2YWwgJj0gU0NfTUFTSzsJLyoga2VlcCB0aGUgYml0cyB0aGF0IGFyZSBh bGxvd2VkIHRvIGJlIHNldCAqLwoJCWhkbGMtPnN0YXRlLnBwcC5mbGFncyAmPSB+U0NfTUFTSzsK CQloZGxjLT5zdGF0ZS5wcHAuZmxhZ3MgfD0gdmFsOwoJCWVyciA9IDA7CgkJYnJlYWs7CgoJZGVm YXVsdDoKCQllcnIgPSAtRU5PVFRZOwoJfQoJcmV0dXJuIGVycjsKfQoKCgppbnQgaGRsY19wcHBf aW9jdGwoaGRsY19kZXZpY2UgKmhkbGMsIHN0cnVjdCBpZnJlcSAqaWZyKQp7CglzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2ID0gaGRsY190b19kZXYoaGRsYyk7CglpbnQgZXJyOwoKCXN3aXRjaCAoaWZy LT5pZnJfc2V0dGluZ3MudHlwZSkgewoJY2FzZSBJRl9HRVRfUFJPVE86CgkJaWZyLT5pZnJfc2V0 dGluZ3MudHlwZSA9IElGX1BST1RPX1BQUDsKCQlpZiAoaWZyLT5pZnJfc2V0dGluZ3Muc2l6ZSA8 IHNpemVvZihwcHBfcHJvdG8pKSB7CgkJCWlmci0+aWZyX3NldHRpbmdzLnNpemUgPSBzaXplb2Yo cHBwX3Byb3RvKTsKCQkJcmV0dXJuIC1FTk9CVUZTOwoJCX0KCQlpZiAoY29weV90b191c2VyKGlm ci0+aWZyX3NldHRpbmdzLmlmc19pZnN1LnBwcCwKCQkJCSAmaGRsYy0+c3RhdGUucHBwLnNldHRp bmdzLCBzaXplb2YocHBwX3Byb3RvKSkpCgkJCXJldHVybiAtRUZBVUxUOwoJCXJldHVybiAwOwoK CWNhc2UgSUZfUFJPVE9fUFBQOgoJCWlmKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQoJCQlyZXR1 cm4gLUVQRVJNOwoKCQlpZihkZXYtPmZsYWdzICYgSUZGX1VQKQoJCQlyZXR1cm4gLUVCVVNZOwoK CQkvKiBubyBzZXR0YWJsZSBwYXJhbWV0ZXJzICovCgoJCWVyciA9IGhkbGMtPmF0dGFjaChoZGxj LCBFTkNPRElOR19OUlosUEFSSVRZX0NSQzE2X1BSMV9DQ0lUVCk7CgkJaWYgKCFlcnIpIHsKCQkJ aGRsY19wcm90b19kZXRhY2goaGRsYyk7CgkJCWVyciA9IGhkbGNfcHBwX3JlZ2lzdGVyKGhkbGMp OwoJCX0KCgkJcmV0dXJuIGVycjsKCX0KCglyZXR1cm4gLUVJTlZBTDsKfQo= ------_=_NextPart_001_01C4902D.D3F1B09D-- From davem@davemloft.net Wed Sep 1 13:37:54 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 13:38:01 -0700 (PDT) Received: from smtp109.mail.sc5.yahoo.com (smtp109.mail.sc5.yahoo.com [66.163.170.7]) by oss.sgi.com (8.13.0/8.13.0) with SMTP id i81Kbs8b005999 for ; Wed, 1 Sep 2004 13:37:54 -0700 Received: from unknown (HELO cheetah.davemloft.net) (davem?330@63.197.226.105 with login) by smtp109.mail.sc5.yahoo.com with SMTP; 1 Sep 2004 20:37:46 -0000 Date: Wed, 1 Sep 2004 13:37:09 -0700 From: "David S. Miller" To: Zhikui Chen Cc: hadi@cyberus.ca, dccp@ietf.org, netdev@oss.sgi.com, acme@conectiva.com.br Subject: Re: HELP for dccp implementation. Message-Id: <20040901133709.3637d63d.davem@davemloft.net> In-Reply-To: <4135A32A.4030901@rus.uni-stuttgart.de> References: <412CC269.8080907@rus.uni-stuttgart.de> <1093454747.1034.85.camel@jzny.localdomain> <4135A32A.4030901@rus.uni-stuttgart.de> Organization: DaveM Loft Enterprises X-Mailer: Sylpheed version 0.9.12 (GTK+ 1.2.10; sparc-unknown-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-archive-position: 8304 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: davem@davemloft.net Precedence: bulk X-list: netdev Content-Length: 594 Lines: 14 On Wed, 01 Sep 2004 12:23:38 +0200 Zhikui Chen wrote: > If I assign a value such as 0x ee9fbc00 to sk in dccp_rcv (before lookup > calling), and comment lookkup calling, I get a error report from > bh_lock_sock(sk) calling inside dccp_rcv, which error report is > spin_is_locked on uninitialized spinlock ee9fbc00, and spin_lock > (:ee9fbc00) already locked by /73. > > Do you know its reason? Thanks, Zhikui, are you working together with Arnaldo using his code base, like we suggested to you? Or are you working still on your own code? From janitor@sternwelten.at Wed Sep 1 13:49:25 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 13:49:30 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81KnOW9006538 for ; Wed, 1 Sep 2004 13:49:25 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 087725C065; Wed, 1 Sep 2004 22:49:14 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 19512-07; Wed, 1 Sep 2004 22:49:13 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id A22D75C008; Wed, 1 Sep 2004 22:49:13 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2c2d-00077g-Sz; Wed, 01 Sep 2004 22:49:15 +0200 Subject: [patch 1/1] remove old ifdefs dmascc To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 22:49:15 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8305 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 832 Lines: 28 Patches to remove some old ifdefs. remove most of the #include kill compat cruft like #define ahd_pci_set_dma_mask pci_set_dma_mask Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/hamradio/dmascc.c | 1 - 1 files changed, 1 deletion(-) diff -puN drivers/net/hamradio/dmascc.c~remove-old-ifdefs-dmascc drivers/net/hamradio/dmascc.c --- linux-2.6.9-rc1-bk7/drivers/net/hamradio/dmascc.c~remove-old-ifdefs-dmascc 2004-08-31 17:42:11.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/hamradio/dmascc.c 2004-08-31 17:42:11.000000000 +0200 @@ -37,7 +37,6 @@ #include #include #include -#include #include #include #include _ From janitor@sternwelten.at Wed Sep 1 14:03:08 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:03:13 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L372Z007121 for ; Wed, 1 Sep 2004 14:03:08 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id D225B5C065; Wed, 1 Sep 2004 23:02:57 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 19160-06; Wed, 1 Sep 2004 23:02:57 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id 3B3025C008; Wed, 1 Sep 2004 23:02:57 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cFv-0007nx-Fp; Wed, 01 Sep 2004 23:02:59 +0200 Subject: [patch 05/16] net/e100: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:02:59 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8310 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 2783 Lines: 93 I would appreciate any comments from the janitor@sternweltens list. This is one (of many) cases where I made a decision about replacing set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(some_time); with msleep(jiffies_to_msecs(some_time)); msleep() is not exactly the same as the previous code, but I only did this replacement where I thought long delays were *desired*. If this is not the case here, then just disregard this patch. Thanks, Nish Description: Replace schedule_timeout() with msleep() to guarantee the task delays for the desired time. Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/e100.c | 15 +++++---------- 1 files changed, 5 insertions(+), 10 deletions(-) diff -puN drivers/net/e100.c~msleep-drivers_net_e100 drivers/net/e100.c --- linux-2.6.9-rc1-bk7/drivers/net/e100.c~msleep-drivers_net_e100 2004-09-01 19:35:28.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/e100.c 2004-09-01 19:35:28.000000000 +0200 @@ -623,8 +623,7 @@ static int e100_self_test(struct nic *ni writel(selftest | dma_addr, &nic->csr->port); e100_write_flush(nic); /* Wait 10 msec for self-test to complete */ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 100 + 1); + msleep(10); /* Interrupts are enabled after self-test */ e100_disable_irq(nic); @@ -672,8 +671,7 @@ static void e100_eeprom_write(struct nic e100_write_flush(nic); udelay(4); } /* Wait 10 msec for cmd to complete */ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 100 + 1); + msleep(10); /* Chip deselect */ writeb(0, &nic->csr->eeprom_ctrl_lo); @@ -1758,8 +1756,7 @@ static int e100_loopback_test(struct nic memset(skb->data, 0xFF, ETH_DATA_LEN); e100_xmit_frame(skb, nic->netdev); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 100 + 1); + msleep(10); if(memcmp(nic->rx_to_clean->skb->data + sizeof(struct rfd), skb->data, ETH_DATA_LEN)) @@ -1845,8 +1842,7 @@ static void e100_get_regs(struct net_dev mdio_read(netdev, nic->mii.phy_id, i); memset(nic->mem->dump_buf, 0, sizeof(nic->mem->dump_buf)); e100_exec_cb(nic, NULL, e100_dump); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 100 + 1); + msleep(10); memcpy(&buff[2 + E100_PHY_REGS], nic->mem->dump_buf, sizeof(nic->mem->dump_buf)); } @@ -2020,8 +2016,7 @@ static int e100_phys_id(struct net_devic if(!data || data > (u32)(MAX_SCHEDULE_TIMEOUT / HZ)) data = (u32)(MAX_SCHEDULE_TIMEOUT / HZ); mod_timer(&nic->blink_timer, jiffies); - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(data * HZ); + msleep(data * 1000); del_timer_sync(&nic->blink_timer); mdio_write(netdev, nic->mii.phy_id, MII_LED_CONTROL, 0); _ From janitor@sternwelten.at Wed Sep 1 14:02:46 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:02:52 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L2j0l007089 for ; Wed, 1 Sep 2004 14:02:46 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id B08D95C065; Wed, 1 Sep 2004 23:02:35 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 19160-04; Wed, 1 Sep 2004 23:02:35 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id 3C3265C008; Wed, 1 Sep 2004 23:02:35 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cFZ-0007l7-Gh; Wed, 01 Sep 2004 23:02:37 +0200 Subject: [patch 01/16] __FUNCTION__ string concatenation To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:02:37 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8306 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1608 Lines: 43 I've replaced the __FUNCTION__ string concatenation with the %s placeholder and a printf parameter in drivers/net/wireless/prism65/islpci_mgt.h, as suggested in the TODO list. I don't have the hardware to do a run-time check. It should not pose any problems though. # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/07/04 22:08:37+02:00 drizzd@aon.at # __FUNCTION__ string concatenation is deprecated # # drivers/net/wireless/prism54/islpci_mgt.h # 2004/07/03 17:18:20+02:00 drizzd@aon.at +1 -1 # __FUNCTION__ string concatenation is deprecated # Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/wireless/prism54/islpci_mgt.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN drivers/net/wireless/prism54/islpci_mgt.h~printk-net_wireless_prism54_islpci_mgt.h drivers/net/wireless/prism54/islpci_mgt.h --- linux-2.6.9-rc1-bk7/drivers/net/wireless/prism54/islpci_mgt.h~printk-net_wireless_prism54_islpci_mgt.h 2004-09-01 19:34:23.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/wireless/prism54/islpci_mgt.h 2004-09-01 19:34:23.000000000 +0200 @@ -31,7 +31,7 @@ #define K_DEBUG(f, m, args...) do { if(f & m) printk(KERN_DEBUG args); } while(0) #define DEBUG(f, args...) K_DEBUG(f, pc_debug, args) -#define TRACE(devname) K_DEBUG(SHOW_TRACING, VERBOSE, "%s: -> " __FUNCTION__ "()\n", devname) +#define TRACE(devname) K_DEBUG(SHOW_TRACING, VERBOSE, "%s: -> %s()\n", devname, __FUNCTION__) extern int pc_debug; #define init_wds 0 /* help compiler optimize away dead code */ _ From janitor@sternwelten.at Wed Sep 1 14:02:51 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:02:57 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L2pwo007095 for ; Wed, 1 Sep 2004 14:02:51 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 2E21D5C066; Wed, 1 Sep 2004 23:02:41 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 26133-04; Wed, 1 Sep 2004 23:02:40 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id AEE925C008; Wed, 1 Sep 2004 23:02:40 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cFf-0007lp-03; Wed, 01 Sep 2004 23:02:43 +0200 Subject: [patch 02/16] net/3c505: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:02:42 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8307 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1440 Lines: 51 I would appreciate any comments from the janitor@sternweltens list. Thanks, Nish Description: Uses msleep() instead of schedule_timeout() so the task is guaranteed to delay the desired time. Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/3c505.c | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-) diff -puN drivers/net/3c505.c~msleep-drivers_net_3c505 drivers/net/3c505.c --- linux-2.6.9-rc1-bk7/drivers/net/3c505.c~msleep-drivers_net_3c505 2004-09-01 19:35:25.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/3c505.c 2004-09-01 19:35:25.000000000 +0200 @@ -1327,8 +1327,7 @@ static int __init elp_sense(struct net_d if (orig_HSR & DIR) { /* If HCR.DIR is up, we pull it down. HSR.DIR should follow. */ outb(0, dev->base_addr + PORT_CONTROL); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(30*HZ/100); + msleep(300); if (inb_status(addr) & DIR) { if (elp_debug > 0) printk(notfound_msg, 2); @@ -1337,8 +1336,7 @@ static int __init elp_sense(struct net_d } else { /* If HCR.DIR is down, we pull it up. HSR.DIR should follow. */ outb(DIR, dev->base_addr + PORT_CONTROL); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(30*HZ/100); + msleep(300); if (!(inb_status(addr) & DIR)) { if (elp_debug > 0) printk(notfound_msg, 3); _ From janitor@sternwelten.at Wed Sep 1 14:02:57 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:03:01 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L2ukq007103 for ; Wed, 1 Sep 2004 14:02:57 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id ABB7B5C066; Wed, 1 Sep 2004 23:02:46 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 19160-05; Wed, 1 Sep 2004 23:02:46 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id 3FC3C5C008; Wed, 1 Sep 2004 23:02:46 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cFk-0007mX-Fq; Wed, 01 Sep 2004 23:02:48 +0200 Subject: [patch 03/16] net/appletalk: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:02:48 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8308 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1299 Lines: 51 I would appreciate any comments from the janitor@sternweltens list. Thanks, Nish Description: Uses msleep() instead of schedule_timeout() so the task is guaranteed to delay the desired time. Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/appletalk/ltpc.c | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-) diff -puN drivers/net/appletalk/ltpc.c~msleep-drivers_net_appletalk_ltpc drivers/net/appletalk/ltpc.c --- linux-2.6.9-rc1-bk7/drivers/net/appletalk/ltpc.c~msleep-drivers_net_appletalk_ltpc 2004-09-01 19:35:26.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/appletalk/ltpc.c 2004-09-01 19:35:26.000000000 +0200 @@ -1109,8 +1109,7 @@ struct net_device * __init ltpc_probe(vo inb_p(io+1); inb_p(io+3); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(2*HZ/100); + msleep(20); inb_p(io+0); inb_p(io+2); @@ -1120,8 +1119,7 @@ struct net_device * __init ltpc_probe(vo inb_p(io+5); /* enable dma */ inb_p(io+6); /* tri-state interrupt line */ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ); + msleep(1000); /* now, figure out which dma channel we're using, unless it's already been specified */ _ From janitor@sternwelten.at Wed Sep 1 14:03:02 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:03:07 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L32RC007113 for ; Wed, 1 Sep 2004 14:03:02 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 376FC5C066; Wed, 1 Sep 2004 23:02:52 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 26133-05; Wed, 1 Sep 2004 23:02:51 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id BDA2B5C008; Wed, 1 Sep 2004 23:02:51 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cFp-0007nF-Vx; Wed, 01 Sep 2004 23:02:54 +0200 Subject: [patch 04/16] net/cs89x0: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:02:53 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8309 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1375 Lines: 52 I would appreciate any comments from the janitor@sternweltens list. This is one (of many) cases where I made a decision about replacing set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(some_time); with msleep(jiffies_to_msecs(some_time)); msleep() is not exactly the same as the previous code, but I only did this replacement where I thought long delays were *desired*. If this is not the case here, then just disregard this patch. Thanks, Nish Description: Replace schedule_timeout() with msleep() to guarantee the task delays for the desired time. Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/cs89x0.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) diff -puN drivers/net/cs89x0.c~msleep-drivers_net_cs89x0 drivers/net/cs89x0.c --- linux-2.6.9-rc1-bk7/drivers/net/cs89x0.c~msleep-drivers_net_cs89x0 2004-09-01 19:35:27.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/cs89x0.c 2004-09-01 19:35:27.000000000 +0200 @@ -891,8 +891,7 @@ void __init reset_chip(struct net_devic writereg(dev, PP_SelfCTL, readreg(dev, PP_SelfCTL) | POWER_ON_RESET); /* wait 30 ms */ - current->state = TASK_INTERRUPTIBLE; - schedule_timeout(30*HZ/1000); + msleep(30); if (lp->chip_type != CS8900) { /* Hardware problem requires PNP registers to be reconfigured after a reset */ _ From janitor@sternwelten.at Wed Sep 1 14:03:14 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:03:18 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L3DOU007127 for ; Wed, 1 Sep 2004 14:03:13 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 2D9985C067; Wed, 1 Sep 2004 23:03:03 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 26133-06; Wed, 1 Sep 2004 23:03:02 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id AA7EE5C008; Wed, 1 Sep 2004 23:03:02 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cG0-0007of-Vj; Wed, 01 Sep 2004 23:03:05 +0200 Subject: [patch 06/16] net/e1000_osdep: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:03:04 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8311 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1764 Lines: 59 On Tue, Jul 27, 2004 at 04:00:52AM +0100, Matthew Wilcox wrote: > On Mon, Jul 26, 2004 at 05:00:01PM -0700, Nishanth Aravamudan wrote: > > I would appreciate any comments from the janitor@sternweltens list. > > > > > > > > Description: Replace schedule_timeout() with msleep() to guarantee the > > task delays for the desired time. > > } else { \ > > - set_current_state(TASK_UNINTERRUPTIBLE); \ > > - schedule_timeout((x * HZ)/1000 + 2); \ > > + msleep(x); \ > > } } while(0) > > Looks much better than the previous code. It's actually possible to do > better, though. Simply change to: > > #define msec_delay(x) msleep(x) > > If msleep() ends up scheduling, the bad attempt to sleep will be caught > by schedule(). There's no need to do the check in the driver. Thanks for the tip and here is this change: Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/e1000/e1000_osdep.h | 8 +------- 1 files changed, 1 insertion(+), 7 deletions(-) diff -puN drivers/net/e1000/e1000_osdep.h~msleep-drivers_net_e1000_osdep drivers/net/e1000/e1000_osdep.h --- linux-2.6.9-rc1-bk7/drivers/net/e1000/e1000_osdep.h~msleep-drivers_net_e1000_osdep 2004-09-01 19:35:28.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/e1000/e1000_osdep.h 2004-09-01 19:35:28.000000000 +0200 @@ -42,13 +42,7 @@ #include #ifndef msec_delay -#define msec_delay(x) do { if(in_interrupt()) { \ - /* Don't mdelay in interrupt context! */ \ - BUG(); \ - } else { \ - set_current_state(TASK_UNINTERRUPTIBLE); \ - schedule_timeout((x * HZ)/1000 + 2); \ - } } while(0) +#define msec_delay(x) msleep(x) #endif #define PCI_COMMAND_REGISTER PCI_COMMAND _ From janitor@sternwelten.at Wed Sep 1 14:03:19 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:03:23 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L3Ivw007137 for ; Wed, 1 Sep 2004 14:03:19 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 9FFA55C068; Wed, 1 Sep 2004 23:03:08 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 19160-07; Wed, 1 Sep 2004 23:03:08 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id 3C4ED5C008; Wed, 1 Sep 2004 23:03:08 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cG6-0007pN-FM; Wed, 01 Sep 2004 23:03:10 +0200 Subject: [patch 07/16] net/ewrk3: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:03:10 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8312 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 938 Lines: 37 I would appreciate any comments from the janitor@sternweltens list. Description: Replace schedule_timeout() with msleep() to guarantee the task delays for the desired time. Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/ewrk3.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) diff -puN drivers/net/ewrk3.c~msleep-drivers_net_ewrk3 drivers/net/ewrk3.c --- linux-2.6.9-rc1-bk7/drivers/net/ewrk3.c~msleep-drivers_net_ewrk3 2004-09-01 19:35:29.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/ewrk3.c 2004-09-01 19:35:29.000000000 +0200 @@ -1681,8 +1681,7 @@ static int ewrk3_ethtool_ioctl(struct ne /* Wait a little while */ spin_unlock_irqrestore(&lp->hw_lock, flags); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ>>2); + msleep(250); spin_lock_irqsave(&lp->hw_lock, flags); /* Exit if we got a signal */ _ From janitor@sternwelten.at Wed Sep 1 14:03:25 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:03:29 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L3ObA007145 for ; Wed, 1 Sep 2004 14:03:24 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 67CE25C066; Wed, 1 Sep 2004 23:03:14 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 26133-07; Wed, 1 Sep 2004 23:03:14 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id B790E5C008; Wed, 1 Sep 2004 23:03:13 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cGB-0007q6-VQ; Wed, 01 Sep 2004 23:03:16 +0200 Subject: [patch 08/16] net/gt96100eth: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:03:15 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8313 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 3299 Lines: 109 I would appreciate any comments from the janitor@sternweltens list. This is one (of many) cases where I made a decision about replacing set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(some_time); with msleep(jiffies_to_msecs(some_time)); msleep() is not exactly the same as the previous code, but I only did this replacement where I thought long delays were *desired*. If this is not the case here, then just disregard this patch. Thanks, Nish PS. In this patch, the last delay is a bit confusing. It, in code, delayed for 1 msec, but the comment said 20 msecs, does anyone know which it should be? Description: Replace gt96100_delay() with msleep() to guarantee the task delays for the desired time. Remove the definition of gt96100_delay(). Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/gt96100eth.c | 19 ++++--------------- 1 files changed, 4 insertions(+), 15 deletions(-) diff -puN drivers/net/gt96100eth.c~msleep-drivers_net_gt96100eth drivers/net/gt96100eth.c --- linux-2.6.9-rc1-bk7/drivers/net/gt96100eth.c~msleep-drivers_net_gt96100eth 2004-09-01 19:35:29.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/gt96100eth.c 2004-09-01 19:35:29.000000000 +0200 @@ -59,7 +59,6 @@ // prototypes static void* dmaalloc(size_t size, dma_addr_t *dma_handle); static void dmafree(size_t size, void *vaddr); -static void gt96100_delay(int msec); static int gt96100_add_hash_entry(struct net_device *dev, unsigned char* addr); static void read_mib_counters(struct gt96100_private *gp); @@ -183,16 +182,6 @@ static void dmafree(size_t size, void *v free_pages((unsigned long)vaddr, get_order(size)); } -static void gt96100_delay(int ms) -{ - if (in_interrupt()) - return; - else { - current->state = TASK_INTERRUPTIBLE; - schedule_timeout(ms*HZ/1000); - } -} - static int parse_mac_addr(struct net_device *dev, char* macstr) { @@ -238,7 +227,7 @@ read_MII(int phy_addr, u32 reg) // wait for last operation to complete while (GT96100_READ(GT96100_ETH_SMI_REG) & smirBusy) { // snooze for 1 msec and check again - gt96100_delay(1); + msleep(1); if (--timedout == 0) { printk(KERN_ERR "%s: busy timeout!!\n", __FUNCTION__); @@ -252,7 +241,7 @@ read_MII(int phy_addr, u32 reg) // wait for read to complete while (!((smir = GT96100_READ(GT96100_ETH_SMI_REG)) & smirReadValid)) { // snooze for 1 msec and check again - gt96100_delay(1); + msleep(1); if (--timedout == 0) { printk(KERN_ERR "%s: timeout!!\n", __FUNCTION__); @@ -304,7 +293,7 @@ write_MII(int phy_addr, u32 reg, u16 dat // wait for last operation to complete while (GT96100_READ(GT96100_ETH_SMI_REG) & smirBusy) { // snooze for 1 msec and check again - gt96100_delay(1); + msleep(1); if (--timedout == 0) { printk(KERN_ERR "%s: busy timeout!!\n", __FUNCTION__); @@ -528,7 +517,7 @@ abort(struct net_device *dev, u32 abort_ // wait for abort to complete while (GT96100ETH_READ(gp, GT96100_ETH_SDMA_COMM) & abort_bits) { // snooze for 20 msec and check again - gt96100_delay(1); + msleep(20); // was gt96100_delay(1) -> should it be 20 or 1? if (--timedout == 0) { err("%s: timeout!!\n", __FUNCTION__); _ From janitor@sternwelten.at Wed Sep 1 14:03:30 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:03:35 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L3UFA007155 for ; Wed, 1 Sep 2004 14:03:30 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 16B385C065; Wed, 1 Sep 2004 23:03:20 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 19160-08; Wed, 1 Sep 2004 23:03:19 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id 407E75C008; Wed, 1 Sep 2004 23:03:19 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cGH-0007qo-Fw; Wed, 01 Sep 2004 23:03:21 +0200 Subject: [patch 09/16] ixgb/ixgb_osdep: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:03:21 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8314 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1197 Lines: 44 I would appreciate any comments from the janitor@sternweltens list. Description: Replace schedule_timeout() with msleep() to guarantee the task delays for the desired time. Redefine msec_delay(x) to directly call msleep(x). Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/ixgb/ixgb_osdep.h | 8 +------- 1 files changed, 1 insertion(+), 7 deletions(-) diff -puN drivers/net/ixgb/ixgb_osdep.h~msleep-drivers_net_ixgb_osdep drivers/net/ixgb/ixgb_osdep.h --- linux-2.6.9-rc1-bk7/drivers/net/ixgb/ixgb_osdep.h~msleep-drivers_net_ixgb_osdep 2004-09-01 19:35:34.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/ixgb/ixgb_osdep.h 2004-09-01 19:35:34.000000000 +0200 @@ -41,13 +41,7 @@ #include #ifndef msec_delay -#define msec_delay(x) do { if(in_interrupt()) { \ - /* Don't mdelay in interrupt context! */ \ - BUG(); \ - } else { \ - set_current_state(TASK_UNINTERRUPTIBLE); \ - schedule_timeout((x * HZ)/1000 + 2); \ - } } while(0) +#define msec_delay(x) msleep(x) #endif #define PCI_COMMAND_REGISTER PCI_COMMAND _ From janitor@sternwelten.at Wed Sep 1 14:03:35 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:03:39 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L3Z0C007170 for ; Wed, 1 Sep 2004 14:03:35 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 209A35C065; Wed, 1 Sep 2004 23:03:25 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 26133-08; Wed, 1 Sep 2004 23:03:24 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id A468B5C008; Wed, 1 Sep 2004 23:03:24 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cGN-0007rW-0B; Wed, 01 Sep 2004 23:03:27 +0200 Subject: [patch 10/16] net/mac89x0: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:03:26 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8315 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1387 Lines: 53 I would appreciate any comments from the janitor@sternweltens list. This is one (of many) cases where I made a decision about replacing set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(some_time); with msleep(jiffies_to_msecs(some_time)); msleep() is not exactly the same as the previous code, but I only did this replacement where I thought long delays were *desired*. If this is not the case here, then just disregard this patch. Thanks, Nish Description: Replace schedule_timeout() with msleep() to guarantee the task delays for the desired time. Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/mac89x0.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) diff -puN drivers/net/mac89x0.c~msleep-drivers_net_max89x0 drivers/net/mac89x0.c --- linux-2.6.9-rc1-bk7/drivers/net/mac89x0.c~msleep-drivers_net_max89x0 2004-09-01 19:35:34.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/mac89x0.c 2004-09-01 19:35:34.000000000 +0200 @@ -308,8 +308,7 @@ void __init reset_chip(struct net_device writereg(dev, PP_SelfCTL, readreg(dev, PP_SelfCTL) | POWER_ON_RESET); /* wait 30 ms */ - current->state = TASK_INTERRUPTIBLE; - schedule_timeout(30*HZ/1000); + msleep(30); /* Wait until the chip is reset */ reset_start_time = jiffies; _ From janitor@sternwelten.at Wed Sep 1 14:03:41 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:03:46 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L3ej7007189 for ; Wed, 1 Sep 2004 14:03:41 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 8A3A25C065; Wed, 1 Sep 2004 23:03:30 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 19160-09; Wed, 1 Sep 2004 23:03:30 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id 2119F5C008; Wed, 1 Sep 2004 23:03:30 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cGS-0007sE-Ej; Wed, 01 Sep 2004 23:03:32 +0200 Subject: [patch 11/16] net/ni65: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:03:32 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8316 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1021 Lines: 38 I would appreciate any comments from the janitor@sternweltens list. Description: Replace schedule_timeout() with msleep() to guarantee the task delays for the desired time. Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/ni65.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) diff -puN drivers/net/ni65.c~msleep-drivers_net_ni65 drivers/net/ni65.c --- linux-2.6.9-rc1-bk7/drivers/net/ni65.c~msleep-drivers_net_ni65 2004-09-01 19:35:35.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/ni65.c 2004-09-01 19:35:35.000000000 +0200 @@ -526,8 +526,7 @@ static int __init ni65_probe1(struct net ni65_init_lance(p,dev->dev_addr,0,0); irq_mask = probe_irq_on(); writereg(CSR0_INIT|CSR0_INEA,CSR0); /* trigger interrupt */ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ/50); + msleep(20); dev->irq = probe_irq_off(irq_mask); if(!dev->irq) { _ From janitor@sternwelten.at Wed Sep 1 14:03:46 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:03:52 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L3kMm007301 for ; Wed, 1 Sep 2004 14:03:46 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 0C0875C065; Wed, 1 Sep 2004 23:03:36 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 26133-09; Wed, 1 Sep 2004 23:03:35 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id 96E9C5C008; Wed, 1 Sep 2004 23:03:35 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cGX-0007sw-WC; Wed, 01 Sep 2004 23:03:38 +0200 Subject: [patch 12/16] net/ns83820: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:03:37 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8317 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1220 Lines: 45 On Tue, Jul 27, 2004 at 02:34:08PM -0400, Benjamin LaHaise wrote: > The commit message doesn't seem correspond to the actual patch. What > are you trying to "fix"? Thanks for catching this - it was another typo. Please find the corrected patch below. -Nish Description: Uses msleep() instead of schedule_timeout() to guarantee the task delays the desired time. Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/ns83820.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) diff -puN drivers/net/ns83820.c~msleep-drivers_net_ns83820 drivers/net/ns83820.c --- linux-2.6.9-rc1-bk7/drivers/net/ns83820.c~msleep-drivers_net_ns83820 2004-09-01 19:35:35.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/ns83820.c 2004-09-01 19:35:35.000000000 +0200 @@ -1960,8 +1960,7 @@ static int __devinit ns83820_init_one(st if (reset_phy) { printk(KERN_INFO "%s: resetting phy\n", ndev->name); writel(dev->CFG_cache | CFG_PHY_RST, dev->base + CFG); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout((HZ+99)/100); + msleep(10); writel(dev->CFG_cache, dev->base + CFG); } _ From janitor@sternwelten.at Wed Sep 1 14:03:52 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:04:00 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L3qlf007420 for ; Wed, 1 Sep 2004 14:03:52 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id ED3A75C065; Wed, 1 Sep 2004 23:03:41 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 19160-10; Wed, 1 Sep 2004 23:03:41 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id 1A0BB5C008; Wed, 1 Sep 2004 23:03:41 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cGd-0007te-EC; Wed, 01 Sep 2004 23:03:43 +0200 Subject: [patch 13/16] net/s2io.c: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:03:43 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8318 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 4651 Lines: 176 I would appreciate any comments from the janitor@sternweltens list. Description: Use msleep() instead of schedule_timeout() to guarantee the task delays for the desired time. Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/s2io.c | 45 +++++++++-------------------- 1 files changed, 15 insertions(+), 30 deletions(-) diff -puN drivers/net/s2io.c~msleep-drivers_net_s2io drivers/net/s2io.c --- linux-2.6.9-rc1-bk7/drivers/net/s2io.c~msleep-drivers_net_s2io 2004-09-01 19:35:36.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/s2io.c 2004-09-01 19:35:36.000000000 +0200 @@ -555,8 +555,7 @@ static int initNic(struct s2io_nic *nic) val64 = 0; writeq(val64, &bar0->sw_reset); val64 = readq(&bar0->sw_reset); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 2); + msleep(500); /* Enable Receiving broadcasts */ val64 = readq(&bar0->mac_cfg); @@ -803,8 +802,7 @@ static int initNic(struct s2io_nic *nic) dev->name); return -1; } - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 20); + msleep(50); time++; } @@ -838,8 +836,7 @@ static int initNic(struct s2io_nic *nic) return -1; } time++; - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 20); + msleep(50); } /* Initializing proper values as Pause threshold into all @@ -1182,8 +1179,7 @@ static int startNic(struct s2io_nic *nic writeq(val64, &bar0->mc_rldram_mrs); val64 = readq(&bar0->mc_rldram_mrs); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 10); /* Delay by around 100 ms. */ + msleep(100); /* Enabling ECC Protection. */ val64 = readq(&bar0->adapter_control); @@ -1891,8 +1887,7 @@ int waitForCmdComplete(nic_t * sp) ret = SUCCESS; break; } - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 20); + msleep(50); if (cnt++ > 10) break; } @@ -1931,15 +1926,13 @@ void s2io_reset(nic_t * sp) * As of now I'am just giving a 250ms delay and hoping that the * PCI write to sw_reset register is done by this time. */ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 4); + msleep(250); /* Restore the PCI state saved during initializarion. */ pci_restore_state(sp->pdev, sp->config_space); s2io_init_pci(sp); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 4); + msleep(250); /* SXE-002: Configure link and activity LED to turn it off */ subid = sp->pdev->subsystem_device; @@ -2157,8 +2150,7 @@ int s2io_close(struct net_device *dev) /* If the device tasklet is running, wait till its done before killing it */ while (atomic_read(&(sp->tasklet_status))) { - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 10); + msleep(100); } tasklet_kill(&sp->task); @@ -2169,8 +2161,7 @@ int s2io_close(struct net_device *dev) break; } - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 20); + msleep(50); cnt++; if (cnt == 10) { DBG_PRINT(ERR_DBG, @@ -2943,8 +2934,7 @@ static u32 readEeprom(nic_t * sp, int of data = I2C_CONTROL_GET_DATA(val64); break; } - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 20); + msleep(50); exit_cnt++; } @@ -2983,8 +2973,7 @@ static int writeEeprom(nic_t * sp, int o ret = 0; break; } - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 20); + msleep(50); exit_cnt++; } @@ -3256,8 +3245,7 @@ static int s2io_bistTest(nic_t * sp, uin ret = 0; break; } - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 10); + msleep(100); cnt++; } @@ -3356,8 +3344,7 @@ static int s2io_rldramTest(nic_t * sp, u val64 = readq(&bar0->mc_rldram_test_ctrl); if (val64 & MC_RLDRAM_TEST_DONE) break; - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 5); + msleep(200); } if (cnt == 5) @@ -3373,8 +3360,7 @@ static int s2io_rldramTest(nic_t * sp, u val64 = readq(&bar0->mc_rldram_test_ctrl); if (val64 & MC_RLDRAM_TEST_DONE) break; - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 2); + msleep(500); } if (cnt == 5) @@ -3711,8 +3697,7 @@ static void s2io_set_link(unsigned long /* Allow a small delay for the NICs self initiated * cleanup to complete. */ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ / 10); + msleep(100); val64 = readq(&bar0->adapter_status); if (verify_xena_quiescence(val64, nic->device_enabled_once)) { _ From janitor@sternwelten.at Wed Sep 1 14:03:58 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:04:06 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L3vCR007517 for ; Wed, 1 Sep 2004 14:03:58 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 122495C066; Wed, 1 Sep 2004 23:03:47 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 26133-10; Wed, 1 Sep 2004 23:03:46 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id 930D85C008; Wed, 1 Sep 2004 23:03:46 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cGi-0007uM-UH; Wed, 01 Sep 2004 23:03:49 +0200 Subject: [patch 14/16] net/ibmtr: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:03:48 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8319 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1505 Lines: 50 On Tue, Jul 27, 2004 at 01:43:32PM -0700, Nishanth Aravamudan wrote: > I would appreciate any comments from the janitor@sternweltens list. > > > > Description: Use msleep() instead of schedule_timeout() to guarantee > the task delays for the desired time. > > Signed-off-by: Nishanth Aravamudan The previous patch introduced extraneous whitespace, sorry. Thanks, Domen. Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/tokenring/ibmtr.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff -puN drivers/net/tokenring/ibmtr.c~msleep-drivers_net_tokenring_ibmtr drivers/net/tokenring/ibmtr.c --- linux-2.6.9-rc1-bk7/drivers/net/tokenring/ibmtr.c~msleep-drivers_net_tokenring_ibmtr 2004-09-01 19:35:37.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/tokenring/ibmtr.c 2004-09-01 19:35:37.000000000 +0200 @@ -108,6 +108,7 @@ in the event that chatty debug messages #define IBMTR_DEBUG_MESSAGES 0 #include +#include #ifdef PCMCIA /* required for ibmtr_cs.c to build */ #undef MODULE /* yes, really */ @@ -858,8 +859,7 @@ static int tok_init_card(struct net_devi writeb(~INT_ENABLE, ti->mmio + ACA_OFFSET + ACA_RESET + ISRP_EVEN); outb(0, PIOaddr + ADAPTRESET); - current->state=TASK_UNINTERRUPTIBLE; - schedule_timeout(TR_RST_TIME); /* wait 50ms */ + msleep(jiffies_to_msecs(TR_RST_TIME)); outb(0, PIOaddr + ADAPTRESETREL); #ifdef ENABLE_PAGING _ From janitor@sternwelten.at Wed Sep 1 14:04:04 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:04:12 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L42Bn007682 for ; Wed, 1 Sep 2004 14:04:03 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id A9D0C5C067; Wed, 1 Sep 2004 23:03:52 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 01102-01; Wed, 1 Sep 2004 23:03:52 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id 262A35C008; Wed, 1 Sep 2004 23:03:52 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cGo-0007v4-E1; Wed, 01 Sep 2004 23:03:54 +0200 Subject: [patch 15/16] tulip/de2104x: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:03:54 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8320 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 997 Lines: 38 I would appreciate any comments from the janitor@sternweltens list. Description: Use msleep() instead of schedule_timeout() to guarantee the task delays for the desired time. Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/tulip/de2104x.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) diff -puN drivers/net/tulip/de2104x.c~msleep-drivers_net_tulip_de2104x drivers/net/tulip/de2104x.c --- linux-2.6.9-rc1-bk7/drivers/net/tulip/de2104x.c~msleep-drivers_net_tulip_de2104x 2004-09-01 19:35:38.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/tulip/de2104x.c 2004-09-01 19:35:38.000000000 +0200 @@ -1208,8 +1208,7 @@ static void de_adapter_wake (struct de_p pci_write_config_dword(de->pdev, PCIPM, pmctl); /* de4x5.c delays, so we do too */ - current->state = TASK_UNINTERRUPTIBLE; - schedule_timeout(msecs_to_jiffies(10)); + msleep(10); } } _ From janitor@sternwelten.at Wed Sep 1 14:04:10 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:04:17 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L48SU007823 for ; Wed, 1 Sep 2004 14:04:09 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 85B5F5C008; Wed, 1 Sep 2004 23:03:58 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 01102-02; Wed, 1 Sep 2004 23:03:58 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id A00B65C068; Wed, 1 Sep 2004 23:03:57 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cGt-0007vm-Tz; Wed, 01 Sep 2004 23:04:00 +0200 Subject: [patch 16/16] parport/ieee1284_ops: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:03:59 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8321 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1477 Lines: 53 I would appreciate any comments from the janitor@sternweltens list. This is one (of many) cases where I made a decision about replacing set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(some_time); with msleep(jiffies_to_msecs(some_time)); msleep() is not exactly the same as the previous code, but I only did this replacement where I thought long delays were *desired*. If this is not the case here, then just disregard this patch. Thanks, Nish Description: Uses msleep() instead of schedule_timeout() to guarantee the task delays the desired time. Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/parport/ieee1284_ops.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) diff -puN drivers/parport/ieee1284_ops.c~msleep-drivers_parport_ieee1284_ops drivers/parport/ieee1284_ops.c --- linux-2.6.9-rc1-bk7/drivers/parport/ieee1284_ops.c~msleep-drivers_parport_ieee1284_ops 2004-09-01 19:35:41.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/parport/ieee1284_ops.c 2004-09-01 19:35:41.000000000 +0200 @@ -542,8 +542,7 @@ size_t parport_ieee1284_ecp_read_data (s /* Yield the port for a while. */ if (count && dev->port->irq != PARPORT_IRQ_NONE) { parport_release (dev); - __set_current_state (TASK_INTERRUPTIBLE); - schedule_timeout ((HZ + 24) / 25); + msleep(40); parport_claim_or_block (dev); } else _ From janitor@sternwelten.at Wed Sep 1 14:05:34 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:05:42 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L5Vfm009733 for ; Wed, 1 Sep 2004 14:05:32 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id D4AB75C065; Wed, 1 Sep 2004 23:05:21 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 01102-06; Wed, 1 Sep 2004 23:05:21 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id 6BB3A5C008; Wed, 1 Sep 2004 23:05:21 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cIF-0007yy-Lb; Wed, 01 Sep 2004 23:05:23 +0200 Subject: [patch 1/8] irda/act200l-sir: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, jt@hpl.hp.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:05:23 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8322 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1050 Lines: 38 I would appreciate any comments from the janitor@sternweltens list. Description: Replace schedule_timeout() with msleep() to guarantee the task delays for the desired time. Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/irda/act200l-sir.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) diff -puN drivers/net/irda/act200l-sir.c~msleep-drivers_net_irda_act200l-sir drivers/net/irda/act200l-sir.c --- linux-2.6.9-rc1-bk7/drivers/net/irda/act200l-sir.c~msleep-drivers_net_irda_act200l-sir 2004-09-01 19:35:31.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/irda/act200l-sir.c 2004-09-01 19:35:31.000000000 +0200 @@ -177,8 +177,7 @@ static int act200l_change_speed(struct s /* Write control bytes */ sirdev_raw_write(dev, control, 3); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(msecs_to_jiffies(5)); + msleep(5); /* Go back to normal mode */ sirdev_set_dtr_rts(dev, TRUE, TRUE); _ From janitor@sternwelten.at Wed Sep 1 14:05:38 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:05:44 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L5cWq009866 for ; Wed, 1 Sep 2004 14:05:38 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id AA92C5C066; Wed, 1 Sep 2004 23:05:27 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 04663-06; Wed, 1 Sep 2004 23:05:27 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id E40355C008; Wed, 1 Sep 2004 23:05:26 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cIL-0007zg-5D; Wed, 01 Sep 2004 23:05:29 +0200 Subject: [patch 2/8] irda/irtty-sir: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, jt@hpl.hp.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:05:28 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8323 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1258 Lines: 49 I would appreciate any comments from the janitor@sternweltens list. Description: Replace schedule_timeout() with msleep() to guarantee the task delays for the desired time. Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/irda/irtty-sir.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-) diff -puN drivers/net/irda/irtty-sir.c~msleep-drivers_net_irda_irtty-sir drivers/net/irda/irtty-sir.c --- linux-2.6.9-rc1-bk7/drivers/net/irda/irtty-sir.c~msleep-drivers_net_irda_irtty-sir 2004-09-01 19:35:31.000000000 +0200 +++ linux-2.6.9-rc1-bk7-max/drivers/net/irda/irtty-sir.c 2004-09-01 19:35:31.000000000 +0200 @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -96,10 +97,8 @@ static void irtty_wait_until_sent(struct tty->driver->wait_until_sent(tty, msecs_to_jiffies(100)); unlock_kernel(); } - else { - set_task_state(current, TASK_UNINTERRUPTIBLE); - schedule_timeout(msecs_to_jiffies(USBSERIAL_TX_DONE_DELAY)); - } + else + msleep(USBSERIAL_TX_DONE_DELAY); } /* _ From janitor@sternwelten.at Wed Sep 1 14:05:51 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Sep 2004 14:05:56 -0700 (PDT) Received: from baikonur.stro.at (baikonur.stro.at [213.239.196.228]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id i81L5mv8010060 for ; Wed, 1 Sep 2004 14:05:48 -0700 Received: from localhost (localhost [127.0.0.1]) by baikonur.stro.at (Postfix) with ESMTP id 5E4395C068; Wed, 1 Sep 2004 23:05:38 +0200 (CEST) Received: from baikonur.stro.at ([127.0.0.1]) by localhost (baikonur [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 04663-07; Wed, 1 Sep 2004 23:05:38 +0200 (CEST) Received: from sputnik (M830P021.adsl.highway.telekom.at [62.47.135.181]) by baikonur.stro.at (Postfix) with ESMTP id E49035C008; Wed, 1 Sep 2004 23:05:37 +0200 (CEST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sputnik with esmtp (Exim 4.34) id 1C2cIW-000816-6g; Wed, 01 Sep 2004 23:05:40 +0200 Subject: [patch 4/8] irda/sir_dev: replace schedule_timeout() with msleep() To: netdev@oss.sgi.com Cc: jgarzik@pobox.com, jt@hpl.hp.com, janitor@sternwelten.at From: janitor@sternwelten.at Date: Wed, 01 Sep 2004 23:05:39 +0200 Message-ID: X-Virus-Scanned: by Amavis (ClamAV) at stro.at X-archive-position: 8325 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: janitor@sternwelten.at Precedence: bulk X-list: netdev Content-Length: 1317 Lines: 46 I would appreciate any comments from the janitor@sternweltens list. Description: Replace schedule_timeout() with msleep() to guarantee the task delays for the desired time. Signed-off-by: Nishanth Aravamudan Signed-off-by: Maximilian Attems --- linux-2.6.9-rc1-bk7-max/drivers/net/irda/sir_dev.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff -puN drivers/net/irda/sir_dev.c~msleep-drivers_net_ir