[vmo-util] Make PinnedVmo object movable.

Test: Build and manual test with Vim2 HDMI audio driver
Change-Id: Ia82448a720eb5f8623640fe23a4e92f61c8bb4cd
diff --git a/system/ulib/fzl/include/lib/fzl/pinned-vmo.h b/system/ulib/fzl/include/lib/fzl/pinned-vmo.h
index 5c156d5..0bc7802 100644
--- a/system/ulib/fzl/include/lib/fzl/pinned-vmo.h
+++ b/system/ulib/fzl/include/lib/fzl/pinned-vmo.h
@@ -6,6 +6,7 @@
 
 #include <fbl/ref_ptr.h>
 #include <fbl/unique_ptr.h>
+#include <fbl/macros.h>
 #include <lib/zx/bti.h>
 #include <lib/zx/pmt.h>
 #include <lib/zx/vmo.h>
@@ -22,6 +23,20 @@
 
     PinnedVmo() = default;
     ~PinnedVmo() { Unpin(); }
+    DISALLOW_COPY_AND_ASSIGN_ALLOW_MOVE(PinnedVmo);
+
+    // Move support
+    PinnedVmo(PinnedVmo&& other) {
+        *this = fbl::move(other);
+    }
+
+    PinnedVmo& operator=(PinnedVmo&& other) {
+        pmt_ = fbl::move(other.pmt_);
+        regions_ = fbl::move(other.regions_);
+        region_count_ = other.region_count_;
+        other.region_count_ = 0;
+        return *this;
+    }
 
     zx_status_t Pin(const zx::vmo& vmo, const zx::bti& bti, uint32_t rights);
     void Unpin();