static int read_ras_event(int fd, struct pevent *pevent, struct kbuffer *kbuf, void *page)
{
+ unsigned size;
unsigned long long time_stamp;
void *data;
- if (read(fd, page, PAGE_SIZE) <= 0)
- return -1;
-
- kbuffer_load_subbuffer(kbuf, page);
-
- while ((data = kbuffer_read_event(kbuf, &time_stamp)))
- parse_ras_data(pevent, kbuf, data, time_stamp);
-
- /* increment to read next event */
- kbuffer_next_event(kbuf, NULL);
-
- return 0;
+ do {
+ size = read(fd, page, PAGE_SIZE);
+ if (size < 0) {
+ perror ("read");
+ return -1;
+ } else if (size > 0) {
+ kbuffer_load_subbuffer(kbuf, page);
+
+ while ((data = kbuffer_read_event(kbuf, &time_stamp))) {
+ parse_ras_data(pevent, kbuf, data, time_stamp);
+
+ /* increment to read next event */
+ kbuffer_next_event(kbuf, NULL);
+ }
+ } else {
+ printf("read size = 0\n");
+ }
+ } while (1);
}
static int get_num_cpus(void)