{"action":"created","comment":{"url":"https://api.github.com/repos/intel/haxm/pulls/comments/233327349","pull_request_review_id":174713248,"id":233327349,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzMzMyNzM0OQ==","diff_hunk":"@@ -120,50 +120,46 @@\n  *   - HAX_IOCTL_EXTENSION (0x80)  Extension-specific ioctl.\n  * - type: User argument type.\n  */\n-#define HAX_IOCTL_VERSION \\\n-    HAX_IOCTL(HAX_IOWR, 0x00, struct hax_module_version)\n+#define HAX_IOCTL_GET_API_VERSION \\\n+    HAX_IOCTL(HAX_IOR,  0x00, struct hax_module_version)\n #define HAX_IOCTL_CREATE_VM \\\n-    HAX_IOCTL(HAX_IOWR, 0x01, uint32_t)\n+    HAX_IOCTL(HAX_IOR,  0x01, uint32_t)\n #define HAX_IOCTL_DESTROY_VM \\\n     HAX_IOCTL(HAX_IOW,  0x02, uint32_t)\n #define HAX_IOCTL_CAPABILITY \\\n     HAX_IOCTL(HAX_IOR,  0x03, struct hax_capabilityinfo)\n-#define HAX_IOCTL_SET_MEMLIMIT \\\n-    HAX_IOCTL(HAX_IOWR, 0x04, struct hax_set_memlimit)\n \n-#define HAX_VM_IOCTL_VCPU_CREATE \\\n-    HAX_IOCTL(HAX_IOWR, 0x00, uint32_t)\n-#define HAX_VM_IOCTL_ALLOC_RAM \\\n-    HAX_IOCTL(HAX_IOWR, 0x01, struct hax_alloc_ram_info)\n+#define HAX_VM_IOCTL_CREATE_VCPU \\\n+    HAX_IOCTL(HAX_IOW,  0x00, uint32_t)\n+#define HAX_VM_IOCTL_DESTROY_VCPU \\\n+    HAX_IOCTL(HAX_IOW,  0x01, uint32_t)\n #define HAX_VM_IOCTL_SET_RAM \\\n-    HAX_IOCTL(HAX_IOWR, 0x02, struct hax_set_ram_info)\n-#define HAX_VM_IOCTL_VCPU_DESTROY \\\n-    HAX_IOCTL(HAX_IOR,  0x03, uint32_t)\n+    HAX_IOCTL(HAX_IOW,  0x02, struct hax_set_ram_info)\n #define HAX_VM_IOCTL_ADD_RAMBLOCK \\\n-    HAX_IOCTL(HAX_IOW,  0x04, struct hax_ramblock_info)\n+    HAX_IOCTL(HAX_IOW,  0x03, struct hax_ramblock_info)\n #define HAX_VM_IOCTL_SET_RAM2 \\\n-    HAX_IOCTL(HAX_IOWR, 0x05, struct hax_set_ram_info2)\n+    HAX_IOCTL(HAX_IOW,  0x04, struct hax_set_ram_info2)\n #define HAX_VM_IOCTL_PROTECT_RAM \\\n-    HAX_IOCTL(HAX_IOWR, 0x06, struct hax_protect_ram_info)\n+    HAX_IOCTL(HAX_IOW,  0x05, struct hax_protect_ram_info)\n \n #define HAX_VCPU_IOCTL_RUN \\\n     HAX_IOCTL(HAX_IO,   0x00, HAX_UNUSED)\n #define HAX_VCPU_IOCTL_SETUP_TUNNEL \\\n-    HAX_IOCTL(HAX_IOWR, 0x01, struct hax_tunnel_info)\n+    HAX_IOCTL(HAX_IOR,  0x01, struct hax_tunnel_info)\n #define HAX_VCPU_IOCTL_GET_REGS \\\n-    HAX_IOCTL(HAX_IOWR, 0x02, struct vcpu_state_t)\n+    HAX_IOCTL(HAX_IOR,  0x02, struct vcpu_state_t)\n #define HAX_VCPU_IOCTL_SET_REGS \\\n-    HAX_IOCTL(HAX_IOWR, 0x03, struct vcpu_state_t)\n+    HAX_IOCTL(HAX_IOW,  0x03, struct vcpu_state_t)\n #define HAX_VCPU_IOCTL_GET_FPU \\\n     HAX_IOCTL(HAX_IOR,  0x04, struct fx_layout)\n #define HAX_VCPU_IOCTL_SET_FPU \\\n     HAX_IOCTL(HAX_IOW,  0x05, struct fx_layout)\n #define HAX_VCPU_IOCTL_GET_MSRS \\\n     HAX_IOCTL(HAX_IOWR, 0x06, struct hax_msr_data)\n #define HAX_VCPU_IOCTL_SET_MSRS \\\n-    HAX_IOCTL(HAX_IOWR, 0x07, struct hax_msr_data)\n+    HAX_IOCTL(HAX_IOW,  0x07, struct hax_msr_data)","path":"include/hax_interface.h","position":112,"original_position":60,"commit_id":"6d36461378e666e9c916bb56dfc040d3fcf49ffe","original_commit_id":"6d36461378e666e9c916bb56dfc040d3fcf49ffe","user":{"login":"raphaelning","id":4811885,"node_id":"MDQ6VXNlcjQ4MTE4ODU=","avatar_url":"https://avatars2.githubusercontent.com/u/4811885?v=4","gravatar_id":"","url":"https://api.github.com/users/raphaelning","html_url":"https://github.com/raphaelning","followers_url":"https://api.github.com/users/raphaelning/followers","following_url":"https://api.github.com/users/raphaelning/following{/other_user}","gists_url":"https://api.github.com/users/raphaelning/gists{/gist_id}","starred_url":"https://api.github.com/users/raphaelning/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raphaelning/subscriptions","organizations_url":"https://api.github.com/users/raphaelning/orgs","repos_url":"https://api.github.com/users/raphaelning/repos","events_url":"https://api.github.com/users/raphaelning/events{/privacy}","received_events_url":"https://api.github.com/users/raphaelning/received_events","type":"User","site_admin":false},"body":"It seems this IOCTL handler actually writes to the user buffer:\r\n\r\nhttps://github.com/intel/haxm/blob/6d36461378e666e9c916bb56dfc040d3fcf49ffe/platforms/windows/hax_entry.c#L331\r\n\r\nWhether that's necessary is a separate topic, but IOWR indeed matches the current implementation.\r\n\r\n","created_at":"2018-11-14T06:34:10Z","updated_at":"2018-11-14T06:51:25Z","html_url":"https://github.com/intel/haxm/pull/121#discussion_r233327349","pull_request_url":"https://api.github.com/repos/intel/haxm/pulls/121","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/intel/haxm/pulls/comments/233327349"},"html":{"href":"https://github.com/intel/haxm/pull/121#discussion_r233327349"},"pull_request":{"href":"https://api.github.com/repos/intel/haxm/pulls/121"}}},"pull_request":{"url":"https://api.github.com/repos/intel/haxm/pulls/121","id":229444222,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI5NDQ0MjIy","html_url":"https://github.com/intel/haxm/pull/121","diff_url":"https://github.com/intel/haxm/pull/121.diff","patch_url":"https://github.com/intel/haxm/pull/121.patch","issue_url":"https://api.github.com/repos/intel/haxm/issues/121","number":121,"state":"open","locked":false,"title":"Updating IOCTL interface","user":{"login":"AlexAltea","id":5306886,"node_id":"MDQ6VXNlcjUzMDY4ODY=","avatar_url":"https://avatars3.githubusercontent.com/u/5306886?v=4","gravatar_id":"","url":"https://api.github.com/users/AlexAltea","html_url":"https://github.com/AlexAltea","followers_url":"https://api.github.com/users/AlexAltea/followers","following_url":"https://api.github.com/users/AlexAltea/following{/other_user}","gists_url":"https://api.github.com/users/AlexAltea/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexAltea/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexAltea/subscriptions","organizations_url":"https://api.github.com/users/AlexAltea/orgs","repos_url":"https://api.github.com/users/AlexAltea/repos","events_url":"https://api.github.com/users/AlexAltea/events{/privacy}","received_events_url":"https://api.github.com/users/AlexAltea/received_events","type":"User","site_admin":false},"body":"**Disclaimer: This changes the API. Consider it just a proposal, rather than a ready-to-merge patch.**\r\n\r\nFollowing the IOCTL-refactoring discussion at https://github.com/intel/haxm/pull/108#issue-223107154, I prepared this \"proposal\" PR, just for the sake of open discussion: this way seems more appropriate than the issue tracker.\r\n\r\nAlthough centralizing IOCTL's seemed trivial at first, it seems the Darwin and Windows backends evolved separately (not sure though, due to #23). Consequently, they have different numbering, and [some comments](https://github.com/intel/haxm/blob/99bd00f07c77cd83852b5dae9182cd06fa9add65/include/darwin/hax_interface_mac.h#L36-L38) hint that at some point even the API differed more than it does today. Thus, unifying definitions require backwards-incompatible changes.\r\n\r\nAssuming HAXM is using [semver](https://semver.org/) this should bump it to v8.x.x.\r\n\r\n## Changes\r\n\r\nThe code is self-explanatory. This patch (specifically, https://github.com/intel/haxm/commit/761d8f2) centralizes all IOCTL definitions in the *hax_interface.h* file by renumbering the function codes as follows:\r\n- **Function code space**: The lowest common denominator of all platforms: Windows offers 11 bits, Linux/Mac offer 8 bits. Thus we will consistently use 8 bits, and codes are in range [0x00, 0xFF].\r\nWindows will mask this code with 0x800, to enable the \"Custom bit\" (see [reference](https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/defining-i-o-control-codes)).\r\n- **Values**: Every device will number their functions codes starting from 0x00. This means for instance that *HAX_VM_IOCTL_VCPU_CREATE* and *HAX_VCPU_IOCTL_RUN* share the same function code, but that's alright since they are different devices to begin with.\r\n- **Flags**: Since it is unlikely that all 256 function codes will be needed, we can restrict ourselves to 64 function codes per device, and assigning a special meaning to the top 2 bits. I suggest:\r\n   - *Platform ioctls*: Flagged with the bit 7th bit (i.e. mask 0x40): This could include ioctls like *HAX_VCPU_IOCTL_KICKOFF* (which is Windows-specific).\r\n   - *Extension ioctls*: Flagged with the bit 8th bit (i.e. mask 0x80): This could provide a space for researchers/developers to extend the API to alter the behavior of HAXM in specific ways not suitable to be upstreamed.\r\n\r\nAdditionally, since the API is changing, I took the opportunity to corrected naming inconsistencies:\r\n- The `*DEBUG` ioctl of VCPU devices was accidentally declared with a *HAX_IOCTL_VCPU_* prefix, not with the de-facto standard *HAX_VCPU_IOCTL_* prefix. This has been corrected.\r\n- The `*GET_REGS`, `*SET_REGS` ioctls of VCPU devices were declared with a *HAX_VCPU_* prefix, not *HAX_VCPU_IOCTL_*. This has been corrected.\r\n\r\n## Pending\r\n\r\nThere's other proposals that I haven't implemented yet, but might be worth discussing (if we are going to change the interface that radically, it's better to get it done right in one attempt):\r\n* Removing *HAX_VM_IOCTL_VCPU_CREATE_ORIG*.\r\nAll platforms treat it exactly the same as *HAX_VM_IOCTL_VCPU_CREATE*.\r\n* Removing *HAX_VCPU_IOCTL_KICKOFF*.\r\nSeems to be Windows XP specific, which is no longer supported (?).\r\n* Removing *HAX_VM_IOCTL_NOTIFY_QEMU_VERSION*.\r\nAn hypervisor should have no dependency on a specific host userland application.\r\n\r\nAlternatively, and this is a **radically** different approach, there's the option of adopting the [KVM API](https://www.kernel.org/doc/Documentation/virtual/kvm/api.txt), as suggested in https://github.com/intel/haxm/issues/106#issuecomment-432844665, but I'm not sure how large the internal differences between both hypervisors are. Regarding license implications, as long as we provide custom headers with identical constants, we should be GPL-free, so it's doable.\r\n\r\nThe question is whether we want to do it now (v8.x.x), in the future (v9.x.x?), or never.","created_at":"2018-11-08T17:12:55Z","updated_at":"2018-11-14T06:51:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"93c602c86f2b406c17a1a7a4f196ba2082556991","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/intel/haxm/pulls/121/commits","review_comments_url":"https://api.github.com/repos/intel/haxm/pulls/121/comments","review_comment_url":"https://api.github.com/repos/intel/haxm/pulls/comments{/number}","comments_url":"https://api.github.com/repos/intel/haxm/issues/121/comments","statuses_url":"https://api.github.com/repos/intel/haxm/statuses/6d36461378e666e9c916bb56dfc040d3fcf49ffe","head":{"label":"kryptoslogic:ioctl-refactor","ref":"ioctl-refactor","sha":"6d36461378e666e9c916bb56dfc040d3fcf49ffe","user":{"login":"kryptoslogic","id":43409078,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQzNDA5MDc4","avatar_url":"https://avatars2.githubusercontent.com/u/43409078?v=4","gravatar_id":"","url":"https://api.github.com/users/kryptoslogic","html_url":"https://github.com/kryptoslogic","followers_url":"https://api.github.com/users/kryptoslogic/followers","following_url":"https://api.github.com/users/kryptoslogic/following{/other_user}","gists_url":"https://api.github.com/users/kryptoslogic/gists{/gist_id}","starred_url":"https://api.github.com/users/kryptoslogic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kryptoslogic/subscriptions","organizations_url":"https://api.github.com/users/kryptoslogic/orgs","repos_url":"https://api.github.com/users/kryptoslogic/repos","events_url":"https://api.github.com/users/kryptoslogic/events{/privacy}","received_events_url":"https://api.github.com/users/kryptoslogic/received_events","type":"Organization","site_admin":false},"repo":{"id":152140978,"node_id":"MDEwOlJlcG9zaXRvcnkxNTIxNDA5Nzg=","name":"haxm","full_name":"kryptoslogic/haxm","private":false,"owner":{"login":"kryptoslogic","id":43409078,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQzNDA5MDc4","avatar_url":"https://avatars2.githubusercontent.com/u/43409078?v=4","gravatar_id":"","url":"https://api.github.com/users/kryptoslogic","html_url":"https://github.com/kryptoslogic","followers_url":"https://api.github.com/users/kryptoslogic/followers","following_url":"https://api.github.com/users/kryptoslogic/following{/other_user}","gists_url":"https://api.github.com/users/kryptoslogic/gists{/gist_id}","starred_url":"https://api.github.com/users/kryptoslogic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kryptoslogic/subscriptions","organizations_url":"https://api.github.com/users/kryptoslogic/orgs","repos_url":"https://api.github.com/users/kryptoslogic/repos","events_url":"https://api.github.com/users/kryptoslogic/events{/privacy}","received_events_url":"https://api.github.com/users/kryptoslogic/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/kryptoslogic/haxm","description":"Intel® Hardware Accelerated Execution Manager (Intel® HAXM)","fork":true,"url":"https://api.github.com/repos/kryptoslogic/haxm","forks_url":"https://api.github.com/repos/kryptoslogic/haxm/forks","keys_url":"https://api.github.com/repos/kryptoslogic/haxm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kryptoslogic/haxm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kryptoslogic/haxm/teams","hooks_url":"https://api.github.com/repos/kryptoslogic/haxm/hooks","issue_events_url":"https://api.github.com/repos/kryptoslogic/haxm/issues/events{/number}","events_url":"https://api.github.com/repos/kryptoslogic/haxm/events","assignees_url":"https://api.github.com/repos/kryptoslogic/haxm/assignees{/user}","branches_url":"https://api.github.com/repos/kryptoslogic/haxm/branches{/branch}","tags_url":"https://api.github.com/repos/kryptoslogic/haxm/tags","blobs_url":"https://api.github.com/repos/kryptoslogic/haxm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kryptoslogic/haxm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kryptoslogic/haxm/git/refs{/sha}","trees_url":"https://api.github.com/repos/kryptoslogic/haxm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kryptoslogic/haxm/statuses/{sha}","languages_url":"https://api.github.com/repos/kryptoslogic/haxm/languages","stargazers_url":"https://api.github.com/repos/kryptoslogic/haxm/stargazers","contributors_url":"https://api.github.com/repos/kryptoslogic/haxm/contributors","subscribers_url":"https://api.github.com/repos/kryptoslogic/haxm/subscribers","subscription_url":"https://api.github.com/repos/kryptoslogic/haxm/subscription","commits_url":"https://api.github.com/repos/kryptoslogic/haxm/commits{/sha}","git_commits_url":"https://api.github.com/repos/kryptoslogic/haxm/git/commits{/sha}","comments_url":"https://api.github.com/repos/kryptoslogic/haxm/comments{/number}","issue_comment_url":"https://api.github.com/repos/kryptoslogic/haxm/issues/comments{/number}","contents_url":"https://api.github.com/repos/kryptoslogic/haxm/contents/{+path}","compare_url":"https://api.github.com/repos/kryptoslogic/haxm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kryptoslogic/haxm/merges","archive_url":"https://api.github.com/repos/kryptoslogic/haxm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kryptoslogic/haxm/downloads","issues_url":"https://api.github.com/repos/kryptoslogic/haxm/issues{/number}","pulls_url":"https://api.github.com/repos/kryptoslogic/haxm/pulls{/number}","milestones_url":"https://api.github.com/repos/kryptoslogic/haxm/milestones{/number}","notifications_url":"https://api.github.com/repos/kryptoslogic/haxm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kryptoslogic/haxm/labels{/name}","releases_url":"https://api.github.com/repos/kryptoslogic/haxm/releases{/id}","deployments_url":"https://api.github.com/repos/kryptoslogic/haxm/deployments","created_at":"2018-10-08T20:17:44Z","updated_at":"2018-11-12T22:14:29Z","pushed_at":"2018-11-14T02:05:22Z","git_url":"git://github.com/kryptoslogic/haxm.git","ssh_url":"git@github.com:kryptoslogic/haxm.git","clone_url":"https://github.com/kryptoslogic/haxm.git","svn_url":"https://github.com/kryptoslogic/haxm","homepage":null,"size":672,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"intel:master","ref":"master","sha":"d07ac2cd3b0ba36a12e192d68b7af9c8e6508034","user":{"login":"intel","id":17888862,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE3ODg4ODYy","avatar_url":"https://avatars3.githubusercontent.com/u/17888862?v=4","gravatar_id":"","url":"https://api.github.com/users/intel","html_url":"https://github.com/intel","followers_url":"https://api.github.com/users/intel/followers","following_url":"https://api.github.com/users/intel/following{/other_user}","gists_url":"https://api.github.com/users/intel/gists{/gist_id}","starred_url":"https://api.github.com/users/intel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/intel/subscriptions","organizations_url":"https://api.github.com/users/intel/orgs","repos_url":"https://api.github.com/users/intel/repos","events_url":"https://api.github.com/users/intel/events{/privacy}","received_events_url":"https://api.github.com/users/intel/received_events","type":"Organization","site_admin":false},"repo":{"id":98257850,"node_id":"MDEwOlJlcG9zaXRvcnk5ODI1Nzg1MA==","name":"haxm","full_name":"intel/haxm","private":false,"owner":{"login":"intel","id":17888862,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE3ODg4ODYy","avatar_url":"https://avatars3.githubusercontent.com/u/17888862?v=4","gravatar_id":"","url":"https://api.github.com/users/intel","html_url":"https://github.com/intel","followers_url":"https://api.github.com/users/intel/followers","following_url":"https://api.github.com/users/intel/following{/other_user}","gists_url":"https://api.github.com/users/intel/gists{/gist_id}","starred_url":"https://api.github.com/users/intel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/intel/subscriptions","organizations_url":"https://api.github.com/users/intel/orgs","repos_url":"https://api.github.com/users/intel/repos","events_url":"https://api.github.com/users/intel/events{/privacy}","received_events_url":"https://api.github.com/users/intel/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/intel/haxm","description":"Intel® Hardware Accelerated Execution Manager (Intel® HAXM)","fork":false,"url":"https://api.github.com/repos/intel/haxm","forks_url":"https://api.github.com/repos/intel/haxm/forks","keys_url":"https://api.github.com/repos/intel/haxm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/intel/haxm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/intel/haxm/teams","hooks_url":"https://api.github.com/repos/intel/haxm/hooks","issue_events_url":"https://api.github.com/repos/intel/haxm/issues/events{/number}","events_url":"https://api.github.com/repos/intel/haxm/events","assignees_url":"https://api.github.com/repos/intel/haxm/assignees{/user}","branches_url":"https://api.github.com/repos/intel/haxm/branches{/branch}","tags_url":"https://api.github.com/repos/intel/haxm/tags","blobs_url":"https://api.github.com/repos/intel/haxm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/intel/haxm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/intel/haxm/git/refs{/sha}","trees_url":"https://api.github.com/repos/intel/haxm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/intel/haxm/statuses/{sha}","languages_url":"https://api.github.com/repos/intel/haxm/languages","stargazers_url":"https://api.github.com/repos/intel/haxm/stargazers","contributors_url":"https://api.github.com/repos/intel/haxm/contributors","subscribers_url":"https://api.github.com/repos/intel/haxm/subscribers","subscription_url":"https://api.github.com/repos/intel/haxm/subscription","commits_url":"https://api.github.com/repos/intel/haxm/commits{/sha}","git_commits_url":"https://api.github.com/repos/intel/haxm/git/commits{/sha}","comments_url":"https://api.github.com/repos/intel/haxm/comments{/number}","issue_comment_url":"https://api.github.com/repos/intel/haxm/issues/comments{/number}","contents_url":"https://api.github.com/repos/intel/haxm/contents/{+path}","compare_url":"https://api.github.com/repos/intel/haxm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/intel/haxm/merges","archive_url":"https://api.github.com/repos/intel/haxm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/intel/haxm/downloads","issues_url":"https://api.github.com/repos/intel/haxm/issues{/number}","pulls_url":"https://api.github.com/repos/intel/haxm/pulls{/number}","milestones_url":"https://api.github.com/repos/intel/haxm/milestones{/number}","notifications_url":"https://api.github.com/repos/intel/haxm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/intel/haxm/labels{/name}","releases_url":"https://api.github.com/repos/intel/haxm/releases{/id}","deployments_url":"https://api.github.com/repos/intel/haxm/deployments","created_at":"2017-07-25T03:00:01Z","updated_at":"2018-11-13T09:46:52Z","pushed_at":"2018-11-13T20:07:28Z","git_url":"git://github.com/intel/haxm.git","ssh_url":"git@github.com:intel/haxm.git","clone_url":"https://github.com/intel/haxm.git","svn_url":"https://github.com/intel/haxm","homepage":null,"size":656,"stargazers_count":693,"watchers_count":693,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":123,"mirror_url":null,"archived":false,"open_issues_count":28,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":123,"open_issues":28,"watchers":693,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/intel/haxm/pulls/121"},"html":{"href":"https://github.com/intel/haxm/pull/121"},"issue":{"href":"https://api.github.com/repos/intel/haxm/issues/121"},"comments":{"href":"https://api.github.com/repos/intel/haxm/issues/121/comments"},"review_comments":{"href":"https://api.github.com/repos/intel/haxm/pulls/121/comments"},"review_comment":{"href":"https://api.github.com/repos/intel/haxm/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/intel/haxm/pulls/121/commits"},"statuses":{"href":"https://api.github.com/repos/intel/haxm/statuses/6d36461378e666e9c916bb56dfc040d3fcf49ffe"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"raphaelning"}}