diff --git a/authz/listfile.c b/authz/listfile.c
index d457976..bc2b58e 100644
--- a/authz/listfile.c
+++ b/authz/listfile.c
@@ -93,7 +93,7 @@
 
 
 static void
-qauthz_list_file_event(int wd G_GNUC_UNUSED,
+qauthz_list_file_event(int64_t wd G_GNUC_UNUSED,
                        QFileMonitorEvent ev G_GNUC_UNUSED,
                        const char *name G_GNUC_UNUSED,
                        void *opaque)
diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c
index 4dc1317..ebf210f 100644
--- a/hw/usb/dev-mtp.c
+++ b/hw/usb/dev-mtp.c
@@ -170,7 +170,7 @@
     char         *path;
     struct stat  stat;
     /* file monitor watch id */
-    int          watchid;
+    int64_t      watchid;
     MTPObject    *parent;
     uint32_t     nchildren;
     QLIST_HEAD(, MTPObject) children;
@@ -498,7 +498,7 @@
     return NULL;
 }
 
-static MTPObject *usb_mtp_object_lookup_id(MTPState *s, int id)
+static MTPObject *usb_mtp_object_lookup_id(MTPState *s, int64_t id)
 {
     MTPObject *iter;
 
@@ -511,7 +511,7 @@
     return NULL;
 }
 
-static void file_monitor_event(int id,
+static void file_monitor_event(int64_t id,
                                QFileMonitorEvent ev,
                                const char *name,
                                void *opaque)
@@ -625,8 +625,8 @@
     }
 
     if (s->file_monitor) {
-        int id = qemu_file_monitor_add_watch(s->file_monitor, o->path, NULL,
-                                             file_monitor_event, s, &err);
+        int64_t id = qemu_file_monitor_add_watch(s->file_monitor, o->path, NULL,
+                                                 file_monitor_event, s, &err);
         if (id == -1) {
             error_report("usb-mtp: failed to add watch for %s: %s", o->path,
                          error_get_pretty(err));
diff --git a/include/authz/listfile.h b/include/authz/listfile.h
index ebbd5a4..0d618c9 100644
--- a/include/authz/listfile.h
+++ b/include/authz/listfile.h
@@ -92,7 +92,7 @@
     char *filename;
     bool refresh;
     QFileMonitor *file_monitor;
-    int file_watch;
+    int64_t file_watch;
 };
 
 
diff --git a/include/qemu/filemonitor.h b/include/qemu/filemonitor.h
index cd03183..64267d0 100644
--- a/include/qemu/filemonitor.h
+++ b/include/qemu/filemonitor.h
@@ -52,7 +52,7 @@
  * empty.
  *
  */
-typedef void (*QFileMonitorHandler)(int id,
+typedef void (*QFileMonitorHandler)(int64_t id,
                                     QFileMonitorEvent event,
                                     const char *filename,
                                     void *opaque);
@@ -103,12 +103,12 @@
  *
  * Returns: a positive integer watch ID, or -1 on error
  */
-int qemu_file_monitor_add_watch(QFileMonitor *mon,
-                                const char *dirpath,
-                                const char *filename,
-                                QFileMonitorHandler cb,
-                                void *opaque,
-                                Error **errp);
+int64_t qemu_file_monitor_add_watch(QFileMonitor *mon,
+                                    const char *dirpath,
+                                    const char *filename,
+                                    QFileMonitorHandler cb,
+                                    void *opaque,
+                                    Error **errp);
 
 /**
  * qemu_file_monitor_remove_watch:
@@ -123,6 +123,6 @@
  */
 void qemu_file_monitor_remove_watch(QFileMonitor *mon,
                                     const char *dirpath,
-                                    int id);
+                                    int64_t id);
 
 #endif /* QEMU_FILE_MONITOR_H */
diff --git a/tests/test-util-filemonitor.c b/tests/test-util-filemonitor.c
index 71a7cf5..46e781c 100644
--- a/tests/test-util-filemonitor.c
+++ b/tests/test-util-filemonitor.c
@@ -43,12 +43,12 @@
     int type;
     const char *filesrc;
     const char *filedst;
-    int watchid;
+    int64_t *watchid;
     int eventid;
 } QFileMonitorTestOp;
 
 typedef struct {
-    int id;
+    int64_t id;
     QFileMonitorEvent event;
     char *filename;
 } QFileMonitorTestRecord;
