Lines Matching refs:vif

35 static void xenvif_add_hash(struct xenvif *vif, const u8 *tag,  in xenvif_add_hash()  argument
50 spin_lock_irqsave(&vif->hash.cache.lock, flags); in xenvif_add_hash()
54 list_for_each_entry_rcu(entry, &vif->hash.cache.list, link) { in xenvif_add_hash()
64 new->seq = atomic_inc_return(&vif->hash.cache.seq); in xenvif_add_hash()
65 list_add_rcu(&new->link, &vif->hash.cache.list); in xenvif_add_hash()
67 if (++vif->hash.cache.count > xenvif_hash_cache_size) { in xenvif_add_hash()
69 vif->hash.cache.count--; in xenvif_add_hash()
74 spin_unlock_irqrestore(&vif->hash.cache.lock, flags); in xenvif_add_hash()
80 static u32 xenvif_new_hash(struct xenvif *vif, const u8 *data, in xenvif_new_hash() argument
85 val = xen_netif_toeplitz_hash(vif->hash.key, in xenvif_new_hash()
86 sizeof(vif->hash.key), in xenvif_new_hash()
90 xenvif_add_hash(vif, data, len, val); in xenvif_new_hash()
95 static void xenvif_flush_hash(struct xenvif *vif) in xenvif_flush_hash() argument
103 spin_lock_irqsave(&vif->hash.cache.lock, flags); in xenvif_flush_hash()
105 list_for_each_entry_rcu(entry, &vif->hash.cache.list, link) { in xenvif_flush_hash()
107 vif->hash.cache.count--; in xenvif_flush_hash()
111 spin_unlock_irqrestore(&vif->hash.cache.lock, flags); in xenvif_flush_hash()
114 static u32 xenvif_find_hash(struct xenvif *vif, const u8 *data, in xenvif_find_hash() argument
125 return xenvif_new_hash(vif, data, len); in xenvif_find_hash()
131 list_for_each_entry_rcu(entry, &vif->hash.cache.list, link) { in xenvif_find_hash()
135 entry->seq = atomic_inc_return(&vif->hash.cache.seq); in xenvif_find_hash()
144 val = xenvif_new_hash(vif, data, len); in xenvif_find_hash()
149 void xenvif_set_skb_hash(struct xenvif *vif, struct sk_buff *skb) in xenvif_set_skb_hash() argument
154 u32 flags = vif->hash.flags; in xenvif_set_skb_hash()
198 hash = xenvif_find_hash(vif, data, sizeof(data)); in xenvif_set_skb_hash()
206 hash = xenvif_find_hash(vif, data, sizeof(data)); in xenvif_set_skb_hash()
222 hash = xenvif_find_hash(vif, data, sizeof(data)); in xenvif_set_skb_hash()
230 hash = xenvif_find_hash(vif, data, sizeof(data)); in xenvif_set_skb_hash()
244 u32 xenvif_set_hash_alg(struct xenvif *vif, u32 alg) in xenvif_set_hash_alg() argument
255 vif->hash.alg = alg; in xenvif_set_hash_alg()
260 u32 xenvif_get_hash_flags(struct xenvif *vif, u32 *flags) in xenvif_get_hash_flags() argument
262 if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE) in xenvif_get_hash_flags()
273 u32 xenvif_set_hash_flags(struct xenvif *vif, u32 flags) in xenvif_set_hash_flags() argument
281 if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE) in xenvif_set_hash_flags()
284 vif->hash.flags = flags; in xenvif_set_hash_flags()
289 u32 xenvif_set_hash_key(struct xenvif *vif, u32 gref, u32 len) in xenvif_set_hash_key() argument
291 u8 *key = vif->hash.key; in xenvif_set_hash_key()
294 .source.domid = vif->domid, in xenvif_set_hash_key()
316 xenvif_flush_hash(vif); in xenvif_set_hash_key()
321 u32 xenvif_set_hash_mapping_size(struct xenvif *vif, u32 size) in xenvif_set_hash_mapping_size() argument
326 vif->hash.size = size; in xenvif_set_hash_mapping_size()
327 memset(vif->hash.mapping[vif->hash.mapping_sel], 0, in xenvif_set_hash_mapping_size()
333 u32 xenvif_set_hash_mapping(struct xenvif *vif, u32 gref, u32 len, in xenvif_set_hash_mapping() argument
336 u32 *mapping = vif->hash.mapping[!vif->hash.mapping_sel]; in xenvif_set_hash_mapping()
340 .source.domid = vif->domid, in xenvif_set_hash_mapping()
346 if ((off + len < off) || (off + len > vif->hash.size) || in xenvif_set_hash_mapping()
362 memcpy(mapping, vif->hash.mapping[vif->hash.mapping_sel], in xenvif_set_hash_mapping()
363 vif->hash.size * sizeof(*mapping)); in xenvif_set_hash_mapping()
374 if (mapping[off++] >= vif->num_queues) in xenvif_set_hash_mapping()
377 vif->hash.mapping_sel = !vif->hash.mapping_sel; in xenvif_set_hash_mapping()
383 void xenvif_dump_hash_info(struct xenvif *vif, struct seq_file *m) in xenvif_dump_hash_info() argument
387 switch (vif->hash.alg) { in xenvif_dump_hash_info()
399 if (vif->hash.flags) { in xenvif_dump_hash_info()
402 if (vif->hash.flags & XEN_NETIF_CTRL_HASH_TYPE_IPV4) in xenvif_dump_hash_info()
404 if (vif->hash.flags & XEN_NETIF_CTRL_HASH_TYPE_IPV4_TCP) in xenvif_dump_hash_info()
406 if (vif->hash.flags & XEN_NETIF_CTRL_HASH_TYPE_IPV6) in xenvif_dump_hash_info()
408 if (vif->hash.flags & XEN_NETIF_CTRL_HASH_TYPE_IPV6_TCP) in xenvif_dump_hash_info()
424 seq_printf(m, "%02x ", vif->hash.key[i]); in xenvif_dump_hash_info()
429 if (vif->hash.size != 0) { in xenvif_dump_hash_info()
430 const u32 *mapping = vif->hash.mapping[vif->hash.mapping_sel]; in xenvif_dump_hash_info()
434 for (i = 0; i < vif->hash.size; ) { in xenvif_dump_hash_info()
438 if (i + n >= vif->hash.size) in xenvif_dump_hash_info()
439 n = vif->hash.size - i; in xenvif_dump_hash_info()
452 void xenvif_init_hash(struct xenvif *vif) in xenvif_init_hash() argument
457 spin_lock_init(&vif->hash.cache.lock); in xenvif_init_hash()
458 INIT_LIST_HEAD(&vif->hash.cache.list); in xenvif_init_hash()
461 void xenvif_deinit_hash(struct xenvif *vif) in xenvif_deinit_hash() argument
463 xenvif_flush_hash(vif); in xenvif_deinit_hash()