-
-void
-pl_set_limits(xid_t ctx, struct sliver_resources *slr)
-{
- unsigned long long vs_cpu;
- uint32_t cpu_sched_flags;
-
- if (slr != 0) {
- /* set memory limits */
- if (vc_set_rlimit(ctx, RLIMIT_RSS, &slr->vs_rss)) {
- PERROR("pl_setrlimit(%u, RLIMIT_RSS)", ctx);
- exit(1);
- }
-
- /* set address space limits */
- if (vc_set_rlimit(ctx, RLIMIT_AS, &slr->vs_as)) {
- PERROR("pl_setrlimit(%u, RLIMIT_AS)", ctx);
- exit(1);
- }
-
- /* set nrpoc limit */
- if (vc_set_rlimit(ctx, RLIMIT_NPROC, &slr->vs_nproc)) {
- PERROR("pl_setrlimit(%u, RLIMIT_NPROC)", ctx);
- exit(1);
- }
-
- /* set openfd limit */
- if (vc_set_rlimit(ctx, RLIMIT_NOFILE, &slr->vs_openfd)) {
- PERROR("pl_setrlimit(%u, RLIMIT_NOFILE)", ctx);
- exit(1);
- }
- if (vc_set_rlimit(ctx, VC_VLIMIT_OPENFD, &slr->vs_openfd)) {
- PERROR("pl_setrlimit(%u, VLIMIT_OPENFD)", ctx);
- exit(1);
- }
-
- vs_cpu = slr->vs_cpu;
- cpu_sched_flags = slr->vs_cpuguaranteed & VS_SCHED_CPU_GUARANTEED;
-
- slr->vs_capabilities.bmask = vc_get_insecurebcaps();
- if (vc_set_ccaps(ctx, &slr->vs_capabilities) < 0) {
- PERROR("pl_setcaps(%u)", ctx);
- exit(1);
- }
- } else {
- vs_cpu = 1;
- cpu_sched_flags = 0;
- }
-
- if (pl_setsched(ctx, vs_cpu, cpu_sched_flags) < 0) {
- PERROR("pl_setsched(%u)", ctx);
- exit(1);
- }
-}