Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/238/?format=api
{ "id": 238, "url": "http://patchwork.ozlabs.org/api/patches/238/?format=api", "web_url": "http://patchwork.ozlabs.org/project/cbe-oss-dev/patch/48C972D7.3030009@am.sony.com/", "project": { "id": 1, "url": "http://patchwork.ozlabs.org/api/projects/1/?format=api", "name": "Cell Broadband Engine development", "link_name": "cbe-oss-dev", "list_id": "cbe-oss-dev.ozlabs.org", "list_email": "cbe-oss-dev@ozlabs.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<48C972D7.3030009@am.sony.com>", "list_archive_url": null, "date": "2008-09-11T19:34:47", "name": "MARS: Kernel syscall add get workload by id", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "448fc6f45d988ce5ba287a548d7321bf2d3fae0e", "submitter": { "id": 127, "url": "http://patchwork.ozlabs.org/api/people/127/?format=api", "name": "Yuji Mano", "email": "yuji.mano@am.sony.com" }, "delegate": { "id": 26, "url": "http://patchwork.ozlabs.org/api/users/26/?format=api", "username": "ymano", "first_name": "Yuji", "last_name": "Mano", "email": "yuji.mano@am.sony.com" }, "mbox": "http://patchwork.ozlabs.org/project/cbe-oss-dev/patch/48C972D7.3030009@am.sony.com/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/238/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/238/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<cbe-oss-dev-bounces+patchwork=ozlabs.org@ozlabs.org>", "X-Original-To": [ "patchwork@ozlabs.org", "cbe-oss-dev@ozlabs.org" ], "Delivered-To": [ "patchwork@ozlabs.org", "cbe-oss-dev@ozlabs.org" ], "Received": [ "from ozlabs.org (localhost [127.0.0.1])\n\tby ozlabs.org (Postfix) with ESMTP id C69D9DE417\n\tfor <patchwork@ozlabs.org>; Fri, 12 Sep 2008 06:37:43 +1000 (EST)", "from WA4EHSOBE002.bigfish.com (outbound-wa4.frontbridge.com\n\t[216.32.181.16]) by ozlabs.org (Postfix) with ESMTP id CE836DE00B\n\tfor <cbe-oss-dev@ozlabs.org>; Fri, 12 Sep 2008 06:37:14 +1000 (EST)", "from mail175-wa4-R.bigfish.com (10.8.14.253) by\n\tWA4EHSOBE002.bigfish.com (10.8.40.22) with Microsoft SMTP Server id\n\t8.1.291.1; Thu, 11 Sep 2008 20:37:11 +0000", "from mail175-wa4 (localhost.localdomain [127.0.0.1])\tby\n\tmail175-wa4-R.bigfish.com (Postfix) with ESMTP id B1180A285A7\tfor\n\t<cbe-oss-dev@ozlabs.org>; Thu, 11 Sep 2008 20:37:11 +0000 (UTC)", "by mail175-wa4 (MessageSwitch) id 1221165429300407_22161; Thu, 11\n\tSep 2008 20:37:09 +0000 (UCT)", "from mail8.fw-sd.sony.com (mail8.fw-sd.sony.com [160.33.66.75])\tby\n\tmail175-wa4.bigfish.com (Postfix) with ESMTP id 2FB74158058\tfor\n\t<cbe-oss-dev@ozlabs.org>; Thu, 11 Sep 2008 20:37:09 +0000 (UTC)", "from mail3.sjc.in.sel.sony.com (mail3.sjc.in.sel.sony.com\n\t[43.134.1.211])\tby mail8.fw-sd.sony.com (8.14.2/8.14.2) with ESMTP id\n\tm8BKb8Il021155\tfor <cbe-oss-dev@ozlabs.org>;\n\tThu, 11 Sep 2008 20:37:08 GMT", "from USSDIXIM02.am.sony.com (ussdixim02.am.sony.com\n\t[43.130.140.34])\n\tby mail3.sjc.in.sel.sony.com (8.12.11/8.12.11) with ESMTP id\n\tm8BKb7t9021726\n\tfor <cbe-oss-dev@ozlabs.org>; Thu, 11 Sep 2008 20:37:08 GMT", "from ussdixms03.am.sony.com ([43.130.140.23]) by\n\tUSSDIXIM02.am.sony.com with Microsoft SMTPSVC(5.0.2195.6713);\n\tThu, 11 Sep 2008 13:37:07 -0700", "from [43.135.148.175] ([43.135.148.175]) by ussdixms03.am.sony.com\n\twith Microsoft SMTPSVC(5.0.2195.6713);\n\tThu, 11 Sep 2008 13:37:07 -0700" ], "X-BigFish": "VS3(zzzz10c0j10d3izzz2dh6bh61h)", "X-Spam-TCS-SCL": "0:0", "X-FB-SS": "5,", "Message-ID": "<48C972D7.3030009@am.sony.com>", "Date": "Thu, 11 Sep 2008 12:34:47 -0700", "From": "Yuji Mano <yuji.mano@am.sony.com>", "User-Agent": "Thunderbird 2.0.0.5 (X11/20070719)", "MIME-Version": "1.0", "To": "CBE Development <cbe-oss-dev@ozlabs.org>", "X-Enigmail-Version": "0.95.7", "X-OriginalArrivalTime": "11 Sep 2008 20:37:07.0241 (UTC)\n\tFILETIME=[28456190:01C9144E]", "X-SEL-encryption-scan": "scanned", "Subject": "[Cbe-oss-dev] [PATCH 05/11]MARS: Kernel syscall add get workload by\n\tid", "X-BeenThere": "cbe-oss-dev@ozlabs.org", "X-Mailman-Version": "2.1.11", "Precedence": "list", "List-Id": "Discussion about Open Source Software for the Cell Broadband Engine\n\t<cbe-oss-dev.ozlabs.org>", "List-Unsubscribe": "<https://ozlabs.org/mailman/options/cbe-oss-dev>,\n\t<mailto:cbe-oss-dev-request@ozlabs.org?subject=unsubscribe>", "List-Archive": "<http://ozlabs.org/pipermail/cbe-oss-dev>", "List-Post": "<mailto:cbe-oss-dev@ozlabs.org>", "List-Help": "<mailto:cbe-oss-dev-request@ozlabs.org?subject=help>", "List-Subscribe": "<https://ozlabs.org/mailman/listinfo/cbe-oss-dev>,\n\t<mailto:cbe-oss-dev-request@ozlabs.org?subject=subscribe>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Sender": "cbe-oss-dev-bounces+patchwork=ozlabs.org@ozlabs.org", "Errors-To": "cbe-oss-dev-bounces+patchwork=ozlabs.org@ozlabs.org" }, "content": "This adds a new MARS kernel syscall 'mars_get_workload_by_id' to allow for the\ntask library to grab an instance of a workload context other than the one\ncurrently running. This is needed when a task waits for completion of another\ntask, and needs to obtain the exit_code of the completed task from the task\ncontext.\n\nThis also renames the previously existing MARS kernel syscall\n'mars_get_workload_context' to 'mars_get_workload'.\n\nSigned-off-by: Yuji Mano <yuji.mano@am.sony.com>", "diff": "--- a/include/mpu/mars/mars_kernel.h\n+++ b/include/mpu/mars/mars_kernel.h\n@@ -62,7 +62,9 @@ struct mars_kernel_syscalls {\n \tuint32_t (*get_kernel_id)(void);\n \tuint16_t (*get_workload_id)(void);\n \tuint64_t (*get_workload_ea)(void);\n-\tstruct mars_workload_context *(*get_workload_context)(void);\n+\tstruct mars_workload_context *(*get_workload)(void);\n+\tstruct mars_workload_context *(*get_workload_by_id)\n+\t\t(uint16_t workload_id);\n \n \tvoid (*init)(void);\n \tvoid (*exit)(void);\n@@ -86,7 +88,8 @@ uint64_t syscall_get_mars_context_ea(voi\n uint32_t syscall_get_kernel_id(void);\n uint16_t syscall_get_workload_id(void);\n uint64_t syscall_get_workload_ea(void);\n-struct mars_workload_context *syscall_get_workload_context(void);\n+struct mars_workload_context *syscall_get_workload(void);\n+struct mars_workload_context *syscall_get_workload_by_id(uint16_t workload_id);\n \n void syscall_setup(void);\n void syscall_init(void);\n@@ -107,7 +110,8 @@ void registers_restore(void);\n /* workload specific functions */\n uint16_t workload_get_id(void);\n uint64_t workload_get_ea(void);\n-struct mars_workload_context * workload_get_context(void);\n+struct mars_workload_context *workload_get(void);\n+struct mars_workload_context *workload_get_by_id(uint16_t workload_id);\n \n void workload_exec(void);\n void workload_exit(void);\n--- a/include/mpu/mars/mars_syscalls.h\n+++ b/include/mpu/mars/mars_syscalls.h\n@@ -48,7 +48,8 @@ uint64_t mars_get_mars_context_ea(void);\n uint32_t mars_get_kernel_id(void);\n uint16_t mars_get_workload_id(void);\n uint64_t mars_get_workload_ea(void);\n-struct mars_workload_context *mars_get_workload_context(void);\n+struct mars_workload_context *mars_get_workload(void);\n+struct mars_workload_context *mars_get_workload_by_id(uint16_t workload_id);\n \n void mars_init(void);\n void mars_exit(void);\n--- a/src/mpu/kernel/mars_kernel_syscalls.c\n+++ b/src/mpu/kernel/mars_kernel_syscalls.c\n@@ -53,7 +53,8 @@ void syscall_setup(void)\n \tkernel_syscalls.get_kernel_id\t\t= syscall_get_kernel_id;\n \tkernel_syscalls.get_workload_id\t\t= syscall_get_workload_id;\n \tkernel_syscalls.get_workload_ea\t\t= syscall_get_workload_ea;\n-\tkernel_syscalls.get_workload_context\t= syscall_get_workload_context;\n+\tkernel_syscalls.get_workload\t\t= syscall_get_workload;\n+\tkernel_syscalls.get_workload_by_id\t= syscall_get_workload_by_id;\n \tkernel_syscalls.init\t\t\t= syscall_init;\n \tkernel_syscalls.exit\t\t\t= syscall_exit;\n \tkernel_syscalls.yield\t\t\t= syscall_yield;\n@@ -85,9 +86,14 @@ uint64_t syscall_get_workload_ea(void)\n \treturn workload_get_ea();\n }\n \n-struct mars_workload_context *syscall_get_workload_context(void)\n+struct mars_workload_context *syscall_get_workload(void)\n {\n-\treturn workload_get_context();\n+\treturn workload_get();\n+}\n+\n+struct mars_workload_context *syscall_get_workload_by_id(uint16_t workload_id)\n+{\n+\treturn workload_get_by_id(workload_id);\n }\n \n void syscall_init(void)\n--- a/src/mpu/kernel/mars_kernel_workload.c\n+++ b/src/mpu/kernel/mars_kernel_workload.c\n@@ -55,11 +55,35 @@ uint64_t workload_get_ea(void)\n \treturn workload_ea;\n }\n \n-struct mars_workload_context *workload_get_context(void)\n+struct mars_workload_context *workload_get(void)\n {\n \treturn &workload;\n }\n \n+struct mars_workload_context *workload_get_by_id(uint16_t workload_id)\n+{\n+\tMARS_CHECK_RET(workload_id < MARS_WORKLOAD_MAX, NULL);\n+\n+\tstatic struct mars_workload_context requested_workload;\n+\tuint64_t requested_workload_ea;\n+\n+\t/* workload id is same as current workload so return local copy */\n+\tif (workload_id == workload_index)\n+\t\treturn &workload;\n+\n+\t/* get ea of workload to get */\n+\trequested_workload_ea = queue_header.context_ea +\n+\t\t\tworkload_id * sizeof(struct mars_workload_context);\n+\n+\t/* dma the workload context code into LS from main memory */\n+\tmars_dma_get_and_wait((void *)&requested_workload,\n+\t\t\t\trequested_workload_ea,\n+\t\t\t\tsizeof(struct mars_workload_context),\n+\t\t\t\tMARS_DMA_TAG);\n+\n+\treturn &requested_workload;\n+}\n+\n void workload_exec(void)\n {\n \t/* set current workload state to running */\n--- a/src/mpu/lib/mars_syscalls.c\n+++ b/src/mpu/lib/mars_syscalls.c\n@@ -60,9 +60,14 @@ uint64_t mars_get_workload_ea(void)\n \treturn (*mars_kernel_syscalls->get_workload_ea)();\n }\n \n-struct mars_workload_context *mars_get_workload_context(void)\n+struct mars_workload_context *mars_get_workload(void)\n {\n-\treturn (*mars_kernel_syscalls->get_workload_context)();\n+\treturn (*mars_kernel_syscalls->get_workload)();\n+}\n+\n+struct mars_workload_context *mars_get_workload_by_id(uint16_t workload_id)\n+{\n+\treturn (*mars_kernel_syscalls->get_workload_by_id)(workload_id);\n }\n \n void mars_init(void)\n--- a/src/mpu/lib/mars_task.c\n+++ b/src/mpu/lib/mars_task.c\n@@ -50,7 +50,7 @@ int mars_task_yield(void)\n {\n \tstruct mars_task_context *task;\n \n-\ttask = (struct mars_task_context *)mars_get_workload_context();\n+\ttask = (struct mars_task_context *)mars_get_workload();\n \n \t/* make sure task context has a context save area */\n \tMARS_CHECK_RET(task->context_save_size && task->context_save_area,\n@@ -77,7 +77,7 @@ int mars_task_wait(struct mars_task_id *\n \tint ret;\n \tstruct mars_task_context *task;\n \n-\ttask = (struct mars_task_context *)mars_get_workload_context();\n+\ttask = (struct mars_task_context *)mars_get_workload();\n \n \t/* make sure task context has a context save area */\n \tMARS_CHECK_RET(task->context_save_size && task->context_save_area,\n@@ -107,7 +107,7 @@ const struct mars_task_id *mars_task_get\n {\n \tstruct mars_task_context *task;\n \n-\ttask = (struct mars_task_context *)mars_get_workload_context();\n+\ttask = (struct mars_task_context *)mars_get_workload();\n \n \treturn &task->id;\n }\n@@ -116,7 +116,7 @@ const char *mars_task_get_name(void)\n {\n \tstruct mars_task_context *task;\n \n-\ttask = (struct mars_task_context *)mars_get_workload_context();\n+\ttask = (struct mars_task_context *)mars_get_workload();\n \n \treturn (const char *)task->id.name;\n }\n--- a/src/mpu/lib/mars_task_barrier.c\n+++ b/src/mpu/lib/mars_task_barrier.c\n@@ -75,7 +75,7 @@ int mars_task_barrier_notify(uint64_t ba\n \tint i;\n \tstruct mars_task_context *task;\n \n-\ttask = (struct mars_task_context *)mars_get_workload_context();\n+\ttask = (struct mars_task_context *)mars_get_workload();\n \n \t/* make sure task context has a context save area */\n \tMARS_CHECK_RET(task->context_save_size && task->context_save_area,\n@@ -157,7 +157,7 @@ int mars_task_barrier_wait(uint64_t barr\n \tint i;\n \tstruct mars_task_context *task;\n \n-\ttask = (struct mars_task_context *)mars_get_workload_context();\n+\ttask = (struct mars_task_context *)mars_get_workload();\n \n \t/* make sure task context has a context save area */\n \tMARS_CHECK_RET(task->context_save_size && task->context_save_area,\n--- a/src/mpu/lib/mars_task_event_flag.c\n+++ b/src/mpu/lib/mars_task_event_flag.c\n@@ -172,7 +172,7 @@ int mars_task_event_flag_wait(uint64_t e\n \tint wait = 0;\n \tstruct mars_task_context *task;\n \n-\ttask = (struct mars_task_context *)mars_get_workload_context();\n+\ttask = (struct mars_task_context *)mars_get_workload();\n \n \t/* make sure task context has a context save area */\n \tMARS_CHECK_RET(task->context_save_size && task->context_save_area,\n--- a/src/mpu/lib/mars_task_queue.c\n+++ b/src/mpu/lib/mars_task_queue.c\n@@ -296,7 +296,7 @@ static int pop(uint64_t queue_ea, void *\n \n \tstruct mars_task_context *task;\n \n-\ttask = (struct mars_task_context *)mars_get_workload_context();\n+\ttask = (struct mars_task_context *)mars_get_workload();\n \n \t/* make sure task context has a context save area */\n \tMARS_CHECK_RET(task->context_save_size && task->context_save_area,\n--- a/src/mpu/lib/mars_task_semaphore.c\n+++ b/src/mpu/lib/mars_task_semaphore.c\n@@ -75,7 +75,7 @@ int mars_task_semaphore_acquire(uint64_t\n \n \tstruct mars_task_context *task;\n \n-\ttask = (struct mars_task_context *)mars_get_workload_context();\n+\ttask = (struct mars_task_context *)mars_get_workload();\n \n \t/* make sure task context has a context save area */\n \tMARS_CHECK_RET(task->context_save_size && task->context_save_area,\n--- a/src/mpu/lib/mars_task_signal.c\n+++ b/src/mpu/lib/mars_task_signal.c\n@@ -52,7 +52,7 @@ int mars_task_signal_wait(void)\n {\n \tstruct mars_task_context *task;\n \n-\ttask = (struct mars_task_context *)mars_get_workload_context();\n+\ttask = (struct mars_task_context *)mars_get_workload();\n \n \t/* make sure task context has a context save area */\n \tMARS_CHECK_RET(task->context_save_size && task->context_save_area,\n", "prefixes": [] }