summaryrefslogtreecommitdiffstats
path: root/src/vlibmemory
AgeCommit message (Expand)AuthorFilesLines
2019-01-02Fixes for buliding for 32bit targets:David Johnson1-4/+4
2018-12-31binary api clients: wait for vpp to startDave Barach1-0/+29
2018-12-22bapi/vat: fix socket transport for vatFlorin Coras1-2/+9
2018-12-05bapi: add options to have vpp cleanup client registrationFlorin Coras4-20/+28
2018-12-03vcl: handle worker process exitFlorin Coras2-7/+15
2018-12-01Delete shared memory segment files when vpp startsDave Barach1-0/+22
2018-11-18Complain if a client binary API queue is fullDave Barach1-0/+8
2018-11-14Remove c-11 memcpy checks from perf-critical codeDave Barach3-5/+5
2018-11-13vlib rename vlib_frame_args(...) to vlib_frame_scalar_args(..)Damjan Marion1-2/+2
2018-11-01Move RPC calls off the binary API input queueDave Barach3-29/+50
2018-10-25Revert "Keep RPC traffic off the shared-memory API queue"Florin Coras3-38/+29
2018-10-24Keep RPC traffic off the shared-memory API queueDave Barach3-29/+38
2018-10-23c11 safe string handling supportDave Barach7-30/+30
2018-10-03sock api: fix registrations and client readsFlorin Coras5-28/+69
2018-10-02PAPI: Use UNIX domain sockets instead of shared memoryOle Troan5-39/+94
2018-09-19socket api: do not delay sending of messagesFlorin Coras2-64/+35
2018-09-11remove libvlib from libvlibmemoryclient libsMatthew Smith1-1/+1
2018-08-26cmake: add add_vpp_library and add_vpp_executable macrosDamjan Marion1-14/+13
2018-08-25cmake: add more headers to the install listDamjan Marion1-0/+11
2018-08-20CMake: generate .json from .api filesNeale Ranns1-2/+3
2018-08-17CMake as an alternative to autotools (experimental)Damjan Marion1-0/+41
2018-08-17vlibapi: validate private segment rotor prior to useFlorin Coras1-1/+1
2018-08-15Remove client_index field from replies in APIOndrej Fabry1-2/+0
2018-08-10vcl: support for eventfd mq signalingFlorin Coras1-2/+2
2018-08-09Fix "Old Style VLA" build warningsJuraj Sloboda1-2/+3
2018-08-07api: compute msg table for private registrationsFlorin Coras1-2/+7
2018-08-04socket api: multiple fds in one msgFlorin Coras5-20/+22
2018-08-03svm: add support for eventfd signaling to queueFlorin Coras2-11/+9
2018-07-05VPP-1335 vapi crash when memclnt_keepalive receivedKlement Sekera1-4/+4
2018-06-27gcc8 and Wstringop-truncationMarco Varlese1-4/+6
2018-06-26Fix api trace replay of handler to pass vm parameterJohn Lo1-2/+2
2018-06-14Use __attribute__((weak)) references where necessaryDave Barach1-5/+1
2018-06-08export counters in a memfd segmentDave Barach2-6/+16
2018-06-05VPP API: Memory traceOle Troan2-16/+28
2018-05-10Remove the historical memfd api segment bootstrapDave Barach2-88/+28
2018-04-18typo fix: UNKOWN -> UNKNOWNAndrey "Zed" Zaikin1-1/+1
2018-03-06API: Add service definitions for events and singleton messages (second attempt)Marek Gradzki1-0/+10
2018-03-05Revert "API: Add service definitions for events and singleton messages."Ole Trøan1-10/+0
2018-03-05API: Add service definitions for events and singleton messages.Ole Troan1-0/+10
2018-02-02vlmemory/svm: fix client detach from svm regionFlorin Coras4-8/+23
2018-01-25session: add support for memfd segmentsFlorin Coras11-86/+219
2018-01-23VPPAPIGEN: vppapigen replacement in Python PLY.Ole Troan1-1/+1
2018-01-22svm: queue sub: Add conditional timed waitMohsin Kazmi2-3/+3
2018-01-15svm: refactor memfd and remove ssvm_ethFlorin Coras5-12/+15
2018-01-11api: fix handlers that explicitly depend on svm queueFlorin Coras3-0/+16
2018-01-11api: remove transport specific code from handlersFlorin Coras1-4/+4
2018-01-10svm: calc base address on AArch64 based on autodetected VA space sizeDamjan Marion1-1/+1
2018-01-09api: refactor vlibmemoryFlorin Coras17-3718/+3400
2018-01-05sock api: add first msg id retrieval functionFlorin Coras2-17/+39
2018-01-05sock api: add infra for bootstrapping shm clientsFlorin Coras6-151/+514
u32x4_sub (kv->kb.k_u32x4[0], key[0]); diff1 = u32x4_sub (kv->kb.k_u32x4[1], key[0]); diff2 = u32x4_sub (kv->kb.k_u32x4[2], key[0]); no_match = is_equal0 = (i16) u32x4_zero_byte_mask (diff0); is_equal1 = (i16) u32x4_zero_byte_mask (diff1); no_match |= is_equal1; is_equal2 = (i16) u32x4_zero_byte_mask (diff2); no_match |= is_equal2; /* If any of the three items matched, no_match will be zero after this line */ no_match = ~no_match; rv = (is_equal0 & kv->values[0]) | (is_equal1 & kv->values[1]) | (is_equal2 & kv->values[2]) | no_match; return rv; } static inline u32 pfhash_search_kv_8 (pfhash_t * p, u32 bucket_contents, u64 * key) { pfhash_kv_8_t *kv; u32 rv = (u32) ~ 0; if (PREDICT_FALSE (bucket_contents == PFHASH_BUCKET_OVERFLOW)) { uword *hp; hp = hash_get_mem (p->overflow_hash, key); if (hp) return hp[0]; return (u32) ~ 0; } kv = &p->kvp[bucket_contents].kv8; rv = (kv->kb.k_u64[0] == key[0]) ? kv->values[0] : rv; rv = (kv->kb.k_u64[1] == key[0]) ? kv->values[1] : rv; rv = (kv->kb.k_u64[2] == key[0]) ? kv->values[2] : rv; rv = (kv->kb.k_u64[3] == key[0]) ? kv->values[3] : rv; rv = (kv->kb.k_u64[4] == key[0]) ? kv->values[4] : rv; return rv; } static inline u64 pfhash_search_kv_8v8 (pfhash_t * p, u32 bucket_contents, u64 * key) { pfhash_kv_8v8_t *kv; u64 rv = (u64) ~ 0; if (PREDICT_FALSE (bucket_contents == PFHASH_BUCKET_OVERFLOW)) { uword *hp; hp = hash_get_mem (p->overflow_hash, key); if (hp) return hp[0]; return (u64) ~ 0; } kv = &p->kvp[bucket_contents].kv8v8; rv = (kv->kb.k_u64[0] == key[0]) ? kv->values[0] : rv; rv = (kv->kb.k_u64[1] == key[0]) ? kv->values[1] : rv; rv = (kv->kb.k_u64[2] == key[0]) ? kv->values[2] : rv; rv = (kv->kb.k_u64[3] == key[0]) ? kv->values[3] : rv; return rv; } static inline u32 pfhash_search_kv_4 (pfhash_t * p, u32 bucket_contents, u32 * key) { u32x4 vector_key; u32x4 is_equal[2]; u32 zbm[2], winner_index; pfhash_kv_4_t *kv; if (PREDICT_FALSE (bucket_contents == PFHASH_BUCKET_OVERFLOW)) { uword *hp; hp = hash_get_mem (p->overflow_hash, key); if (hp) return hp[0]; return (u32) ~ 0; } kv = &p->kvp[bucket_contents].kv4; vector_key = u32x4_splat (key[0]); is_equal[0] = (kv->kb.k_u32x4[0] == vector_key); is_equal[1] = (kv->kb.k_u32x4[1] == vector_key); zbm[0] = ~u32x4_zero_byte_mask (is_equal[0]) & 0xFFFF; zbm[1] = ~u32x4_zero_byte_mask (is_equal[1]) & 0xFFFF; if (PREDICT_FALSE ((zbm[0] == 0) && (zbm[1] == 0))) return (u32) ~ 0; winner_index = min_log2 (zbm[0]) >> 2; winner_index = zbm[1] ? (4 + (min_log2 (zbm[1]) >> 2)) : winner_index; return kv->values[winner_index]; } #endif /* CLIB_HAVE_VEC128 */ #endif /* included_clib_pfhash_h */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */