{"action":"opened","number":7632,"pull_request":{"url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/7632","id":188772589,"html_url":"https://github.com/zephyrproject-rtos/zephyr/pull/7632","diff_url":"https://github.com/zephyrproject-rtos/zephyr/pull/7632.diff","patch_url":"https://github.com/zephyrproject-rtos/zephyr/pull/7632.patch","issue_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/7632","number":7632,"state":"open","locked":false,"title":"userspace: compartmentalized app memory organization","user":{"login":"cmSAMIAMnot","id":39346733,"avatar_url":"https://avatars1.githubusercontent.com/u/39346733?v=4","gravatar_id":"","url":"https://api.github.com/users/cmSAMIAMnot","html_url":"https://github.com/cmSAMIAMnot","followers_url":"https://api.github.com/users/cmSAMIAMnot/followers","following_url":"https://api.github.com/users/cmSAMIAMnot/following{/other_user}","gists_url":"https://api.github.com/users/cmSAMIAMnot/gists{/gist_id}","starred_url":"https://api.github.com/users/cmSAMIAMnot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cmSAMIAMnot/subscriptions","organizations_url":"https://api.github.com/users/cmSAMIAMnot/orgs","repos_url":"https://api.github.com/users/cmSAMIAMnot/repos","events_url":"https://api.github.com/users/cmSAMIAMnot/events{/privacy}","received_events_url":"https://api.github.com/users/cmSAMIAMnot/received_events","type":"User","site_admin":false},"body":"Summary: revised attempt at addressing issue 6290.  The\r\nfollowing provides an alternative to using\r\nCONFIG_APPLICATION_MEMORY by compartmentalizing data into\r\nMemory Domains.  Dependent on MPU limitations, supports\r\ncompartmentalized Memory Domains for 1...N logical\r\napplications.  This is considered an initial attempt at\r\ndesigning flexible compartmentalized Memory Domains for\r\nmultiple logical applications and, with the provided python\r\nscript and edited CMakeLists.txt, provides support for power\r\nof 2 aligned MPU architectures.\r\n\r\nOverview: The current patch uses qualifiers to group data into\r\nsubsections.  The qualifier usage allows for dynamic subsection\r\ncreation and affords the developer a large amount of flexibility\r\nin the grouping, naming, and size of the resulting partitions and\r\ndomains that are built on these subsections. By additional macro\r\ncalls, functions are created that help calculate the size,\r\naddress, and permissions for the subsections and enable the\r\ndeveloper to control application data in specified partitions and\r\nmemory domains.\r\n\r\nBackground: Initial attempts focused on creating a single\r\nsection in the linker script that then contained internally\r\ngrouped variables/data to allow MPU/MMU alignment and protection.\r\nThis did not provide additional functionality beyond\r\nCONFIG_APPLICATION_MEMORY as we were unable to reliably group\r\ndata or determine their grouping via exported linker symbols.\r\nThus, the resulting decision was made to dynamically create\r\nsubsections using the current qualifier method. An attempt to\r\ngroup the data by object file was tested, but found that this\r\nbroke applications such as ztest where two object files are\r\ncreated: ztest and main.  This also creates an issue of grouping\r\nthe two object files together in the same memory domain while\r\nalso allowing for compartmenting other data among threads.\r\n\r\nBecause it is not possible to know a) the name of the partition\r\nand thus the symbol in the linker, b) the size of all the data\r\nin the subsection, nor c) the overall number of partitions\r\ncreated by the developer, it was not feasible to align the\r\nsubsections at compile time without using dynamically generated\r\nlinker script for MPU architectures requiring power of 2\r\nalignment.\r\n\r\nIn order to provide support for MPU architectures that require a\r\npower of 2 alignment, a python script is run at build prior to\r\nwhen linker_priv_stacks.cmd is generated.  This script scans the\r\nbuilt object files for all possible partitions and the names given\r\nto them. It then generates a linker file (app_smem.ld) that is\r\nincluded in the main linker.ld file.  This app_smem.ld allows the\r\ncompiler and linker to then create each subsection and align to\r\nthe next power of 2.\r\n\r\nUsage:\r\n - Requires: app_memory/app_memdomain.h .\r\n - _app_dmem(id) marks a variable to be placed into a data\r\nsection for memory partition id.\r\n - _app_bmem(id) marks a variable to be placed into a bss\r\nsection for memory partition id.\r\n - These are seen in the linker.map as \"data_smem_id\" and\r\n\"data_smem_idb\".\r\n - To create a k_mem_partition, call the macro\r\napp_mem_partition(part0) where \"part0\" is the name then used to\r\nrefer to that partition. This macro only creates a function and\r\nnecessary data structures for the later \"initialization\".\r\n - To create a memory domain for the partition, the macro\r\napp_mem_domain(dom0) is called where \"dom0\" is the name then\r\nused for the memory domain.\r\n - To initialize the partition (effectively adding the partition\r\nto a linked list), init_part_part0() is called. This is followed\r\nby init_app_memory(), which walks all partitions in the linked\r\nlist and calculates the sizes for each partition.\r\n - Once the partition is initialized, the domain can be\r\ninitialized with init_domain_dom0(part0) which initializes the\r\ndomain with partition part0.\r\n - After the domain has been initialized, the current thread\r\ncan be added using add_thread_dom0(k_current_get()).\r\n - The code used in ztests ans kernel/init has been added under\r\na conditional #ifdef to isolate the code from other tests.\r\nThe userspace test CMakeLists.txt file has commands to insert\r\nthe CONFIG_APP_SHARED_MEM definition into the required build\r\ntargets.\r\n  Example:\r\n        /* create partition at top of file outside functions */\r\n        app_mem_partition(part0);\r\n        /* create domain */\r\n        app_mem_domain(dom0);\r\n        _app_dmem(dom0) int var1;\r\n        _app_bmem(dom0) static volatile int var2;\r\n\r\n        int main()\r\n        {\r\n                init_part_part0();\r\n                init_app_memory();\r\n                init_domain_dom0(part0);\r\n                add_thread_dom0(k_current_get());\r\n                ...\r\n        }\r\n\r\n - If multiple partitions are being created, a variadic\r\npreprocessor macro can be used as provided in\r\napp_macro_support.h:\r\n\r\n        FOR_EACH(app_mem_partition, part0, part1, part2);\r\n\r\nor, for multiple domains, similarly:\r\n\r\n        FOR_EACH(app_mem_domain, dom0, dom1);\r\n\r\nSimilarly, the init_part_* can also be used in the macro:\r\n\r\n        FOR_EACH(init_part, part0, part1, part2);\r\n\r\nTesting:\r\n - This has been successfully tested on qemu_x86 and the\r\nARM frdm_k64f board.  It compiles and builds power of 2\r\naligned subsections for the linker script on the 96b_carbon\r\nboards.  These power of 2 alignments have been checked by\r\nhand and are viewable in the zephyr.map file that is\r\nproduced during build. However, due to a shortage of\r\navailable MPU regions on the 96b_carbon board, we are unable\r\nto test this.\r\n - When run on the 96b_carbon board, the test suite will\r\nenter execution, but each individaul test will fail due to\r\nan MPU FAULT.  This is expected as the required number of\r\nMPU regions exceeds the number allowed due to the static\r\nallocation. As the MPU driver does not detect this issue,\r\nthe fault occurs because the data being accessed has been\r\nplaced outside the active MPU region.\r\n - This now compiles successfully for the ARC boards\r\nem_starterkit_em7d and em_starterkit_em7d_v22. However,\r\nas we lack ARC hardware to run this build on, we are unable\r\nto test this build.\r\n\r\nCurrent known issues:\r\n1) While the script and edited CMakeLists.txt creates the\r\nability to align to the next power of 2, this does not\r\naddress the shortage of available MPU regions on certain\r\ndevices (e.g. 96b_carbon).  In testing the APB and PPB\r\nregions were commented out.\r\n2) checkpatch.pl lists several issues regarding the\r\nfollowing:\r\na) Complex macros. The FOR_EACH macros as defined in\r\napp_macro_support.h are listed as complex macros needing\r\nparentheses.  Adding parentheses breaks their\r\nfunctionality, and we have otherwise been unable to\r\nresolve the reported error.\r\nb) __aligned() preferred. The _app_dmem_pad() and\r\n_app_bmem_pad() macros give warnings that __aligned()\r\nis preferred. Prior iterations had this implementation,\r\nwhich resulted in errors due to \"complex macros\".\r\nc) Trailing semicolon. The macro init_part(name) has\r\na trailing semicolon as the semicolon is needed for the\r\ninlined macro call that is generated when this macro\r\nexpands.\r\n\r\nThe previous pull #6827 has been passed to me to follow up.\r\n\r\nSigned-off-by: Joshua Domagalski <jedomag@tycho.nsa.gov>\r\n\r\nSigned-off-by: Shawn Mosley <smmosle@tycho.nsa.gov>","created_at":"2018-05-17T15:17:12Z","updated_at":"2018-05-17T15:17:12Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/7632/commits","review_comments_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/7632/comments","review_comment_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/7632/comments","statuses_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/statuses/f64a1172533cd6e3c475d485e80e54faed3ad729","head":{"label":"cmSAMIAMnot:app_shared_smem","ref":"app_shared_smem","sha":"f64a1172533cd6e3c475d485e80e54faed3ad729","user":{"login":"cmSAMIAMnot","id":39346733,"avatar_url":"https://avatars1.githubusercontent.com/u/39346733?v=4","gravatar_id":"","url":"https://api.github.com/users/cmSAMIAMnot","html_url":"https://github.com/cmSAMIAMnot","followers_url":"https://api.github.com/users/cmSAMIAMnot/followers","following_url":"https://api.github.com/users/cmSAMIAMnot/following{/other_user}","gists_url":"https://api.github.com/users/cmSAMIAMnot/gists{/gist_id}","starred_url":"https://api.github.com/users/cmSAMIAMnot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cmSAMIAMnot/subscriptions","organizations_url":"https://api.github.com/users/cmSAMIAMnot/orgs","repos_url":"https://api.github.com/users/cmSAMIAMnot/repos","events_url":"https://api.github.com/users/cmSAMIAMnot/events{/privacy}","received_events_url":"https://api.github.com/users/cmSAMIAMnot/received_events","type":"User","site_admin":false},"repo":{"id":133707772,"name":"zephyr","full_name":"cmSAMIAMnot/zephyr","owner":{"login":"cmSAMIAMnot","id":39346733,"avatar_url":"https://avatars1.githubusercontent.com/u/39346733?v=4","gravatar_id":"","url":"https://api.github.com/users/cmSAMIAMnot","html_url":"https://github.com/cmSAMIAMnot","followers_url":"https://api.github.com/users/cmSAMIAMnot/followers","following_url":"https://api.github.com/users/cmSAMIAMnot/following{/other_user}","gists_url":"https://api.github.com/users/cmSAMIAMnot/gists{/gist_id}","starred_url":"https://api.github.com/users/cmSAMIAMnot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cmSAMIAMnot/subscriptions","organizations_url":"https://api.github.com/users/cmSAMIAMnot/orgs","repos_url":"https://api.github.com/users/cmSAMIAMnot/repos","events_url":"https://api.github.com/users/cmSAMIAMnot/events{/privacy}","received_events_url":"https://api.github.com/users/cmSAMIAMnot/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/cmSAMIAMnot/zephyr","description":"Primary GIT Repository for the Zephyr Project","fork":true,"url":"https://api.github.com/repos/cmSAMIAMnot/zephyr","forks_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/forks","keys_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/teams","hooks_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/hooks","issue_events_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/issues/events{/number}","events_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/events","assignees_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/assignees{/user}","branches_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/branches{/branch}","tags_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/tags","blobs_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/git/refs{/sha}","trees_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/statuses/{sha}","languages_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/languages","stargazers_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/stargazers","contributors_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/contributors","subscribers_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/subscribers","subscription_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/subscription","commits_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/commits{/sha}","git_commits_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/git/commits{/sha}","comments_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/comments{/number}","issue_comment_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/issues/comments{/number}","contents_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/contents/{+path}","compare_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/merges","archive_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/downloads","issues_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/issues{/number}","pulls_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/pulls{/number}","milestones_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/milestones{/number}","notifications_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/labels{/name}","releases_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/releases{/id}","deployments_url":"https://api.github.com/repos/cmSAMIAMnot/zephyr/deployments","created_at":"2018-05-16T18:28:45Z","updated_at":"2018-05-16T18:29:25Z","pushed_at":"2018-05-17T15:04:29Z","git_url":"git://github.com/cmSAMIAMnot/zephyr.git","ssh_url":"git@github.com:cmSAMIAMnot/zephyr.git","clone_url":"https://github.com/cmSAMIAMnot/zephyr.git","svn_url":"https://github.com/cmSAMIAMnot/zephyr","homepage":"https://zephyrproject.org/doc","size":109447,"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":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"zephyrproject-rtos:master","ref":"master","sha":"2514f3c837260a946e497bcc7f0bd317fd4a5b2a","user":{"login":"zephyrproject-rtos","id":19595895,"avatar_url":"https://avatars2.githubusercontent.com/u/19595895?v=4","gravatar_id":"","url":"https://api.github.com/users/zephyrproject-rtos","html_url":"https://github.com/zephyrproject-rtos","followers_url":"https://api.github.com/users/zephyrproject-rtos/followers","following_url":"https://api.github.com/users/zephyrproject-rtos/following{/other_user}","gists_url":"https://api.github.com/users/zephyrproject-rtos/gists{/gist_id}","starred_url":"https://api.github.com/users/zephyrproject-rtos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zephyrproject-rtos/subscriptions","organizations_url":"https://api.github.com/users/zephyrproject-rtos/orgs","repos_url":"https://api.github.com/users/zephyrproject-rtos/repos","events_url":"https://api.github.com/users/zephyrproject-rtos/events{/privacy}","received_events_url":"https://api.github.com/users/zephyrproject-rtos/received_events","type":"Organization","site_admin":false},"repo":{"id":59771425,"name":"zephyr","full_name":"zephyrproject-rtos/zephyr","owner":{"login":"zephyrproject-rtos","id":19595895,"avatar_url":"https://avatars2.githubusercontent.com/u/19595895?v=4","gravatar_id":"","url":"https://api.github.com/users/zephyrproject-rtos","html_url":"https://github.com/zephyrproject-rtos","followers_url":"https://api.github.com/users/zephyrproject-rtos/followers","following_url":"https://api.github.com/users/zephyrproject-rtos/following{/other_user}","gists_url":"https://api.github.com/users/zephyrproject-rtos/gists{/gist_id}","starred_url":"https://api.github.com/users/zephyrproject-rtos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zephyrproject-rtos/subscriptions","organizations_url":"https://api.github.com/users/zephyrproject-rtos/orgs","repos_url":"https://api.github.com/users/zephyrproject-rtos/repos","events_url":"https://api.github.com/users/zephyrproject-rtos/events{/privacy}","received_events_url":"https://api.github.com/users/zephyrproject-rtos/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/zephyrproject-rtos/zephyr","description":"Primary GIT Repository for the Zephyr Project","fork":false,"url":"https://api.github.com/repos/zephyrproject-rtos/zephyr","forks_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/forks","keys_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/teams","hooks_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/hooks","issue_events_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/events{/number}","events_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/events","assignees_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/assignees{/user}","branches_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/branches{/branch}","tags_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/tags","blobs_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/git/refs{/sha}","trees_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/statuses/{sha}","languages_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/languages","stargazers_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/stargazers","contributors_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/contributors","subscribers_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/subscribers","subscription_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/subscription","commits_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/commits{/sha}","git_commits_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/git/commits{/sha}","comments_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/comments{/number}","issue_comment_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/comments{/number}","contents_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/contents/{+path}","compare_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/merges","archive_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/downloads","issues_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues{/number}","pulls_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls{/number}","milestones_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/milestones{/number}","notifications_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/labels{/name}","releases_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/releases{/id}","deployments_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/deployments","created_at":"2016-05-26T17:54:19Z","updated_at":"2018-05-17T14:54:29Z","pushed_at":"2018-05-17T14:53:46Z","git_url":"git://github.com/zephyrproject-rtos/zephyr.git","ssh_url":"git@github.com:zephyrproject-rtos/zephyr.git","clone_url":"https://github.com/zephyrproject-rtos/zephyr.git","svn_url":"https://github.com/zephyrproject-rtos/zephyr","homepage":"https://zephyrproject.org/doc","size":109765,"stargazers_count":838,"watchers_count":838,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":607,"mirror_url":null,"archived":false,"open_issues_count":892,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":607,"open_issues":892,"watchers":838,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/7632"},"html":{"href":"https://github.com/zephyrproject-rtos/zephyr/pull/7632"},"issue":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/7632"},"comments":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/7632/comments"},"review_comments":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/7632/comments"},"review_comment":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/7632/commits"},"statuses":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/statuses/f64a1172533cd6e3c475d485e80e54faed3ad729"}},"author_association":"NONE","merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":true,"commits":1,"additions":606,"deletions":27,"changed_files":20}}
{"actor":{"display_login":"cmSAMIAMnot"}}