@@ -90,7 +90,7 @@
  * an ordered list of all events that it receives
  */
 static void
-qemu_file_monitor_test_handler(int id,
+qemu_file_monitor_test_handler(int64_t id,
                                QFileMonitorEvent event,
                                const char *filename,
                                void *opaque)
@@ -156,7 +156,7 @@
  */
 static bool
 qemu_file_monitor_test_expect(QFileMonitorTestData *data,
-                              int id,
+                              int64_t id,
                               QFileMonitorEvent event,
                               const char *filename)
 {
@@ -166,13 +166,14 @@
     rec = qemu_file_monitor_test_next_record(data);
 
     if (!rec) {
-        g_printerr("Missing event watch id %d event %d file %s\n",
+        g_printerr("Missing event watch id %" PRIx64 " event %d file %s\n",
                    id, event, filename);
         return false;
     }
 
     if (id != rec->id) {
-        g_printerr("Expected watch id %d but got %d\n", id, rec->id);
+        g_printerr("Expected watch id %" PRIx64 " but got %" PRIx64 "\n",
+                   id, rec->id);
         goto cleanup;
     }
 
@@ -198,170 +199,176 @@
 static void
 test_file_monitor_events(void)
 {
+    int64_t watch0 = 0;
+    int64_t watch1 = 0;
+    int64_t watch2 = 0;
+    int64_t watch3 = 0;
+    int64_t watch4 = 0;
+    int64_t watch5 = 0;
     QFileMonitorTestOp ops[] = {
         { .type = QFILE_MONITOR_TEST_OP_ADD_WATCH,
-          .filesrc = NULL, .watchid = 0 },
+          .filesrc = NULL, .watchid = &watch0 },
         { .type = QFILE_MONITOR_TEST_OP_ADD_WATCH,
-          .filesrc = "one.txt", .watchid = 1 },
+          .filesrc = "one.txt", .watchid = &watch1 },
         { .type = QFILE_MONITOR_TEST_OP_ADD_WATCH,
-          .filesrc = "two.txt", .watchid = 2 },
+          .filesrc = "two.txt", .watchid = &watch2 },
 
 
         { .type = QFILE_MONITOR_TEST_OP_CREATE,
           .filesrc = "one.txt", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "one.txt", .watchid = 0,
+          .filesrc = "one.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "one.txt", .watchid = 1,
+          .filesrc = "one.txt", .watchid = &watch1,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_CREATE,
           .filesrc = "two.txt", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 0,
+          .filesrc = "two.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 2,
+          .filesrc = "two.txt", .watchid = &watch2,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_CREATE,
           .filesrc = "three.txt", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "three.txt", .watchid = 0,
+          .filesrc = "three.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_UNLINK,
           .filesrc = "three.txt", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "three.txt", .watchid = 0,
+          .filesrc = "three.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_DELETED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_RENAME,
           .filesrc = "one.txt", .filedst = "two.txt" },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "one.txt", .watchid = 0,
+          .filesrc = "one.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_DELETED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "one.txt", .watchid = 1,
+          .filesrc = "one.txt", .watchid = &watch1,
           .eventid = QFILE_MONITOR_EVENT_DELETED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 0,
+          .filesrc = "two.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 2,
+          .filesrc = "two.txt", .watchid = &watch2,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_APPEND,
           .filesrc = "two.txt", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 0,
+          .filesrc = "two.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_MODIFIED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 2,
+          .filesrc = "two.txt", .watchid = &watch2,
           .eventid = QFILE_MONITOR_EVENT_MODIFIED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_TOUCH,
           .filesrc = "two.txt", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 0,
+          .filesrc = "two.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_ATTRIBUTES },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 2,
+          .filesrc = "two.txt", .watchid = &watch2,
           .eventid = QFILE_MONITOR_EVENT_ATTRIBUTES },
 
 
         { .type = QFILE_MONITOR_TEST_OP_DEL_WATCH,
-          .filesrc = "one.txt", .watchid = 1 },
+          .filesrc = "one.txt", .watchid = &watch1 },
         { .type = QFILE_MONITOR_TEST_OP_ADD_WATCH,
-          .filesrc = "one.txt", .watchid = 3 },
+          .filesrc = "one.txt", .watchid = &watch3 },
         { .type = QFILE_MONITOR_TEST_OP_CREATE,
           .filesrc = "one.txt", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "one.txt", .watchid = 0,
+          .filesrc = "one.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "one.txt", .watchid = 3,
+          .filesrc = "one.txt", .watchid = &watch3,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_DEL_WATCH,
-          .filesrc = "one.txt", .watchid = 3 },
+          .filesrc = "one.txt", .watchid = &watch3 },
         { .type = QFILE_MONITOR_TEST_OP_UNLINK,
           .filesrc = "one.txt", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "one.txt", .watchid = 0,
+          .filesrc = "one.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_DELETED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_MKDIR,
           .filesrc = "fish", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "fish", .watchid = 0,
+          .filesrc = "fish", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_ADD_WATCH,
-          .filesrc = "fish/", .watchid = 4 },
+          .filesrc = "fish/", .watchid = &watch4 },
         { .type = QFILE_MONITOR_TEST_OP_ADD_WATCH,
-          .filesrc = "fish/one.txt", .watchid = 5 },
+          .filesrc = "fish/one.txt", .watchid = &watch5 },
         { .type = QFILE_MONITOR_TEST_OP_CREATE,
           .filesrc = "fish/one.txt", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "one.txt", .watchid = 4,
+          .filesrc = "one.txt", .watchid = &watch4,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "one.txt", .watchid = 5,
+          .filesrc = "one.txt", .watchid = &watch5,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_DEL_WATCH,
-          .filesrc = "fish/one.txt", .watchid = 5 },
+          .filesrc = "fish/one.txt", .watchid = &watch5 },
         { .type = QFILE_MONITOR_TEST_OP_RENAME,
           .filesrc = "fish/one.txt", .filedst = "two.txt", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "one.txt", .watchid = 4,
+          .filesrc = "one.txt", .watchid = &watch4,
           .eventid = QFILE_MONITOR_EVENT_DELETED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 0,
+          .filesrc = "two.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 2,
+          .filesrc = "two.txt", .watchid = &watch2,
           .eventid = QFILE_MONITOR_EVENT_CREATED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_RMDIR,
           .filesrc = "fish", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "", .watchid = 4,
+          .filesrc = "", .watchid = &watch4,
           .eventid = QFILE_MONITOR_EVENT_IGNORED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "fish", .watchid = 0,
+          .filesrc = "fish", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_DELETED },
         { .type = QFILE_MONITOR_TEST_OP_DEL_WATCH,
-          .filesrc = "fish", .watchid = 4 },
+          .filesrc = "fish", .watchid = &watch4 },
 
 
         { .type = QFILE_MONITOR_TEST_OP_UNLINK,
           .filesrc = "two.txt", },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 0,
