static int resource_create_and_connect_sock(void)
{
int sock;
- socklen_t size;
+ socklen_t len;
struct sockaddr_un sockaddr;
sock = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0);
sockaddr.sun_family = AF_UNIX;
strncpy(sockaddr.sun_path, SOCK_PATH, strlen(SOCK_PATH) + 1);
- size = sizeof(sockaddr);
+ len = sizeof(sockaddr);
- if (connect(sock, (struct sockaddr *)&sockaddr, size) < 0) {
+ if (connect(sock, (struct sockaddr *)&sockaddr, len) < 0) {
_E("[CPU-BOOSTING-PLUGIN] Failed to connect to the resourced module");
close(sock);
return -1;
int byte;
pid_t tid;
- if (input.pid.pid > 0)
- input.body_size = 0;
+ if (input.pid.pid != 0)
+ input.body_len = 0;
else {
if (input.pid.tid == NULL) {
tid = gettid();
input.pid.tid_count = 1;
}
- input.body_size = input.pid.tid_count * sizeof(pid_t);
+ input.body_len = input.pid.tid_count * sizeof(pid_t);
}
byte = send(sock, (const void *)&input, sizeof(input), 0);
if (byte != sizeof(input)) {
- char error_buf[1024];
- strerror_r(errno, error_buf, sizeof(error_buf));
-
- _E("[CPU-BOOSTING-PLUGIN] error is based on %s", error_buf);
+ _E("[CPU-BOOSTING-PLUGIN] error is based on %m");
_E("[CPU-BOOSTING-PLUGIN] client input size is %u, but sent size is %d",
(unsigned int)sizeof(input), byte);
return -1;
}
- if (input.body_size > 0) {
- byte = send(sock, (const void *)input.pid.tid, input.body_size, 0);
- if (byte != input.body_size) {
- char error_buf[1024];
- strerror_r(errno, error_buf, sizeof(error_buf));
+ if (input.body_len > 0) {
+ switch (input.command) {
+ case CPU_BOOSTING_COMMAND_SET:
+ case CPU_BOOSTING_COMMAND_CLEAR:
+ case CPU_BOOSTING_COMMAND_GET:
+ case CPU_BOOSTING_COMMAND_REGISTER_DESTINATION:
+ byte = send(sock, (const void *)input.pid.tid, input.body_len, 0);
+ if (byte != input.body_len) {
+ _E("[CPU-BOOSTING-PLUGIN] error is based on %m");
+ _E("[CPU-BOOSTING-PLUGIN] client input size is %d, but sent size is %d",
+ input.body_len, byte);
+ return -1;
+ }
+ break;
+ }
+ }
- _E("[CPU-BOOSTING-PLUGIN] error is based on %s", error_buf);
+ if (input.dest && input.dest_len > 0) {
+ byte = send(sock, (const void *)input.dest, input.dest_len, 0);
+ if (byte != input.dest_len) {
+ _E("[CPU-BOOSTING-PLUGIN] error is based on %m");
_E("[CPU-BOOSTING-PLUGIN] client input size is %d, but sent size is %d",
- input.body_size, byte);
+ input.dest_len, byte);
return -1;
}
}
if ((sock = resource_create_and_connect_sock()) < 0)
return -1;
+ memset(&input, 0, sizeof(input));
input.command = CPU_BOOSTING_COMMAND_SET;
input.pid = pid;
input.level = level;
if ((sock = resource_create_and_connect_sock()) < 0)
return -1;
+ memset(&input, 0, sizeof(input));
input.command = CPU_BOOSTING_COMMAND_CLEAR;
input.pid = pid;
input.level = CPU_BOOSTING_LEVEL_NONE;
- input.timeout_msec = 0;
ret = resource_cpu_boosting_send_command(input, sock);
close(sock);
if ((sock = resource_create_and_connect_sock()) < 0)
return -1;
+ memset(&input, 0, sizeof(input));
input.command = CPU_BOOSTING_COMMAND_GET;
input.pid = pid;
input.level = CPU_BOOSTING_LEVEL_NONE;
- input.timeout_msec = 0;
ret = resource_cpu_boosting_send_command(input, sock);
if (ret < 0)
API int resource_set_cpu_inheritance (pid_t source_tid, const char *dest_process, int timeout_msec)
{
- _D("[CPU-BOOSTING-PLUGIN] %s called", __func__);
+ int ret;
+ int sock;
+ cpu_boosting_input_t input;
- return 0;
+ if (source_tid < 0)
+ return -1;
+ else if (source_tid == 0)
+ source_tid = gettid();
+
+ if (dest_process == NULL)
+ return -1;
+
+ if ((sock = resource_create_and_connect_sock()) < 0)
+ return -1;
+
+ memset(&input, 0, sizeof(input));
+ input.command = CPU_BOOSTING_COMMAND_SET_INHERITANCE;
+ input.pid.pid = source_tid;
+ input.timeout_msec = timeout_msec;
+ input.dest = dest_process;
+ input.dest_len = strlen(dest_process);
+
+ ret = resource_cpu_boosting_send_command(input, sock);
+ close(sock);
+
+ return ret;
}
API int resource_clear_cpu_inheritance (pid_t source_tid, const char *dest_process)
{
- _D("[CPU-BOOSTING-PLUGIN] %s called", __func__);
+ int ret;
+ int sock;
+ cpu_boosting_input_t input;
- return 0;
+ if (source_tid < 0)
+ return -1;
+ else if (source_tid == 0)
+ source_tid = gettid();
+
+ if (dest_process == NULL)
+ return -1;
+
+ if ((sock = resource_create_and_connect_sock()) < 0)
+ return -1;
+
+ memset(&input, 0, sizeof(input));
+ input.command = CPU_BOOSTING_COMMAND_CLEAR_INHERITANCE;
+ input.pid.pid = source_tid;
+ input.dest = dest_process;
+ input.dest_len = strlen(dest_process);
+
+ ret = resource_cpu_boosting_send_command(input, sock);
+ close(sock);
+
+ return ret;
}
API int resource_register_cpu_inheritance_destination (const char *dest_process, resource_pid_t pid)
{
- _D("[CPU-BOOSTING-PLUGIN] %s called", __func__);
+ int ret;
+ int sock;
+ cpu_boosting_input_t input;
- return 0;
+ if (!resource_pid_input_is_valid(pid))
+ return -1;
+
+ if (dest_process == NULL)
+ return -1;
+
+ if ((sock = resource_create_and_connect_sock()) < 0)
+ return -1;
+
+ memset(&input, 0, sizeof(input));
+ input.command = CPU_BOOSTING_COMMAND_REGISTER_DESTINATION;
+ input.pid = pid;
+ input.dest = dest_process;
+ input.dest_len = strlen(dest_process);
+
+ ret = resource_cpu_boosting_send_command(input, sock);
+ close(sock);
+
+ return ret;
}
API int resource_unregister_cpu_inheritance_destination (const char *dest_process)
{
- _D("[CPU-BOOSTING-PLUGIN] %s called", __func__);
+ int ret;
+ int sock;
+ cpu_boosting_input_t input;
- return 0;
+ if (dest_process == NULL)
+ return -1;
+
+ if ((sock = resource_create_and_connect_sock()) < 0)
+ return -1;
+
+ memset(&input, 0, sizeof(input));
+ input.command = CPU_BOOSTING_COMMAND_UNREGISTER_DESTINATION;
+ input.pid.pid = -1;
+ input.dest = dest_process;
+ input.dest_len = strlen(dest_process);
+
+ ret = resource_cpu_boosting_send_command(input, sock);
+ close(sock);
+
+ return ret;
}
void __CONSTRUCTOR__ cpu_boosting_plugin_init(void)