linux/drivers/infiniband/core
Alexey Dobriyan c7d03a00b5 netns: make struct pernet_operations::id unsigned int
Make struct pernet_operations::id unsigned.

There are 2 reasons to do so:

1)
This field is really an index into an zero based array and
thus is unsigned entity. Using negative value is out-of-bound
access by definition.

2)
On x86_64 unsigned 32-bit data which are mixed with pointers
via array indexing or offsets added or subtracted to pointers
are preffered to signed 32-bit data.

"int" being used as an array index needs to be sign-extended
to 64-bit before being used.

	void f(long *p, int i)
	{
		g(p[i]);
	}

  roughly translates to

	movsx	rsi, esi
	mov	rdi, [rsi+...]
	call 	g

MOVSX is 3 byte instruction which isn't necessary if the variable is
unsigned because x86_64 is zero extending by default.

Now, there is net_generic() function which, you guessed it right, uses
"int" as an array index:

	static inline void *net_generic(const struct net *net, int id)
	{
		...
		ptr = ng->ptr[id - 1];
		...
	}

And this function is used a lot, so those sign extensions add up.

Patch snipes ~1730 bytes on allyesconfig kernel (without all junk
messing with code generation):

	add/remove: 0/0 grow/shrink: 70/598 up/down: 396/-2126 (-1730)

Unfortunately some functions actually grow bigger.
This is a semmingly random artefact of code generation with register
allocator being used differently. gcc decides that some variable
needs to live in new r8+ registers and every access now requires REX
prefix. Or it is shifted into r12, so [r12+0] addressing mode has to be
used which is longer than [r8]