+          .filesrc = "two.txt", .watchid = &watch0,
           .eventid = QFILE_MONITOR_EVENT_DELETED },
         { .type = QFILE_MONITOR_TEST_OP_EVENT,
-          .filesrc = "two.txt", .watchid = 2,
+          .filesrc = "two.txt", .watchid = &watch2,
           .eventid = QFILE_MONITOR_EVENT_DELETED },
 
 
         { .type = QFILE_MONITOR_TEST_OP_DEL_WATCH,
-          .filesrc = "two.txt", .watchid = 2 },
+          .filesrc = "two.txt", .watchid = &watch2 },
         { .type = QFILE_MONITOR_TEST_OP_DEL_WATCH,
-          .filesrc = NULL, .watchid = 0 },
+          .filesrc = NULL, .watchid = &watch0 },
     };
     Error *local_err = NULL;
     GError *gerr = NULL;
@@ -374,6 +381,7 @@
     char *pathsrc = NULL;
     char *pathdst = NULL;
     QFileMonitorTestData data;
+    GHashTable *ids = g_hash_table_new(g_int64_hash, g_int64_equal);
 
     qemu_mutex_init(&data.lock);
     data.records = NULL;
@@ -414,7 +422,6 @@
     for (i = 0; i < G_N_ELEMENTS(ops); i++) {
         const QFileMonitorTestOp *op = &(ops[i]);
         int fd;
-        int watchid;
         struct utimbuf ubuf;
         char *watchdir;
         const char *watchfile;
@@ -427,8 +434,8 @@
         switch (op->type) {
         case QFILE_MONITOR_TEST_OP_ADD_WATCH:
             if (debug) {
-                g_printerr("Add watch %s %s %d\n",
-                           dir, op->filesrc, op->watchid);
+                g_printerr("Add watch %s %s\n",
+                           dir, op->filesrc);
             }
             if (op->filesrc && strchr(op->filesrc, '/')) {
                 watchdir = g_strdup_printf("%s/%s", dir, op->filesrc);
@@ -442,7 +449,7 @@
                 watchdir = g_strdup(dir);
                 watchfile = op->filesrc;
             }
-            watchid =
+            *op->watchid =
                 qemu_file_monitor_add_watch(mon,
                                             watchdir,
                                             watchfile,
@@ -450,20 +457,23 @@
                                             &data,
                                             &local_err);
             g_free(watchdir);
-            if (watchid < 0) {
+            if (*op->watchid < 0) {
                 g_printerr("Unable to add watch %s",
                            error_get_pretty(local_err));
                 goto cleanup;
             }
-            if (watchid != op->watchid) {
-                g_printerr("Unexpected watch ID %d, wanted %d\n",
-                           watchid, op->watchid);
+            if (debug) {
+                g_printerr("Watch ID %" PRIx64 "\n", *op->watchid);
+            }
+            if (g_hash_table_contains(ids, op->watchid)) {
+                g_printerr("Watch ID %" PRIx64 "already exists", *op->watchid);
                 goto cleanup;
             }
+            g_hash_table_add(ids, op->watchid);
             break;
         case QFILE_MONITOR_TEST_OP_DEL_WATCH:
             if (debug) {
-                g_printerr("Del watch %s %d\n", dir, op->watchid);
+                g_printerr("Del watch %s %" PRIx64 "\n", dir, *op->watchid);
             }
             if (op->filesrc && strchr(op->filesrc, '/')) {
                 watchdir = g_strdup_printf("%s/%s", dir, op->filesrc);
@@ -472,18 +482,19 @@
             } else {
                 watchdir = g_strdup(dir);
             }
+            g_hash_table_remove(ids, op->watchid);
             qemu_file_monitor_remove_watch(mon,
                                            watchdir,
-                                           op->watchid);
+                                           *op->watchid);
             g_free(watchdir);
             break;
         case QFILE_MONITOR_TEST_OP_EVENT:
             if (debug) {
-                g_printerr("Event id=%d event=%d file=%s\n",
-                           op->watchid, op->eventid, op->filesrc);
+                g_printerr("Event id=%" PRIx64 " event=%d file=%s\n",
+                           *op->watchid, op->eventid, op->filesrc);
             }
             if (!qemu_file_monitor_test_expect(
-                    &data, op->watchid, op->eventid, op->filesrc))
+                    &data, *op->watchid, op->eventid, op->filesrc))
                 goto cleanup;
             break;
         case QFILE_MONITOR_TEST_OP_CREATE:
@@ -596,6 +607,8 @@
         pathsrc = pathdst = NULL;
     }
 
