aboutsummaryrefslogtreecommitdiffstats
path: root/src/vlib
AgeCommit message (Expand)AuthorFilesLines
2018-12-19vlib: support Hyper-v/Azure VMBusStephen Hemminger4-1/+518
2018-12-18STATS: add vlib_set_simple_counter (VPP-1484)Matus Fabian1-0/+16
2018-12-13fix vlib_buffer_chain_compress assert in debugKlement Sekera1-1/+2
2018-12-04Add VNET_BUFFER_F_AVAIL definitionsDave Barach1-0/+1
2018-11-30Metadata / opaque formatting belongs in vppDave Barach4-57/+109
2018-11-25vlib:init free list buffers vecEyal Bari2-0/+6
2018-11-20Add buffer tracing to the dispatch tracerDave Barach4-7/+85
2018-11-20vlib: reset frame flags when frame is reusedDamjan Marion1-0/+1
2018-11-20vlib: add vlib_buffer_enqueue_to_single_next(...) functionDamjan Marion1-0/+35
2018-11-20dhcp4:(VPP-1483) linearize chained packets before handlingEyal Bari2-1/+65
2018-11-18add vlib_prefetch_buffer_data(...) macroDamjan Marion1-0/+2
2018-11-17pcap-based dispatch tracerDave Barach3-2/+311
2018-11-14Remove c-11 memcpy checks from perf-critical codeDave Barach8-66/+68
2018-11-13vlib:remove unused argumentEyal Bari2-4/+2
2018-11-13vlib rename vlib_frame_args(...) to vlib_frame_scalar_args(..)Damjan Marion4-6/+4
2018-11-08physmem: Add physmem map supportMohsin Kazmi1-3/+9
2018-11-08vlib: use index to free suspended frameFlorin Coras1-4/+4
2018-11-02vlib: define minimum chained buffer segment sizeDamjan Marion1-0/+11
2018-11-01Move RPC calls off the binary API input queueDave Barach3-2/+12
2018-10-26cj: cj dump crashSteven1-1/+1
2018-10-25Revert "Keep RPC traffic off the shared-memory API queue"Florin Coras2-4/+0
2018-10-25pmalloc: support for 4K pagesDamjan Marion4-12/+35
2018-10-24vlib: Fix pci io bar read/write fd leakMohsin Kazmi1-0/+6
2018-10-24Keep RPC traffic off the shared-memory API queueDave Barach2-0/+4
2018-10-23physmem coverity issuesDamjan Marion2-3/+3
2018-10-23vlib: alloc buffers on local numa, not on numa 1Damjan Marion1-1/+2
2018-10-23vlib: Add support for pci io read/writeMohsin Kazmi2-31/+108
2018-10-23vlib: reduce default buffer memory size to be below RLIMIT_MEMLOCKDamjan Marion1-1/+5
2018-10-23Numa-aware, growable physical memory allocator (pmalloc)Damjan Marion16-543/+292
2018-10-23c11 safe string handling supportDave Barach15-48/+48
2018-10-22vlib: pci improvementsDamjan Marion5-145/+202
2018-10-22vlib: introduce vlib_buffer_get_{pa,va,current_va,current_pa} inlinesDamjan Marion2-5/+20
2018-10-22X86_64 perf counter pluginDave Barach4-24/+105
2018-10-19vppinfra: add atomic macros for __sync builtinsSirshak Das4-30/+14
2018-10-16Fix coverity issue for potentially overflowing of page sizeHaiyang Tan3-4/+4
2018-10-10Integer underflow and out-of-bounds read (VPP-1442)Neale Ranns1-4/+9
2018-10-05vfio: don't display error if no pci devices are assigned to containerDamjan Marion1-3/+4
2018-10-05node_cli: Give the user a hint as to the problem.Paul Vinciguerra1-5/+15
2018-10-03fix format error in show logging config outputJerome Tollet1-3/+6
2018-10-01API / CLI event-log tracingDave Barach10-3339/+125
2018-10-01thread: Add show threads apiMohsin Kazmi4-58/+40
2018-09-30vlib: barrier sync elog tracing improvementsDave Barach3-135/+113
2018-09-27Add logging to vfio codeDamjan Marion2-3/+23
2018-09-27"show log": print wall-clock timeDave Barach1-1/+14
2018-09-24Trivial: Clean up some typos.Paul Vinciguerra1-4/+4
2018-09-19session: improve close procedureFlorin Coras1-0/+8
2018-09-17STATS: Dynamically mapped shared memory segmentOle Troan5-16/+42
2018-09-14vlib: introduce user flags in vlib_frame_tDamjan Marion3-16/+20
2018-09-12Add and enable u32x4_extend_to_u64x2_high for aarch64 NEON intrinsics.Sirshak Das1-1/+5
2018-09-09vlib: crash in linux_epoll_input_inline for accessing free file index [VPP-1412]Steven1-2/+31
span>->c = c; } /* Perform 2 isaac runs with different contexts simultaneously. */ void isaac2 (isaac_t * ctx, uword * results) { #define _(n) \ u32 a##n, b##n, c##n, x##n, y##n, * m##n, * mm##n, * m2##n, * r##n, * mend##n _(0); _(1); (void) mend1; /* "set but unused variable" error on mend1 with gcc 4.9 */ #undef _ #define _(n) \ do { \ mm##n = ctx[(n)].memory; \ r##n = results + (n) * ISAAC_SIZE; \ a##n = ctx[(n)].a; \ b##n = ctx[(n)].b; \ c##n = ctx[(n)].c; \ b##n += ++c##n; \ mend##n = m2##n = mm##n + ARRAY_LEN (ctx[(n)].memory) / 2; \ m##n = mm##n; \ } while (0) _(0); _(1); #undef _ while (m0 < mend0) { rngstep32 (a0 << 13, a0, b0, mm0, m0, m20, r0, x0, y0); rngstep32 (a1 << 13, a1, b1, mm1, m1, m21, r1, x1, y1); rngstep32 (a0 >> 6, a0, b0, mm0, m0, m20, r0, x0, y0); rngstep32 (a1 >> 6, a1, b1, mm1, m1, m21, r1, x1, y1); rngstep32 (a0 << 2, a0, b0, mm0, m0, m20, r0, x0, y0); rngstep32 (a1 << 2, a1, b1, mm1, m1, m21, r1, x1, y1); rngstep32 (a0 >> 16, a0, b0, mm0, m0, m20, r0, x0, y0); rngstep32 (a1 >> 16, a1, b1, mm1, m1, m21, r1, x1, y1); } m20 = mm0; m21 = mm1; while (m20 < mend0) { rngstep32 (a0 << 13, a0, b0, mm0, m0, m20, r0, x0, y0); rngstep32 (a1 << 13, a1, b1, mm1, m1, m21, r1, x1, y1); rngstep32 (a0 >> 6, a0, b0, mm0, m0, m20, r0, x0, y0); rngstep32 (a1 >> 6, a1, b1, mm1, m1, m21, r1, x1, y1); rngstep32 (a0 << 2, a0, b0, mm0, m0, m20, r0, x0, y0); rngstep32 (a1 << 2, a1, b1, mm1, m1, m21, r1, x1, y1); rngstep32 (a0 >> 16, a0, b0, mm0, m0, m20, r0, x0, y0); rngstep32 (a1 >> 16, a1, b1, mm1, m1, m21, r1, x1, y1); } ctx[0].a = a0; ctx[0].b = b0; ctx[0].c = c0; ctx[1].a = a1; ctx[1].b = b1; ctx[1].c = c1; } #define mix32(a,b,c,d,e,f,g,h) \ { \ a^=b<<11; d+=a; b+=c; \ b^=c>>2; e+=b; c+=d; \ c^=d<<8; f+=c; d+=e; \ d^=e>>16; g+=d; e+=f; \ e^=f<<10; h+=e; f+=g; \ f^=g>>4; a+=f; g+=h; \ g^=h<<8; b+=g; h+=a; \ h^=a>>9; c+=h; a+=b; \ } void isaac_init (isaac_t * ctx, uword * seeds) { word i; u32 a, b, c, d, e, f, g, h, *m, *r; ctx->a = ctx->b = ctx->c = 0; m = ctx->memory; r = seeds; a = b = c = d = e = f = g = h = 0x9e3779b9; /* the golden ratio */ for (i = 0; i < 4; ++i) /* scramble it */ mix32 (a, b, c, d, e, f, g, h); /* initialize using the contents of r[] as the seed */ for (i = 0; i < ISAAC_SIZE; i += 8) { a += r[i]; b += r[i + 1]; c += r[i + 2]; d += r[i + 3]; e += r[i + 4]; f += r[i + 5]; g += r[i + 6]; h += r[i + 7]; mix32 (a, b, c, d, e, f, g, h); m[i] = a; m[i + 1] = b; m[i + 2] = c; m[i + 3] = d; m[i + 4] = e; m[i + 5] = f; m[i + 6] = g; m[i + 7] = h; } /* do a second pass to make all of the seed affect all of m */ for (i = 0; i < ISAAC_SIZE; i += 8) { a += m[i]; b += m[i + 1]; c += m[i + 2]; d += m[i + 3]; e += m[i + 4]; f += m[i + 5]; g += m[i + 6]; h += m[i + 7]; mix32 (a, b, c, d, e, f, g, h); m[i] = a; m[i + 1] = b; m[i + 2] = c; m[i + 3] = d; m[i + 4] = e; m[i + 5] = f; m[i + 6] = g; m[i + 7] = h; } } #endif /* uword_bits == 32 */ #if uword_bits == 64 #define ind64(mm,x) (*(u64 *)((u8 *)(mm) + ((x) & ((ISAAC_SIZE-1)<<3)))) #define rngstep64(mix,a,b,mm,m,m2,r,x,y) \ { \ x = *m; \ a = (mix) + *(m2++); \ *(m++) = y = ind64(mm,x) + a + b; \ *(r++) = b = ind64(mm,y>>ISAAC_LOG2_SIZE) + x; \ } void isaac (isaac_t * ctx, uword * results) { u64 a, b, c, x, y, *m, *mm, *m2, *r, *mend; mm = ctx->memory; r = results; a = ctx->a; b = ctx->b; c = ctx->c; b += ++c; mend = m2 = mm + ARRAY_LEN (ctx->memory) / 2; m = mm; while (m < mend) { rngstep64 (~(a ^ (a << 21)), a, b, mm, m, m2, r, x, y); rngstep64 (a ^ (a >> 5), a, b, mm, m, m2, r, x, y); rngstep64 (a ^ (a << 12), a, b, mm, m, m2, r, x, y); rngstep64 (a ^ (a >> 33), a, b, mm, m, m2, r, x, y); } m2 = mm; while (m2 < mend) { rngstep64 (~(a ^ (a << 21)), a, b, mm, m, m2, r, x, y); rngstep64 (a ^ (a >> 5), a, b, mm, m, m2, r, x, y); rngstep64 (a ^ (a << 12), a, b, mm, m, m2, r, x, y); rngstep64 (a ^ (a >> 33), a, b, mm, m, m2, r, x, y); } ctx->a = a; ctx->b = b; ctx->c = c; } /* Perform 2 isaac runs with different contexts simultaneously. */ void isaac2 (isaac_t * ctx, uword * results) { #define _(n) \ u64 a##n, b##n, c##n, x##n, y##n, * m##n, * mm##n, * m2##n, * r##n, * mend##n _(0); _(1); #undef _ #define _(n) \ do { \ mm##n = ctx[(n)].memory; \ r##n = results + (n) * ISAAC_SIZE; \ a##n = ctx[(n)].a; \ b##n = ctx[(n)].b; \ c##n = ctx[(n)].c; \ b##n += ++c##n; \ mend##n = m2##n = mm##n + ARRAY_LEN (ctx[(n)].memory) / 2; \ m##n = mm##n; \ } while (0) _(0); _(1); #undef _ (void) mend1; /* compiler warning */ while (m0 < mend0) { rngstep64 (~(a0 ^ (a0 << 21)), a0, b0, mm0, m0, m20, r0, x0, y0); rngstep64 (~(a1 ^ (a1 << 21)), a1, b1, mm1, m1, m21, r1, x1, y1); rngstep64 (a0 ^ (a0 >> 5), a0, b0, mm0, m0, m20, r0, x0, y0); rngstep64 (a1 ^ (a1 >> 5), a1, b1, mm1, m1, m21, r1, x1, y1); rngstep64 (a0 ^ (a0 << 12), a0, b0, mm0, m0, m20, r0, x0, y0); rngstep64 (a1 ^ (a1 << 12), a1, b1, mm1, m1, m21, r1, x1, y1); rngstep64 (a0 ^ (a0 >> 33), a0, b0, mm0, m0, m20, r0, x0, y0); rngstep64 (a1 ^ (a1 >> 33), a1, b1, mm1, m1, m21, r1, x1, y1); } m20 = mm0; m21 = mm1; while (m20 < mend0) { rngstep64 (~(a0 ^ (a0 << 21)), a0, b0, mm0, m0, m20, r0, x0, y0); rngstep64 (~(a1 ^ (a1 << 21)), a1, b1, mm1, m1, m21, r1, x1, y1); rngstep64 (a0 ^ (a0 >> 5), a0, b0, mm0, m0, m20, r0, x0, y0); rngstep64 (a1 ^ (a1 >> 5), a1, b1, mm1, m1, m21, r1, x1, y1); rngstep64 (a0 ^ (a0 << 12), a0, b0, mm0, m0, m20, r0, x0, y0); rngstep64 (a1 ^ (a1 << 12), a1, b1, mm1, m1, m21, r1, x1, y1); rngstep64 (a0 ^ (a0 >> 33), a0, b0, mm0, m0, m20, r0, x0, y0); rngstep64 (a1 ^ (a1 >> 33), a1, b1, mm1, m1, m21, r1, x1, y1); } ctx[0].a = a0; ctx[0].b = b0; ctx[0].c = c0; ctx[1].a = a1; ctx[1].b = b1; ctx[1].c = c1; } #define mix64(a,b,c,d,e,f,g,h) \ { \ a-=e; f^=h>>9; h+=a; \ b-=f; g^=a<<9; a+=b; \ c-=g; h^=b>>23; b+=c; \ d-=h; a^=c<<15; c+=d; \ e-=a; b^=d>>14; d+=e; \ f-=b; c^=e<<20; e+=f; \ g-=c; d^=f>>17; f+=g; \ h-=d; e^=g<<14; g+=h; \ } void isaac_init (isaac_t * ctx, uword * seeds) { word i; u64 a, b, c, d, e, f, g, h, *m, *r; ctx->a = ctx->b = ctx->c = 0; m = ctx->memory; r = seeds; a = b = c = d = e = f = g = h = 0x9e3779b97f4a7c13LL; /* the golden ratio */ for (i = 0; i < 4; ++i) /* scramble it */ mix64 (a, b, c, d, e, f, g, h); for (i = 0; i < ISAAC_SIZE; i += 8) /* fill in mm[] with messy stuff */ { a += r[i]; b += r[i + 1]; c += r[i + 2]; d += r[i + 3]; e += r[i + 4]; f += r[i + 5]; g += r[i + 6]; h += r[i + 7]; mix64 (a, b, c, d, e, f, g, h); m[i] = a; m[i + 1] = b; m[i + 2] = c; m[i + 3] = d; m[i + 4] = e; m[i + 5] = f; m[i + 6] = g; m[i + 7] = h; } /* do a second pass to make all of the seed affect all of mm */ for (i = 0; i < ISAAC_SIZE; i += 8) { a += m[i]; b += m[i + 1]; c += m[i + 2]; d += m[i + 3]; e += m[i + 4]; f += m[i + 5]; g += m[i + 6]; h += m[i + 7]; mix64 (a, b, c, d, e, f, g, h); m[i] = a; m[i + 1] = b; m[i + 2] = c; m[i + 3] = d; m[i + 4] = e; m[i + 5] = f; m[i + 6] = g; m[i + 7] = h; } } #endif /* uword_bits == 64 */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */