| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *	Declarations of NET/ROM type objects. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *	Jonathan Naylor G4KLX	9/4/95 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _NETROM_H
 | 
					
						
							|  |  |  | #define _NETROM_H 
 | 
					
						
							| 
									
										
										
										
											2005-09-12 14:28:03 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <linux/netrom.h>
 | 
					
						
							|  |  |  | #include <linux/list.h>
 | 
					
						
							| 
									
										
											  
											
												include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
percpu.h is included by sched.h and module.h and thus ends up being
included when building most .c files.  percpu.h includes slab.h which
in turn includes gfp.h making everything defined by the two files
universally available and complicating inclusion dependencies.
percpu.h -> slab.h dependency is about to be removed.  Prepare for
this change by updating users of gfp and slab facilities include those
headers directly instead of assuming availability.  As this conversion
needs to touch large number of source files, the following script is
used as the basis of conversion.
  http://userweb.kernel.org/~tj/misc/slabh-sweep.py
The script does the followings.
* Scan files for gfp and slab usages and update includes such that
  only the necessary includes are there.  ie. if only gfp is used,
  gfp.h, if slab is used, slab.h.
* When the script inserts a new include, it looks at the include
  blocks and try to put the new include such that its order conforms
  to its surrounding.  It's put in the include block which contains
  core kernel includes, in the same order that the rest are ordered -
  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
  doesn't seem to be any matching order.
* If the script can't find a place to put a new include (mostly
  because the file doesn't have fitting include block), it prints out
  an error message indicating which .h file needs to be added to the
  file.
The conversion was done in the following steps.
1. The initial automatic conversion of all .c files updated slightly
   over 4000 files, deleting around 700 includes and adding ~480 gfp.h
   and ~3000 slab.h inclusions.  The script emitted errors for ~400
   files.
2. Each error was manually checked.  Some didn't need the inclusion,
   some needed manual addition while adding it to implementation .h or
   embedding .c file was more appropriate for others.  This step added
   inclusions to around 150 files.
3. The script was run again and the output was compared to the edits
   from #2 to make sure no file was left behind.
4. Several build tests were done and a couple of problems were fixed.
   e.g. lib/decompress_*.c used malloc/free() wrappers around slab
   APIs requiring slab.h to be added manually.
5. The script was run on all .h files but without automatically
   editing them as sprinkling gfp.h and slab.h inclusions around .h
   files could easily lead to inclusion dependency hell.  Most gfp.h
   inclusion directives were ignored as stuff from gfp.h was usually
   wildly available and often used in preprocessor macros.  Each
   slab.h inclusion directive was examined and added manually as
   necessary.
6. percpu.h was updated not to include slab.h.
7. Build test were done on the following configurations and failures
   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my
   distributed build env didn't work with gcov compiles) and a few
   more options had to be turned off depending on archs to make things
   build (like ipr on powerpc/64 which failed due to missing writeq).
   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
   * powerpc and powerpc64 SMP allmodconfig
   * sparc and sparc64 SMP allmodconfig
   * ia64 SMP allmodconfig
   * s390 SMP allmodconfig
   * alpha SMP allmodconfig
   * um on x86_64 SMP allmodconfig
8. percpu.h modifications were reverted so that it could be applied as
   a separate patch and serve as bisection point.
