Lines Matching refs:buffer

686 bool this_cpu_buffer_push(struct percpu_buffer *buffer,
700 offset = RSEQ_READ_ONCE(buffer->c[cpu].offset);
701 if (offset == buffer->c[cpu].buflen)
704 targetptr_spec = (intptr_t *)&buffer->c[cpu].array[offset];
706 targetptr_final = &buffer->c[cpu].offset;
726 struct percpu_buffer_node *this_cpu_buffer_pop(struct percpu_buffer *buffer,
739 offset = RSEQ_READ_ONCE(buffer->c[cpu].offset);
744 head = RSEQ_READ_ONCE(buffer->c[cpu].array[offset - 1]);
746 targetptr = (intptr_t *)&buffer->c[cpu].offset;
748 (intptr_t *)&buffer->c[cpu].array[offset - 1],
763 struct percpu_buffer_node *__percpu_buffer_pop(struct percpu_buffer *buffer,
769 offset = buffer->c[cpu].offset;
772 head = buffer->c[cpu].array[offset - 1];
773 buffer->c[cpu].offset = offset - 1;
780 struct percpu_buffer *buffer = (struct percpu_buffer *)arg;
789 node = this_cpu_buffer_pop(buffer, NULL);
793 if (!this_cpu_buffer_push(buffer, node, NULL)) {
794 /* Should increase buffer size. */
808 /* Simultaneous modification to a per-cpu buffer from many threads. */
814 struct percpu_buffer buffer;
818 memset(&buffer, 0, sizeof(buffer));
826 buffer.c[i].array =
827 malloc(sizeof(*buffer.c[i].array) * CPU_SETSIZE *
829 assert(buffer.c[i].array);
830 buffer.c[i].buflen = CPU_SETSIZE * BUFFER_ITEM_PER_CPU;
838 * "data" directly in the buffer. However, we
846 buffer.c[i].array[j - 1] = node;
847 buffer.c[i].offset++;
853 test_percpu_buffer_thread, &buffer);
876 while ((node = __percpu_buffer_pop(&buffer, i))) {
880 free(buffer.c[i].array);
891 bool this_cpu_memcpy_buffer_push(struct percpu_memcpy_buffer *buffer,
906 offset = RSEQ_READ_ONCE(buffer->c[cpu].offset);
907 if (offset == buffer->c[cpu].buflen)
909 destptr = (char *)&buffer->c[cpu].array[offset];
914 targetptr_final = &buffer->c[cpu].offset;
935 bool this_cpu_memcpy_buffer_pop(struct percpu_memcpy_buffer *buffer,
950 offset = RSEQ_READ_ONCE(buffer->c[cpu].offset);
954 srcptr = (char *)&buffer->c[cpu].array[offset - 1];
958 targetptr_final = &buffer->c[cpu].offset;
977 bool __percpu_memcpy_buffer_pop(struct percpu_memcpy_buffer *buffer,
983 offset = buffer->c[cpu].offset;
986 memcpy(item, &buffer->c[cpu].array[offset - 1], sizeof(*item));
987 buffer->c[cpu].offset = offset - 1;
994 struct percpu_memcpy_buffer *buffer = (struct percpu_memcpy_buffer *)arg;
1004 result = this_cpu_memcpy_buffer_pop(buffer, &item, NULL);
1008 if (!this_cpu_memcpy_buffer_push(buffer, item, NULL)) {
1009 /* Should increase buffer size. */
1023 /* Simultaneous modification to a per-cpu buffer from many threads. */
1029 struct percpu_memcpy_buffer buffer;
1033 memset(&buffer, 0, sizeof(buffer));
1041 buffer.c[i].array =
1042 malloc(sizeof(*buffer.c[i].array) * CPU_SETSIZE *
1044 assert(buffer.c[i].array);
1045 buffer.c[i].buflen = CPU_SETSIZE * MEMCPY_BUFFER_ITEM_PER_CPU;
1051 * "data" directly in the buffer. However, we
1056 buffer.c[i].array[j - 1].data1 = j;
1057 buffer.c[i].array[j - 1].data2 = j + 1;
1058 buffer.c[i].offset++;
1065 &buffer);
1088 while (__percpu_memcpy_buffer_pop(&buffer, &item, i)) {
1092 free(buffer.c[i].array);
1371 printf(" [-M] Push into buffer and memcpy buffer with memory barriers.\n");
1527 printf_verbose("buffer\n");
1531 printf_verbose("memcpy buffer\n");