However, overall balance is in negative direction:

	add/remove: 0/0 grow/shrink: 70/598 up/down: 396/-2126 (-1730)
	function                                     old     new   delta
	nfsd4_lock                                  3886    3959     +73
	tipc_link_build_proto_msg                   1096    1140     +44
	mac80211_hwsim_new_radio                    2776    2808     +32
	tipc_mon_rcv                                1032    1058     +26
	svcauth_gss_legacy_init                     1413    1429     +16
	tipc_bcbase_select_primary                   379     392     +13
	nfsd4_exchange_id                           1247    1260     +13
	nfsd4_setclientid_confirm                    782     793     +11
		...
	put_client_renew_locked                      494     480     -14
	ip_set_sockfn_get                            730     716     -14
	geneve_sock_add                              829     813     -16
	nfsd4_sequence_done                          721     703     -18
	nlmclnt_lookup_host                          708     686     -22
	nfsd4_lockt                                 1085    1063     -22
	nfs_get_client                              1077    1050     -27
	tcf_bpf_init                                1106    1076     -30
	nfsd4_encode_fattr                          5997    5930     -67
	Total: Before=154856051, After=154854321, chg -0.00%

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-11-18 10:59:15 -05:00
..
addr.c IB/addr: Remove deprecated create_singlethread_workqueue 2016-10-07 16:54:25 -04:00
agent.c IB: split struct ib_send_wr 2015-10-08 11:09:10 +01:00
agent.h IB/mad: Add final OPA MAD processing 2015-06-12 14:49:18 -04:00
cache.c IB/core: Fix no default GIDs when netdevice reregisters 2016-06-23 10:03:57 -04:00
cm_msgs.h IB/core: Fix unaligned accesses 2015-05-05 13:21:27 -04:00
cm.c IB/cm: Fix a recently introduced locking bug 2016-06-06 18:55:53 -04:00
cma_configfs.c configfs: switch ->default groups to a linked list 2016-03-06 16:11:24 +01:00
cma.c netns: make struct pernet_operations::id unsigned int 2016-11-18 10:59:15 -05:00
core_priv.h IB/core: Flip to the new dev walk API 2016-10-18 11:44:59 -04:00
cq.c IB: add a proper completion queue abstraction 2015-12-11 14:10:43 -08:00
device.c IB/core: Add get FW version string to the core 2016-06-23 12:08:33 -04:00
fmr_pool.c IB/core: trivial prink cleanup. 2016-03-03 10:20:25 -05:00
iwcm.c IB/iwcm: Remove deprecated create_singlethread_workqueue 2016-10-07 16:54:25 -04:00
iwcm.h iw_cm: free cm_id resources on the last deref 2016-08-02 13:15:18 -04:00
iwpm_msg.c RDMA/core: Fix indentation 2016-06-06 19:36:21 -04:00
iwpm_util.c Use smaller 512 byte messages for portmapper messages 2016-08-03 21:03:33 -04:00
iwpm_util.h iwpm: crash fix for large connections test 2016-03-16 13:48:32 -04:00
mad_priv.h IB/mad: use CQ abstraction 2016-01-19 15:25:45 -05:00
mad_rmpp.c IB/mad: Add final OPA MAD processing 2015-06-12 14:49:18 -04:00
mad_rmpp.h
mad.c IB/mad: Remove deprecated create_singlethread_workqueue 2016-10-07 16:54:23 -04:00
Makefile IB/SA: Integrate ib_sa module into ib_core module 2016-05-24 14:42:36 -04:00
mr_pool.c IB/core: add a simple MR pool 2016-05-13 13:37:18 -04:00
multicast.c Merge of primary rdma-core code for 4.9 2016-10-09 17:04:33 -07:00
netlink.c IB/core: Add flow control to the portmapper netlink calls 2016-08-02 13:14:27 -04:00
opa_smi.h IB: Add rdma_cap_ib_switch helper and use where appropriate 2015-07-14 13:20:08 -04:00
packer.c IB/core: trivial prink cleanup. 2016-03-03 10:20:25 -05:00
roce_gid_mgmt.c IB/core: Flip to the new dev walk API 2016-10-18 11:44:59 -04:00
rw.c IB/core, RDMA RW API: Do not exceed QP SGE send limit 2016-08-02 12:02:41 -04:00
sa_query.c IB/sa : Remove deprecated create_singlethread_workqueue 2016-10-07 16:54:22 -04:00
sa.h
smi.c IB: Add rdma_cap_ib_switch helper and use where appropriate 2015-07-14 13:20:08 -04:00
smi.h IB: Add rdma_cap_ib_switch helper and use where appropriate 2015-07-14 13:20:08 -04:00
sysfs.c IB/{core,hw}: Add constant for node_desc 2016-10-07 16:54:34 -04:00
ucm.c IB/security: Restrict use of the write() interface 2016-04-28 12:03:16 -04:00
ucma.c IB/ucma: Remove deprecated create_singlethread_workqueue 2016-10-07 16:54:24 -04:00
ud_header.c IB/core: trivial prink cleanup. 2016-03-03 10:20:25 -05:00
umem_odp.c mm: replace get_user_pages_remote() write/force parameters with gup_flags 2016-10-19 08:12:02 -07:00
umem_rbtree.c IB/core: Implement support for MMU notifiers regarding on demand paging regions 2014-12-15 18:13:36 -08:00
umem.c mm: replace get_user_pages() write/force parameters with gup_flags 2016-10-19 08:11:43 -07:00
user_mad.c IB/mad: pass ib_mad_send_buf explicitly to the recv_handler 2016-01-19 15:25:36 -05:00
uverbs_cmd.c IB/core: Add more fields to IPv6 flow specification 2016-10-07 16:54:18 -04:00
uverbs_main.c Merge branches 'misc' and 'rxe' into k.o/for-4.8-1 2016-08-04 11:13:47 -04:00
uverbs_marshall.c IB/core: Add gid_type to gid attribute 2015-12-23 10:35:10 -05:00
uverbs.h Merge branches 'misc' and 'rxe' into k.o/for-4.8-1 2016-08-04 11:13:47 -04:00
verbs.c IB/core: correctly handle rdma_rw_init_mrs() failure 2016-10-07 16:54:39 -04:00