+    g_assert_cmpint(g_hash_table_size(ids), ==, 0);
+
     err = 0;
 
  cleanup:
@@ -647,6 +660,7 @@
             abort();
         }
     }
+    g_hash_table_unref(ids);
     g_free(dir);
     g_assert(err == 0);
 }
diff --git a/util/filemonitor-inotify.c b/util/filemonitor-inotify.c
index 3eb29f8..b5f4b93 100644
--- a/util/filemonitor-inotify.c
+++ b/util/filemonitor-inotify.c
@@ -29,7 +29,6 @@
 
 struct QFileMonitor {
     int fd;
-    int nextid; /* watch ID counter */
     QemuMutex lock; /* protects dirs & idmap */
     GHashTable *dirs; /* dirname => QFileMonitorDir */
     GHashTable *idmap; /* inotify ID => dirname */
@@ -37,7 +36,7 @@
 
 
 typedef struct {
-    int id; /* watch ID */
+    int64_t id; /* watch ID */
     char *filename; /* optional filter */
     QFileMonitorHandler cb;
     void *opaque;
@@ -46,7 +45,8 @@
 
 typedef struct {
     char *path;
-    int id; /* inotify ID */
+    int inotify_id; /* inotify ID */
+    int next_file_id; /* file ID counter */
     GArray *watches; /* QFileMonitorWatch elements */
 } QFileMonitorDir;
 
@@ -126,7 +126,8 @@
             g_assert_not_reached();
         }
 
-        trace_qemu_file_monitor_event(mon, dir->path, name, ev->mask, dir->id);
+        trace_qemu_file_monitor_event(mon, dir->path, name, ev->mask,
+                                      dir->inotify_id);
         for (i = 0; i < dir->watches->len; i++) {
             QFileMonitorWatch *watch = &g_array_index(dir->watches,
                                                       QFileMonitorWatch,
@@ -237,7 +238,7 @@
     g_idle_add((GSourceFunc)qemu_file_monitor_free_idle, mon);
 }
 
-int
+int64_t
 qemu_file_monitor_add_watch(QFileMonitor *mon,
                             const char *dirpath,
                             const char *filename,
@@ -247,7 +248,7 @@
 {
     QFileMonitorDir *dir;
     QFileMonitorWatch watch;
-    int ret = -1;
+    int64_t ret = -1;
 
     qemu_mutex_lock(&mon->lock);
     dir = g_hash_table_lookup(mon->dirs, dirpath);
@@ -265,7 +266,7 @@
 
         dir = g_new0(QFileMonitorDir, 1);
         dir->path = g_strdup(dirpath);
-        dir->id = rv;
+        dir->inotify_id = rv;
         dir->watches = g_array_new(FALSE, TRUE, sizeof(QFileMonitorWatch));
 
         g_hash_table_insert(mon->dirs, dir->path, dir);
@@ -276,7 +277,7 @@
         }
     }
 
-    watch.id = mon->nextid++;
+    watch.id = (((int64_t)dir->inotify_id) << 32) | dir->next_file_id++;
     watch.filename = g_strdup(filename);
     watch.cb = cb;
     watch.opaque = opaque;
@@ -297,7 +298,7 @@
 
 void qemu_file_monitor_remove_watch(QFileMonitor *mon,
                                     const char *dirpath,
-                                    int id)
+                                    int64_t id)
 {
     QFileMonitorDir *dir;
     gsize i;
@@ -322,10 +323,10 @@
     }
 
     if (dir->watches->len == 0) {
-        inotify_rm_watch(mon->fd, dir->id);
-        trace_qemu_file_monitor_disable_watch(mon, dir->path, dir->id);
+        inotify_rm_watch(mon->fd, dir->inotify_id);
+        trace_qemu_file_monitor_disable_watch(mon, dir->path, dir->inotify_id);
 
-        g_hash_table_remove(mon->idmap, GINT_TO_POINTER(dir->id));
+        g_hash_table_remove(mon->idmap, GINT_TO_POINTER(dir->inotify_id));
         g_hash_table_remove(mon->dirs, dir->path);
 
         if (g_hash_table_size(mon->dirs) == 0) {
diff --git a/util/filemonitor-stub.c b/util/filemonitor-stub.c
index 48268b2..2c0e97e 100644
--- a/util/filemonitor-stub.c
+++ b/util/filemonitor-stub.c
@@ -38,7 +38,7 @@
 }
 
 
-int
+int64_t
 qemu_file_monitor_add_watch(QFileMonitor *mon G_GNUC_UNUSED,
                             const char *dirpath G_GNUC_UNUSED,
                             const char *filename G_GNUC_UNUSED,
@@ -54,6 +54,6 @@
 void
 qemu_file_monitor_remove_watch(QFileMonitor *mon G_GNUC_UNUSED,
                                const char *dirpath G_GNUC_UNUSED,
-                               int id G_GNUC_UNUSED)
+                               int64_t id G_GNUC_UNUSED)
 {
 }
diff --git a/util/trace-events b/util/trace-events
index 56c2728..9dbd237 100644
--- a/util/trace-events
+++ b/util/trace-events
@@ -22,13 +22,13 @@
 buffer_free(const char *buf, size_t len) "%s: capacity %zd"
 
 # filemonitor-inotify.c
-qemu_file_monitor_add_watch(void *mon, const char *dirpath, const char *filename, void *cb, void *opaque, int id) "File monitor %p add watch dir='%s' file='%s' cb=%p opaque=%p id=%u"
-qemu_file_monitor_remove_watch(void *mon, const char *dirpath, int id) "File monitor %p remove watch dir='%s' id=%u"
+qemu_file_monitor_add_watch(void *mon, const char *dirpath, const char *filename, void *cb, void *opaque, int64_t id) "File monitor %p add watch dir='%s' file='%s' cb=%p opaque=%p id=%" PRId64
+qemu_file_monitor_remove_watch(void *mon, const char *dirpath, int64_t id) "File monitor %p remove watch dir='%s' id=%" PRId64
 qemu_file_monitor_new(void *mon, int fd) "File monitor %p created fd=%d"
 qemu_file_monitor_enable_watch(void *mon, const char *dirpath, int id) "File monitor %p enable watch dir='%s' id=%u"
 qemu_file_monitor_disable_watch(void *mon, const char *dirpath, int id) "Fle monitor %p disable watch dir='%s' id=%u"
 qemu_file_monitor_event(void *mon, const char *dirpath, const char *filename, int mask, unsigned int id) "File monitor %p event dir='%s' file='%s' mask=0x%x id=%u"
-qemu_file_monitor_dispatch(void *mon, const char *dirpath, const char *filename, int ev, void *cb, void *opaque, unsigned int id) "File monitor %p dispatch dir='%s' file='%s' ev=%d cb=%p opaque=%p id=%u"
+qemu_file_monitor_dispatch(void *mon, const char *dirpath, const char *filename, int ev, void *cb, void *opaque, int64_t id) "File monitor %p dispatch dir='%s' file='%s' ev=%d cb=%p opaque=%p id=%" PRId64
 
 # qemu-coroutine.c
 qemu_aio_coroutine_enter(void *ctx, void *from, void *to, void *opaque) "ctx %p from %p to %p opaque %p"
