}
}
+static bool uaenet_vsync_has_work(struct s2devstruct *dev)
+{
+ if (dev->readqueue)
+ return true;
+
+ for (struct asyncreq *ar = dev->ar; ar; ar = ar->next) {
+ if (!ar->ready && get_word_host(ar->request + 28) == CMD_FLUSH)
+ return true;
+ }
+
+ return false;
+}
+
static void uaenet_vsync(void)
{
if (!irq_init)
bool pending = false;
for (int i = 0; i < MAX_TOTAL_NET_DEVICES; i++) {
struct s2devstruct *dev = &devst[i];
- if (dev->online) {
- if(dev->readqueue)
- pending = true;
- }
- if (dev->ar) {
+ if (uaenet_vsync_has_work(dev)) {
pending = true;
+ break;
}
}
if (uaenet_int_late || pending)