136 if (over > prev_overruns)
137 cnt = over - prev_overruns;
138 prev_overruns = over;
139 return cnt;
140}
141
142static ssize_t mmio_read(struct trace_iterator *iter, struct file *filp,
143 char __user *ubuf, size_t cnt, loff_t *ppos)
144{
145 ssize_t ret;
146 struct header_iter *hiter = iter->private;
147 struct trace_seq *s = &iter->seq;
148 unsigned long n;
149
150 n = count_overruns(iter);
151 if (n) {
152
153 trace_seq_printf(s, "MARK 0.000000 Lost %lu events.\n", n);
154 if (!overrun_detected)
155 pr_warning("mmiotrace has lost events.\n");
156 overrun_detected = true;
157 goto print_out;
158 }
159
160 if (!hiter)
161 return 0;
162
163 mmio_print_pcidev(s, hiter->dev);
164 hiter->dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, hiter->dev);
165
166 if (!hiter->dev) {
167 destroy_header_iter(hiter);
168 iter->private = NULL;
169 }
170
171print_out:
172 ret = trace_seq_to_user(s, ubuf, cnt);
173 return (ret == -EBUSY) ? 0 : ret;
174}
175
176static enum print_line_t mmio_print_rw(struct trace_iterator *iter)