Given the fact that I had only a couple of failures from tests on step
6, I'm fairly confident about the coverage of this conversion patch.
If there is a breakage, it's likely to be something in one of the arch
headers which should be easily discoverable easily on most builds of
the specific arch.
Signed-off-by: Tejun Heo <tj@kernel.org>
Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
											
										 
											2010-03-24 17:04:11 +09:00
										 |  |  | #include <linux/slab.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <net/sock.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define	NR_NETWORK_LEN			15
 | 
					
						
							|  |  |  | #define	NR_TRANSPORT_LEN		5
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define	NR_PROTO_IP			0x0C
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define	NR_PROTOEXT			0x00
 | 
					
						
							|  |  |  | #define	NR_CONNREQ			0x01
 | 
					
						
							|  |  |  | #define	NR_CONNACK			0x02
 | 
					
						
							|  |  |  | #define	NR_DISCREQ			0x03
 | 
					
						
							|  |  |  | #define	NR_DISCACK			0x04
 | 
					
						
							|  |  |  | #define	NR_INFO				0x05
 | 
					
						
							|  |  |  | #define	NR_INFOACK			0x06
 | 
					
						
							| 
									
										
										
										
											2005-09-12 14:27:37 -07:00
										 |  |  | #define	NR_RESET			0x07
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define	NR_CHOKE_FLAG			0x80
 | 
					
						
							|  |  |  | #define	NR_NAK_FLAG			0x40
 | 
					
						
							|  |  |  | #define	NR_MORE_FLAG			0x20
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Define Link State constants. */ | 
					
						
							|  |  |  | enum { | 
					
						
							|  |  |  | 	NR_STATE_0, | 
					
						
							|  |  |  | 	NR_STATE_1, | 
					
						
							|  |  |  | 	NR_STATE_2, | 
					
						
							|  |  |  | 	NR_STATE_3 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define	NR_COND_ACK_PENDING		0x01
 | 
					
						
							|  |  |  | #define	NR_COND_REJECT			0x02
 | 
					
						
							|  |  |  | #define	NR_COND_PEER_RX_BUSY		0x04
 | 
					
						
							|  |  |  | #define	NR_COND_OWN_RX_BUSY		0x08
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-03 23:27:47 -07:00
										 |  |  | #define NR_DEFAULT_T1			120000		/* Outstanding frames - 120 seconds */
 | 
					
						
							|  |  |  | #define NR_DEFAULT_T2			5000		/* Response delay     - 5 seconds */
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #define NR_DEFAULT_N2			3		/* Number of Retries - 3 */
 | 
					
						
							| 
									
										
										
										
											2006-05-03 23:27:47 -07:00
										 |  |  | #define	NR_DEFAULT_T4			180000		/* Busy Delay - 180 seconds */
 | 
					
						
							|  |  |  | #define	NR_DEFAULT_IDLE			0		/* No Activity Timeout - none */
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #define	NR_DEFAULT_WINDOW		4		/* Default Window Size - 4 */
 | 
					
						
							|  |  |  | #define	NR_DEFAULT_OBS			6		/* Default Obsolescence Count - 6 */
 | 
					
						
							|  |  |  | #define	NR_DEFAULT_QUAL			10		/* Default Neighbour Quality - 10 */
 | 
					
						
							|  |  |  | #define	NR_DEFAULT_TTL			16		/* Default Time To Live - 16 */
 | 
					
						
							|  |  |  | #define	NR_DEFAULT_ROUTING		1		/* Is routing enabled ? */
 | 
					
						
							|  |  |  | #define	NR_DEFAULT_FAILS		2		/* Link fails until route fails */
 | 
					
						
							| 
									
										
										
										
											2005-09-12 14:27:37 -07:00
										 |  |  | #define	NR_DEFAULT_RESET		0		/* Sent / accept reset cmds? */
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define NR_MODULUS 			256
 | 
					
						
							|  |  |  | #define NR_MAX_WINDOW_SIZE		127			/* Maximum Window Allowable - 127 */
 | 
					
						
							|  |  |  | #define	NR_MAX_PACKET_SIZE		236			/* Maximum Packet Length - 236 */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct nr_sock { | 
					
						
							|  |  |  | 	struct sock		sock; | 
					
						
							|  |  |  | 	ax25_address		user_addr, source_addr, dest_addr; | 
					
						
							|  |  |  | 	struct net_device		*device; | 
					
						
							|  |  |  | 	unsigned char		my_index,   my_id; | 
					
						
							|  |  |  | 	unsigned char		your_index, your_id; | 
					
						
							|  |  |  | 	unsigned char		state, condition, bpqext, window; | 
					
						
							|  |  |  | 	unsigned short		vs, vr, va, vl; | 
					
						
							|  |  |  | 	unsigned char		n2, n2count; | 
					
						
							|  |  |  | 	unsigned long		t1, t2, t4, idle; | 
					
						
							|  |  |  | 	unsigned short		fraglen; | 
					
						
							|  |  |  | 	struct timer_list	t1timer; | 
					
						
							|  |  |  | 	struct timer_list	t2timer; | 
					
						
							|  |  |  | 	struct timer_list	t4timer; | 
					
						
							|  |  |  | 	struct timer_list	idletimer; | 
					
						
							|  |  |  | 	struct sk_buff_head	ack_queue; | 
					
						
							|  |  |  | 	struct sk_buff_head	reseq_queue; | 
					
						
							|  |  |  | 	struct sk_buff_head	frag_queue; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define nr_sk(sk) ((struct nr_sock *)(sk))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct nr_neigh { | 
					
						
							|  |  |  | 	struct hlist_node	neigh_node; | 
					
						
							|  |  |  | 	ax25_address		callsign; | 
					
						
							|  |  |  | 	ax25_digi		*digipeat; | 
					
						
							|  |  |  | 	ax25_cb			*ax25; | 
					
						
							|  |  |  | 	struct net_device	*dev; | 
					
						
							|  |  |  | 	unsigned char		quality; | 
					
						
							|  |  |  | 	unsigned char		locked; | 
					
						
							|  |  |  | 	unsigned short		count; | 
					
						
							|  |  |  | 	unsigned int		number; | 
					
						
							|  |  |  | 	unsigned char		failed; | 
					
						
							|  |  |  | 	atomic_t		refcount; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct nr_route { | 
					
						
							|  |  |  | 	unsigned char   quality; | 
					
						
							|  |  |  | 	unsigned char   obs_count; | 
					
						
							|  |  |  | 	struct nr_neigh *neighbour; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct nr_node { | 
					
						
							|  |  |  | 	struct hlist_node	node_node; | 
					
						
							|  |  |  | 	ax25_address		callsign; | 
					
						
							|  |  |  | 	char			mnemonic[7]; | 
					
						
							|  |  |  | 	unsigned char		which; | 
					
						
							|  |  |  | 	unsigned char		count; | 
					
						
							|  |  |  | 	struct nr_route		routes[3]; | 
					
						
							|  |  |  | 	atomic_t		refcount; | 
					
						
							|  |  |  | 	spinlock_t		node_lock; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************
 | 
					
						
							|  |  |  |  *	nr_node & nr_neigh lists, refcounting and locking | 
					
						
							|  |  |  |  *********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define nr_node_hold(__nr_node) \
 | 
					
						
							|  |  |  | 	atomic_inc(&((__nr_node)->refcount)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static __inline__ void nr_node_put(struct nr_node *nr_node) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (atomic_dec_and_test(&nr_node->refcount)) { | 
					
						
							|  |  |  | 		kfree(nr_node); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define nr_neigh_hold(__nr_neigh) \
 | 
					
						
							|  |  |  | 	atomic_inc(&((__nr_neigh)->refcount)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static __inline__ void nr_neigh_put(struct nr_neigh *nr_neigh) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (atomic_dec_and_test(&nr_neigh->refcount)) { | 
					
						
							| 
									
										
										
										
											2010-01-16 01:04:04 -08:00
										 |  |  | 		if (nr_neigh->ax25) | 
					
						
							|  |  |  | 			ax25_cb_put(nr_neigh->ax25); | 
					
						
							| 
									
										
										
										
											2005-10-28 16:53:13 -04:00
										 |  |  | 		kfree(nr_neigh->digipeat); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 		kfree(nr_neigh); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* nr_node_lock and nr_node_unlock also hold/put the node's refcounter.
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static __inline__ void nr_node_lock(struct nr_node *nr_node) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	nr_node_hold(nr_node); | 
					
						
							|  |  |  | 	spin_lock_bh(&nr_node->node_lock); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static __inline__ void nr_node_unlock(struct nr_node *nr_node) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	spin_unlock_bh(&nr_node->node_lock); | 
					
						
							|  |  |  | 	nr_node_put(nr_node); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												hlist: drop the node parameter from iterators
I'm not sure why, but the hlist for each entry iterators were conceived
        list_for_each_entry(pos, head, member)
The hlist ones were greedy and wanted an extra parameter:
        hlist_for_each_entry(tpos, pos, head, member)
Why did they need an extra pos parameter? I'm not quite sure. Not only
they don't really need it, it also prevents the iterator from looking
exactly like the list iterator, which is unfortunate.
Besides the semantic patch, there was some manual work required:
 - Fix up the actual hlist iterators in linux/list.h
 - Fix up the declaration of other iterators based on the hlist ones.
 - A very small amount of places were using the 'node' parameter, this
 was modified to use 'obj->member' instead.
 - Coccinelle didn't handle the hlist_for_each_entry_safe iterator
 properly, so those had to be fixed up manually.
The semantic patch which is mostly the work of Peter Senna Tschudin is here:
@@
iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;
type T;
expression a,c,d,e;
identifier b;
statement S;
@@
-T b;
    <+... when != b
(
hlist_for_each_entry(a,
- b,
c, d) S
|
hlist_for_each_entry_continue(a,
- b,
c) S
|
hlist_for_each_entry_from(a,
- b,
c) S
|
hlist_for_each_entry_rcu(a,
- b,
c, d) S
|
hlist_for_each_entry_rcu_bh(a,
- b,
c, d) S
|
hlist_for_each_entry_continue_rcu_bh(a,
- b,
c) S
|
for_each_busy_worker(a, c,
- b,
d) S
|
ax25_uid_for_each(a,
- b,
c) S
|
ax25_for_each(a,
- b,
c) S
|
inet_bind_bucket_for_each(a,
- b,
c) S
|
sctp_for_each_hentry(a,
- b,
c) S
|
sk_for_each(a,
- b,
c) S
|
sk_for_each_rcu(a,
- b,
c) S
|
sk_for_each_from
-(a, b)
+(a)
S
+ sk_for_each_from(a) S
|
sk_for_each_safe(a,
- b,
c, d) S
|
sk_for_each_bound(a,
- b,
c) S
|
hlist_for_each_entry_safe(a,
- b,
c, d, e) S
|
hlist_for_each_entry_continue_rcu(a,
- b,
c) S
|
nr_neigh_for_each(a,
- b,
c) S
|
nr_neigh_for_each_safe(a,
- b,
c, d) S
|
nr_node_for_each(a,
- b,
c) S
|
nr_node_for_each_safe(a,
- b,
c, d) S
|
- for_each_gfn_sp(a, c, d, b) S
+ for_each_gfn_sp(a, c, d) S
|
- for_each_gfn_indirect_valid_sp(a, c, d, b) S
+ for_each_gfn_indirect_valid_sp(a, c, d) S
|
for_each_host(a,
- b,
c) S
|
for_each_host_safe(a,
- b,
c, d) S
|
for_each_mesh_entry(a,
- b,
c, d) S
)
    ...+>
[akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]
[akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]
[akpm@linux-foundation.org: checkpatch fixes]
[akpm@linux-foundation.org: fix warnings]
[akpm@linux-foudnation.org: redo intrusive kvm changes]
Tested-by: Peter Senna Tschudin <peter.senna@gmail.com>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
											
										 
											2013-02-27 17:06:00 -08:00
										 |  |  | #define nr_neigh_for_each(__nr_neigh, list) \
 | 
					
						
							|  |  |  | 	hlist_for_each_entry(__nr_neigh, list, neigh_node) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												hlist: drop the node parameter from iterators
I'm not sure why, but the hlist for each entry iterators were conceived
        list_for_each_entry(pos, head, member)
The hlist ones were greedy and wanted an extra parameter:
        hlist_for_each_entry(tpos, pos, head, member)
Why did they need an extra pos parameter? I'm not quite sure. Not only
they don't really need it, it also prevents the iterator from looking
exactly like the list iterator, which is unfortunate.
Besides the semantic patch, there was some manual work required:
 - Fix up the actual hlist iterators in linux/list.h
 - Fix up the declaration of other iterators based on the hlist ones.
 - A very small amount of places were using the 'node' parameter, this
 was modified to use 'obj->member' instead.
 - Coccinelle didn't handle the hlist_for_each_entry_safe iterator
 properly, so those had to be fixed up manually.
The semantic patch which is mostly the work of Peter Senna Tschudin is here:
@@
iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;
type T;
expression a,c,d,e;
identifier b;
statement S;
@@
-T b;
    <+... when != b
(
hlist_for_each_entry(a,
- b,
c, d) S
|
hlist_for_each_entry_continue(a,
- b,
c) S
|
hlist_for_each_entry_from(a,
- b,
c) S
|
hlist_for_each_entry_rcu(a,
- b,
c, d) S
|
hlist_for_each_entry_rcu_bh(a,
- b,
c, d) S
|
hlist_for_each_entry_continue_rcu_bh(a,
- b,
c) S
|
for_each_busy_worker(a, c,
- b,
d) S
|
ax25_uid_for_each(a,
- b,
c) S
|
ax25_for_each(a,
- b,
c) S
|
inet_bind_bucket_for_each(a,
- b,
c) S
|
sctp_for_each_hentry(a,
- b,
c) S
|
sk_for_each(a,
- b,
c) S
|
sk_for_each_rcu(a,
- b,
c) S
|
sk_for_each_from
-(a, b)
+(a)
S
+ sk_for_each_from(a) S
|
sk_for_each_safe(a,
- b,
c, d) S
|
sk_for_each_bound(a,
- b,
c) S
|
hlist_for_each_entry_safe(a,
- b,
c, d, e) S
|
hlist_for_each_entry_continue_rcu(a,
- b,
c) S
|
nr_neigh_for_each(a,
- b,
c) S
|
nr_neigh_for_each_safe(a,
- b,
c, d) S
|
nr_node_for_each(a,
- b,
c) S
|
nr_node_for_each_safe(a,
- b,
c, d) S
|
- for_each_gfn_sp(a, c, d, b) S
+ for_each_gfn_sp(a, c, d) S
|
- for_each_gfn_indirect_valid_sp(a, c, d, b) S
+ for_each_gfn_indirect_valid_sp(a, c, d) S
|
for_each_host(a,
- b,
c) S
|
for_each_host_safe(a,
- b,
c, d) S
|
for_each_mesh_entry(a,
- b,
c, d) S
)
    ...+>
[akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]
[akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]
[akpm@linux-foundation.org: checkpatch fixes]
[akpm@linux-foundation.org: fix warnings]
[akpm@linux-foudnation.org: redo intrusive kvm changes]
Tested-by: Peter Senna Tschudin <peter.senna@gmail.com>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
											
										 
											2013-02-27 17:06:00 -08:00
										 |  |  | #define nr_neigh_for_each_safe(__nr_neigh, node2, list) \
 | 
					
						
							|  |  |  | 	hlist_for_each_entry_safe(__nr_neigh, node2, list, neigh_node) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												hlist: drop the node parameter from iterators
I'm not sure why, but the hlist for each entry iterators were conceived
        list_for_each_entry(pos, head, member)
The hlist ones were greedy and wanted an extra parameter:
        hlist_for_each_entry(tpos, pos, head, member)
Why did they need an extra pos parameter? I'm not quite sure. Not only
they don't really need it, it also prevents the iterator from looking
exactly like the list iterator, which is unfortunate.
Besides the semantic patch, there was some manual work required:
 - Fix up the actual hlist iterators in linux/list.h
 - Fix up the declaration of other iterators based on the hlist ones.
 - A very small amount of places were using the 'node' parameter, this
 was modified to use 'obj->member' instead.
 - Coccinelle didn't handle the hlist_for_each_entry_safe iterator
 properly, so those had to be fixed up manually.
The semantic patch which is mostly the work of Peter Senna Tschudin is here:
@@
iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;
type T;
expression a,c,d,e;
identifier b;
statement S;
@@
-T b;
    <+... when != b
(
hlist_for_each_entry(a,
- b,
c, d) S
|
hlist_for_each_entry_continue(a,
- b,
c) S
|
hlist_for_each_entry_from(a,
- b,
c) S
|
hlist_for_each_entry_rcu(a,
- b,
c, d) S
|
hlist_for_each_entry_rcu_bh(a,
- b,
c, d) S
|
hlist_for_each_entry_continue_rcu_bh(a,
- b,
c) S
|
for_each_busy_worker(a, c,
- b,
d) S
|
ax25_uid_for_each(a,
- b,
c) S
|
ax25_for_each(a,
- b,
c) S
|
inet_bind_bucket_for_each(a,
- b,
c) S
|
sctp_for_each_hentry(a,
- b,
c) S
|
sk_for_each(a,
- b,
c) S
|
sk_for_each_rcu(a,
- b,
c) S
|
sk_for_each_from
-(a, b)
+(a)
S
+ sk_for_each_from(a) S
|
sk_for_each_safe(a,
- b,
c, d) S
|
sk_for_each_bound(a,
- b,
c) S
|
hlist_for_each_entry_safe(a,
- b,
c, d, e) S
|
hlist_for_each_entry_continue_rcu(a,
- b,
c) S
|
nr_neigh_for_each(a,
- b,
c) S
|
nr_neigh_for_each_safe(a,
- b,
c, d) S
|
nr_node_for_each(a,
- b,
c) S
|
nr_node_for_each_safe(a,
- b,
c, d) S
|
- for_each_gfn_sp(a, c, d, b) S
+ for_each_gfn_sp(a, c, d) S
|
- for_each_gfn_indirect_valid_sp(a, c, d, b) S
+ for_each_gfn_indirect_valid_sp(a, c, d) S
|
for_each_host(a,
- b,
c) S
|
for_each_host_safe(a,
- b,
c, d) S
|
for_each_mesh_entry(a,
- b,
c, d) S
)
    ...+>
[akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]
[akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]
[akpm@linux-foundation.org: checkpatch fixes]
[akpm@linux-foundation.org: fix warnings]
[akpm@linux-foudnation.org: redo intrusive kvm changes]
Tested-by: Peter Senna Tschudin <peter.senna@gmail.com>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
											
										 
											2013-02-27 17:06:00 -08:00
										 |  |  | #define nr_node_for_each(__nr_node, list) \
 | 
					
						
							|  |  |  | 	hlist_for_each_entry(__nr_node, list, node_node) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												hlist: drop the node parameter from iterators
I'm not sure why, but the hlist for each entry iterators were conceived
        list_for_each_entry(pos, head, member)
The hlist ones were greedy and wanted an extra parameter:
        hlist_for_each_entry(tpos, pos, head, member)
Why did they need an extra pos parameter? I'm not quite sure. Not only
they don't really need it, it also prevents the iterator from looking
exactly like the list iterator, which is unfortunate.
Besides the semantic patch, there was some manual work required:
 - Fix up the actual hlist iterators in linux/list.h
 - Fix up the declaration of other iterators based on the hlist ones.
 - A very small amount of places were using the 'node' parameter, this
 was modified to use 'obj->member' instead.
 - Coccinelle didn't handle the hlist_for_each_entry_safe iterator
 properly, so those had to be fixed up manually.
The semantic patch which is mostly the work of Peter Senna Tschudin is here:
@@
iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;
type T;
expression a,c,d,e;
identifier b;
statement S;
@@
-T b;
    <+... when != b
(
hlist_for_each_entry(a,
- b,
c, d) S
|
hlist_for_each_entry_continue(a,
- b,
c) S
|
hlist_for_each_entry_from(a,
- b,
c) S
|
hlist_for_each_entry_rcu(a,
- b,
c, d) S
|
hlist_for_each_entry_rcu_bh(a,
- b,
c, d) S
|
hlist_for_each_entry_continue_rcu_bh(a,
- b,
c) S
|
for_each_busy_worker(a, c,
- b,
d) S
|
ax25_uid_for_each(a,
- b,
c) S
|
ax25_for_each(a,
- b,
c) S
|
inet_bind_bucket_for_each(a,
- b,
c) S
|
sctp_for_each_hentry(a,
- b,
c) S
|
sk_for_each(a,
- b,
c) S
|
sk_for_each_rcu(a,
- b,
c) S
|
sk_for_each_from
-(a, b)
+(a)
S
+ sk_for_each_from(a) S
|
sk_for_each_safe(a,
- b,
c, d) S
|
sk_for_each_bound(a,
- b,
c) S
|
hlist_for_each_entry_safe(a,
- b,
c, d, e) S
|
hlist_for_each_entry_continue_rcu(a,
- b,
c) S
|
nr_neigh_for_each(a,
- b,
c) S
|
nr_neigh_for_each_safe(a,
- b,
c, d) S
|
nr_node_for_each(a,
- b,
c) S
|
nr_node_for_each_safe(a,
- b,
c, d) S
|
- for_each_gfn_sp(a, c, d, b) S
+ for_each_gfn_sp(a, c, d) S
|
- for_each_gfn_indirect_valid_sp(a, c, d, b) S
+ for_each_gfn_indirect_valid_sp(a, c, d) S
|
for_each_host(a,
- b,
c) S
|
for_each_host_safe(a,
- b,
c, d) S
|
for_each_mesh_entry(a,
- b,
c, d) S
)
    ...+>
[akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]
[akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]
[akpm@linux-foundation.org: checkpatch fixes]
[akpm@linux-foundation.org: fix warnings]
[akpm@linux-foudnation.org: redo intrusive kvm changes]
Tested-by: Peter Senna Tschudin <peter.senna@gmail.com>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
											
										 
											2013-02-27 17:06:00 -08:00
										 |  |  | #define nr_node_for_each_safe(__nr_node, node2, list) \
 | 
					
						
							|  |  |  | 	hlist_for_each_entry_safe(__nr_node, node2, list, node_node) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* af_netrom.c */ | 
					
						
							|  |  |  | extern int  sysctl_netrom_default_path_quality; | 
					
						
							|  |  |  | extern int  sysctl_netrom_obsolescence_count_initialiser; | 
					
						
							|  |  |  | extern int  sysctl_netrom_network_ttl_initialiser; | 
					
						
							|  |  |  | extern int  sysctl_netrom_transport_timeout; | 
					
						
							|  |  |  | extern int  sysctl_netrom_transport_maximum_tries; | 
					
						
							|  |  |  | extern int  sysctl_netrom_transport_acknowledge_delay; | 
					
						
							|  |  |  | extern int  sysctl_netrom_transport_busy_delay; | 
					
						
							|  |  |  | extern int  sysctl_netrom_transport_requested_window_size; | 
					
						
							|  |  |  | extern int  sysctl_netrom_transport_no_activity_timeout; | 
					
						
							|  |  |  | extern int  sysctl_netrom_routing_control; | 
					
						
							|  |  |  | extern int  sysctl_netrom_link_fails_count; | 
					
						
							| 
									
										
										
										
											2005-09-12 14:27:37 -07:00
										 |  |  | extern int  sysctl_netrom_reset_circuit; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | int nr_rx_frame(struct sk_buff *, struct net_device *); | 
					
						
							|  |  |  | void nr_destroy_socket(struct sock *); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* nr_dev.c */ | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | int nr_rx_ip(struct sk_buff *, struct net_device *); | 
					
						
							|  |  |  | void nr_setup(struct net_device *); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* nr_in.c */ | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | int nr_process_rx_frame(struct sock *, struct sk_buff *); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* nr_loopback.c */ | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | void nr_loopback_init(void); | 
					
						
							|  |  |  | void nr_loopback_clear(void); | 
					
						
							|  |  |  | int nr_loopback_queue(struct sk_buff *); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* nr_out.c */ | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | void nr_output(struct sock *, struct sk_buff *); | 
					
						
							|  |  |  | void nr_send_nak_frame(struct sock *); | 
					
						
							|  |  |  | void nr_kick(struct sock *); | 
					
						
							|  |  |  | void nr_transmit_buffer(struct sock *, struct sk_buff *); | 
					
						
							|  |  |  | void nr_establish_data_link(struct sock *); | 
					
						
							|  |  |  | void nr_enquiry_response(struct sock *); | 
					
						
							|  |  |  | void nr_check_iframes_acked(struct sock *, unsigned short); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* nr_route.c */ | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | void nr_rt_device_down(struct net_device *); | 
					
						
							|  |  |  | struct net_device *nr_dev_first(void); | 
					
						
							|  |  |  | struct net_device *nr_dev_get(ax25_address *); | 
					
						
							|  |  |  | int nr_rt_ioctl(unsigned int, void __user *); | 
					
						
							|  |  |  | void nr_link_failed(ax25_cb *, int); | 
					
						
							|  |  |  | int nr_route_frame(struct sk_buff *, ax25_cb *); | 
					
						
							| 
									
										
										
										
											2007-02-12 00:55:28 -08:00
										 |  |  | extern const struct file_operations nr_nodes_fops; | 
					
						
							|  |  |  | extern const struct file_operations nr_neigh_fops; | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | void nr_rt_free(void); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* nr_subr.c */ | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | void nr_clear_queues(struct sock *); | 
					
						
							|  |  |  | void nr_frames_acked(struct sock *, unsigned short); | 
					
						
							|  |  |  | void nr_requeue_frames(struct sock *); | 
					
						
							|  |  |  | int nr_validate_nr(struct sock *, unsigned short); | 
					
						
							|  |  |  | int nr_in_rx_window(struct sock *, unsigned short); | 
					
						
							|  |  |  | void nr_write_internal(struct sock *, int); | 
					
						
							| 
									
										
										
										
											2005-09-12 14:27:37 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | void __nr_transmit_reply(struct sk_buff *skb, int mine, unsigned char cmdflags); | 
					
						
							| 
									
										
										
										
											2005-09-12 14:27:37 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * This routine is called when a Connect Acknowledge with the Choke Flag | 
					
						
							|  |  |  |  * set is needed to refuse a connection. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define nr_transmit_refusal(skb, mine)					\
 | 
					
						
							|  |  |  | do {									\ | 
					
						
							|  |  |  | 	__nr_transmit_reply((skb), (mine), NR_CONNACK | NR_CHOKE_FLAG);	\ | 
					
						
							|  |  |  | } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * This routine is called when we don't have a circuit matching an incoming | 
					
						
							|  |  |  |  * NET/ROM packet.  This is an G8PZT Xrouter extension. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define nr_transmit_reset(skb, mine)					\
 | 
					
						
							|  |  |  | do {									\ | 
					
						
							|  |  |  | 	__nr_transmit_reply((skb), (mine), NR_RESET);			\ | 
					
						
							|  |  |  | } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | void nr_disconnect(struct sock *, int); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* nr_timer.c */ | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | void nr_init_timers(struct sock *sk); | 
					
						
							|  |  |  | void nr_start_heartbeat(struct sock *); | 
					
						
							|  |  |  | void nr_start_t1timer(struct sock *); | 
					
						
							|  |  |  | void nr_start_t2timer(struct sock *); | 
					
						
							|  |  |  | void nr_start_t4timer(struct sock *); | 
					
						
							|  |  |  | void nr_start_idletimer(struct sock *); | 
					
						
							|  |  |  | void nr_stop_heartbeat(struct sock *); | 
					
						
							|  |  |  | void nr_stop_t1timer(struct sock *); | 
					
						
							|  |  |  | void nr_stop_t2timer(struct sock *); | 
					
						
							|  |  |  | void nr_stop_t4timer(struct sock *); | 
					
						
							|  |  |  | void nr_stop_idletimer(struct sock *); | 
					
						
							|  |  |  | int nr_t1timer_running(struct sock *); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* sysctl_net_netrom.c */ | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:51 -07:00
										 |  |  | void nr_register_sysctl(void); | 
					
						
							|  |  |  | void nr_unregister_sysctl(void); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif
 |