#include #include #include #include #include #include #include #include #include #include #include "helpers/helpers.h" static struct option info_opts[] = { {"disable", required_argument, NULL, 'd'}, {"enable", required_argument, NULL, 'e'}, {"disable-by-latency", required_argument, NULL, 'D'}, {"enable-all", no_argument, NULL, 'E'}, { }, }; int cmd_idle_set(int argc, char **argv) { extern char *optarg; extern int optind, opterr, optopt; int ret = 0, cont = 1, param = 0, disabled; unsigned long long latency = 0, state_latency; unsigned int cpu = 0, idlestate = 0, idlestates = 0; char *endptr; do { ret = getopt_long(argc, argv, "d:e:ED:", info_opts, NULL); if (ret == -1) break; switch (ret) { case '?': param = '?'; cont = 0; break; case 'd': if (param) { param = -1; cont = 0; break; } param = ret; idlestate = atoi(optarg); break; case 'e': if (param) { param = -1; cont = 0; break; } param = ret; idlestate = atoi(optarg); break; case 'D': if (param) { param = -1; cont = 0; break; } param = ret; latency = strtoull(optarg, &endptr, 10); if (*endptr != '\0') { printf(_("Bad latency value: %s\n"), optarg); exit(EXIT_FAILURE); } break; case 'E': if (param) { param = -1; cont = 0; break; } param = ret; break; case -1: cont = 0; break; } } while (cont); switch (param) { case -1: printf(_("You can't specify more than one " "output-specific argument\n")); exit(EXIT_FAILURE); case '?': printf(_("invalid or unknown argument\n")); exit(EXIT_FAILURE); } /* Default is: set all CPUs */ if (bitmask_isallclear(cpus_chosen)) bitmask_setall(cpus_chosen); for (cpu = bitmask_first(cpus_chosen); cpu <= bitmask_last(cpus_chosen); cpu++) { if (!bitmask_isbitset(cpus_chosen, cpu)) continue; if (cpupower_is_cpu_online(cpu) != 1) continue; idlestates = cpuidle_state_count(cpu); if (idlestates <= 0) continue; switch (param) { case 'd': ret = cpuidle_state_disable(cpu, idlestate, 1); if (ret == 0) printf(_("Idlestate %u disabled on CPU %u\n"), idlestate, cpu); else if (ret == -1) printf(_("Idlestate %u not available on CPU %u\n"), idlestate, cpu); else if (ret == -2) printf(_("Idlestate disabling not supported by kernel\n")); else printf(_("Idlestate %u not disabled on CPU %u\n"), idlestate, cpu); break; case 'e': ret = cpuidle_state_disable(cpu, idlestate, 0); if (ret == 0) printf(_("Idlestate %u enabled on CPU %u\n"), idlestate, cpu); else if (ret == -1) printf(_("Idlestate %u not available on CPU %u\n"), idlestate, cpu); else if (ret == -2) printf(_("Idlestate enabling not supported by kernel\n")); else printf(_("Idlestate %u not enabled on CPU %u\n"), idlestate, cpu); break; case 'D': for (idlestate = 0; idlestate < idlestates; idlestate++) { disabled = cpuidle_is_state_disabled (cpu, idlestate); state_latency = cpuidle_state_latency (cpu, idlestate); if (disabled == 1) { if (latency > state_latency){ ret = cpuidle_state_disable (cpu, idlestate, 0); if (ret == 0) printf(_("Idlestate %u enabled on CPU %u\n"), idlestate, cpu); } continue; } if (latency <= state_latency){ ret = cpuidle_state_disable (cpu, idlestate, 1); if (ret == 0) printf(_("Idlestate %u disabled on CPU %u\n"), idlestate, cpu); } } break; case 'E': for (idlestate = 0; idlestate < idlestates; idlestate++) { disabled = cpuidle_is_state_disabled (cpu, idlestate); if (disabled == 1) { ret = cpuidle_state_disable (cpu, idlestate, 0); if (ret == 0) printf(_("Idlestate %u enabled on CPU %u\n"), idlestate, cpu); } } break; default: /* Not reachable with proper args checking */ printf(_("Invalid or unknown argument\n")); exit(EXIT_FAILURE); break; } } return EXIT_SUCCESS; } alue='25'>25space:mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-01-27 12:29:30 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2017-01-27 12:29:30 -0800
commitdd3b9f25c867cb2507a45e436d6ede8eb08e7b05 (patch)
tree1ec6c08cd75610083d117a2c8d5eb0829e65f33e /tools/testing/selftests/zram/zram.sh
parent69978aa0f21f43529e11f924504dadb6ce2f229a (diff)
parentb4cfe3971f6eab542dd7ecc398bfa1aeec889934 (diff)
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma
Pull rdma fixes from Doug Ledford: "Second round of -rc fixes for 4.10. This -rc cycle has been slow for the rdma subsystem. I had already sent you the first batch before the Holiday break. After that, we kept only getting a few here or there. Up until this week, when I got a drop of 13 to one driver (qedr). So, here's the -rc patches I have. I currently have none held in reserve, so unless something new comes in, this is it until the next merge window opens. Summary: - series of iw_cxgb4 fixes to make it work with the drain cq API - one or two patches each to: srp, iser, cxgb3, vmw_pvrdma, umem, rxe, and ipoib - one big series (13 patches) for the new qedr driver" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma: (27 commits) RDMA/cma: Fix unknown symbol when CONFIG_IPV6 is not enabled IB/rxe: Prevent from completer to operate on non valid QP IB/rxe: Fix rxe dev insertion to rxe_dev_list IB/umem: Release pid in error and ODP flow RDMA/qedr: Dispatch port active event from qedr_add RDMA/qedr: Fix and simplify memory leak in PD alloc RDMA/qedr: Fix RDMA CM loopback RDMA/qedr: Fix formatting RDMA/qedr: Mark three functions as static RDMA/qedr: Don't reset QP when queues aren't flushed RDMA/qedr: Don't spam dmesg if QP is in error state RDMA/qedr: Remove CQ spinlock from CM completion handlers RDMA/qedr: Return max inline data in QP query result RDMA/qedr: Return success when not changing QP state RDMA/qedr: Add uapi header qedr-abi.h RDMA/qedr: Fix MTU returned from QP query RDMA/core: Add the function ib_mtu_int_to_enum IB/vmw_pvrdma: Fix incorrect cleanup on pvrdma_pci_probe error path IB/vmw_pvrdma: Don't leak info from alloc_ucontext IB/cxgb3: fix misspelling in header guard ...
Diffstat (limited to 'tools/testing/selftests/zram/zram.sh')