Lines Matching refs:buffer

772 bool this_cpu_buffer_push(struct percpu_buffer *buffer,
786 offset = RSEQ_READ_ONCE(buffer->c[cpu].offset);
787 if (offset == buffer->c[cpu].buflen)
790 targetptr_spec = (intptr_t *)&buffer->c[cpu].array[offset];
792 targetptr_final = &buffer->c[cpu].offset;
807 struct percpu_buffer_node *this_cpu_buffer_pop(struct percpu_buffer *buffer,
820 offset = RSEQ_READ_ONCE(buffer->c[cpu].offset);
825 head = RSEQ_READ_ONCE(buffer->c[cpu].array[offset - 1]);
827 targetptr = (intptr_t *)&buffer->c[cpu].offset;
830 (intptr_t *)&buffer->c[cpu].array[offset - 1],
845 struct percpu_buffer_node *__percpu_buffer_pop(struct percpu_buffer *buffer,
851 offset = buffer->c[cpu].offset;
854 head = buffer->c[cpu].array[offset - 1];
855 buffer->c[cpu].offset = offset - 1;
862 struct percpu_buffer *buffer = (struct percpu_buffer *)arg;
871 node = this_cpu_buffer_pop(buffer, NULL);
875 if (!this_cpu_buffer_push(buffer, node, NULL)) {
876 /* Should increase buffer size. */
890 /* Simultaneous modification to a per-cpu buffer from many threads. */
896 struct percpu_buffer buffer;
900 memset(&buffer, 0, sizeof(buffer));
908 buffer.c[i].array =
909 malloc(sizeof(*buffer.c[i].array) * CPU_SETSIZE *
911 assert(buffer.c[i].array);
912 buffer.c[i].buflen = CPU_SETSIZE * BUFFER_ITEM_PER_CPU;
920 * "data" directly in the buffer. However, we
928 buffer.c[i].array[j - 1] = node;
929 buffer.c[i].offset++;
935 test_percpu_buffer_thread, &buffer);
958 while ((node = __percpu_buffer_pop(&buffer, i))) {
962 free(buffer.c[i].array);
973 bool this_cpu_memcpy_buffer_push(struct percpu_memcpy_buffer *buffer,
988 offset = RSEQ_READ_ONCE(buffer->c[cpu].offset);
989 if (offset == buffer->c[cpu].buflen)
991 destptr = (char *)&buffer->c[cpu].array[offset];
996 targetptr_final = &buffer->c[cpu].offset;
1013 bool this_cpu_memcpy_buffer_pop(struct percpu_memcpy_buffer *buffer,
1028 offset = RSEQ_READ_ONCE(buffer->c[cpu].offset);
1032 srcptr = (char *)&buffer->c[cpu].array[offset - 1];
1036 targetptr_final = &buffer->c[cpu].offset;
1055 bool __percpu_memcpy_buffer_pop(struct percpu_memcpy_buffer *buffer,
1061 offset = buffer->c[cpu].offset;
1064 memcpy(item, &buffer->c[cpu].array[offset - 1], sizeof(*item));
1065 buffer->c[cpu].offset = offset - 1;
1072 struct percpu_memcpy_buffer *buffer = (struct percpu_memcpy_buffer *)arg;
1082 result = this_cpu_memcpy_buffer_pop(buffer, &item, NULL);
1086 if (!this_cpu_memcpy_buffer_push(buffer, item, NULL)) {
1087 /* Should increase buffer size. */
1101 /* Simultaneous modification to a per-cpu buffer from many threads. */
1107 struct percpu_memcpy_buffer buffer;
1111 memset(&buffer, 0, sizeof(buffer));
1119 buffer.c[i].array =
1120 malloc(sizeof(*buffer.c[i].array) * CPU_SETSIZE *
1122 assert(buffer.c[i].array);
1123 buffer.c[i].buflen = CPU_SETSIZE * MEMCPY_BUFFER_ITEM_PER_CPU;
1129 * "data" directly in the buffer. However, we
1134 buffer.c[i].array[j - 1].data1 = j;
1135 buffer.c[i].array[j - 1].data2 = j + 1;
1136 buffer.c[i].offset++;
1143 &buffer);
1166 while (__percpu_memcpy_buffer_pop(&buffer, &item, i)) {
1170 free(buffer.c[i].array);
1443 printf(" [-M] Push into buffer and memcpy buffer with memory barriers.\n");
1603 printf_verbose("buffer\n");
1607 printf_verbose("memcpy buffer\n");