From owner-p4-projects@FreeBSD.ORG Sun Oct 11 09:25:37 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 375221065670; Sun, 11 Oct 2009 09:25:37 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EC96E1065676 for ; Sun, 11 Oct 2009 09:25:36 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id D9FC78FC0C for ; Sun, 11 Oct 2009 09:25:36 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9B9Pagi096844 for ; Sun, 11 Oct 2009 09:25:36 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9B9PaEU096842 for perforce@freebsd.org; Sun, 11 Oct 2009 09:25:36 GMT (envelope-from pgj@FreeBSD.org) Date: Sun, 11 Oct 2009 09:25:36 GMT Message-Id: <200910110925.n9B9PaEU096842@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Cc: Subject: PERFORCE change 169379 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 09:25:37 -0000 http://perforce.freebsd.org/chv.cgi?CH=169379 Change 169379 by pgj@beehive on 2009/10/11 09:24:54 IFC Affected files ... .. //depot/projects/docproj_hu/www/en/news/status/report-2009-04-2009-09.xml#2 integrate .. //depot/projects/docproj_hu/www/hu/administration.sgml#21 integrate Differences ... ==== //depot/projects/docproj_hu/www/en/news/status/report-2009-04-2009-09.xml#2 (text+ko) ==== @@ -2,7 +2,7 @@ - + April-September @@ -16,10 +16,11 @@

This report covers FreeBSD related projects between April and September 2009. During that time a lot of work has been done on wide variety of projects, including the Google Summer of Code - projects. The BSDCan and EuroBSDCon conferences were held in Ottawa, - CA, and Cambridge, UK which were both very successful. + projects. The BSDCan conference was held in Ottawa, CA, in May. + The EuroBSDCon conference was held in Cambridge, UK, in September. + Both events were very successful. A new major version of FreeBSD, 8.0 is to be released soon. - If you are wondering what's new in this long awaited release, read + If you are wondering what's new in this long-awaited release, read Ivan Voras' excellent summary.

@@ -28,7 +29,7 @@

Please note that the next deadline for submissions covering reports between October and December 2009 is January 15th, - 2011.

+ 2010.

@@ -68,12 +69,6 @@ - bin - - Userland Programs - - - arch Architectures @@ -97,8 +92,8 @@ - Gábor - Páli + Gábor + Páli pgj@FreeBSD.org @@ -111,7 +106,7 @@ -

libnetstat(3) provides a user-space library API to monitor +

The libnetstat(3) project provides a user-space library API to monitor networking functions with the following benefits:

    @@ -129,12 +124,12 @@

    The supported abstractions are as follows:

      -
    • Active sockets and socket buffers.
    • -
    • Network interfaces and multicast interfaces.
    • -
    • mbuf(9) statistics.
    • -
    • bpf(4) statistics.
    • -
    • Routing statistics, routing tables, multicast routing.
    • -
    • Protocol-dependent statistics.
    • +
    • Active sockets and socket buffers
    • +
    • Network interfaces and multicast interfaces
    • +
    • mbuf(9) statistics
    • +
    • bpf(4) statistics
    • +
    • Routing statistics, routing tables, multicast routing
    • +
    • Protocol-dependent statistics

    There is a sample application, called nettop(8), which provides a @@ -178,11 +173,11 @@

    Pefs is a kernel level filesystem for transparently encrypting - files on top of other filesystems (like zfs or ufs). It adds no + files on top of other filesystems (like zfs or ufs). It adds no extra information into files (unlike others), doesn't require cipher block sized io operations, supports per directory/file keys and key chaining, uses unique per file tweak for encryption. - Supported algorithms: AES, Camellia, Salsa20. The code is ready for + Supported algorithms: AES, Camellia, Salsa20. The code is ready for testing.

    @@ -223,12 +218,12 @@

    During the past year, the BSD# Team continued to track the Mono development and the lang/mono port have almost always been up-to-date (we however had to skip mono-2.2 because of some - regression issues in this release). Most of our patches have been + regression issues in this release). Most of our patches have been merged in the mono trunk upstream, and should be included in the upcoming mono-2.6 release.

    In the meantime, a few more .NET related ports have been updated - or added to the FreeBSD ports tree. These ports include:

    + or added to the FreeBSD ports tree. These ports include:

    &os;/alpha Uitgave Beheerteam From owner-p4-projects@FreeBSD.ORG Sun Oct 11 10:38:58 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D8A711065676; Sun, 11 Oct 2009 10:38:57 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 841D4106566B for ; Sun, 11 Oct 2009 10:38:57 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 71F318FC19 for ; Sun, 11 Oct 2009 10:38:57 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BAcvEK003303 for ; Sun, 11 Oct 2009 10:38:57 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BAcvVu003301 for perforce@freebsd.org; Sun, 11 Oct 2009 10:38:57 GMT (envelope-from trasz@freebsd.org) Date: Sun, 11 Oct 2009 10:38:57 GMT Message-Id: <200910111038.n9BAcvVu003301@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Cc: Subject: PERFORCE change 169384 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 10:38:58 -0000 http://perforce.freebsd.org/chv.cgi?CH=169384 Change 169384 by trasz@trasz_victim on 2009/10/11 10:38:24 Get rid of per-group limits. The code implementing them was bad in the first place, and then got horribly broken after Brooks changed the way group ids are stored in the ucred. Some of the infrastructure - 'struct gidinfo', giwhatever() routines etc - are left alone; they are ok and will be reused when per-group limits support get reimplemented. Affected files ... .. //depot/projects/soc2009/trasz_limits/TODO#13 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/init_main.c#16 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_exec.c#9 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_exit.c#16 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#65 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_prot.c#24 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/ucred.h#10 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/TODO#13 (text+ko) ==== @@ -2,10 +2,9 @@ - Make the limits lists protected by the subjects lock (e.g. process lock) instead of hrl_lock. - - Make sure we have all the gidinfos we need in the 'struct ucred'. + - Bring back per-group limits. - Fix up (add/remove resource counters) when: - - Adding a group to a process, - Removing a group from a process, - Moving a process into a jail. - Changing [re]uid; ==== //depot/projects/soc2009/trasz_limits/sys/kern/init_main.c#16 (text+ko) ==== @@ -465,8 +465,6 @@ /* Create credentials. */ p->p_ucred = crget(); p->p_ucred->cr_ngroups = 1; /* group 0 */ - if (p->p_ucred->cr_gidinfos != NULL) - p->p_ucred->cr_gidinfos[0] = gifind(0); p->p_ucred->cr_uidinfo = uifind(0); p->p_ucred->cr_ruidinfo = uifind(0); p->p_ucred->cr_prison = &prison0; ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_exec.c#9 (text+ko) ==== @@ -325,7 +325,6 @@ struct nameidata nd; struct ucred *newcred = NULL, *oldcred; struct uidinfo *euip; - struct gidinfo *egip; register_t *stack_base; int error, len = 0, i; struct image_params image_params, *imgp; @@ -564,7 +563,6 @@ */ newcred = crget(); euip = uifind(attr.va_uid); - egip = gifind(attr.va_gid); i = imgp->args->begin_envv - imgp->args->begin_argv; /* Cache arguments if they fit inside our allowance */ if (ps_arg_cache_limit >= i + sizeof(struct pargs)) { @@ -693,7 +691,7 @@ if (attr.va_mode & S_ISUID) change_euid(newcred, euip); if (attr.va_mode & S_ISGID) - change_egid(newcred, egip); + change_egid(newcred, attr.va_gid); #ifdef MAC if (will_transition) { mac_vnode_execve_transition(oldcred, newcred, imgp->vp, @@ -822,7 +820,6 @@ * Free any resources malloc'd earlier that we didn't use. */ uifree(euip); - gifree(egip); if (newcred == NULL) crfree(oldcred); else ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_exit.c#16 (text+ko) ==== @@ -770,7 +770,7 @@ hrl_proc_exiting(p); /* - * Free credentials, arguments and sigacts. + * Free credentials, arguments, and sigacts. */ crfree(p->p_ucred); p->p_ucred = NULL; ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#65 (text+ko) ==== @@ -59,12 +59,6 @@ #define HRL_DEFAULT_BUFSIZE 4096 #define HRL_LOG_BUFSIZE 128 -int hrl_group_accounting = 0; - -TUNABLE_INT("kern.hrl_group_accounting", &hrl_group_accounting); -SYSCTL_INT(_kern, OID_AUTO, hrl_group_accounting, CTLFLAG_RD, - &hrl_group_accounting, 0, ""); - struct dict { const char *d_name; int d_value; @@ -127,7 +121,7 @@ static void hrl_assert_proc(const struct proc *p __unused) { - int i, resource; + int resource; struct ucred *cred; struct prison *pr; @@ -148,17 +142,6 @@ p->p_usage.hu_resources[resource], ("resource usage propagation meltdown")); } - if (hrl_group_accounting) { - for (i = 0; i < cred->cr_ngroups; i++) { - for (resource = 0; resource <= HRL_RESOURCE_MAX; resource++) { - KASSERT(cred->cr_gidinfos[i]->gi_usage.hu_resources[resource] >= 0, - ("resource usage propagation meltdown")); - KASSERT(cred->cr_gidinfos[i]->gi_usage.hu_resources[resource] >= - p->p_usage.hu_resources[resource], - ("resource usage propagation meltdown")); - } - } - } } #endif /* DIAGNOSTIC */ @@ -258,8 +241,8 @@ static int64_t hrl_available_resource(const struct proc *p, const struct hrl_rule *rule) { - int resource, i; - int64_t available = INT64_MAX, found = 0; + int resource; + int64_t available = INT64_MAX; struct ucred *cred = p->p_ucred; mtx_assert(&hrl_lock, MA_OWNED); @@ -274,20 +257,6 @@ available = rule->hr_amount - cred->cr_ruidinfo->ui_usage.hu_resources[resource]; break; - case HRL_SUBJECT_TYPE_GROUP: - if (hrl_group_accounting) { - for (i = 0; i < cred->cr_ngroups; i++) { - if (cred->cr_gidinfos[i] != - rule->hr_subject.hs_gip) - continue; - - found = 1; - available = rule->hr_amount - - cred->cr_gidinfos[i]->gi_usage.hu_resources[resource]; - } - KASSERT(found, ("hrl_available_resource: group not found")); - } - break; case HRL_SUBJECT_TYPE_LOGINCLASS: available = rule->hr_amount - cred->cr_loginclass->lc_usage.hu_resources[resource]; @@ -475,7 +444,7 @@ int hrl_alloc(struct proc *p, int resource, uint64_t amount) { - int i, j, error; + int error; struct ucred *cred; struct prison *pr; @@ -498,25 +467,6 @@ for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) pr->pr_usage.hu_resources[resource] += amount; cred->cr_loginclass->lc_usage.hu_resources[resource] += amount; - /* - * XXX: Slow. - */ - if (hrl_group_accounting) { - for (i = 0; i < cred->cr_ngroups; i++) { - /* - * Make sure we don't account a group more than once - * if it appears in cr_groups[] more than once. - */ - for (j = 0; j < i; j++) { - if (cred->cr_groups[i] == cred->cr_groups[j]) - goto skip_group; - } - cred->cr_gidinfos[i]->gi_usage.hu_resources[resource] += - amount; -skip_group: - continue; - } - } #ifdef DIAGNOSTIC hrl_assert_proc(p); #endif @@ -535,7 +485,7 @@ int hrl_allocated(struct proc *p, int resource, uint64_t amount) { - int i, j, error; + int error; int64_t diff; struct ucred *cred; struct prison *pr; @@ -562,25 +512,6 @@ for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) pr->pr_usage.hu_resources[resource] += diff; cred->cr_loginclass->lc_usage.hu_resources[resource] += diff; - /* - * XXX: Slow. - */ - if (hrl_group_accounting) { - for (i = 0; i < cred->cr_ngroups; i++) { - /* - * Make sure we don't account a group more than once - * if it appears in cr_groups[] more than once. - */ - for (j = 0; j < i; j++) { - if (cred->cr_groups[i] == cred->cr_groups[j]) - goto skip_group; - } - cred->cr_gidinfos[i]->gi_usage.hu_resources[resource] += - diff; -skip_group: - continue; - } - } #ifdef DIAGNOSTIC hrl_assert_proc(p); #endif @@ -595,7 +526,6 @@ void hrl_free(struct proc *p, int resource, uint64_t amount) { - int i, j; struct ucred *cred; struct prison *pr; @@ -617,25 +547,6 @@ for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) pr->pr_usage.hu_resources[resource] -= amount; cred->cr_loginclass->lc_usage.hu_resources[resource] -= amount; - /* - * XXX: Slow. - */ - if (hrl_group_accounting) { - for (i = 0; i < cred->cr_ngroups; i++) { - /* - * Make sure we don't account a group more than once - * if it appears in cr_groups[] more than once. - */ - for (j = 0; j < i; j++) { - if (cred->cr_groups[i] == cred->cr_groups[j]) - goto skip_group; - } - cred->cr_gidinfos[i]->gi_usage.hu_resources[resource] -= - amount; -skip_group: - continue; - } - } #ifdef DIAGNOSTIC hrl_assert_proc(p); #endif @@ -1149,7 +1060,6 @@ return (rule); } - /* * Link a rule with subjects to which it applies. */ @@ -1165,8 +1075,8 @@ KASSERT(hrl_rule_fully_specified(rule), ("rule not fully specified")); - if ((rule->hr_subject_type == HRL_SUBJECT_TYPE_GROUP || - rule->hr_per == HRL_SUBJECT_TYPE_GROUP) && !hrl_group_accounting) + if (rule->hr_subject_type == HRL_SUBJECT_TYPE_GROUP || + rule->hr_per == HRL_SUBJECT_TYPE_GROUP) return (EOPNOTSUPP); if (rule->hr_action == HRL_ACTION_DELAY) @@ -1734,7 +1644,7 @@ void hrl_proc_ucred_changing(struct proc *p, struct ucred *newcred) { - int error, i; + int error; struct hrl_limit *limit; struct uidinfo *olduip, *newuip; struct loginclass *oldlc, *newlc; @@ -1765,17 +1675,6 @@ error = hrl_limit_add_locked(&p->p_limits, limit->hl_rule); KASSERT(error == 0, ("XXX: better error handling needed")); } - if (hrl_group_accounting) { - for (i = 0; i < newcred->cr_ngroups; i++) { - LIST_FOREACH(limit, - &newcred->cr_gidinfos[i]->gi_limits, hl_next) { - error = hrl_limit_add_locked(&p->p_limits, - limit->hl_rule); - KASSERT(error == 0, - ("XXX: better error handling needed")); - } - } - } /* * Add rules for the current loginclass. @@ -1798,18 +1697,6 @@ } /* - * Fix up per-group resource consumption. - */ - if (hrl_group_accounting) { - for (i = 0; i < p->p_ucred->cr_ngroups; i++) - hrl_usage_subtract( - &p->p_ucred->cr_gidinfos[i]->gi_usage, &p->p_usage); - for (i = 0; i < newcred->cr_ngroups; i++) - hrl_usage_add( - &newcred->cr_gidinfos[i]->gi_usage, &p->p_usage); - } - - /* * Adjust loginclass resource usage information. */ newlc = newcred->cr_loginclass; ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_prot.c#24 (text+ko) ==== @@ -79,8 +79,6 @@ #include #include -extern int hrl_group_accounting; - static MALLOC_DEFINE(M_CRED, "cred", "credentials"); SYSCTL_NODE(_security, OID_AUTO, bsd, CTLFLAG_RW, 0, "BSD security policy"); @@ -655,13 +653,11 @@ struct proc *p = td->td_proc; struct ucred *newcred, *oldcred; gid_t gid; - struct gidinfo *gip; int error; gid = uap->gid; AUDIT_ARG_GID(gid); newcred = crget(); - gip = gifind(gid); PROC_LOCK(p); oldcred = crcopysafe(p, newcred); @@ -729,18 +725,16 @@ * Copy credentials so other references do not see our changes. */ if (oldcred->cr_groups[0] != gid) { - change_egid(newcred, gip); + change_egid(newcred, gid); setsugid(p); } change_cred(p, newcred); PROC_UNLOCK(p); - gifree(gip); crfree(oldcred); return (0); fail: PROC_UNLOCK(p); - gifree(gip); crfree(newcred); return (error); } @@ -757,13 +751,11 @@ struct proc *p = td->td_proc; struct ucred *newcred, *oldcred; gid_t egid; - struct gidinfo *egip; int error; egid = uap->egid; AUDIT_ARG_EGID(egid); newcred = crget(); - egip = gifind(egid); PROC_LOCK(p); oldcred = crcopysafe(p, newcred); @@ -779,18 +771,16 @@ goto fail; if (oldcred->cr_groups[0] != egid) { - change_egid(newcred, egip); + change_egid(newcred, egid); setsugid(p); } change_cred(p, newcred); PROC_UNLOCK(p); - gifree(egip); crfree(oldcred); return (0); fail: PROC_UNLOCK(p); - gifree(egip); crfree(newcred); return (error); } @@ -825,8 +815,6 @@ { struct proc *p = td->td_proc; struct ucred *newcred, *oldcred; - struct gidinfo **gidinfos = NULL, **oldgidinfos = NULL; - int i, oldngroups = 0; int error; if (ngrp > NGROUPS) @@ -834,12 +822,6 @@ AUDIT_ARG_GROUPSET(groups, ngrp); newcred = crget(); crextend(newcred, ngrp); - if (hrl_group_accounting) { - gidinfos = malloc(ngrp * sizeof(struct gidinfo *), M_CRED, - M_WAITOK | M_ZERO); - for (i = 0; i < ngrp; i++) - gidinfos[i] = gifind(groups[i]); - } PROC_LOCK(p); oldcred = crcopysafe(p, newcred); @@ -860,53 +842,19 @@ * have the egid in the groups[0]). We risk security holes * when running non-BSD software if we do not do the same. */ - if (hrl_group_accounting) { - oldngroups = newcred->cr_ngroups - 1; - for (i = 0; i < oldngroups; i++) - oldgidinfos[i] = newcred->cr_gidinfos[i + 1]; - } newcred->cr_ngroups = 1; } else { crsetgroups_locked(newcred, ngrp, groups); - if (hrl_group_accounting) { - oldngroups = newcred->cr_ngroups; - for (i = 0; i < oldngroups; i++) - oldgidinfos[i] = newcred->cr_gidinfos[i]; - newcred->cr_ngroups = ngrp; - for (i = 0; i < newcred->cr_ngroups; i++) - newcred->cr_gidinfos[i] = gidinfos[i]; - } } setsugid(p); change_cred(p, newcred); PROC_UNLOCK(p); - if (hrl_group_accounting) { - for (i = 0; i < oldngroups; i++) - gifree(oldgidinfos[i]); - } - /* Don't free gidinfos[]. */ crfree(oldcred); - if (hrl_group_accounting) { - for (i = 0; i < newcred->cr_ngroups; i++) - KASSERT(newcred->cr_gidinfos[i]->gi_gid == newcred->cr_groups[i], ("Whoops.")); - } return (0); fail: PROC_UNLOCK(p); - if (hrl_group_accounting) { - for (i = 0; i < oldngroups; i++) - gifree(oldgidinfos[i]); - free(oldgidinfos, M_CRED); - for (i = 0; i < ngrp; i++) - gifree(gidinfos[i]); - free(gidinfos, M_CRED); - } crfree(newcred); - if (hrl_group_accounting) { - for (i = 0; i < newcred->cr_ngroups; i++) - KASSERT(newcred->cr_gidinfos[i]->gi_gid == newcred->cr_groups[i], ("Whoops.")); - } return (error); } @@ -990,7 +938,6 @@ struct proc *p = td->td_proc; struct ucred *newcred, *oldcred; gid_t egid, rgid; - struct gidinfo *egip; int error; egid = uap->egid; @@ -998,7 +945,6 @@ AUDIT_ARG_EGID(egid); AUDIT_ARG_RGID(rgid); newcred = crget(); - egip = gifind(egid); PROC_LOCK(p); oldcred = crcopysafe(p, newcred); @@ -1016,7 +962,7 @@ goto fail; if (egid != (gid_t)-1 && oldcred->cr_groups[0] != egid) { - change_egid(newcred, egip); + change_egid(newcred, egid); setsugid(p); } if (rgid != (gid_t)-1 && oldcred->cr_rgid != rgid) { @@ -1030,13 +976,11 @@ } change_cred(p, newcred); PROC_UNLOCK(p); - gifree(egip); crfree(oldcred); return (0); fail: PROC_UNLOCK(p); - gifree(egip); crfree(newcred); return (error); } @@ -1138,7 +1082,6 @@ struct proc *p = td->td_proc; struct ucred *newcred, *oldcred; gid_t egid, rgid, sgid; - struct gidinfo *egip; int error; egid = uap->egid; @@ -1148,7 +1091,6 @@ AUDIT_ARG_RGID(rgid); AUDIT_ARG_SGID(sgid); newcred = crget(); - egip = gifind(egid); PROC_LOCK(p); oldcred = crcopysafe(p, newcred); @@ -1171,7 +1113,7 @@ goto fail; if (egid != (gid_t)-1 && oldcred->cr_groups[0] != egid) { - change_egid(newcred, egip); + change_egid(newcred, egid); setsugid(p); } if (rgid != (gid_t)-1 && oldcred->cr_rgid != rgid) { @@ -1184,13 +1126,11 @@ } change_cred(p, newcred); PROC_UNLOCK(p); - gifree(egip); crfree(oldcred); return (0); fail: PROC_UNLOCK(p); - gifree(egip); crfree(newcred); return (error); } @@ -1875,7 +1815,6 @@ void crfree(struct ucred *cr) { - int i; KASSERT(cr->cr_ref > 0, ("bad ucred refcount: %d", cr->cr_ref)); KASSERT(cr->cr_ref != 0xdeadc0de, ("dangling reference to ucred")); @@ -1889,10 +1828,6 @@ uifree(cr->cr_uidinfo); if (cr->cr_ruidinfo != NULL) uifree(cr->cr_ruidinfo); - if (hrl_group_accounting) { - for (i = 0; i < cr->cr_ngroups; i++) - gifree(cr->cr_gidinfos[i]); - } /* * Free a prison, if any. */ @@ -1926,7 +1861,6 @@ void crcopy(struct ucred *dest, struct ucred *src) { - int i; KASSERT(crshared(dest) == 0, ("crcopy of shared ucred")); bcopy(&src->cr_startcopy, &dest->cr_startcopy, @@ -1935,10 +1869,6 @@ crsetgroups(dest, src->cr_ngroups, src->cr_groups); uihold(dest->cr_uidinfo); uihold(dest->cr_ruidinfo); - if (hrl_group_accounting) { - for (i = 0; i < dest->cr_ngroups; i++) - gihold(dest->cr_gidinfos[i]); - } prison_hold(dest->cr_prison); loginclass_acquire(dest->cr_loginclass); #ifdef AUDIT @@ -2053,16 +1983,10 @@ cnt = roundup2(n, PAGE_SIZE / sizeof(gid_t)); /* Free the old array. */ - if (cr->cr_groups) { + if (cr->cr_groups) free(cr->cr_groups, M_CRED); - if (hrl_group_accounting) - free(cr->cr_gidinfos, M_CRED); - } cr->cr_groups = malloc(cnt * sizeof(gid_t), M_CRED, M_WAITOK | M_ZERO); - if (hrl_group_accounting) - cr->cr_gidinfos = malloc(cnt * sizeof(struct gidinfo *), M_CRED, - M_WAITOK | M_ZERO); cr->cr_agroups = cnt; } @@ -2222,15 +2146,10 @@ * duration of the call. */ void -change_egid(struct ucred *newcred, struct gidinfo *egip) +change_egid(struct ucred *newcred, gid_t egid) { - newcred->cr_groups[0] = egip->gi_gid; - if (hrl_group_accounting) { - gihold(egip); - gifree(newcred->cr_gidinfos[0]); - newcred->cr_gidinfos[0] = egip; - } + newcred->cr_groups[0] = egid; } /*- ==== //depot/projects/soc2009/trasz_limits/sys/sys/ucred.h#10 (text+ko) ==== @@ -63,7 +63,6 @@ struct label *cr_label; /* MAC label */ struct auditinfo_addr cr_audit; /* Audit properties. */ gid_t *cr_groups; /* groups */ - struct gidinfo **cr_gidinfos; /* per group resource consumption */ int cr_agroups; /* Available groups */ }; #define NOCRED ((struct ucred *)0) /* no credential available */ @@ -93,7 +92,7 @@ struct proc; void change_cred(struct proc *p, struct ucred *newcred); -void change_egid(struct ucred *newcred, struct gidinfo *egip); +void change_egid(struct ucred *newcred, gid_t egid); void change_euid(struct ucred *newcred, struct uidinfo *euip); void change_rgid(struct ucred *newcred, gid_t rgid); void change_ruid(struct ucred *newcred, struct uidinfo *ruip); From owner-p4-projects@FreeBSD.ORG Sun Oct 11 10:41:00 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1A2631065672; Sun, 11 Oct 2009 10:41:00 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D2DB9106566B for ; Sun, 11 Oct 2009 10:40:59 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id C1ED68FC16 for ; Sun, 11 Oct 2009 10:40:59 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BAexx4003509 for ; Sun, 11 Oct 2009 10:40:59 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BAexEi003507 for perforce@freebsd.org; Sun, 11 Oct 2009 10:40:59 GMT (envelope-from trasz@freebsd.org) Date: Sun, 11 Oct 2009 10:40:59 GMT Message-Id: <200910111040.n9BAexEi003507@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Cc: Subject: PERFORCE change 169385 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 10:41:00 -0000 http://perforce.freebsd.org/chv.cgi?CH=169385 Change 169385 by trasz@trasz_victim on 2009/10/11 10:40:24 Get rid of unused routines. Affected files ... .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#25 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/resourcevar.h#12 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#25 (text+ko) ==== @@ -1327,23 +1327,6 @@ return (uip); } -struct uidinfo * -uifind_existing(uid) - uid_t uid; -{ - struct uidinfo *uip; - - rw_rlock(&uihashtbl_lock); - uip = uilookup(uid); - if (uip == NULL) { - rw_unlock(&uihashtbl_lock); - return (NULL); - } - uihold(uip); - rw_unlock(&uihashtbl_lock); - return (uip); -} - /* * Place another refcount on a uidinfo struct. */ @@ -1507,23 +1490,6 @@ return (gip); } -struct gidinfo * -gifind_existing(gid) - gid_t gid; -{ - struct gidinfo *gip; - - rw_rlock(&gihashtbl_lock); - gip = gilookup(gid); - if (gip == NULL) { - rw_unlock(&gihashtbl_lock); - return (NULL); - } - gihold(gip); - rw_unlock(&gihashtbl_lock); - return (gip); -} - /* * Place another refcount on a gidinfo struct. */ ==== //depot/projects/soc2009/trasz_limits/sys/sys/resourcevar.h#12 (text+ko) ==== @@ -154,8 +154,6 @@ int suswintr(void *base, int word); struct uidinfo *uifind(uid_t uid); -struct uidinfo - *uifind_existing(uid_t uid); void uifree(struct uidinfo *uip); void uihashinit(void); void uihold(struct uidinfo *uip); @@ -164,8 +162,6 @@ const struct hrl_rule *filter, void *arg3); struct gidinfo *gifind(gid_t gid); -struct gidinfo - *gifind_existing(gid_t gid); void gifree(struct gidinfo *gip); void gihashinit(void); void gihold(struct gidinfo *gip); From owner-p4-projects@FreeBSD.ORG Sun Oct 11 12:18:47 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0CEB51065695; Sun, 11 Oct 2009 12:18:47 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id ACB701065693 for ; Sun, 11 Oct 2009 12:18:46 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 9A9478FC25 for ; Sun, 11 Oct 2009 12:18:46 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BCIklG012321 for ; Sun, 11 Oct 2009 12:18:46 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BCIkAb012319 for perforce@freebsd.org; Sun, 11 Oct 2009 12:18:46 GMT (envelope-from trasz@freebsd.org) Date: Sun, 11 Oct 2009 12:18:46 GMT Message-Id: <200910111218.n9BCIkAb012319@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Cc: Subject: PERFORCE change 169386 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 12:18:47 -0000 http://perforce.freebsd.org/chv.cgi?CH=169386 Change 169386 by trasz@trasz_victim on 2009/10/11 12:17:57 First step in removing strict 1:1 relationship between subjects (uidinfo, prison etc) and resource containers: a little renaming. What was hrl_usage becomes hrl_container. Affected files ... .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#66 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_jail.c#15 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_loginclass.c#14 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#26 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/hrl.h#37 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/jail.h#10 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/loginclass.h#5 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/proc.h#13 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/resourcevar.h#13 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#66 (text+ko) ==== @@ -128,18 +128,18 @@ cred = p->p_ucred; mtx_assert(&hrl_lock, MA_OWNED); for (resource = 0; resource <= HRL_RESOURCE_MAX; resource++) - KASSERT(p->p_usage.hu_resources[resource] >= 0, + KASSERT(p->p_container.hc_resources[resource] >= 0, ("resource usage propagation meltdown")); - KASSERT(cred->cr_ruidinfo->ui_usage.hu_resources[resource] >= 0, + KASSERT(cred->cr_ruidinfo->ui_container.hc_resources[resource] >= 0, ("resource usage propagation meltdown")); - KASSERT(cred->cr_ruidinfo->ui_usage.hu_resources[resource] >= - p->p_usage.hu_resources[resource], + KASSERT(cred->cr_ruidinfo->ui_container.hc_resources[resource] >= + p->p_container.hc_resources[resource], ("resource usage propagation meltdown")); for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) { - KASSERT(pr->pr_usage.hu_resources[resource] >= 0, + KASSERT(pr->pr_container.hc_resources[resource] >= 0, ("resource usage propagation meltdown")); - KASSERT(pr->pr_usage.hu_resources[resource] >= - p->p_usage.hu_resources[resource], + KASSERT(pr->pr_container.hc_resources[resource] >= + p->p_container.hc_resources[resource], ("resource usage propagation meltdown")); } } @@ -159,7 +159,7 @@ mtx_lock(&hrl_lock); for (i = 0; i <= HRL_RESOURCE_MAX; i++) { - KASSERT(p->p_usage.hu_resources[i] == 0, + KASSERT(p->p_container.hc_resources[i] == 0, ("dead process still holding resources")); } mtx_unlock(&hrl_lock); @@ -251,20 +251,20 @@ switch (rule->hr_per) { case HRL_SUBJECT_TYPE_PROCESS: available = rule->hr_amount - - p->p_usage.hu_resources[resource]; + p->p_container.hc_resources[resource]; break; case HRL_SUBJECT_TYPE_USER: available = rule->hr_amount - - cred->cr_ruidinfo->ui_usage.hu_resources[resource]; + cred->cr_ruidinfo->ui_container.hc_resources[resource]; break; case HRL_SUBJECT_TYPE_LOGINCLASS: available = rule->hr_amount - - cred->cr_loginclass->lc_usage.hu_resources[resource]; + cred->cr_loginclass->lc_container.hc_resources[resource]; available = INT64_MAX; /* XXX */ break; case HRL_SUBJECT_TYPE_JAIL: available = rule->hr_amount - - cred->cr_prison->pr_usage.hu_resources[resource]; + cred->cr_prison->pr_container.hc_resources[resource]; break; default: panic("hrl_compute_available: unknown per %d", @@ -437,6 +437,31 @@ } } +void +hrl_container_create(struct hrl_container *container) +{ + int i; + + for (i = 0; i <= HRL_RESOURCE_MAX; i++) + KASSERT(container->hc_resources[i] == 0, + ("container not zeroed")); +} + +void +hrl_container_destroy(struct hrl_container *container) +{ + int i; + + for (i = 0; i <= HRL_RESOURCE_MAX; i++) { + if (container->hc_resources[i] != 0) + printf("destroying non-empty container: " + "%ju allocated for resource %s", + container->hc_resources[i], + hrl_resource_name(i)); + container->hc_resources[i] = 0; + } +} + /* * Increase allocation of 'resource' by 'amount' for process 'p'. * Return 0 if it's below limits, or errno, if it's not. @@ -461,12 +486,12 @@ mtx_unlock(&hrl_lock); return (error); } - p->p_usage.hu_resources[resource] += amount; + p->p_container.hc_resources[resource] += amount; cred = p->p_ucred; - cred->cr_ruidinfo->ui_usage.hu_resources[resource] += amount; + cred->cr_ruidinfo->ui_container.hc_resources[resource] += amount; for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) - pr->pr_usage.hu_resources[resource] += amount; - cred->cr_loginclass->lc_usage.hu_resources[resource] += amount; + pr->pr_container.hc_resources[resource] += amount; + cred->cr_loginclass->lc_container.hc_resources[resource] += amount; #ifdef DIAGNOSTIC hrl_assert_proc(p); #endif @@ -498,7 +523,7 @@ #endif mtx_lock(&hrl_lock); - diff = amount - p->p_usage.hu_resources[resource]; + diff = amount - p->p_container.hc_resources[resource]; if (diff > 0) { error = hrl_enforce_proc(p, resource, diff); if (error) { @@ -506,12 +531,12 @@ return (error); } } - p->p_usage.hu_resources[resource] = amount; + p->p_container.hc_resources[resource] = amount; cred = p->p_ucred; - cred->cr_ruidinfo->ui_usage.hu_resources[resource] += diff; + cred->cr_ruidinfo->ui_container.hc_resources[resource] += diff; for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) - pr->pr_usage.hu_resources[resource] += diff; - cred->cr_loginclass->lc_usage.hu_resources[resource] += diff; + pr->pr_container.hc_resources[resource] += diff; + cred->cr_loginclass->lc_container.hc_resources[resource] += diff; #ifdef DIAGNOSTIC hrl_assert_proc(p); #endif @@ -537,16 +562,16 @@ #endif mtx_lock(&hrl_lock); - KASSERT(amount <= p->p_usage.hu_resources[resource], + KASSERT(amount <= p->p_container.hc_resources[resource], ("hrl_free: freeing %ju of %s, which is more than allocated " "%ld for %s (pid %d)", amount, hrl_resource_name(resource), - p->p_usage.hu_resources[resource], p->p_comm, p->p_pid)); - p->p_usage.hu_resources[resource] -= amount; + p->p_container.hc_resources[resource], p->p_comm, p->p_pid)); + p->p_container.hc_resources[resource] -= amount; cred = p->p_ucred; - cred->cr_ruidinfo->ui_usage.hu_resources[resource] -= amount; + cred->cr_ruidinfo->ui_container.hc_resources[resource] -= amount; for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) - pr->pr_usage.hu_resources[resource] -= amount; - cred->cr_loginclass->lc_usage.hu_resources[resource] -= amount; + pr->pr_container.hc_resources[resource] -= amount; + cred->cr_loginclass->lc_container.hc_resources[resource] -= amount; #ifdef DIAGNOSTIC hrl_assert_proc(p); #endif @@ -554,38 +579,38 @@ } static void -hrl_usage_add(struct hrl_usage *dest, const struct hrl_usage *src) +hrl_container_add(struct hrl_container *dest, const struct hrl_container *src) { int i; mtx_lock(&hrl_lock); for (i = 0; i <= HRL_RESOURCE_MAX; i++) { - KASSERT(dest->hu_resources[i] >= 0, + KASSERT(dest->hc_resources[i] >= 0, ("resource usage propagation meltdown")); - KASSERT(src->hu_resources[i] >= 0, + KASSERT(src->hc_resources[i] >= 0, ("resource usage propagation meltdown")); - dest->hu_resources[i] += src->hu_resources[i]; - KASSERT(dest->hu_resources[i] >= 0, + dest->hc_resources[i] += src->hc_resources[i]; + KASSERT(dest->hc_resources[i] >= 0, ("resource usage propagation meltdown")); } mtx_unlock(&hrl_lock); } static void -hrl_usage_subtract(struct hrl_usage *dest, const struct hrl_usage *src) +hrl_container_subtract(struct hrl_container *dest, const struct hrl_container *src) { int i; mtx_lock(&hrl_lock); for (i = 0; i <= HRL_RESOURCE_MAX; i++) { - KASSERT(dest->hu_resources[i] >= 0, + KASSERT(dest->hc_resources[i] >= 0, ("resource usage propagation meltdown")); - KASSERT(src->hu_resources[i] >= 0, + KASSERT(src->hc_resources[i] >= 0, ("resource usage propagation meltdown")); - KASSERT(src->hu_resources[i] <= dest->hu_resources[i], + KASSERT(src->hc_resources[i] <= dest->hc_resources[i], ("resource usage propagation meltdown")); - dest->hu_resources[i] -= src->hu_resources[i]; - KASSERT(dest->hu_resources[i] >= 0, + dest->hc_resources[i] -= src->hc_resources[i]; + KASSERT(dest->hc_resources[i] >= 0, ("resource usage propagation meltdown")); } mtx_unlock(&hrl_lock); @@ -1314,7 +1339,7 @@ } static struct sbuf * -hrl_usage_to_sbuf(struct hrl_usage *usage) +hrl_container_to_sbuf(struct hrl_container *container) { int i; struct sbuf *sb; @@ -1322,7 +1347,7 @@ sb = sbuf_new_auto(); for (i = 1; i <= HRL_RESOURCE_MAX; i++) { sbuf_printf(sb, "%s=%jd,", hrl_resource_name(i), - usage->hu_resources[i]); + container->hc_resources[i]); } sbuf_setpos(sb, sbuf_len(sb) - 1); return (sb); @@ -1357,7 +1382,7 @@ error = EINVAL; goto out; } - outputsbuf = hrl_usage_to_sbuf(&p->p_usage); + outputsbuf = hrl_container_to_sbuf(&p->p_container); break; case HRL_SUBJECT_TYPE_USER: uip = filter->hr_subject.hs_uip; @@ -1365,7 +1390,7 @@ error = EINVAL; goto out; } - outputsbuf = hrl_usage_to_sbuf(&uip->ui_usage); + outputsbuf = hrl_container_to_sbuf(&uip->ui_container); break; case HRL_SUBJECT_TYPE_GROUP: gip = filter->hr_subject.hs_gip; @@ -1373,7 +1398,7 @@ error = EINVAL; goto out; } - outputsbuf = hrl_usage_to_sbuf(&gip->gi_usage); + outputsbuf = hrl_container_to_sbuf(&gip->gi_container); break; case HRL_SUBJECT_TYPE_LOGINCLASS: lc = filter->hr_subject.hs_loginclass; @@ -1381,7 +1406,7 @@ error = EINVAL; goto out; } - outputsbuf = hrl_usage_to_sbuf(&lc->lc_usage); + outputsbuf = hrl_container_to_sbuf(&lc->lc_container); break; case HRL_SUBJECT_TYPE_JAIL: pr = filter->hr_subject.hs_prison; @@ -1389,7 +1414,7 @@ error = EINVAL; goto out; } - outputsbuf = hrl_usage_to_sbuf(&pr->pr_usage); + outputsbuf = hrl_container_to_sbuf(&pr->pr_container); break; default: error = EINVAL; @@ -1692,8 +1717,8 @@ newuip = newcred->cr_ruidinfo; olduip = p->p_ucred->cr_ruidinfo; if (newuip != olduip) { - hrl_usage_subtract(&olduip->ui_usage, &p->p_usage); - hrl_usage_add(&newuip->ui_usage, &p->p_usage); + hrl_container_subtract(&olduip->ui_container, &p->p_container); + hrl_container_add(&newuip->ui_container, &p->p_container); } /* @@ -1702,8 +1727,8 @@ newlc = newcred->cr_loginclass; oldlc = p->p_ucred->cr_loginclass; if (newlc != oldlc) { - hrl_usage_subtract(&oldlc->lc_usage, &p->p_usage); - hrl_usage_add(&newlc->lc_usage, &p->p_usage); + hrl_container_subtract(&oldlc->lc_container, &p->p_container); + hrl_container_add(&newlc->lc_container, &p->p_container); } } @@ -1724,10 +1749,10 @@ mtx_lock(&hrl_lock); for (i = 0; i <= HRL_RESOURCE_MAX; i++) { - if (parent->p_usage.hu_resources[i] != 0 && + if (parent->p_container.hc_resources[i] != 0 && hrl_resource_inheritable(i)) hrl_allocated(child, i, - parent->p_usage.hu_resources[i]); + parent->p_container.hc_resources[i]); } LIST_FOREACH(limit, &parent->p_limits, hl_next) { ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_jail.c#15 (text+ko) ==== @@ -1156,6 +1156,7 @@ root = mypr->pr_root; vref(root); } + hrl_container_create(&pr->pr_container); strlcpy(pr->pr_hostuuid, DEFAULT_HOSTUUID, HOSTUUIDLEN); pr->pr_flags |= PR_HOST; #if defined(INET) || defined(INET6) @@ -2408,7 +2409,7 @@ prison_deref(struct prison *pr, int flags) { struct prison *ppr, *tpr; - int vfslocked, i; + int vfslocked; if (!(flags & PD_LOCKED)) mtx_lock(&pr->pr_mtx); @@ -2485,11 +2486,7 @@ if (pr->pr_cpuset != NULL) cpuset_rel(pr->pr_cpuset); osd_jail_exit(pr); - for (i = 0; i < HRL_RESOURCE_MAX; i++) { - if (pr->pr_usage.hu_resources[i] != 0) - printf("prison_deref: resource %d = %ju\n", - i, pr->pr_usage.hu_resources[i]); - } + hrl_container_destroy(&pr->pr_container); free(pr, M_PRISON); /* Removing a prison frees a reference on its parent. */ ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_loginclass.c#14 (text+ko) ==== @@ -83,16 +83,10 @@ void loginclass_release(struct loginclass *lc) { - int i; mtx_lock(&loginclasses_lock); if (refcount_release(&lc->lc_refcount)) { - for (i = 0; i < HRL_RESOURCE_MAX; i++) { - KASSERT(lc->lc_usage.hu_resources[i] == 0, - ("loginclass_release: freeing " - "loginclass \"%s\", resource %d = %ju\n", - lc->lc_name, i, lc->lc_usage.hu_resources[i])); - } + hrl_container_destroy(&lc->lc_container); LIST_REMOVE(lc, lc_next); mtx_unlock(&loginclasses_lock); free(lc, M_LOGINCLASS); @@ -132,6 +126,7 @@ } /* Add new loginclass. */ + hrl_container_create(&newlc->lc_container); strcpy(newlc->lc_name, name); refcount_init(&newlc->lc_refcount, 1); LIST_INSERT_HEAD(&loginclasses, newlc, lc_next); ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#26 (text+ko) ==== @@ -1320,6 +1320,7 @@ mtx_init(&uip->ui_vmsize_mtx, "ui_vmsize", NULL, MTX_DEF); LIST_INSERT_HEAD(UIHASH(uid), uip, ui_hash); + hrl_container_create(&uip->ui_container); } } uihold(uip); @@ -1357,7 +1358,7 @@ uifree(uip) struct uidinfo *uip; { - int old, i; + int old; /* Prepare for optimal case. */ old = uip->ui_ref; @@ -1367,6 +1368,7 @@ /* Prepare for suboptimal case. */ rw_wlock(&uihashtbl_lock); if (refcount_release(&uip->ui_ref)) { + hrl_container_destroy(&uip->ui_container); LIST_REMOVE(uip, ui_hash); rw_wunlock(&uihashtbl_lock); if (uip->ui_sbsize != 0) @@ -1379,12 +1381,6 @@ printf("freeing uidinfo: uid = %d, swapuse = %lld\n", uip->ui_uid, (unsigned long long)uip->ui_vmsize); mtx_destroy(&uip->ui_vmsize_mtx); - for (i = 0; i < HRL_RESOURCE_MAX; i++) { - KASSERT(uip->ui_usage.hu_resources[i] == 0, - ("uifree: freeing uidinfo: uid = %d, " - "resource %d = %ju\n", uip->ui_uid, i, - uip->ui_usage.hu_resources[i])); - } free(uip, M_UIDINFO); return; } @@ -1483,6 +1479,7 @@ refcount_init(&gip->gi_ref, 0); gip->gi_gid = gid; LIST_INSERT_HEAD(GIHASH(gid), gip, gi_hash); + hrl_container_create(&gip->gi_container); } } gihold(gip); @@ -1520,7 +1517,7 @@ gifree(gip) struct gidinfo *gip; { - int old, i; + int old; /* Prepare for optimal case. */ old = gip->gi_ref; @@ -1530,14 +1527,9 @@ /* Prepare for suboptimal case. */ rw_wlock(&gihashtbl_lock); if (refcount_release(&gip->gi_ref)) { + hrl_container_destroy(&gip->gi_container); LIST_REMOVE(gip, gi_hash); rw_wunlock(&gihashtbl_lock); - for (i = 0; i < HRL_RESOURCE_MAX; i++) { - KASSERT(gip->gi_usage.hu_resources[i] == 0, - ("gifree: freeing gidinfo: gid = %d, " - "resource %d = %ju\n", gip->gi_gid, i, - gip->gi_usage.hu_resources[i])); - } free(gip, M_GIDINFO); return; } ==== //depot/projects/soc2009/trasz_limits/sys/sys/hrl.h#37 (text+ko) ==== @@ -38,6 +38,7 @@ struct gidinfo; struct loginclass; struct prison; +struct ucred; /* * Hierarchical Resource Limits. @@ -123,11 +124,22 @@ #define HRL_AMOUNT_UNDEFINED -1 /* - * 'hrl_usage' defines resource consumption for a particular - * object, such as process or user. + * 'hrl_container' defines resource consumption for a particular + * subject, such as process or jail. Containers form a graph - each + * container has zero or more subcontainers and zero or more + * "containing" containers (parents). For example, container for + * an uidinfo can have several subcontainers for processes for that + * user. On the other hand, each process can have several containing + * containers, one per every group this process belongs to. + * + * Every process has exactly one container assigned to it. Containers + * for other objects are created when there is a rule which requires it. + * For example, uidinfo will have container assigned only if there + * is a rule this uidinfo is subject to, and 'hr_per' for this rule + * is HRL_SUBJECT_TYPE_USER. */ -struct hrl_usage { - int64_t hu_resources[HRL_RESOURCE_MAX + 1]; +struct hrl_container { + int64_t hc_resources[HRL_RESOURCE_MAX + 1]; }; /* @@ -144,10 +156,6 @@ #ifdef _KERNEL -struct loginclass; -struct proc; -struct ucred; - int hrl_alloc(struct proc *p, int object, uint64_t amount); int hrl_allocated(struct proc *p, int object, uint64_t amount); void hrl_free(struct proc *p, int object, uint64_t amount); @@ -162,6 +170,10 @@ void hrl_rule_release(struct hrl_rule *rule); int hrl_rule_add(struct hrl_rule *rule); int hrl_rule_remove(const struct hrl_rule *filter); + +void hrl_container_create(struct hrl_container *container); +void hrl_container_destroy(struct hrl_container *container); + #else /* !_KERNEL */ /* ==== //depot/projects/soc2009/trasz_limits/sys/sys/jail.h#10 (text+ko) ==== @@ -181,7 +181,7 @@ char pr_hostname[MAXHOSTNAMELEN]; /* (p) jail hostname */ char pr_domainname[MAXHOSTNAMELEN]; /* (p) jail domainname */ char pr_hostuuid[HOSTUUIDLEN]; /* (p) jail hostuuid */ - struct hrl_usage pr_usage; /* (*) HRL resource accounting */ + struct hrl_container pr_container; /* (*) HRL resource accounting */ struct hrl_limits_head pr_limits; /* (*) HRL rules applicable to the prison */ }; #endif /* _KERNEL || _WANT_PRISON */ ==== //depot/projects/soc2009/trasz_limits/sys/sys/loginclass.h#5 (text+ko) ==== @@ -36,7 +36,7 @@ LIST_ENTRY(loginclass) lc_next; char lc_name[MAXLOGNAME]; u_int lc_refcount; - struct hrl_usage lc_usage; + struct hrl_container lc_container; struct hrl_limits_head lc_limits; }; ==== //depot/projects/soc2009/trasz_limits/sys/sys/proc.h#13 (text+ko) ==== @@ -511,7 +511,7 @@ int p_boundary_count;/* (c) Num threads at user boundary */ int p_pendingcnt; /* how many signals are pending */ struct itimers *p_itimers; /* (c) POSIX interval timers. */ - struct hrl_usage p_usage; /* (*) HRL resource accounting */ + struct hrl_container p_container; /* (*) HRL resource accounting */ struct hrl_limits_head p_limits;/* (*) HRL rules applicable to the proccess */ /* End area that is zeroed on creation. */ #define p_endzero p_magic ==== //depot/projects/soc2009/trasz_limits/sys/sys/resourcevar.h#13 (text+ko) ==== @@ -98,7 +98,7 @@ long ui_ptscnt; /* (b) number of pseudo-terminals */ uid_t ui_uid; /* (a) uid */ u_int ui_ref; /* (b) reference count */ - struct hrl_usage ui_usage; /* (*) HRL resource accounting */ + struct hrl_container ui_container; /* (*) HRL resource accounting */ struct hrl_limits_head ui_limits;/* (*) HRL rules applicable to the uid */ }; @@ -117,7 +117,7 @@ LIST_ENTRY(gidinfo) gi_hash; /* (c) hash chain of gidinfos */ gid_t gi_gid; /* (a) gid */ u_int gi_ref; /* (b) reference count */ - struct hrl_usage gi_usage; /* (*) HRL resource accounting */ + struct hrl_container gi_container; /* (*) HRL resource accounting */ struct hrl_limits_head gi_limits;/* (*) HRL rules applicable to the gid */ }; From owner-p4-projects@FreeBSD.ORG Sun Oct 11 12:50:21 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B0DF1106568D; Sun, 11 Oct 2009 12:50:21 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7406D1065679 for ; Sun, 11 Oct 2009 12:50:21 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 6303C8FC0C for ; Sun, 11 Oct 2009 12:50:21 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BCoLVU025248 for ; Sun, 11 Oct 2009 12:50:21 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BCoLUt025246 for perforce@freebsd.org; Sun, 11 Oct 2009 12:50:21 GMT (envelope-from mav@freebsd.org) Date: Sun, 11 Oct 2009 12:50:21 GMT Message-Id: <200910111250.n9BCoLUt025246@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Cc: Subject: PERFORCE change 169389 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 12:50:21 -0000 http://perforce.freebsd.org/chv.cgi?CH=169389 Change 169389 by mav@mav_mavtest on 2009/10/11 12:49:46 Add ATA-specific done handler, resetting bus on heavy errors. Affected files ... .. //depot/projects/scottl-camlock/src/sys/cam/ata/ata_xpt.c#39 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/cam/ata/ata_xpt.c#39 (text+ko) ==== @@ -179,11 +179,12 @@ struct cam_ed *device, void *async_arg); static void ata_action(union ccb *start_ccb); +static void ata_done(union ccb *done_ccb); static struct xpt_xport ata_xport = { .alloc_device = ata_alloc_device, .action = ata_action, - .done = xpt_done_default, + .done = ata_done, .async = ata_dev_async, }; @@ -1244,6 +1245,36 @@ } static void +ata_done(union ccb *done_ccb) +{ + struct cam_path *path; + union ccb *work_ccb; + + switch (done_ccb->ccb_h.status & CAM_STATUS_MASK) { + case CAM_CMD_TIMEOUT: + case CAM_UNCOR_PARITY: + work_ccb = xpt_alloc_ccb_nowait(); + if (work_ccb == NULL) + break; + if (xpt_create_path(&path, xpt_periph, done_ccb->ccb_h.path_id, + CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) { + xpt_free_ccb(work_ccb); + break; + } + xpt_setup_ccb(&work_ccb->ccb_h, path, CAM_PRIORITY_NORMAL); + work_ccb->ccb_h.func_code = XPT_RESET_BUS; + work_ccb->ccb_h.cbfcnp = NULL; + CAM_DEBUG(path, CAM_DEBUG_SUBTRACE, ("Resetting Bus\n")); + xpt_action(work_ccb); + xpt_free_ccb(work_ccb); + break; + } + + /* Call default done handler. */ + xpt_done_default(done_ccb); +} + +static void scsi_set_transfer_settings(struct ccb_trans_settings *cts, struct cam_ed *device, int async_update) { From owner-p4-projects@FreeBSD.ORG Sun Oct 11 13:55:33 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 281541065697; Sun, 11 Oct 2009 13:55:33 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C86611065692 for ; Sun, 11 Oct 2009 13:55:32 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id B70958FC19 for ; Sun, 11 Oct 2009 13:55:32 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BDtWPD031286 for ; Sun, 11 Oct 2009 13:55:32 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BDtWYb031284 for perforce@freebsd.org; Sun, 11 Oct 2009 13:55:32 GMT (envelope-from trasz@freebsd.org) Date: Sun, 11 Oct 2009 13:55:32 GMT Message-Id: <200910111355.n9BDtWYb031284@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Cc: Subject: PERFORCE change 169392 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 13:55:33 -0000 http://perforce.freebsd.org/chv.cgi?CH=169392 Change 169392 by trasz@trasz_victim on 2009/10/11 13:55:02 Optimize things a little. Affected files ... .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#67 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#67 (text+ko) ==== @@ -1662,9 +1662,8 @@ } /* - * Called after credentials change, to adjust p_limits. - * - * XXX: What about jails? + * Called before credentials change, to adjust HRL data structures + * assigned to the process. */ void hrl_proc_ucred_changing(struct proc *p, struct ucred *newcred) @@ -1673,20 +1672,42 @@ struct hrl_limit *limit; struct uidinfo *olduip, *newuip; struct loginclass *oldlc, *newlc; + struct prison *oldpr, *newpr; PROC_LOCK_ASSERT(p, MA_OWNED); + newuip = newcred->cr_ruidinfo; + olduip = p->p_ucred->cr_ruidinfo; + newlc = newcred->cr_loginclass; + oldlc = p->p_ucred->cr_loginclass; + newpr = newcred->cr_prison; + oldpr = p->p_ucred->cr_prison; + mtx_lock(&hrl_lock); /* - * Remove rules for the old user credentials - per-user, per-group - * and per-loginclass. + * Remove rules that are no longer applicable with the new ucred. */ LIST_FOREACH(limit, &p->p_limits, hl_next) { - if (limit->hl_rule->hr_subject_type != HRL_SUBJECT_TYPE_USER && - limit->hl_rule->hr_subject_type != HRL_SUBJECT_TYPE_GROUP && - limit->hl_rule->hr_subject_type != HRL_SUBJECT_TYPE_LOGINCLASS) + switch (limit->hl_rule->hr_subject_type) { + case HRL_SUBJECT_TYPE_PROCESS: continue; + case HRL_SUBJECT_TYPE_USER: + if (newuip == olduip) + continue; + break; + case HRL_SUBJECT_TYPE_LOGINCLASS: + if (newlc == oldlc) + continue; + break; + case HRL_SUBJECT_TYPE_JAIL: + if (newpr == oldpr) + continue; + break; + default: + panic("hrl_proc_ucred_changing: unknown subject %d", + limit->hl_rule->hr_subject_type); + } LIST_REMOVE(limit, hl_next); hrl_rule_release(limit->hl_rule); @@ -1694,19 +1715,25 @@ } /* - * Now add rules for the current user credentials. + * Add rules for the new ucred. */ - LIST_FOREACH(limit, &newcred->cr_ruidinfo->ui_limits, hl_next) { - error = hrl_limit_add_locked(&p->p_limits, limit->hl_rule); - KASSERT(error == 0, ("XXX: better error handling needed")); + if (newuip != olduip) { + LIST_FOREACH(limit, &newuip->ui_limits, hl_next) { + error = hrl_limit_add_locked(&p->p_limits, limit->hl_rule); + KASSERT(error == 0, ("XXX: better error handling needed")); + } + } + if (newlc != oldlc) { + LIST_FOREACH(limit, &newlc->lc_limits, hl_next) { + error = hrl_limit_add_locked(&p->p_limits, limit->hl_rule); + KASSERT(error == 0, ("XXX: better error handling needed")); + } } - - /* - * Add rules for the current loginclass. - */ - LIST_FOREACH(limit, &newcred->cr_loginclass->lc_limits, hl_next) { - error = hrl_limit_add_locked(&p->p_limits, limit->hl_rule); - KASSERT(error == 0, ("XXX: better error handling needed")); + if (newpr != newpr) { + LIST_FOREACH(limit, &newpr->pr_limits, hl_next) { + error = hrl_limit_add_locked(&p->p_limits, limit->hl_rule); + KASSERT(error == 0, ("XXX: better error handling needed")); + } } mtx_unlock(&hrl_lock); @@ -1714,8 +1741,6 @@ /* * Fix up per-ruid resource consumption. */ - newuip = newcred->cr_ruidinfo; - olduip = p->p_ucred->cr_ruidinfo; if (newuip != olduip) { hrl_container_subtract(&olduip->ui_container, &p->p_container); hrl_container_add(&newuip->ui_container, &p->p_container); @@ -1724,12 +1749,14 @@ /* * Adjust loginclass resource usage information. */ - newlc = newcred->cr_loginclass; - oldlc = p->p_ucred->cr_loginclass; if (newlc != oldlc) { hrl_container_subtract(&oldlc->lc_container, &p->p_container); hrl_container_add(&newlc->lc_container, &p->p_container); } + + /* + * XXX: Jail resource consumption. + */ } /* From owner-p4-projects@FreeBSD.ORG Sun Oct 11 13:55:34 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id DE633106573C; Sun, 11 Oct 2009 13:55:33 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E9FAC1065694 for ; Sun, 11 Oct 2009 13:55:32 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id D8FBA8FC1E for ; Sun, 11 Oct 2009 13:55:32 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BDtWrf031291 for ; Sun, 11 Oct 2009 13:55:32 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BDtWbm031289 for perforce@freebsd.org; Sun, 11 Oct 2009 13:55:32 GMT (envelope-from trasz@freebsd.org) Date: Sun, 11 Oct 2009 13:55:32 GMT Message-Id: <200910111355.n9BDtWbm031289@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Cc: Subject: PERFORCE change 169393 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 13:55:34 -0000 http://perforce.freebsd.org/chv.cgi?CH=169393 Change 169393 by trasz@trasz_victim on 2009/10/11 13:55:26 Add missing change_cred() (untested) and a little cleanup. Affected files ... .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_jail.c#16 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_loginclass.c#15 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_jail.c#16 (text+ko) ==== @@ -2252,7 +2252,7 @@ setsugid(p); crcopy(newcred, oldcred); newcred->cr_prison = pr; - p->p_ucred = newcred; + change_cred(p, newcred); PROC_UNLOCK(p); crfree(oldcred); prison_deref(ppr, PD_DEREF | PD_DEUREF); ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_loginclass.c#15 (text+ko) ==== @@ -198,8 +198,7 @@ PROC_LOCK(p); oldcred = crcopysafe(p, newcred); newcred->cr_loginclass = newlc; - hrl_proc_ucred_changing(p, newcred); - p->p_ucred = newcred; + change_cred(p, newcred); PROC_UNLOCK(p); loginclass_release(oldcred->cr_loginclass); From owner-p4-projects@FreeBSD.ORG Sun Oct 11 14:26:07 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id EE79B10656A4; Sun, 11 Oct 2009 14:26:06 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7E6A31065698 for ; Sun, 11 Oct 2009 14:26:06 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 6C3528FC21 for ; Sun, 11 Oct 2009 14:26:06 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BEQ6ox034502 for ; Sun, 11 Oct 2009 14:26:06 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BEQ6jh034500 for perforce@freebsd.org; Sun, 11 Oct 2009 14:26:06 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sun, 11 Oct 2009 14:26:06 GMT Message-Id: <200910111426.n9BEQ6jh034500@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 169395 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 14:26:07 -0000 http://perforce.freebsd.org/chv.cgi?CH=169395 Change 169395 by rwatson@rwatson_freebsd_capabilities on 2009/10/11 14:25:15 Rename rtld_caplibindex to rtld_libcache to better reflect what is going on. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/Makefile#18 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_caplibindex.c#2 delete .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_caplibindex.h#3 delete .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.c#1 branch .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.h#1 branch Differences ... ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/Makefile#18 (text+ko) ==== @@ -1,5 +1,5 @@ # $FreeBSD$ -# $P4: //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/Makefile#17 $ +# $P4: //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/Makefile#18 $ WITHOUT_SSP= @@ -9,7 +9,7 @@ SRCS= rtld_start.S \ reloc.c rtld.c rtld_lock.c map_object.c \ malloc.c xmalloc.c debug.c \ - crtbrand.c rtld_caplibindex.c rtld_sandbox.c + crtbrand.c rtld_libcache.c rtld_sandbox.c MAN= rtld-elf-cap.1 CSTD?= gnu99 CFLAGS+= -Wall -DFREEBSD_ELF -DIN_RTLD -DIN_RTLD_CAP -g From owner-p4-projects@FreeBSD.ORG Sun Oct 11 14:30:11 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4E05410656A7; Sun, 11 Oct 2009 14:30:11 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1314510656A4 for ; Sun, 11 Oct 2009 14:30:11 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 00EA68FC13 for ; Sun, 11 Oct 2009 14:30:11 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BEUArl034789 for ; Sun, 11 Oct 2009 14:30:10 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BEUAuX034787 for perforce@freebsd.org; Sun, 11 Oct 2009 14:30:10 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sun, 11 Oct 2009 14:30:10 GMT Message-Id: <200910111430.n9BEUAuX034787@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 169396 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 14:30:11 -0000 http://perforce.freebsd.org/chv.cgi?CH=169396 Change 169396 by rwatson@rwatson_freebsd_capabilities on 2009/10/11 14:30:10 Rename caplibindex -> libcache. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/Makefile.inc#13 edit .. //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/ld_caplibindex.c#3 delete .. //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/ld_libcache.c#1 branch Differences ... ==== //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/Makefile.inc#13 (text+ko) ==== @@ -19,7 +19,7 @@ getpeereid.c getprogname.c getpwent.c getttyent.c \ getusershell.c getvfsbyname.c glob.c \ initgroups.c isatty.c isinf.c isnan.c jrand48.c lcong48.c \ - ld_caplibindex.c ld_sandbox.c \ + ld_libcache.c ld_sandbox.c \ lockf.c lrand48.c mrand48.c nftw.c nice.c \ nlist.c nrand48.c opendir.c \ pause.c pmadvise.c popen.c posix_spawn.c pselect.c \ From owner-p4-projects@FreeBSD.ORG Sun Oct 11 15:15:00 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9D4D71065694; Sun, 11 Oct 2009 15:15:00 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 54831106568B for ; Sun, 11 Oct 2009 15:15:00 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 0CA238FC12 for ; Sun, 11 Oct 2009 15:15:00 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BFExJf038984 for ; Sun, 11 Oct 2009 15:14:59 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BFEx45038982 for perforce@freebsd.org; Sun, 11 Oct 2009 15:14:59 GMT (envelope-from trasz@freebsd.org) Date: Sun, 11 Oct 2009 15:14:59 GMT Message-Id: <200910111514.n9BFEx45038982@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Cc: Subject: PERFORCE change 169398 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 15:15:00 -0000 http://perforce.freebsd.org/chv.cgi?CH=169398 Change 169398 by trasz@trasz_victim on 2009/10/11 15:14:24 Maintain containers hierarchy. Affected files ... .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#68 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/hrl.h#38 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#68 (text+ko) ==== @@ -437,6 +437,93 @@ } } +static void +hrl_container_add(struct hrl_container *dest, const struct hrl_container *src) +{ + int i; + + mtx_assert(&hrl_lock, MA_OWNED); + + for (i = 0; i <= HRL_RESOURCE_MAX; i++) { + KASSERT(dest->hc_resources[i] >= 0, + ("resource usage propagation meltdown")); + KASSERT(src->hc_resources[i] >= 0, + ("resource usage propagation meltdown")); + dest->hc_resources[i] += src->hc_resources[i]; + KASSERT(dest->hc_resources[i] >= 0, + ("resource usage propagation meltdown")); + } +} + +static void +hrl_container_subtract(struct hrl_container *dest, const struct hrl_container *src) +{ + int i; + + mtx_assert(&hrl_lock, MA_OWNED); + + for (i = 0; i <= HRL_RESOURCE_MAX; i++) { + KASSERT(dest->hc_resources[i] >= 0, + ("resource usage propagation meltdown")); + KASSERT(src->hc_resources[i] >= 0, + ("resource usage propagation meltdown")); + KASSERT(src->hc_resources[i] <= dest->hc_resources[i], + ("resource usage propagation meltdown")); + dest->hc_resources[i] -= src->hc_resources[i]; + KASSERT(dest->hc_resources[i] >= 0, + ("resource usage propagation meltdown")); + } +} + +static void +hrl_container_join(struct hrl_container *child, struct hrl_container *parent) +{ + struct hrl_container *container; + + mtx_assert(&hrl_lock, MA_OWNED); + KASSERT(child != NULL, ("child != NULL")); + KASSERT(parent != NULL, ("parent != NULL")); + + LIST_FOREACH(container, &child->hc_parents, hc_next) + KASSERT(container != parent, ("container already joined")); + + LIST_INSERT_HEAD(&child->hc_parents, parent, hc_next); + hrl_container_add(parent, child); +} + +static void +hrl_container_leave(struct hrl_container *child, struct hrl_container *parent) +{ + struct hrl_container *container, *containertmp; + + mtx_assert(&hrl_lock, MA_OWNED); + KASSERT(child != NULL, ("child != NULL")); + KASSERT(parent != NULL, ("parent != NULL")); + + hrl_container_subtract(parent, child); + LIST_FOREACH_SAFE(container, &child->hc_parents, hc_next, containertmp) { + if (container != parent) + continue; + LIST_REMOVE(container, hc_next); + break; + } +} + +static void +hrl_container_leave_parents(struct hrl_container *child) +{ + struct hrl_container *parent; + + mtx_assert(&hrl_lock, MA_OWNED); + KASSERT(child != NULL, ("child != NULL")); + + while (!LIST_EMPTY(&child->hc_parents)) { + parent = LIST_FIRST(&child->hc_parents); + hrl_container_subtract(parent, child); + LIST_REMOVE(parent, hc_next); + } +} + void hrl_container_create(struct hrl_container *container) { @@ -445,6 +532,8 @@ for (i = 0; i <= HRL_RESOURCE_MAX; i++) KASSERT(container->hc_resources[i] == 0, ("container not zeroed")); + + LIST_INIT(&container->hc_parents); } void @@ -452,6 +541,7 @@ { int i; + mtx_lock(&hrl_lock); for (i = 0; i <= HRL_RESOURCE_MAX; i++) { if (container->hc_resources[i] != 0) printf("destroying non-empty container: " @@ -460,6 +550,9 @@ hrl_resource_name(i)); container->hc_resources[i] = 0; } + + hrl_container_leave_parents(container); + mtx_unlock(&hrl_lock); } /* @@ -578,44 +671,6 @@ mtx_unlock(&hrl_lock); } -static void -hrl_container_add(struct hrl_container *dest, const struct hrl_container *src) -{ - int i; - - mtx_lock(&hrl_lock); - for (i = 0; i <= HRL_RESOURCE_MAX; i++) { - KASSERT(dest->hc_resources[i] >= 0, - ("resource usage propagation meltdown")); - KASSERT(src->hc_resources[i] >= 0, - ("resource usage propagation meltdown")); - dest->hc_resources[i] += src->hc_resources[i]; - KASSERT(dest->hc_resources[i] >= 0, - ("resource usage propagation meltdown")); - } - mtx_unlock(&hrl_lock); -} - -static void -hrl_container_subtract(struct hrl_container *dest, const struct hrl_container *src) -{ - int i; - - mtx_lock(&hrl_lock); - for (i = 0; i <= HRL_RESOURCE_MAX; i++) { - KASSERT(dest->hc_resources[i] >= 0, - ("resource usage propagation meltdown")); - KASSERT(src->hc_resources[i] >= 0, - ("resource usage propagation meltdown")); - KASSERT(src->hc_resources[i] <= dest->hc_resources[i], - ("resource usage propagation meltdown")); - dest->hc_resources[i] -= src->hc_resources[i]; - KASSERT(dest->hc_resources[i] >= 0, - ("resource usage propagation meltdown")); - } - mtx_unlock(&hrl_lock); -} - static int hrl_rule_matches(const struct hrl_rule *rule, const struct hrl_rule *filter) { @@ -1715,48 +1770,37 @@ } /* - * Add rules for the new ucred. + * Add rules for the new ucred and move between containers where applicable. */ if (newuip != olduip) { LIST_FOREACH(limit, &newuip->ui_limits, hl_next) { error = hrl_limit_add_locked(&p->p_limits, limit->hl_rule); KASSERT(error == 0, ("XXX: better error handling needed")); } + + hrl_container_leave(&p->p_container, &olduip->ui_container); + hrl_container_join(&p->p_container, &newuip->ui_container); } if (newlc != oldlc) { LIST_FOREACH(limit, &newlc->lc_limits, hl_next) { error = hrl_limit_add_locked(&p->p_limits, limit->hl_rule); KASSERT(error == 0, ("XXX: better error handling needed")); } + + hrl_container_leave(&p->p_container, &oldlc->lc_container); + hrl_container_join(&p->p_container, &newlc->lc_container); } - if (newpr != newpr) { + if (newpr != oldpr) { LIST_FOREACH(limit, &newpr->pr_limits, hl_next) { error = hrl_limit_add_locked(&p->p_limits, limit->hl_rule); KASSERT(error == 0, ("XXX: better error handling needed")); } + + hrl_container_leave(&p->p_container, &oldpr->pr_container); + hrl_container_join(&p->p_container, &newpr->pr_container); } mtx_unlock(&hrl_lock); - - /* - * Fix up per-ruid resource consumption. - */ - if (newuip != olduip) { - hrl_container_subtract(&olduip->ui_container, &p->p_container); - hrl_container_add(&newuip->ui_container, &p->p_container); - } - - /* - * Adjust loginclass resource usage information. - */ - if (newlc != oldlc) { - hrl_container_subtract(&oldlc->lc_container, &p->p_container); - hrl_container_add(&newlc->lc_container, &p->p_container); - } - - /* - * XXX: Jail resource consumption. - */ } /* ==== //depot/projects/soc2009/trasz_limits/sys/sys/hrl.h#38 (text+ko) ==== @@ -139,7 +139,9 @@ * is HRL_SUBJECT_TYPE_USER. */ struct hrl_container { - int64_t hc_resources[HRL_RESOURCE_MAX + 1]; + LIST_ENTRY(hrl_container) hc_next; + int64_t hc_resources[HRL_RESOURCE_MAX + 1]; + LIST_HEAD(, hrl_container) hc_parents; }; /* From owner-p4-projects@FreeBSD.ORG Sun Oct 11 15:48:37 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id BDF1B106568B; Sun, 11 Oct 2009 15:48:37 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 68C241065670 for ; Sun, 11 Oct 2009 15:48:37 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 222188FC13 for ; Sun, 11 Oct 2009 15:48:37 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BFmaf0041476 for ; Sun, 11 Oct 2009 15:48:36 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BFmapx041474 for perforce@freebsd.org; Sun, 11 Oct 2009 15:48:36 GMT (envelope-from trasz@freebsd.org) Date: Sun, 11 Oct 2009 15:48:36 GMT Message-Id: <200910111548.n9BFmapx041474@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Cc: Subject: PERFORCE change 169399 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 15:48:38 -0000 http://perforce.freebsd.org/chv.cgi?CH=169399 Change 169399 by trasz@trasz_victim on 2009/10/11 15:48:10 Move two routines; no functional changes. Affected files ... .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#69 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#69 (text+ko) ==== @@ -114,57 +114,6 @@ MALLOC_DEFINE(M_HRL, "hrl", "Hierarchical Resource Limits"); -#ifdef DIAGNOSTIC -/* - * Go through the resource usage info and verify that it makes sense. - */ -static void -hrl_assert_proc(const struct proc *p __unused) -{ - int resource; - struct ucred *cred; - struct prison *pr; - - cred = p->p_ucred; - mtx_assert(&hrl_lock, MA_OWNED); - for (resource = 0; resource <= HRL_RESOURCE_MAX; resource++) - KASSERT(p->p_container.hc_resources[resource] >= 0, - ("resource usage propagation meltdown")); - KASSERT(cred->cr_ruidinfo->ui_container.hc_resources[resource] >= 0, - ("resource usage propagation meltdown")); - KASSERT(cred->cr_ruidinfo->ui_container.hc_resources[resource] >= - p->p_container.hc_resources[resource], - ("resource usage propagation meltdown")); - for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) { - KASSERT(pr->pr_container.hc_resources[resource] >= 0, - ("resource usage propagation meltdown")); - KASSERT(pr->pr_container.hc_resources[resource] >= - p->p_container.hc_resources[resource], - ("resource usage propagation meltdown")); - } -} -#endif /* DIAGNOSTIC */ - -void -hrl_proc_exiting(struct proc *p) -{ - int i; - - /* - * XXX: Free these three some other way. - */ - hrl_allocated(p, HRL_RESOURCE_FILESIZE, 0); - hrl_allocated(p, HRL_RESOURCE_COREDUMPSIZE, 0); - hrl_allocated(p, HRL_RESOURCE_PTY, 0); - - mtx_lock(&hrl_lock); - for (i = 0; i <= HRL_RESOURCE_MAX; i++) { - KASSERT(p->p_container.hc_resources[i] == 0, - ("dead process still holding resources")); - } - mtx_unlock(&hrl_lock); -} - static int hrl_resource_inheritable(int resource) { @@ -437,7 +386,38 @@ } } +#ifdef DIAGNOSTIC +/* + * Go through the resource usage info and verify that it makes sense. + */ static void +hrl_assert_proc(const struct proc *p __unused) +{ + int resource; + struct ucred *cred; + struct prison *pr; + + cred = p->p_ucred; + mtx_assert(&hrl_lock, MA_OWNED); + for (resource = 0; resource <= HRL_RESOURCE_MAX; resource++) + KASSERT(p->p_container.hc_resources[resource] >= 0, + ("resource usage propagation meltdown")); + KASSERT(cred->cr_ruidinfo->ui_container.hc_resources[resource] >= 0, + ("resource usage propagation meltdown")); + KASSERT(cred->cr_ruidinfo->ui_container.hc_resources[resource] >= + p->p_container.hc_resources[resource], + ("resource usage propagation meltdown")); + for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent) { + KASSERT(pr->pr_container.hc_resources[resource] >= 0, + ("resource usage propagation meltdown")); + KASSERT(pr->pr_container.hc_resources[resource] >= + p->p_container.hc_resources[resource], + ("resource usage propagation meltdown")); + } +} +#endif /* DIAGNOSTIC */ + +static void hrl_container_add(struct hrl_container *dest, const struct hrl_container *src) { int i; @@ -1847,6 +1827,26 @@ PROC_UNLOCK(parent); } +void +hrl_proc_exiting(struct proc *p) +{ + int i; + + /* + * XXX: Free these three some other way. + */ + hrl_allocated(p, HRL_RESOURCE_FILESIZE, 0); + hrl_allocated(p, HRL_RESOURCE_COREDUMPSIZE, 0); + hrl_allocated(p, HRL_RESOURCE_PTY, 0); + + mtx_lock(&hrl_lock); + for (i = 0; i <= HRL_RESOURCE_MAX; i++) { + KASSERT(p->p_container.hc_resources[i] == 0, + ("dead process still holding resources")); + } + mtx_unlock(&hrl_lock); +} + /* * Go through the process' limits, freeing them. */ From owner-p4-projects@FreeBSD.ORG Sun Oct 11 15:52:41 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C5FA7106568F; Sun, 11 Oct 2009 15:52:41 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8A768106568B for ; Sun, 11 Oct 2009 15:52:41 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 771EC8FC0C for ; Sun, 11 Oct 2009 15:52:41 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BFqfCA041764 for ; Sun, 11 Oct 2009 15:52:41 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BFqff5041762 for perforce@freebsd.org; Sun, 11 Oct 2009 15:52:41 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sun, 11 Oct 2009 15:52:41 GMT Message-Id: <200910111552.n9BFqff5041762@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 169400 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 15:52:42 -0000 http://perforce.freebsd.org/chv.cgi?CH=169400 Change 169400 by rwatson@rwatson_freebsd_capabilities on 2009/10/11 15:52:34 Rename many references to caplibinde to libcache, as that's a more accurate name for the functionality. This changes the host<->sandbox ABI so requires recompiling/reinstalling rtld/libcapability. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/Symbol.map#14 edit .. //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/ld_libcache.c#2 edit .. //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability.h#25 edit .. //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability_host.c#23 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/Symbol.map#5 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld-elf-cap.1#9 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.c#2 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.h#2 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf/rtld.c#26 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/Symbol.map#14 (text) ==== @@ -369,7 +369,7 @@ FBSD_1.2 { basename_r; getpagesizes; - ld_caplibindex_lookup; + ld_libcache_lookup; ld_insandbox; }; ==== //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/ld_libcache.c#2 (text+ko) ==== @@ -33,9 +33,9 @@ #include -#pragma weak ld_caplibindex_lookup +#pragma weak ld_libcache_lookup int -ld_caplibindex_lookup(const char *libname, int *fdp) +ld_libcache_lookup(const char *libname, int *fdp) { errno = EOPNOTSUPP; ==== //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability.h#25 (text+ko) ==== @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability.h#24 $ + * $P4: //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability.h#25 $ */ #ifndef _LIBCAPABILITY_H_ @@ -148,7 +148,7 @@ * Actually an rtld-elf-cap symbol, but declared here so it is available to * applications. */ -int ld_caplibindex_lookup(const char *libname, int *fdp); +int ld_libcache_lookup(const char *libname, int *fdp); int ld_insandbox(void); /* ==== //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability_host.c#23 (text+ko) ==== @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability_host.c#22 $ + * $P4: //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability_host.c#23 $ */ #include @@ -214,7 +214,7 @@ sbuf_finish(sbufp); if (sbuf_overflowed(sbufp)) return; - if (setenv("LD_CAPLIBINDEX", sbuf_data(sbufp), 1) == -1) + if (setenv("LD_LIBCACHE", sbuf_data(sbufp), 1) == -1) return; sbuf_delete(sbufp); @@ -255,16 +255,16 @@ bzero(lcsp, sizeof(*lcsp)); if (ld_insandbox()) { - if (ld_caplibindex_lookup(LD_ELF_CAP_SO, &fd_ldso) < 0) + if (ld_libcache_lookup(LD_ELF_CAP_SO, &fd_ldso) < 0) goto out_error; - if (ld_caplibindex_lookup(LIBC_SO, &fd_libc) < 0) + if (ld_libcache_lookup(LIBC_SO, &fd_libc) < 0) goto out_error; - if (ld_caplibindex_lookup(LIBCAPABILITY_SO, + if (ld_libcache_lookup(LIBCAPABILITY_SO, &fd_libcapability) < 0) goto out_error; - if (ld_caplibindex_lookup(LIBSBUF_SO, &fd_libsbuf) < 0) + if (ld_libcache_lookup(LIBSBUF_SO, &fd_libsbuf) < 0) goto out_error; - if (ld_caplibindex_lookup(_PATH_DEVNULL, &fd_devnull) < 0) + if (ld_libcache_lookup(_PATH_DEVNULL, &fd_devnull) < 0) goto out_error; } else { fd_ldso = open(PATH_LD_ELF_CAP_SO "/" LD_ELF_CAP_SO, ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/Symbol.map#5 (text+ko) ==== @@ -3,6 +3,6 @@ */ FBSD_1.1 { - ld_caplibindex_lookup; + ld_libcache_lookup; ld_insandbox; }; ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld-elf-cap.1#9 (text+ko) ==== @@ -68,7 +68,7 @@ Interprets the .Dv LD_CAPLIBINDEX environmental variable set by sandbox start routines, and implements -.Fn ld_caplibindex_lookup , +.Fn ld_libcache_lookup , allowing file descriptors for binaries and libraries passed across .Xr fexecve 2 to be used by ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.c#2 (text+ko) ==== @@ -55,21 +55,21 @@ #include #include "rtld.h" -#include "rtld_caplibindex.h" +#include "rtld_libcache.h" -struct libindex_entry { +struct libcache_entry { char *lie_name; int lie_fd; - TAILQ_ENTRY(libindex_entry) lie_list; + TAILQ_ENTRY(libcache_entry) lie_list; }; -static TAILQ_HEAD(, libindex_entry) ld_caplibindex_list = - TAILQ_HEAD_INITIALIZER(ld_caplibindex_list); +static TAILQ_HEAD(, libcache_entry) ld_libcache_list = + TAILQ_HEAD_INITIALIZER(ld_libcache_list); static void -ld_caplibindex_add(const char *name, const char *fdnumber) +ld_libcache_add(const char *name, const char *fdnumber) { - struct libindex_entry *liep; + struct libcache_entry *liep; long long l; char *endp; @@ -83,15 +83,15 @@ liep = xmalloc(sizeof(*liep)); liep->lie_name = xstrdup(name); liep->lie_fd = l; - TAILQ_INSERT_TAIL(&ld_caplibindex_list, liep, lie_list); + TAILQ_INSERT_TAIL(&ld_libcache_list, liep, lie_list); } int -ld_caplibindex_lookup(const char *libname, int *fdp) +ld_libcache_lookup(const char *libname, int *fdp) { - struct libindex_entry *liep; + struct libcache_entry *liep; - TAILQ_FOREACH(liep, &ld_caplibindex_list, lie_list) { + TAILQ_FOREACH(liep, &ld_libcache_list, lie_list) { if (strcmp(liep->lie_name, libname) == 0) { *fdp = liep->lie_fd; return (0); @@ -101,17 +101,17 @@ } void -ld_caplibindex_init(const char *caplibindex) +ld_libcache_init(const char *libcache) { - char *caplibindex_copy, *caplibindex_tofree; + char *libcache_copy, *libcache_tofree; char *entry, *fdnumber; - caplibindex_copy = caplibindex_tofree = xstrdup(caplibindex); - while ((entry = strsep(&caplibindex_copy, ",")) != NULL) { + libcache_copy = libcache_tofree = xstrdup(libcache); + while ((entry = strsep(&libcache_copy, ",")) != NULL) { fdnumber = strsep(&entry, ":"); if (fdnumber == NULL) continue; - ld_caplibindex_add(entry, fdnumber); + ld_libcache_add(entry, fdnumber); } - free(caplibindex_tofree); + free(libcache_tofree); } ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.h#2 (text+ko) ==== @@ -34,7 +34,7 @@ #ifndef RTLD_CAPLIBINDEX_H #define RTLD_CAPLIBINDEX_H -int ld_caplibindex_lookup(const char *libname, int *fdp); -void ld_caplibindex_init(const char *caplibindex); +int ld_libcache_lookup(const char *libname, int *fdp); +void ld_libcache_init(const char *libcache); #endif /* !RTLD_CAPLIBINDEX_H */ ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf/rtld.c#26 (text+ko) ==== @@ -60,7 +60,7 @@ #include "rtld_tls.h" #ifdef IN_RTLD_CAP -#include "rtld_caplibindex.h" +#include "rtld_libcache.h" #include "rtld_sandbox.h" #endif @@ -192,7 +192,7 @@ static char *ld_tracing; /* Called from ldd to print libs */ static char *ld_utrace; /* Use utrace() to log events. */ #ifdef IN_RTLD_CAP -static char *ld_caplibindex; +static char *ld_libcache; #endif static Obj_Entry *obj_list; /* Head of linked list of shared objects */ static Obj_Entry **obj_tail; /* Link field of last object in list */ @@ -245,7 +245,7 @@ (func_ptr_type) &_rtld_atfork_pre, (func_ptr_type) &_rtld_atfork_post, #ifdef IN_RTLD_CAP - (func_ptr_type) &ld_caplibindex_lookup, + (func_ptr_type) &ld_libcache_lookup, (func_ptr_type) &ld_insandbox, #endif NULL @@ -443,7 +443,7 @@ } ld_debug = getenv(LD_ "DEBUG"); #ifdef IN_RTLD_CAP - ld_caplibindex = getenv(LD_ "CAPLIBINDEX"); + ld_libcache = getenv(LD_ "LIBCACHE"); #else libmap_disable = getenv(LD_ "LIBMAP_DISABLE") != NULL; libmap_override = getenv(LD_ "LIBMAP"); @@ -557,8 +557,8 @@ sym_zero.st_shndx = SHN_UNDEF; #ifdef IN_RTLD_CAP - if (ld_caplibindex != NULL) - ld_caplibindex_init(ld_caplibindex); + if (ld_libcache != NULL) + ld_libcache_init(ld_libcache); #endif #ifndef IN_RTLD_CAP @@ -1633,8 +1633,8 @@ return NULL; } path = xstrdup(name); - if (ld_caplibindex_lookup(path, &fd) < 0) { - _rtld_error("Unable to find \"%s\" in LD_CAPLIBINDEX", path); + if (ld_libcache_lookup(path, &fd) < 0) { + _rtld_error("Unable to find \"%s\" in LD_LIBCACHE", path); return NULL; } #else From owner-p4-projects@FreeBSD.ORG Sun Oct 11 16:08:59 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id ADCEF106568B; Sun, 11 Oct 2009 16:08:59 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 724EE106566B for ; Sun, 11 Oct 2009 16:08:59 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 5F82D8FC13 for ; Sun, 11 Oct 2009 16:08:59 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BG8xpO043842 for ; Sun, 11 Oct 2009 16:08:59 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BG8xSv043840 for perforce@freebsd.org; Sun, 11 Oct 2009 16:08:59 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sun, 11 Oct 2009 16:08:59 GMT Message-Id: <200910111608.n9BG8xSv043840@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 169401 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 16:09:00 -0000 http://perforce.freebsd.org/chv.cgi?CH=169401 Change 169401 by rwatson@rwatson_freebsd_capabilities on 2009/10/11 16:08:15 Update further reference to LD_CAPLIBINDEX -> LD_LIBCACHE. Add public interface for inserting libraries into the library cache: ld_libcache_add(3), which is implemented by rtld when in a sandbox, and returns EOPNOTSUPP if not. Comment on two known limitations of the libcache code. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/Symbol.map#15 edit .. //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/ld_libcache.c#3 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/Symbol.map#6 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.c#3 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf/rtld.c#27 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/Symbol.map#15 (text) ==== @@ -369,6 +369,7 @@ FBSD_1.2 { basename_r; getpagesizes; + ld_libcache_add; ld_libcache_lookup; ld_insandbox; }; ==== //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/ld_libcache.c#3 (text+ko) ==== @@ -33,6 +33,15 @@ #include +#pragma weak ld_libcache_add +int +ld_libcache_add(const char *libname, int fd) +{ + + errno = EOPNOTSUPP; + return (-1); +} + #pragma weak ld_libcache_lookup int ld_libcache_lookup(const char *libname, int *fdp) ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/Symbol.map#6 (text+ko) ==== @@ -3,6 +3,7 @@ */ FBSD_1.1 { + ld_libcache_add; ld_libcache_lookup; ld_insandbox; }; ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.c#3 (text+ko) ==== @@ -35,15 +35,20 @@ __FBSDID("$FreeBSD$"); /* - * When running in a capability sandbox, rtld-elf-cap will be passed a set of - * open file descriptors to potentially useful libraries, along with an index - * to these in the LD_CAPLIBINDEX environmental variable. These routines - * parse that index, and allow lookups by library name. A typical string - * might be: + * rtld maintains a cache of library file descriptors, which is passed from + * host to sandbox at exec()-time in order to avoid the need for direct file + * system access from within sandboxes. When rtld starts, it inspects + * LD_LIBCACHE to find library descriptors passed from the host. This + * variable maps file descriptor numbers to library names: * * 6:libc.so.7,7:libm.so.5 * * In the event of ambiguity, the earliest entry will be matched. + * + * XXXRW: There should be locking around the libcache list. + * + * XXXRW: ld_libcache_lookup() should dup the fd before returning it so that + * the caller is responsible for managing the returned fd reference. */ #include @@ -66,10 +71,27 @@ static TAILQ_HEAD(, libcache_entry) ld_libcache_list = TAILQ_HEAD_INITIALIZER(ld_libcache_list); +/* + * Add a library to the library cache. + */ +void +ld_libcache_add(const char *name, int fd) +{ + struct libcache_entry *liep; + + liep = xmalloc(sizeof(*liep)); + liep->lie_name = xstrdup(name); + liep->lie_fd = fd; + TAILQ_INSERT_TAIL(&ld_libcache_list, liep, lie_list); +} + +/* + * Add a library to the library cache, with file descriptor passed as a + * string. Used internally when parsing LD_LIBCACHE. + */ static void -ld_libcache_add(const char *name, const char *fdnumber) +ld_libcache_add_string(const char *name, const char *fdnumber) { - struct libcache_entry *liep; long long l; char *endp; @@ -80,12 +102,14 @@ if (l < 0 || l > INT_MAX || *endp != '\0') return; - liep = xmalloc(sizeof(*liep)); - liep->lie_name = xstrdup(name); - liep->lie_fd = l; - TAILQ_INSERT_TAIL(&ld_libcache_list, liep, lie_list); + ld_libcache_add(name, l); } +/* + * Given a library name, return its file descriptor (if defined). Arguably, + * we should dup the cache-owned fd rather than returning it directly to the + * caller. + */ int ld_libcache_lookup(const char *libname, int *fdp) { @@ -100,6 +124,9 @@ return (-1); } +/* + * Initialize the library cache given the LD_LIBCACHE environmental variable. + */ void ld_libcache_init(const char *libcache) { @@ -111,7 +138,7 @@ fdnumber = strsep(&entry, ":"); if (fdnumber == NULL) continue; - ld_libcache_add(entry, fdnumber); + ld_libcache_add_string(entry, fdnumber); } free(libcache_tofree); } ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf/rtld.c#27 (text+ko) ==== @@ -245,6 +245,7 @@ (func_ptr_type) &_rtld_atfork_pre, (func_ptr_type) &_rtld_atfork_post, #ifdef IN_RTLD_CAP + (func_ptr_type) &ld_libcache_add, (func_ptr_type) &ld_libcache_lookup, (func_ptr_type) &ld_insandbox, #endif From owner-p4-projects@FreeBSD.ORG Sun Oct 11 16:21:13 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5B7531065693; Sun, 11 Oct 2009 16:21:13 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1FE37106568B for ; Sun, 11 Oct 2009 16:21:13 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 0D8DB8FC08 for ; Sun, 11 Oct 2009 16:21:13 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BGLC2k044744 for ; Sun, 11 Oct 2009 16:21:12 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BGLCPS044742 for perforce@freebsd.org; Sun, 11 Oct 2009 16:21:12 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sun, 11 Oct 2009 16:21:12 GMT Message-Id: <200910111621.n9BGLCPS044742@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 169402 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 16:21:13 -0000 http://perforce.freebsd.org/chv.cgi?CH=169402 Change 169402 by rwatson@rwatson_freebsd_capabilities on 2009/10/11 16:20:15 Convert more references to caplibindex into libcache references. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld-elf-cap.1#10 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.h#3 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf/rtld.c#28 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld-elf-cap.1#10 (text+ko) ==== @@ -66,7 +66,7 @@ the different environments. .It Interprets the -.Dv LD_CAPLIBINDEX +.Dv LD_LIBCACHE environmental variable set by sandbox start routines, and implements .Fn ld_libcache_lookup , allowing file descriptors for binaries and libraries passed across @@ -106,7 +106,7 @@ PRODUCTION SYSTEMS. IT WILL BREAK YOUR SOFTWARE IN NEW AND UNEXPECTED WAYS. .Pp The format of -.Dv LD_CAPLIBINDEX +.Dv LD_LIBCACHE is not documented, and may change. .Sh AUTHORS .Nm ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.h#3 (text+ko) ==== @@ -31,10 +31,11 @@ * SUCH DAMAGE. */ -#ifndef RTLD_CAPLIBINDEX_H -#define RTLD_CAPLIBINDEX_H +#ifndef RTLD_LIBCACHE_H +#define RTLD_LIBCACHE_H +int ld_libcache_add(const char *libname, int fd); int ld_libcache_lookup(const char *libname, int *fdp); void ld_libcache_init(const char *libcache); -#endif /* !RTLD_CAPLIBINDEX_H */ +#endif /* !RTLD_LIBCACHE_H */ ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf/rtld.c#28 (text+ko) ==== @@ -439,7 +439,7 @@ unsetenv(LD_ "ELF_HINTS_PATH"); #endif #ifdef IN_RTLD_CAP - unsetenv(LD_ "CAPLIBINDEX"); + unsetenv(LD_ "LIBCACHE"); #endif } ld_debug = getenv(LD_ "DEBUG"); From owner-p4-projects@FreeBSD.ORG Sun Oct 11 16:42:36 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id AC45C1065692; Sun, 11 Oct 2009 16:42:36 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 706E31065676 for ; Sun, 11 Oct 2009 16:42:36 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 5DA258FC15 for ; Sun, 11 Oct 2009 16:42:36 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BGgaLw046333 for ; Sun, 11 Oct 2009 16:42:36 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BGgadb046331 for perforce@freebsd.org; Sun, 11 Oct 2009 16:42:36 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sun, 11 Oct 2009 16:42:36 GMT Message-Id: <200910111642.n9BGgadb046331@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 169404 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 16:42:36 -0000 http://perforce.freebsd.org/chv.cgi?CH=169404 Change 169404 by rwatson@rwatson_freebsd_capabilities on 2009/10/11 16:41:43 In FreeBSD 9, need to use FBSD_1.2. Do offer a return code from ld_libcache_add(), as the caller will expect it when coming from outside of rtld. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/Symbol.map#7 edit .. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.c#4 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/Symbol.map#7 (text+ko) ==== @@ -2,7 +2,7 @@ * $FreeBSD$ */ -FBSD_1.1 { +FBSD_1.2 { ld_libcache_add; ld_libcache_lookup; ld_insandbox; ==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf-cap/rtld_libcache.c#4 (text+ko) ==== @@ -74,7 +74,7 @@ /* * Add a library to the library cache. */ -void +int ld_libcache_add(const char *name, int fd) { struct libcache_entry *liep; @@ -83,6 +83,7 @@ liep->lie_name = xstrdup(name); liep->lie_fd = fd; TAILQ_INSERT_TAIL(&ld_libcache_list, liep, lie_list); + return (0); } /* From owner-p4-projects@FreeBSD.ORG Sun Oct 11 16:53:49 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5AC32106568B; Sun, 11 Oct 2009 16:53:49 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 20BDB1065670 for ; Sun, 11 Oct 2009 16:53:49 +0000 (UTC) (envelope-from zjriggl@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id EA4E28FC17 for ; Sun, 11 Oct 2009 16:53:48 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BGrmqE057497 for ; Sun, 11 Oct 2009 16:53:48 GMT (envelope-from zjriggl@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BGrmFN057495 for perforce@freebsd.org; Sun, 11 Oct 2009 16:53:48 GMT (envelope-from zjriggl@FreeBSD.org) Date: Sun, 11 Oct 2009 16:53:48 GMT Message-Id: <200910111653.n9BGrmFN057495@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zjriggl@FreeBSD.org using -f From: Zachariah Riggle To: Perforce Change Reviews Cc: Subject: PERFORCE change 169407 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 16:53:49 -0000 http://perforce.freebsd.org/chv.cgi?CH=169407 Change 169407 by zjriggl@zjriggl_tcpregression on 2009/10/11 16:52:55 Added PCS-0.5 diff. Affected files ... .. //depot/projects/soc2009/zjriggl_tcpregression/diff/pcs-0.5.diff#1 add Differences ... From owner-p4-projects@FreeBSD.ORG Sun Oct 11 17:29:28 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 87D641065676; Sun, 11 Oct 2009 17:29:28 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4C6AB1065672 for ; Sun, 11 Oct 2009 17:29:28 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 197FB8FC20 for ; Sun, 11 Oct 2009 17:29:28 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9BHTRkU061011 for ; Sun, 11 Oct 2009 17:29:27 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9BHTRdY061009 for perforce@freebsd.org; Sun, 11 Oct 2009 17:29:27 GMT (envelope-from trasz@freebsd.org) Date: Sun, 11 Oct 2009 17:29:27 GMT Message-Id: <200910111729.n9BHTRdY061009@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Cc: Subject: PERFORCE change 169409 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2009 17:29:28 -0000 http://perforce.freebsd.org/chv.cgi?CH=169409 Change 169409 by trasz@trasz_victim on 2009/10/11 17:28:33 Fix language errors. Affected files ... .. //depot/projects/soc2009/trasz_limits/usr.sbin/hrl/hrl.8#2 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/usr.sbin/hrl/hrl.8#2 (text+ko) ==== @@ -76,10 +76,10 @@ Syntax for a rule is subject:subject-id:resource:action=amount/per. .Pp Subject defines the kind of entity the rule applies to. -It can be either process, user, group, loginclass, or jail. +It can be either process, user, group, login class, or jail. .Pp Subject ID identifies the subject. It can be user name, group name, -loginclass name, or a numerical UID, GID, or JID. +login class name, or a numerical UID, GID, or JID. .Pp Resource identifies the resource the rule controls. .Pp @@ -92,19 +92,21 @@ .Pp The per field defines what entity the limit gets accounted for. For example, rule "loginclass:users:memoryuse:deny=100M/process" means -that each process of a user belonging to loginclass "users" may use up to 100MB +that each process of any user belonging to login class "users" may use up to 100MB of memory. Rule "loginclass:users:memoryuse:deny=100M/user" would mean that the sum of -memory used by all processes of that user will not exceed 100MB. +memory used by all processes of any user belonging to the login class "users" +will not exceed 100MB. Rule "loginclass:users:memoryuse:deny=100M/loginclass" would mean that the sum of -memory used by all processes of all users with that loginclass will not exceed 100MB. +memory used by all processes of all users belonging to that login class will +not exceed 100MB. .Pp Valid rule has all of these fields specified, except for the per, which defaults to the value of subject. .Pp A filter is a rule for which one of more fields other than per is left empty. For example, a filter that matches every rule could be written as ":::=/", -or, in short, ":". A filter that matchess all the login classes would be +or, in short, ":". A filter that matches all the login classes would be "loginclass:". A filter that matches all defined limits for maxprocesses resource would be "::maxprocesses". .Sh EXIT STATUS From owner-p4-projects@FreeBSD.ORG Mon Oct 12 02:23:11 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4B7D11065676 for ; Mon, 12 Oct 2009 02:23:11 +0000 (UTC) (envelope-from streamsendbouncer@me21507.mailengine1.com) Received: from me21507.mailengine1.com (me21507.mailengine1.com [66.59.24.112]) by mx1.freebsd.org (Postfix) with ESMTP id 34EA08FC1A for ; Mon, 12 Oct 2009 02:23:11 +0000 (UTC) Received: by me21507.mailengine1.com (PowerMTA(TM) v3.5r14) id hqa9gu0j0pko for ; Sun, 11 Oct 2009 19:00:23 -0700 (envelope-from ) MIME-Version: 1.0 X-Mailer: StreamSend - 3326 X-Report-Abuse-At: abuse@streamsend.com X-Report-Abuse-Info: It is important to please include full email headers in the report X-Campaign-ID: 362 X-Streamsendid: 3326+192+8442692+362+me21507.mailengine1.com Date: Sun, 11 Oct 2009 19:00:22 -0700 From: "CISSE 2009" To: p4-projects@freebsd.org Message-Id: <20091012022311.4B7D11065676@hub.freebsd.org> Content-Type: text/plain Content-Transfer-Encoding: 7bit X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: CISSE 2009 - Paper Submission Deadline Extended to October 26, 2009. X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Oct 2009 02:23:11 -0000 Dear Colleagues, Due to numerous deadline extension requests from potential CISSE 2009 authors, the CISSE organizing committee has decided to extend the paper submission deadline to 10/26/2009. Please note that this is a hard deadline, so that the technical committees can perform their paper reviewing duties in a timely manner. If you received this email in error, please forward it to the appropriate department at your institution. If you wish to unsubscribe please follow the unsubscribe link at bottom of the email. Please do not reply to this message. If you need to contact us please email us at info@cisse2009.org ********************************************************************* * The Fifth International Joint Conferences on Computer, * * Information, and Systems Sciences, and Engineering (CISSE 2009) * * * * * * * * http://www.cisse2009.org * * * * * * * ********************************************************************* December 4-12, 2009 Sponsored by the University of Bridgeport Technically co-sponsored by the IEEE Computer Society, Communications Society and Education Society (Connecticut Section) --------------------------------------------------------------------- CONFERENCE OVERVIEW --------------------------------------------------------------------- CISSE 2009 provides a virtual forum for presentation and discussion of the state-of the-art research on computers, information and systems sciences and engineering. CISSE 2009 is the fifth conference of the CISSE series of e-conferences. CISSE is the World's first Engineering/Computing and Systems Research E-Conference. CISSE 2005 was the first high-caliber Research Conference in the world to be completely conducted online in real-time via the internet. CISSE 2005 received 255 research paper submissions and the final program included 140 accepted papers, from more than 45 countries. CISSE 2006 received 691 research paper submissions and the final program included 390 accepted papers, from more than 70 countries. CISSE 2007 received 750 research paper submissions and the final program included 406 accepted papers. A total of 948 paper submissions were received for CISSE 2008 and the final program included 382 accepted papers, from more than 80 countries. The virtual conference will be conducted through the Internet using web-conferencing tools, made available by the conference. Authors will be presenting their PowerPoint, audio or video presentations using web-conferencing tools without the need for travel. Conference sessions will be broadcast to all the conference participants, where session participants can interact with the presenter during the presentation and (or) during the Q&A slot that follows the presentation. This international conference will be held entirely on-line. The accepted and presented papers will be made available and sent to the authors after the conference both on a DVD (including all papers, powerpoint presentations and audio presentations) and as a book publication. Springer, the official publisher for CISSE, published the 2005 proceedings in 2 books and the CISSE 2006, CISSE 2007 and CISSE 2008 proceedings in four books each. Conference participants - authors, presenters and attendees - only need an internet connection and sound available on their computers in order to be able to contribute and participate in this international ground-breaking conference. The on-line structure of this high-quality event will allow academic professionals and industry participants to contribute their work and attend world-class technical presentations based on rigorously refereed submissions, live, without the need for investing significant travel funds or time out of the office. The concept and format of CISSE is ground-breaking. The PowerPoint presentations, final paper manuscripts and time schedule for live presentations over the web are available for two weeks prior to the start of the conference for all registrants, so that the participants can choose the presentations they want to attend and think about questions that they might want to ask. The live audio presentations were also recorded and are part of the permanent CISSE on-line archive - accessible to all registrants- which also includes all the papers, PowerPoint and audio presentations. Potential non-author conference attendees who cannot make the on-line conference dates are encouraged to register, as the entire joint conferences will be archived for future viewing. The CISSE conference audio room provides superb audio even over low speed internet connections, the ability to display PowerPoint presentations, and cross-platform compatibility (the conferencing software runs on Windows, Mac, and any other operating system that supports Java). In addition, the conferencing system allows for an unlimited number of participants, which in turn granted us the opportunity to allow all CISSE participants to attend all presentations, as opposed to limiting the number of available seats for each session. Prospective authors are invited to submit full papers electronically in Microsoft Word or Adobe PDF format through the website of the conference at http://www.cisse2009.org. Accepted papers must be presented in the virtual conference by one of the authors. To submit your paper, please visit http://www.cisse2009.org CISSE 2009 is composed of the following four conferences: International Conference on Systems, Computing Sciences and Software Engineering (SCSS 09) Topics: Grid Computing, Internet-based Computing Models, Resource Discovery, Programming Models and tools, e-Science and Virtual Instrumentation, Biometric Authentication, Computers for People of Special Needs, Human Computer Interaction, Information and Knowledge Engineering, Algorithms, Parallel and Distributed processing, Modeling and Simulation, Services and Applications, Embedded Systems and Applications, Databases, Programming Languages, Signal Processing Theory and Methods, Signal Processing for Communication, Signal Processing Architectures and Implementation, Information Processing, Geographical Information Systems, Object Based Software Engineering, Parallel and Distributed Computing, Real Time Systems, Multiprocessing, File Systems and I/O, Kernel and OS Structures. International Conference on Telecommunications and Networking (TeNe 09) Topics: Optical Networks and Switching, Computer Networks, Network architectures and Equipment, Access Technologies, Telecommunication Technology, Coding and Modulation technique, Modeling and Simulation, Spread Spectrum and CDMA Systems, OFDM technology, Space-time Coding, Ultra Wideband Communications, Medium Access Control, Spread Spectrum, Wireless LAN: IEEE 802.11, HIPERLAN, Bluetooth, Cellular Wireless Networks, Cordless Systems and Wireless Local Loop, Mobile Network Layer, Mobile Transport Layer, Support for Mobility, Conventional Encryption and Message Confidentiality, Block Ciphers Design Principles, Block Ciphers Modes of Operation, Public-Key Cryptography and Message Authentication, Authentication Application, Stenography, Electronic Mail Security, Web Security, IP Security, Firewalls, Computer Forensics. International Conference on Engineering Education, Instructional Technology, Assessment, and E-learning (EIAE 09) Topics: Instructional Design, Accreditation, Curriculum Design, Educational Tools, 2-2-2 Platforms, Teaching Capstone Design, Teaching Design at the Lower Levels, Design and Development of e-Learning tools, Assessment Methods in Engineering, Development and Implementation of E-learning tools, Ethics in Education, Economical and Social Impacts of E-learning. International Conference on Industrial Electronics, Technology & Automation (IETA 09) Topics: Advanced and Distributed Control Systems, Intelligent Control Systems (NN, FL, GA, .etc), Expert Systems, Man Machine Interaction, Data Fusion, Factory Automation, Robotics, Motion Control, Machine Vision, MEMS Sensors and Actuators, Sensors Fusion, Power Electronics, High Frequency Converters, Motors and Drives, Power Converters, Power Devices and Components, Electric Vehicles and Intelligent Transportation, Process Automation, Factory Communication, Manufacturing Information System Advances in Manufacturing Systems, Industrial Applications of Multi Media, Intelligent Systems Instrumentation, Industrial Instrumentation, Modeling and Simulation, Signal Processing, Image and Data Processing, VR and Parallel systems.. Paper Submission ================= Prospective authors are invited to submit full papers electronically in Microsoft Word or Adobe PDF format through the website of the conference at http://www.cisse2009.org. Accepted papers must be presented in the virtual conference by one of the authors. To submit your paper, visit http://www.cisse2009.org New Paper submission Deadline: October 26th, 2009 Notification of Acceptance: November 12th, 2009 Final Manuscript and Registration: November 26th, 2009 ------------------------------------------------------------------------ S. Patel CISSE 2009 Support Team University of Bridgeport e-mail: info@cisse2009.org Bridgeport, CT 06604, U.S.A. http://www.cisse2009.org ------------------------------------------------------------------------ Click here on http://server1.streamsend.com/streamsend/unsubscribe.php?cd=3326&md=362&ud=2e7aaf127fa07e33b2a077dfd368e5f1 to update your profile or Unsubscribe From owner-p4-projects@FreeBSD.ORG Mon Oct 12 08:17:38 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 490C61065679; Mon, 12 Oct 2009 08:17:38 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 01635106566B for ; Mon, 12 Oct 2009 08:17:38 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id E3BED8FC0C for ; Mon, 12 Oct 2009 08:17:37 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9C8Hb18072724 for ; Mon, 12 Oct 2009 08:17:37 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9C8HbeE072722 for perforce@freebsd.org; Mon, 12 Oct 2009 08:17:37 GMT (envelope-from pgj@FreeBSD.org) Date: Mon, 12 Oct 2009 08:17:37 GMT Message-Id: <200910120817.n9C8HbeE072722@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Cc: Subject: PERFORCE change 169416 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Oct 2009 08:17:38 -0000 http://perforce.freebsd.org/chv.cgi?CH=169416 Change 169416 by pgj@beehive on 2009/10/12 08:17:15 IFC Affected files ... .. //depot/projects/docproj_hu/doc/hu_HU.ISO8859-2/books/faq/book.sgml#52 integrate .. //depot/projects/docproj_hu/www/en/news/status/Makefile#7 integrate .. //depot/projects/docproj_hu/www/en/news/status/report-2009-04-2009-09.xml#3 integrate .. //depot/projects/docproj_hu/www/en/news/status/status.sgml#8 integrate .. //depot/projects/docproj_hu/www/share/sgml/news.xml#71 integrate Differences ... ==== //depot/projects/docproj_hu/doc/hu_HU.ISO8859-2/books/faq/book.sgml#52 (text+ko) ==== @@ -20,7 +20,7 @@ A &os; Dokumentációs Projekt - $FreeBSD: doc/hu_HU.ISO8859-2/books/faq/book.sgml,v 1.14 2009/06/14 22:28:17 pgj Exp $ + $FreeBSD: doc/hu_HU.ISO8859-2/books/faq/book.sgml,v 1.15 2009/10/11 12:24:11 pgj Exp $ 1995 ==== //depot/projects/docproj_hu/www/en/news/status/Makefile#7 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: www/en/news/status/Makefile,v 1.47 2009/10/05 12:49:16 danger Exp $ +# $FreeBSD: www/en/news/status/Makefile,v 1.48 2009/10/11 17:49:28 danger Exp $ .if exists(../Makefile.conf) .include "../Makefile.conf" @@ -44,7 +44,7 @@ XMLDOCS+= report-2008-07-2008-09 XMLDOCS+= report-2008-10-2008-12 XMLDOCS+= report-2009-01-2009-03 -#XMLDOCS+= report-2009-04-2009-09 +XMLDOCS+= report-2009-04-2009-09 XSLT.DEFAULT= report.xsl ==== //depot/projects/docproj_hu/www/en/news/status/report-2009-04-2009-09.xml#3 (text+ko) ==== @@ -2,7 +2,7 @@ - + April-September @@ -936,10 +936,11 @@ member Kirill Ponomarew (krion@) for his long service.

    Ion-Mihai has spent much time working on a system that does - automatic Quality Assurance on new commits, called QATty. - This has helped us to fix many problems, especially those - involving custom LOCALBASE settings, and documentation inclusion - options.

    + automatic Quality Assurance on new commits, called QAT. A + second tinderbox called QATty has helped us to fix many problems, + especially those involving custom PREFIX and LOCALBASE settings, + and documentation inclusion options. Ports conformance to + documented features / non-default configuration will follow.

    Between pav and miwi, over 2 dozen experimental ports runs have been completed and committed.

    @@ -950,7 +951,10 @@ We are currently trying to set up ports tinderboxes that - can be made available to committers for pre-testing. + can be made available to committers for pre-testing; those + who can loan machines for this should contact Ion-Mihai + (itetcu@) with details regarding the hardware and + bandwidth. Most of the remaining ports PRs are "existing port/PR assigned to committer". Although the maintainer-timeout policy is helping to keep the backlog down, we are going to need to do ==== //depot/projects/docproj_hu/www/en/news/status/status.sgml#8 (text+ko) ==== @@ -1,6 +1,6 @@ - + ]> @@ -8,7 +8,7 @@ &header; -

    Next submissions due: July 14, 2009

    +

    Next submissions due: January 15, 2010

    Use the xml generator or download and edit the @@ -37,11 +37,13 @@ reports, a short description may precede the status information.

    These status reports may be reproduced in whole or in part, as long as the - source is clearly identified and appropriate credit given.

    + source is clearly identified and appropriate credit given.

    2009

    ==== //depot/projects/docproj_hu/www/share/sgml/news.xml#71 (text+ko) ==== @@ -25,7 +25,7 @@ - $FreeBSD: www/share/sgml/news.xml,v 1.272 2009/10/04 15:00:07 jh Exp $ + $FreeBSD: www/share/sgml/news.xml,v 1.273 2009/10/11 17:49:27 danger Exp $ @@ -34,6 +34,19 @@ 10 + + + 11 + + + April-September, 2009 Status Report + +

    The April-September, 2009 Status Report is now + available with 38 entries.

    +
    +
    + 4 From owner-p4-projects@FreeBSD.ORG Mon Oct 12 08:30:53 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id F2234106568F; Mon, 12 Oct 2009 08:30:52 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B680F106566B for ; Mon, 12 Oct 2009 08:30:52 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id A57A48FC28 for ; Mon, 12 Oct 2009 08:30:52 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9C8Uqsh073658 for ; Mon, 12 Oct 2009 08:30:52 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9C8UqsY073656 for perforce@freebsd.org; Mon, 12 Oct 2009 08:30:52 GMT (envelope-from pgj@FreeBSD.org) Date: Mon, 12 Oct 2009 08:30:52 GMT Message-Id: <200910120830.n9C8UqsY073656@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Cc: Subject: PERFORCE change 169417 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Oct 2009 08:30:53 -0000 http://perforce.freebsd.org/chv.cgi?CH=169417 Change 169417 by pgj@beehive on 2009/10/12 08:30:46 MFen (www): 1.272 -> 1.273 hu/share/sgml/news.xml Affected files ... .. //depot/projects/docproj_hu/www/hu/share/sgml/news.xml#56 edit Differences ... ==== //depot/projects/docproj_hu/www/hu/share/sgml/news.xml#56 (text+ko) ==== @@ -5,7 +5,7 @@ @@ -22,6 +22,22 @@ 10 + 11 + + + 2009 második és harmadik + negyedéves (április - szeptember) + helyzetjelentések + +

    A 2009 áprilisa és szeptembere közt + eltelt idõszakról tudósító + 38 helyzetjelentés mostantól + elérhetõ.

    +
    +
    + + 4 From owner-p4-projects@FreeBSD.ORG Mon Oct 12 09:16:42 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id AE11D106568D; Mon, 12 Oct 2009 09:16:42 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 720981065670 for ; Mon, 12 Oct 2009 09:16:42 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 611EF8FC1B for ; Mon, 12 Oct 2009 09:16:42 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9C9Gglt088097 for ; Mon, 12 Oct 2009 09:16:42 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9C9GgVX088095 for perforce@freebsd.org; Mon, 12 Oct 2009 09:16:42 GMT (envelope-from mav@freebsd.org) Date: Mon, 12 Oct 2009 09:16:42 GMT Message-Id: <200910120916.n9C9GgVX088095@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Cc: Subject: PERFORCE change 169418 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Oct 2009 09:16:42 -0000 http://perforce.freebsd.org/chv.cgi?CH=169418 Change 169418 by mav@mav_mavtest on 2009/10/12 09:16:05 Look for bus only when it is needed. Affected files ... .. //depot/projects/scottl-camlock/src/sys/cam/cam_xpt.c#105 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/cam/cam_xpt.c#105 (text+ko) ==== @@ -4156,8 +4156,6 @@ sendq->qfrozen_cnt--; if (sendq->qfrozen_cnt == 0) { - struct cam_eb *bus; - /* * If there is a timeout scheduled to release this * sim queue, remove it. The queue frozen count is @@ -4167,15 +4165,17 @@ callout_stop(&sim->callout); sim->flags &= ~CAM_SIM_REL_TIMEOUT_PENDING; } - bus = xpt_find_bus(sim->path_id); if (run_queue) { + struct cam_eb *bus; + /* * Now that we are unfrozen run the send queue. */ + bus = xpt_find_bus(sim->path_id); xpt_run_dev_sendq(bus); + xpt_release_bus(bus); } - xpt_release_bus(bus); } } } From owner-p4-projects@FreeBSD.ORG Mon Oct 12 12:57:44 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6C3AC10656AA; Mon, 12 Oct 2009 12:57:44 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2FE6310656A8 for ; Mon, 12 Oct 2009 12:57:44 +0000 (UTC) (envelope-from gabor@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 1D8EF8FC2B for ; Mon, 12 Oct 2009 12:57:44 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9CCvihK020816 for ; Mon, 12 Oct 2009 12:57:44 GMT (envelope-from gabor@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9CCvi9r020814 for perforce@freebsd.org; Mon, 12 Oct 2009 12:57:44 GMT (envelope-from gabor@freebsd.org) Date: Mon, 12 Oct 2009 12:57:44 GMT Message-Id: <200910121257.n9CCvi9r020814@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gabor@freebsd.org using -f From: Gabor Kovesdan To: Perforce Change Reviews Cc: Subject: PERFORCE change 169422 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Oct 2009 12:57:44 -0000 http://perforce.freebsd.org/chv.cgi?CH=169422 Change 169422 by gabor@gabor_aspire on 2009/10/12 12:57:32 MFHg: GENERAL ============================================================ - Add a top-level Makefile to make the upgrade easier. For first-time installation it is still required to follow TESTING-HOWTO to resolve the dependencies between the various components. [1] LIBRARY ============================================================ - Hook up mapper_parallel to the build, which was forgotten - Fix a typo in _iconv.c - Add GNU-specific iconvctl(). Currently, the following iconvctl() operations are supported: - ICONV_GET_TRIVIALP - ICONV_GET_TRANSLITERATION - ICONV_SET_TRANSLITERATION - ICONV_GET_DISCARD_ILSEQ - ICONV_SET_DISCARD_ILSEQ - Along with ICONV_*_DISCARD_ILSEQ, add support for //IGNORE prefix of the destination encoding in iconv_open() - Implement GNU's _iconv_canonalize() - Make iconvctl() return -1 and set errno to EBADF if conversion descriptor is invalid - Speed up build of modules by linking them to the library - Implement GNU-specific iconvlist() - Some style changes [1] - Define historical GNU function names: libiconv_open(), libiconv(), libiconv_close() [1] - Add support for listing canonical - alias conversion name pairs [1] - Fix installation of iconv.3 [1] BIN ============================================================ - Add -ll for iconv(1) to list supported encodings as canonical - alias name pairs [1] - C99-ify iconv(1) a bit REGRESSION-TEST ============================================================= - Turn on some more test cases in the conversion table comparing tests - Add a target to generate reference data from GNU iconv - Add -l to tablegen so that we can make longer (but more time-consuming) tests - Add a simple POSIX test for some basic cases - Add a simple GNU compatibility test for some implemented GNU-specific features DOCS ============================================================= - Add a sketchy iconvctl.3 man page Submitted by: edwin [1] Affected files ... .. //depot/projects/soc2009/gabor_iconv/extracted/include/iconv.h#2 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/Makefile#7 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/_iconv.c#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_esdb.c#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_esdb.h#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_iconv.c#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_iconv.h#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_iconv_local.h#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_module.h#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_prop.c#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/GBK2K/citrus_gbk2k.c#7 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/MSKanji/citrus_mskanji.c#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/Makefile#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/Makefile.inc#4 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/UES/citrus_ues.c#7 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/UTF1632/citrus_utf1632.c#8 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/iconv_none/citrus_iconv_none.c#7 edit .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/iconv_std/citrus_iconv_std.c#7 edit .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/Makefile#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/iconv/Makefile#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/tools/test/iconv/Makefile#5 edit .. //depot/projects/soc2009/gabor_iconv/extracted/tools/test/iconv/tablegen/tablegen.c#3 edit .. //depot/projects/soc2009/gabor_iconv/extracted/usr.bin/Makefile#5 edit .. //depot/projects/soc2009/gabor_iconv/extracted/usr.bin/iconv/Makefile#7 edit .. //depot/projects/soc2009/gabor_iconv/extracted/usr.bin/iconv/iconv.1#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/usr.bin/iconv/iconv.c#6 edit .. //depot/projects/soc2009/gabor_iconv/extracted/usr.bin/mkcsmapper/Makefile#8 edit .. //depot/projects/soc2009/gabor_iconv/extracted/usr.bin/mkesdb/Makefile#8 edit Differences ... ==== //depot/projects/soc2009/gabor_iconv/extracted/include/iconv.h#2 (text+ko) ==== @@ -30,6 +30,9 @@ #ifndef _ICONV_H_ #define _ICONV_H_ +#include +#include + #include #include @@ -50,11 +53,48 @@ /* * non-portable interfaces for iconv */ -int __iconv_get_list(char ***, size_t *); +int __iconv_get_list(char ***, size_t *, bool); void __iconv_free_list(char **, size_t); size_t __iconv(iconv_t, const char **, size_t *, char **, size_t *, __uint32_t, size_t *); #define __ICONV_F_HIDE_INVALID 0x0001 + +/* + * GNU interfaces for iconv + */ + +/* Historical versions */ +#define libiconv_open iconv_open +#define libiconv_close iconv_close +#define libiconv iconv + +/* We have iconvctl() */ +#define _LIBICONV_VERSION 0x0108 + +/* + * iconvctl() request macros + */ +#define ICONV_TRIVIALP 0 +#define ICONV_GET_TRANSLITERATE 1 +#define ICONV_SET_TRANSLITERATE 2 +#define ICONV_GET_DISCARD_ILSEQ 3 +#define ICONV_SET_DISCARD_ILSEQ 4 +#define ICONV_SET_HOOKS 5 +#define ICONV_SET_FALLBACKS 6 + +typedef void (*iconv_unicode_char_hook) (unsigned int mbr, void *data); +typedef void (*iconv_wide_char_hook) (wchar_t wc, void *data); + +struct iconv_hooks { + iconv_unicode_char_hook uc_hook; + iconv_wide_char_hook wc_hook; + void *data; +}; + +void iconvlist(int (*do_one) (unsigned int, const char * const *, + void *), void *); +const char *_iconv_canonalize(const char *); +int iconvctl(iconv_t, int, void *); __END_DECLS #endif /* !_ICONV_H_ */ ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/Makefile#7 (text+ko) ==== @@ -2,6 +2,8 @@ LIB= iconv SHLIB_MAJOR= 4 +MAN= iconv.3 \ + iconvctl.3 SRCS= _iconv.c \ citrus_bcs.c \ citrus_bcs_strtol.c \ @@ -26,7 +28,7 @@ citrus_prop.c \ citrus_stdenc.c -CFLAGS+= --param max-inline-insns-single=128 +CFLAGS+= --param max-inline-insns-single=128 -I ${.CURDIR}/../../include WARNS?= 3 .include ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/_iconv.c#6 (text+ko) ==== @@ -30,10 +30,11 @@ #include #include +#include #include +#include #include -#include "iconv.h" #include "netbsdism.h" #ifdef __weak_alias @@ -64,7 +65,7 @@ /* * Remove anything following a //, as these are options (like * //ignore, //translate, etc) and we just don't handle them. - * This is for compatibilty wiht software that uses thees + * This is for compatibilty with software that uses thees * blindly. */ out_truncated = strdup(out); @@ -85,10 +86,15 @@ ret = _citrus_iconv_open(&handle, _PATH_ICONV, in, out_truncated); free(out_truncated); if (ret) { - errno = ret == ENOENT? EINVAL : ret; + errno = ret == ENOENT ? EINVAL : ret; return ((iconv_t)-1); } + if (strcasestr(out, "//IGNORE")) + handle->cv_shared->ci_discard_ilseq = true; + else + handle->cv_shared->ci_discard_ilseq = false; + return ((iconv_t)(void *)handle); } @@ -153,11 +159,11 @@ } int -__iconv_get_list(char ***rlist, size_t *rsz) +__iconv_get_list(char ***rlist, size_t *rsz, bool l) { int ret; - ret = _citrus_esdb_get_list(rlist, rsz); + ret = _citrus_esdb_get_list(rlist, rsz, l); if (ret) { errno = ret; return -1; @@ -171,3 +177,80 @@ { _citrus_esdb_free_list(list, sz); } + +/* + * GNU-compatibile non-standard interfaces. + */ +void +iconvlist(int (*do_one) (unsigned int, const char * const *, + void *), void *data) +{ + char **list; + size_t sz; + + if (__iconv_get_list(&list, &sz, true)) + list = NULL; + + const char * const * names = (const char * const *)list; + unsigned int i = sz; + do_one(i, names, data); + + __iconv_free_list(list, sz); +} + +__inline const char +*_iconv_canonalize(const char *name) +{ + return (_citrus_iconv_canonalize(name)); +} + +int +iconvctl(iconv_t cd, int request, void *argument) +{ + int *i = (int *)argument; + struct iconv_hooks *hooks = (struct iconv_hooks *)argument; + struct _citrus_iconv *cv = (struct _citrus_iconv *)(void *)cd; + const char *convname; + char *src, *dst; + + if (ISBADF(cd)) { + errno = EBADF; + return (-1); + } + + switch (request) { + case ICONV_TRIVIALP: + convname = cv->cv_shared->ci_convname; + dst = strchr(convname, '/'); + + strlcpy(src, convname, dst - convname + 1); + dst++; + if ((convname == NULL) || (src == NULL) || (dst == NULL)) + return (-1); + *i = strcmp(src, dst) == 0 ? 1 : 0; + return (0); + case ICONV_GET_TRANSLITERATE: + *i = 1; + return (0); + case ICONV_SET_TRANSLITERATE: + return ((*i == 1) ? 0 : -1); + case ICONV_GET_DISCARD_ILSEQ: + *i = cv->cv_shared->ci_discard_ilseq ? 1 : 0; + return (0); + case ICONV_SET_DISCARD_ILSEQ: + cv->cv_shared->ci_discard_ilseq = *i; + return (0); + case ICONV_SET_HOOKS: + if (hooks != NULL) + cv->cv_shared->ci_hooks = *hooks; + else { + cv->cv_shared->ci_hooks.uc_hook = NULL; + cv->cv_shared->ci_hooks.wc_hook = NULL; + cv->cv_shared->ci_hooks.data = NULL; + } + return (0); + default: + errno = EINVAL; + return (-1); + } +} ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_esdb.c#6 (text+ko) ==== @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -254,10 +255,10 @@ * get esdb entries. */ int -_citrus_esdb_get_list(char ***rlist, size_t *rnum) +_citrus_esdb_get_list(char ***rlist, size_t *rnum, bool l) { int ret; - struct _region key; + struct _region key, data; size_t num; struct _citrus_lookup *cla, *cld; char **list, **q; @@ -290,10 +291,17 @@ } /* get alias entries */ - while ((ret = _lookup_seq_next(cla, &key, NULL)) == 0) { - snprintf(buf, sizeof(buf), "%.*s", - (int)_region_size(&key), - (const char *)_region_head(&key)); + while ((ret = _lookup_seq_next(cla, &key, &data)) == 0) { + if (!l) + snprintf(buf, sizeof(buf), "%.*s", + (int)_region_size(&key), + (const char *)_region_head(&key)); + else + snprintf(buf, sizeof(buf), "%.*s/%.*s", + (int)_region_size(&data), + (const char *)_region_head(&data), + (int)_region_size(&key), + (const char *)_region_head(&key)); _bcs_convert_to_lower(buf); list[num] = strdup(buf); if (list[num] == NULL) { @@ -305,11 +313,28 @@ if (ret != ENOENT) goto quit3; /* get dir entries */ - while ((ret = _lookup_seq_next(cld, &key, NULL)) == 0) { + while ((ret = _lookup_seq_next(cld, &key, &data)) == 0) { /* check duplicated entry */ - snprintf(buf, sizeof(buf), "%.*s", - (int)_region_size(&key), - (const char *)_region_head(&key)); + if (!l) + snprintf(buf, sizeof(buf), "%.*s", + (int)_region_size(&key), + (const char *)_region_head(&key)); + else { + char buf1[PATH_MAX]; + char *p; + + snprintf(buf1, sizeof(buf1), "%.*s", + (int)_region_size(&data), + (const char *)_region_head(&data)); + if ((p = strchr(buf1, '/')) != NULL) + memcpy(buf1, p + 1, strlen(p) - 1); + if ((p = strstr(buf1, ".esdb")) != NULL) + *p = '\0'; + snprintf(buf, sizeof(buf), "%s/%.*s", + buf1, + (int)_region_size(&key), + (const char *)_region_head(&key)); + } _bcs_convert_to_lower(buf); ret = _lookup_seq_lookup(cla, buf, NULL); if (ret) { ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_esdb.h#6 (text+ko) ==== @@ -49,7 +49,7 @@ int _citrus_esdb_open(struct _citrus_esdb *, const char *); void _citrus_esdb_close(struct _citrus_esdb *); void _citrus_esdb_free_list(char **, size_t); -int _citrus_esdb_get_list(char ***, size_t *); +int _citrus_esdb_get_list(char ***, size_t *, bool); __END_DECLS #endif ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_iconv.c#6 (text+ko) ==== @@ -30,10 +30,12 @@ #include #include +#include #include #include #include #include +#include #include #include #include @@ -378,3 +380,14 @@ free(cv); } } + +const char +*_citrus_iconv_canonalize(const char *name) +{ + char buf[PATH_MAX], path[PATH_MAX]; + + snprintf(path, sizeof(path), "%s/%s", _PATH_ICONV, _CITRUS_ICONV_ALIAS); + return (_citrus_lookup_simple(path, name, buf, (size_t)PATH_MAX, + _LOOKUP_CASE_IGNORE)); +} + ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_iconv.h#6 (text+ko) ==== @@ -34,10 +34,11 @@ struct _citrus_iconv; __BEGIN_DECLS -int _citrus_iconv_open(struct _citrus_iconv * __restrict * __restrict, +int _citrus_iconv_open(struct _citrus_iconv * __restrict * __restrict, const char * __restrict, const char * __restrict, const char * __restrict); -void _citrus_iconv_close(struct _citrus_iconv *); +void _citrus_iconv_close(struct _citrus_iconv *); +const char *_citrus_iconv_canonalize(const char *); __END_DECLS ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_iconv_local.h#6 (text+ko) ==== @@ -29,6 +29,8 @@ #ifndef _CITRUS_ICONV_LOCAL_H_ #define _CITRUS_ICONV_LOCAL_H_ +#include + #define _CITRUS_ICONV_GETOPS_FUNC_BASE(_n_) \ int _n_(struct _citrus_iconv_ops *, size_t, uint32_t) #define _CITRUS_ICONV_GETOPS_FUNC(_n_) \ @@ -97,6 +99,8 @@ _citrus_module_t ci_module; unsigned int ci_used_count; char *ci_convname; + bool ci_discard_ilseq; + struct iconv_hooks ci_hooks; }; struct _citrus_iconv { ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_module.h#6 (text+ko) ==== @@ -30,6 +30,16 @@ #ifndef _CITRUS_MODULE_H_ #define _CITRUS_MODULE_H_ +#define MATCH(x, act) \ +do { \ + if (lenvar >= (sizeof(#x)-1) && \ + _bcs_strncasecmp(p, #x, sizeof(#x)-1) == 0) { \ + act; \ + lenvar -= sizeof(#x)-1; \ + p += sizeof(#x)-1; \ + } \ +} while (/*CONSTCOND*/0) + typedef struct _citrus_module_rec *_citrus_module_t; __BEGIN_DECLS ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/citrus_prop.c#6 (text+ko) ==== @@ -160,11 +160,11 @@ case 'r': *result = '\r'; break; case 't': *result = '\t'; break; case 'v': *result = '\v'; break; - /*FALLTHROUGH*/ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': _memstream_ungetc(ms, ch); base -= 8; + /*FALLTHROUGH*/ case 'x': return _citrus_prop_read_chr_common(ms, result, base); @@ -247,7 +247,7 @@ case '\\': _memstream_ungetc(ms, quot); quot = EOF; - /*FALLTHROUGH*/ + /*FALLTHROUGH*/ case '\"': case '\'': break; default: ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/GBK2K/citrus_gbk2k.c#7 (text+ko) ==== @@ -405,15 +405,6 @@ const char *p; p = var; -#define MATCH(x, act) \ -do { \ - if (lenvar >= (sizeof(#x)-1) && \ - _bcs_strncasecmp(p, #x, sizeof(#x)-1) == 0) { \ - act; \ - lenvar -= sizeof(#x)-1; \ - p += sizeof(#x)-1; \ - } \ -} while (/*CONSTCOND*/0) memset((void *)ei, 0, sizeof(*ei)); ei->mb_cur_max = 4; while (lenvar>0) { ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/MSKanji/citrus_mskanji.c#6 (text+ko) ==== @@ -479,15 +479,6 @@ const char *p; p = var; -#define MATCH(x, act) \ -do { \ - if (lenvar >= (sizeof(#x)-1) && \ - _bcs_strncasecmp(p, #x, sizeof(#x)-1) == 0) { \ - act; \ - lenvar -= sizeof(#x)-1; \ - p += sizeof(#x)-1; \ - } \ -} while (/*CONSTCOND*/0) memset((void *)ei, 0, sizeof(*ei)); while (lenvar > 0) { switch (_bcs_toupper(*p)) { ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/Makefile#6 (text+ko) ==== @@ -21,6 +21,7 @@ iconv_std \ mapper_646 \ mapper_none \ + mapper_parallel \ mapper_serial \ mapper_std \ mapper_zone ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/Makefile.inc#4 (text+ko) ==== @@ -3,28 +3,9 @@ .PATH: ${.CURDIR}/../../libiconv SHLIB_MAJOR= 4 -CFLAGS+= -I${.CURDIR}/../../libiconv +CFLAGS+= -I${.CURDIR}/../../libiconv -I/usr/include -L/usr/lib DEBUG_FLAGS= -g -ggdb LIBDIR= /usr/lib/i18n -SRCS+= _iconv.c \ - citrus_bcs.c \ - citrus_bcs_strtol.c \ - citrus_bcs_strtoul.c \ - citrus_csmapper.c \ - citrus_ctype.c \ - citrus_ctype_fallback.c \ - citrus_db.c \ - citrus_db_hash.c \ - citrus_esdb.c \ - citrus_hash.c \ - citrus_iconv.c \ - citrus_lookup.c \ - citrus_mapper.c \ - citrus_memstream.c \ - citrus_mmap.c \ - citrus_module.c \ - citrus_none.c \ - citrus_prop.c \ - citrus_stdenc.c - +LDADD+= -liconv +DPADD+= /usr/lib/libiconv.a NO_PROFILE= ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/UES/citrus_ues.c#7 (text+ko) ==== @@ -400,15 +400,6 @@ const char *p; p = var; -#define MATCH(x, act) \ -do { \ - if (lenvar >= (sizeof(#x)-1) && \ - _bcs_strncasecmp(p, #x, sizeof(#x)-1) == 0) { \ - act; \ - lenvar -= sizeof(#x)-1; \ - p += sizeof(#x)-1; \ - } \ -} while (/*CONSTCOND*/0) memset((void *)ei, 0, sizeof(*ei)); while (lenvar > 0) { switch (_bcs_toupper(*p)) { ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/UTF1632/citrus_utf1632.c#8 (text+ko) ==== @@ -346,15 +346,6 @@ parse_variable(_UTF1632EncodingInfo * __restrict ei, const void * __restrict var, size_t lenvar) { -#define MATCH(x, act) \ -do { \ - if (lenvar >= (sizeof(#x)-1) && \ - _bcs_strncasecmp(p, #x, sizeof(#x)-1) == 0) { \ - act; \ - lenvar -= sizeof(#x)-1; \ - p += sizeof(#x)-1; \ - } \ -} while (/*CONSTCOND*/0) const char *p; p = var; while (lenvar>0) { ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/iconv_none/citrus_iconv_none.c#7 (text+ko) ==== @@ -30,6 +30,7 @@ #include #include +#include #include #include #include ==== //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv_modules/iconv_std/citrus_iconv_std.c#7 (text+ko) ==== @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -300,7 +301,8 @@ static int /*ARGSUSED*/ do_conv(const struct _citrus_iconv_std_shared *is, - struct _citrus_iconv_std_context *sc, _csid_t *csid, _index_t *idx) + struct _citrus_iconv_std_context *sc, _csid_t *csid, _index_t *idx, + bool discard_ilseq) { _index_t tmpidx; int ret; @@ -322,11 +324,12 @@ case _MAPPER_CONVERT_SRC_MORE: /*FALLTHROUGH*/ case _MAPPER_CONVERT_DST_MORE: - /*FALLTHROUGH*/ + if (discard_ilseq) + continue; + case _MAPPER_CONVERT_ILSEQ: + return EILSEQ; case _MAPPER_CONVERT_FATAL: return EINVAL; - case _MAPPER_CONVERT_ILSEQ: - return EILSEQ; } } break; @@ -537,7 +540,7 @@ goto err; } /* convert the character */ - ret = do_conv(is, sc, &csid, &idx); + ret = do_conv(is, sc, &csid, &idx, cv->cv_shared->ci_discard_ilseq); if (ret) { if (ret == E_NO_CORRESPONDING_CHAR) { inval++; ==== //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/Makefile#6 (text+ko) ==== @@ -1,5 +1,7 @@ # $NetBSD: Makefile,v 1.1 2003/06/27 08:39:59 tshiozak Exp $ +.include + SUBDIR= csmapper \ esdb \ iconv ==== //depot/projects/soc2009/gabor_iconv/extracted/share/i18n/iconv/Makefile#6 (text+ko) ==== @@ -3,4 +3,9 @@ FILESDIR= /usr/share/i18n/iconv FILES+= iconv.dir +.if !target(beforeinstall) +beforeinstall: + mkdir -p ${FILESDIR} +.endif + .include ==== //depot/projects/soc2009/gabor_iconv/extracted/tools/test/iconv/Makefile#5 (text+ko) ==== @@ -1,6 +1,9 @@ # FreeBSD SUBDIR= tablegen +SUBDIR+= refgen +SUBDIR+= posix +SUBDIR+= gnu ENCODING= ASCII @@ -34,33 +37,65 @@ ENCODING+= CP1251 ENCODING+= CP866 #ENCODING+= CP949 -#ENCODING+= GB18030 +ENCODING+= GB18030 ENCODING+= GB2312 -#ENCODING+= GBK +ENCODING+= GBK ENCODING+= VISCII -#ENCODING+= KOI8-R -#ENCODING+= KOI8-U +ENCODING+= KOI8-R +ENCODING+= KOI8-U ENCODING+= PT154 ENCODING+= SHIFT_JIS ENCODING+= EUC-CN -#ENCODING+= EUC-JP +ENCODING+= EUC-JP #ENCODING+= EUC-KR GEN_FWD?= ${.CURDIR}/tablegen/tablegen GEN_REV?= ${.CURDIR}/tablegen/tablegen -r +REF_FWD?= ${.CURDIR}/refgen/refgen +REF_REV?= ${.CURDIR}/refgen/refgen -r CMP?= ${.CURDIR}/tablegen/cmp.sh -check: ${SUBDIR} +make-ref: refgen + mkdir -p ref +.for enc in ${ENCODING} + @echo "Generating ${enc} --> UTF-32 ..." + -@${REF_FWD} ${enc} >ref/${enc} + @echo "Generating UTF-32 --> ${enc} ..." + -@${REF_REV} ${enc} >ref/${enc}-rev +.endfor + +check: tablegen mkdir -p output .for enc in ${ENCODING} @echo "Checking ${enc} --> UTF-32 ..." - @${GEN_FWD} ${enc} >output/${enc} + -@${GEN_FWD} ${enc} >output/${enc} @${CMP} ref/${enc} output/${enc} @echo "Checking UTF-32 --> ${enc} ..." - @${GEN_REV} ${enc} >output/${enc}-rev + -@${GEN_REV} ${enc} >output/${enc}-rev @${CMP} ref/${enc}-rev output/${enc}-rev .endfor +perftest: refgen tablegen +.for enc in ${ENCODING} + @echo "Checking ${enc} --> UTF-32 ..." + @echo "GNU runtime:" + @/usr/bin/time -h ${REF_FWD} ${enc} >/dev/null + @echo "BSD runtime:" + @/usr/bin/time -h ${GEN_FWD} ${enc} >/dev/null + @echo "Checking UTF-32 --> ${enc} ..." + @echo "GNU runtime:" + @/usr/bin/time -h ${REF_REV} ${enc} >/dev/null + @echo "BSD runtime:" + @/usr/bin/time -h ${GEN_REV} ${enc} >/dev/null +.endfor + +posixtest: posix + @${.CURDIR}/posix/posix + +gnutest: gnu + +test-everything: check perftest posixtest gnutest + CLEANDIRS+= output .include ==== //depot/projects/soc2009/gabor_iconv/extracted/tools/test/iconv/tablegen/tablegen.c#3 (text+ko) ==== @@ -24,15 +24,11 @@ * SUCH DAMAGE. */ -#ifdef __FreeBSD__ #include __FBSDID("$FreeBSD$"); #include #include -#else -#include -#endif #include #include @@ -44,7 +40,8 @@ extern char *__progname; -static const char *optstr = "r"; +static const char *optstr = "lr"; +bool lflag; bool rflag; static void do_rev(iconv_t cd); @@ -52,13 +49,14 @@ struct option long_options[] = { + {"long", no_argument, NULL, 'l'}, {"reverse", no_argument, NULL, 'r'}, {NULL, no_argument, NULL, 0} }; static void usage(void) { - fprintf(stderr, "Usage: %s [-r] ENCODING\n", __progname); + fprintf(stderr, "Usage: %s [-lr] ENCODING\n", __progname); exit(EXIT_FAILURE); } @@ -106,6 +104,9 @@ while (((c = getopt_long(argc, argv, optstr, long_options, NULL)) != -1)) { switch (c) { + case 'l': + lflag = true; + break; case 'r': rflag = true; break; @@ -160,7 +161,7 @@ char *outbuf_; const char *inbuf_; - for (inbuf = 0; inbuf < 0x10000; inbuf += 1) { + for (inbuf = 0; inbuf < (lflag ? 0x100000 : 0x10000); inbuf += 1) { inbytesleft = outbytesleft = 4; CONVERT; } @@ -184,4 +185,11 @@ inbytesleft = 2; CONVERT; } + if (lflag) { + for (inbuf = 0x10000; inbuf < 0x100000; inbuf += 1) { + outbytesleft = 4; + inbytesleft = 3; + CONVERT; + } + } } ==== //depot/projects/soc2009/gabor_iconv/extracted/usr.bin/Makefile#5 (text+ko) ==== @@ -1,3 +1,7 @@ +# $FreeBSD$ + +.include + SUBDIR= iconv \ mkcsmapper \ mkesdb ==== //depot/projects/soc2009/gabor_iconv/extracted/usr.bin/iconv/Makefile#7 (text+ko) ==== @@ -7,6 +7,7 @@ MAN= iconv.1 WARNS?= 6 +BINDIR?= /usr/bin LDADD+= -lcrypt -liconv DPADD+= ${LIBCRYPT} /usr/lib/libiconv.a ==== //depot/projects/soc2009/gabor_iconv/extracted/usr.bin/iconv/iconv.1#6 (text+ko) ==== @@ -24,7 +24,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd March 20, 2008 +.Dd October 12, 2009 .Dt ICONV 1 .Os .Sh NAME @@ -52,6 +52,7 @@ .Op Ar file ... .Nm .Fl l +.Op Fl l .Sh DESCRIPTION The .Nm @@ -89,6 +90,9 @@ and .Ar to_name are valid. +If +.Fl l +is specified twice, it will print out all codesets names and aliass. .It Fl s Silent. By default, ==== //depot/projects/soc2009/gabor_iconv/extracted/usr.bin/iconv/iconv.c#6 (text+ko) ==== @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -41,8 +42,8 @@ static void usage(void) __unused; static int scmp(const void *, const void *); -static void show_codesets(void); -static void do_conv(FILE *, const char *, const char *, int, int); +static void show_codesets(bool); +static void do_conv(FILE *, const char *, const char *, bool, bool); static void usage(void) @@ -51,7 +52,7 @@ "Usage:\t%1$s [-cs] -f -t [file ...]\n" "\t%1$s -f [-cs] [-t ] [file ...]\n" "\t%1$s -t [-cs] [-f ] [file ...]\n" - "\t%1$s -l\n", getprogname()); + "\t%1$s -l [-l]\n", getprogname()); exit(1); } @@ -68,12 +69,12 @@ } static void -show_codesets(void) +show_codesets(bool l) { char **list; size_t sz, i; - if (__iconv_get_list(&list, &sz)) + if (__iconv_get_list(&list, &sz, l)) err(EXIT_FAILURE, "__iconv_get_list()"); qsort(list, sz, sizeof(char *), scmp); @@ -87,8 +88,8 @@ #define INBUFSIZE 1024 #define OUTBUFSIZE (INBUFSIZE * 2) static void -do_conv(FILE *fp, const char *from, const char *to, int silent, - int hide_invalid) +do_conv(FILE *fp, const char *from, const char *to, bool silent, + bool hide_invalid) { char inbuf[INBUFSIZE], outbuf[OUTBUFSIZE], *out; const char *in; @@ -163,25 +164,25 @@ int main(int argc, char **argv) { - int ch, i; - int opt_l = 0, opt_s = 0, opt_c = 0; + int ch, i, opt_l = 0; + bool opt_s = false, opt_c = false; >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Mon Oct 12 13:03:51 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 32D221065679; Mon, 12 Oct 2009 13:03:51 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EB7C81065670 for ; Mon, 12 Oct 2009 13:03:50 +0000 (UTC) (envelope-from gabor@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id D8C968FC0C for ; Mon, 12 Oct 2009 13:03:50 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9CD3oGM022397 for ; Mon, 12 Oct 2009 13:03:50 GMT (envelope-from gabor@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9CD3ou2022395 for perforce@freebsd.org; Mon, 12 Oct 2009 13:03:50 GMT (envelope-from gabor@freebsd.org) Date: Mon, 12 Oct 2009 13:03:50 GMT Message-Id: <200910121303.n9CD3ou2022395@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gabor@freebsd.org using -f From: Gabor Kovesdan To: Perforce Change Reviews Cc: Subject: PERFORCE change 169423 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Oct 2009 13:03:51 -0000 http://perforce.freebsd.org/chv.cgi?CH=169423 Change 169423 by gabor@gabor_aspire on 2009/10/12 13:03:00 MFHg: - Follow-up to previous change adding new files Affected files ... .. //depot/projects/soc2009/gabor_iconv/extracted/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/lib/libiconv/iconvctl.3#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/man/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/share/man/man5/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/tools/test/iconv/gnu/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/tools/test/iconv/gnu/gnu.c#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/tools/test/iconv/posix/Makefile#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/tools/test/iconv/posix/posix.c#1 add .. //depot/projects/soc2009/gabor_iconv/extracted/tools/test/iconv/refgen/Makefile#1 add Differences ... From owner-p4-projects@FreeBSD.ORG Mon Oct 12 20:35:06 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1B2A9106568B; Mon, 12 Oct 2009 20:35:06 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D3E061065676 for ; Mon, 12 Oct 2009 20:35:05 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id B841A8FC0A for ; Mon, 12 Oct 2009 20:35:05 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9CKZ5EW078014 for ; Mon, 12 Oct 2009 20:35:05 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9CKZ5xo078012 for perforce@freebsd.org; Mon, 12 Oct 2009 20:35:05 GMT (envelope-from mav@freebsd.org) Date: Mon, 12 Oct 2009 20:35:05 GMT Message-Id: <200910122035.n9CKZ5xo078012@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Cc: Subject: PERFORCE change 169438 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Oct 2009 20:35:06 -0000 http://perforce.freebsd.org/chv.cgi?CH=169438 Change 169438 by mav@mav_mavtest on 2009/10/12 20:34:35 Freeze devices CCB queues on errors. Previos approach with just SIM freeze is not enough for proper recovery, as it dropped just before recovery, not after, creating window for another request to run before. Affected files ... .. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#67 edit .. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.c#30 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#67 (text+ko) ==== @@ -987,12 +987,14 @@ } /* On error, complete the rest of commands with error statuses. */ if (err) { - if (!ch->readlog) - xpt_freeze_simq(ch->sim, ch->numrslots); if (ch->frozen) { union ccb *fccb = ch->frozen; ch->frozen = NULL; fccb->ccb_h.status = CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ; + if (!(fccb->ccb_h.status & CAM_DEV_QFRZN)) { + xpt_freeze_devq(fccb->ccb_h.path, 1); + fccb->ccb_h.status |= CAM_DEV_QFRZN; + } xpt_done(fccb); } for (i = 0; i < ch->numslots; i++) { @@ -1125,8 +1127,6 @@ if (error) { device_printf(slot->dev, "DMA load error\n"); - if (!ch->readlog) - xpt_freeze_simq(ch->sim, 1); ahci_end_transaction(slot, AHCI_ERR_INVALID); return; } @@ -1165,8 +1165,6 @@ /* Setup the FIS for this request */ if (!(fis_size = ahci_setup_fis(ctp, ccb, slot->slot))) { device_printf(ch->dev, "Setting up SATA FIS failed\n"); - if (!ch->readlog) - xpt_freeze_simq(ch->sim, 1); ahci_end_transaction(slot, AHCI_ERR_INVALID); return; } @@ -1233,7 +1231,6 @@ /* Kick controller into sane state */ ahci_stop(ch->dev); ahci_start(ch->dev); - xpt_freeze_simq(ch->sim, 1); } ahci_end_transaction(slot, et); return; @@ -1266,13 +1263,15 @@ ahci_stop(ch->dev); ahci_start(ch->dev); - if (!ch->readlog) - xpt_freeze_simq(ch->sim, ch->numrslots); /* Handle frozen command. */ if (ch->frozen) { union ccb *fccb = ch->frozen; ch->frozen = NULL; fccb->ccb_h.status = CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ; + if (!(fccb->ccb_h.status & CAM_DEV_QFRZN)) { + xpt_freeze_devq(fccb->ccb_h.path, 1); + fccb->ccb_h.status |= CAM_DEV_QFRZN; + } xpt_done(fccb); } /* Handle command with timeout. */ @@ -1330,10 +1329,14 @@ BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE); bus_dmamap_unload(ch->dma.data_tag, slot->dma.data_map); } + /* In case of error, freeze device for proper recovery. */ + if ((et != AHCI_ERR_NONE) && (!ch->readlog) && + !(ccb->ccb_h.status & CAM_DEV_QFRZN)) { + xpt_freeze_devq(ccb->ccb_h.path, 1); + ccb->ccb_h.status |= CAM_DEV_QFRZN; + } /* Set proper result status. */ ccb->ccb_h.status &= ~CAM_STATUS_MASK; - if (et != AHCI_ERR_NONE) - ccb->ccb_h.status |= CAM_RELEASE_SIMQ; switch (et) { case AHCI_ERR_NONE: ccb->ccb_h.status |= CAM_REQ_CMP; @@ -1347,6 +1350,7 @@ ccb->ccb_h.status |= CAM_REQUEUE_REQ; break; case AHCI_ERR_TFE: + case AHCI_ERR_NCQ: if (ccb->ccb_h.func_code == XPT_SCSI_IO) { ccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR; ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND; @@ -1355,13 +1359,19 @@ } break; case AHCI_ERR_SATA: - ccb->ccb_h.status |= CAM_UNCOR_PARITY; + if (!ch->readlog) { + xpt_freeze_simq(ch->sim, 1); + ccb->ccb_h.status |= CAM_RELEASE_SIMQ; + } + ccb->ccb_h.status |= CAM_UNCOR_PARITY; break; case AHCI_ERR_TIMEOUT: + if (!ch->readlog) { + xpt_freeze_simq(ch->sim, 1); + ccb->ccb_h.status |= CAM_RELEASE_SIMQ; + } ccb->ccb_h.status |= CAM_CMD_TIMEOUT; break; - case AHCI_ERR_NCQ: - ccb->ccb_h.status |= CAM_ATA_STATUS_ERROR; default: ccb->ccb_h.status |= CAM_REQ_CMP_ERR; } @@ -1445,7 +1455,8 @@ ataio->cmd.lba_low = 0x10; ataio->cmd.lba_mid = 0; ataio->cmd.lba_mid_exp = 0; - + /* Freeze SIM while doing READ LOG EXT. */ + xpt_freeze_simq(ch->sim, 1); ahci_begin_transaction(dev, ccb); } @@ -1500,6 +1511,7 @@ } free(ccb->ataio.data_ptr, M_AHCI); xpt_free_ccb(ccb); + xpt_release_simq(ch->sim, TRUE); } static void @@ -1624,12 +1636,15 @@ if (bootverbose) device_printf(dev, "AHCI reset...\n"); - xpt_freeze_simq(ch->sim, ch->numrslots); /* Requeue freezed command. */ if (ch->frozen) { union ccb *fccb = ch->frozen; ch->frozen = NULL; fccb->ccb_h.status = CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ; + if (!(fccb->ccb_h.status & CAM_DEV_QFRZN)) { + xpt_freeze_devq(fccb->ccb_h.path, 1); + fccb->ccb_h.status |= CAM_DEV_QFRZN; + } xpt_done(fccb); } /* Kill the engine and requeue all running commands. */ @@ -1641,6 +1656,8 @@ /* XXX; Commands in loading state. */ ahci_end_transaction(&ch->slot[i], AHCI_ERR_INNOCENT); } + /* Tell the XPT about the event */ + xpt_async(AC_BUS_RESET, ch->path, NULL); /* Disable port interrupts */ ATA_OUTL(ch->r_mem, AHCI_P_IE, 0); /* Reset and reconnect PHY, */ @@ -1670,8 +1687,6 @@ AHCI_P_IX_DS | AHCI_P_IX_PS | (ctlr->ccc ? 0 : AHCI_P_IX_DHR))); if (bootverbose) device_printf(dev, "AHCI reset done: device found\n"); - /* Tell the XPT about the event */ - xpt_async(AC_BUS_RESET, ch->path, NULL); } static int ==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.c#30 (text+ko) ==== @@ -1299,9 +1299,11 @@ union ccb *ccb = request->ccb; ccb->ccb_h.status &= ~CAM_STATUS_MASK; - if (request->flags & ATA_R_TIMEOUT) - ccb->ccb_h.status |= CAM_CMD_TIMEOUT; - else if (request->status & ATA_S_ERROR) { + if (request->flags & ATA_R_TIMEOUT) { + xpt_freeze_simq(ch->sim, 1); + ccb->ccb_h.status &= ~CAM_STATUS_MASK; + ccb->ccb_h.status |= CAM_CMD_TIMEOUT | CAM_RELEASE_SIMQ; + } else if (request->status & ATA_S_ERROR) { if (ccb->ccb_h.func_code == XPT_ATA_IO) { ccb->ccb_h.status |= CAM_ATA_STATUS_ERROR; } else { @@ -1314,9 +1316,10 @@ ccb->ccb_h.status |= CAM_REQ_CMP_ERR; else ccb->ccb_h.status |= CAM_REQ_CMP; - if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { - xpt_freeze_simq(ch->sim, 1); - ccb->ccb_h.status |= CAM_RELEASE_SIMQ; + if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP && + !(ccb->ccb_h.status & CAM_DEV_QFRZN)) { + xpt_freeze_devq(ccb->ccb_h.path, 1); + ccb->ccb_h.status |= CAM_DEV_QFRZN; } if (ccb->ccb_h.func_code == XPT_ATA_IO && ((request->status & ATA_S_ERROR) || From owner-p4-projects@FreeBSD.ORG Mon Oct 12 20:44:16 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E79A4106568F; Mon, 12 Oct 2009 20:44:15 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AB863106566B for ; Mon, 12 Oct 2009 20:44:15 +0000 (UTC) (envelope-from truncs@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 9B2C38FC0A for ; Mon, 12 Oct 2009 20:44:15 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9CKiFbT078688 for ; Mon, 12 Oct 2009 20:44:15 GMT (envelope-from truncs@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9CKiFQC078686 for perforce@freebsd.org; Mon, 12 Oct 2009 20:44:15 GMT (envelope-from truncs@FreeBSD.org) Date: Mon, 12 Oct 2009 20:44:15 GMT Message-Id: <200910122044.n9CKiFQC078686@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to truncs@FreeBSD.org using -f From: Aditya Sarawgi To: Perforce Change Reviews Cc: Subject: PERFORCE change 169439 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Oct 2009 20:44:16 -0000 http://perforce.freebsd.org/chv.cgi?CH=169439 Change 169439 by truncs@aditya on 2009/10/12 20:43:31 Add mutex for protecting the mount struct and fs. Affected files ... .. //depot/projects/soc2009/soc_ext2fs/src/sys/fs/ext2fs/ext2_mount.h#3 edit Differences ... ==== //depot/projects/soc2009/soc_ext2fs/src/sys/fs/ext2fs/ext2_mount.h#3 (text+ko) ==== @@ -54,10 +54,16 @@ u_long um_bptrtodb; /* indir ptr to disk block */ u_long um_seqinc; /* inc between seq blocks */ + struct mtx um_lock; /* Protects ext2mount & fs */ + struct g_consumer *um_cp; struct bufobj *um_bo; }; +#define EXT2_LOCK(aa) mtx_lock(&(aa)->um_lock) +#define EXT2_UNLOCK(aa) mtx_unlock(&(aa)->um_lock) +#define EXT2_MTX(aa) (&(aa)->um_lock) + /* Convert mount ptr to ext2fsmount ptr. */ #define VFSTOEXT2(mp) ((struct ext2mount *)((mp)->mnt_data)) From owner-p4-projects@FreeBSD.ORG Mon Oct 12 20:48:20 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id ADA891065676; Mon, 12 Oct 2009 20:48:20 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 724CB1065670 for ; Mon, 12 Oct 2009 20:48:20 +0000 (UTC) (envelope-from truncs@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 6202E8FC19 for ; Mon, 12 Oct 2009 20:48:20 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9CKmKIq089196 for ; Mon, 12 Oct 2009 20:48:20 GMT (envelope-from truncs@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9CKmKwU089194 for perforce@freebsd.org; Mon, 12 Oct 2009 20:48:20 GMT (envelope-from truncs@FreeBSD.org) Date: Mon, 12 Oct 2009 20:48:20 GMT Message-Id: <200910122048.n9CKmKwU089194@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to truncs@FreeBSD.org using -f From: Aditya Sarawgi To: Perforce Change Reviews Cc: Subject: PERFORCE change 169440 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Oct 2009 20:48:20 -0000 http://perforce.freebsd.org/chv.cgi?CH=169440 Change 169440 by truncs@aditya on 2009/10/12 20:47:44 Fix indentation. Affected files ... .. //depot/projects/soc2009/soc_ext2fs/src/sys/fs/ext2fs/ext2_mount.h#4 edit Differences ... ==== //depot/projects/soc2009/soc_ext2fs/src/sys/fs/ext2fs/ext2_mount.h#4 (text+ko) ==== @@ -60,9 +60,9 @@ struct bufobj *um_bo; }; -#define EXT2_LOCK(aa) mtx_lock(&(aa)->um_lock) -#define EXT2_UNLOCK(aa) mtx_unlock(&(aa)->um_lock) -#define EXT2_MTX(aa) (&(aa)->um_lock) +#define EXT2_LOCK(aa) mtx_lock(&(aa)->um_lock) +#define EXT2_UNLOCK(aa) mtx_unlock(&(aa)->um_lock) +#define EXT2_MTX(aa) (&(aa)->um_lock) /* Convert mount ptr to ext2fsmount ptr. */ #define VFSTOEXT2(mp) ((struct ext2mount *)((mp)->mnt_data)) From owner-p4-projects@FreeBSD.ORG Mon Oct 12 22:14:55 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2BB691065676; Mon, 12 Oct 2009 22:14:55 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C9E081065670 for ; Mon, 12 Oct 2009 22:14:54 +0000 (UTC) (envelope-from gk@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id B81D88FC1F for ; Mon, 12 Oct 2009 22:14:54 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9CMEsU9097257 for ; Mon, 12 Oct 2009 22:14:54 GMT (envelope-from gk@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9CMEsTS097255 for perforce@freebsd.org; Mon, 12 Oct 2009 22:14:54 GMT (envelope-from gk@FreeBSD.org) Date: Mon, 12 Oct 2009 22:14:54 GMT Message-Id: <200910122214.n9CMEsTS097255@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gk@FreeBSD.org using -f From: Gleb Kurtsou To: Perforce Change Reviews Cc: Subject: PERFORCE change 169442 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Oct 2009 22:14:55 -0000 http://perforce.freebsd.org/chv.cgi?CH=169442 Change 169442 by gk@gk_h1 on 2009/10/12 22:14:48 implement dircache (enabled by default) rename node hash routines Affected files ... .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs.h#15 edit .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_crypto.c#15 edit .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_dircache.c#1 add .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_dircache.h#1 add .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_subr.c#16 edit .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_vnops.c#22 edit .. //depot/projects/soc2009/gk_pefs/sys/modules/pefs/Makefile#8 edit Differences ... ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs.h#15 (text+ko) ==== @@ -36,6 +36,7 @@ #define PEFS_KEY_SIZE (PEFS_KEY_BITS / 8) #define PEFS_KEYID_SIZE 8 #define PEFS_NAME_CSUM_SIZE 8 +#define PEFS_NAME_BLOCK_SIZE 16 struct pefs_xkey { uint32_t pxk_index; @@ -60,6 +61,8 @@ struct pefs_alg; struct pefs_ctx; +struct pefs_dircache; +struct vfsconf; TAILQ_HEAD(pefs_key_head, pefs_key); @@ -91,6 +94,7 @@ struct vnode *pn_lowervp; /* VREFed once */ struct vnode *pn_lowervp_dead; /* VREFed once */ struct vnode *pn_vnode; /* Back pointer */ + struct pefs_dircache *pn_dircache; void *pn_buf_small; void *pn_buf_large; int pn_flags; @@ -165,10 +169,6 @@ return (&pn->pn_buf_large); } -struct vfsconf; -struct vop_generic_args; -struct pefs_ctx; - int pefs_init(struct vfsconf *vfsp); int pefs_uninit(struct vfsconf *vfsp); void pefs_crypto_init(void); @@ -252,8 +252,27 @@ pefs_rootkey(VFS_TO_PEFS(vp->v_mount)) == NULL); } +static inline uint32_t +pefs_hash_mixptr(void *ptr) +{ + uintptr_t h = (uintptr_t)ptr; + + h = (~h) + (h << 18); + h = h ^ (h >> 31); + h = h * 21; + h = h ^ (h >> 11); + h = h + (h << 6); + h = h ^ (h >> 22); + return (h); +} + +#ifdef SYSCTL_DECL +SYSCTL_DECL(_vfs_pefs); +#endif + #ifdef MALLOC_DECLARE MALLOC_DECLARE(M_PEFSBUF); +MALLOC_DECLARE(M_PEFSHASH); #endif #ifdef PEFS_DEBUG ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_crypto.c#15 (text+ko) ==== @@ -49,7 +49,6 @@ #include #define PEFS_CTR_BLOCK_SIZE 16 -#define PEFS_NAME_BLOCK_SIZE 16 CTASSERT(PEFS_KEY_SIZE <= SHA512_DIGEST_LENGTH); CTASSERT(PEFS_TWEAK_SIZE == 64/8); ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_subr.c#16 (text+ko) ==== @@ -71,13 +71,15 @@ #include #include #include +#include #include #include #include #include +#include -static SYSCTL_NODE(_vfs, OID_AUTO, pefs, CTLFLAG_RW, 0, "PEFS filesystem"); +SYSCTL_NODE(_vfs, OID_AUTO, pefs, CTLFLAG_RW, 0, "PEFS filesystem"); typedef int (pefs_node_init_fn)(struct mount *mp, struct pefs_node *pn, void *context); @@ -91,10 +93,10 @@ static struct mtx pefs_node_listmtx; static struct pefs_node_listhead pefs_node_freelist; -static struct pefs_node_listhead *pefs_node_hashtbl; -static u_long pefs_node_hashmask; +static struct pefs_node_listhead *pefs_nodehash_tbl; +static u_long pefs_nodehash_mask; -static MALLOC_DEFINE(M_PEFSHASH, "pefs_hash", "PEFS hash table"); +MALLOC_DEFINE(M_PEFSHASH, "pefs_hash", "PEFS hash table"); MALLOC_DEFINE(M_PEFSBUF, "pefs_buf", "PEFS buffers"); static uma_zone_t pefs_node_zone; @@ -121,11 +123,12 @@ pefs_node_zone = uma_zcreate("pefs_node", sizeof(struct pefs_node), NULL, NULL, NULL, (uma_fini) bzero, UMA_ALIGN_PTR, 0); - pefs_node_hashtbl = hashinit(desiredvnodes / 8, M_PEFSHASH, - &pefs_node_hashmask); + pefs_nodehash_tbl = hashinit(desiredvnodes / 8, M_PEFSHASH, + &pefs_nodehash_mask); pefs_nodes = 0; mtx_init(&pefs_node_listmtx, "pefs_node_list", NULL, MTX_DEF); + pefs_dircache_init(); pefs_crypto_init(); return (0); @@ -137,26 +140,21 @@ taskqueue_enqueue(pefs_taskq, &pefs_task_freenode); taskqueue_drain(pefs_taskq, &pefs_task_freenode); taskqueue_free(pefs_taskq); + pefs_dircache_uninit(); pefs_crypto_uninit(); mtx_destroy(&pefs_node_listmtx); - free(pefs_node_hashtbl, M_PEFSHASH); + free(pefs_nodehash_tbl, M_PEFSHASH); uma_zdestroy(pefs_node_zone); return (0); } static inline struct pefs_node_listhead * -pefs_node_hashlookup(struct vnode *vp) +pefs_nodehash_gethead(struct vnode *vp) { - uintptr_t v = (uintptr_t)vp; + uint32_t v; - v = (~v) + (v << 18); - v = v ^ (v >> 31); - v = v * 21; - v = v ^ (v >> 11); - v = v + (v << 6); - v = v ^ (v >> 22); - - return (&pefs_node_hashtbl[v & pefs_node_hashmask]); + v = pefs_hash_mixptr(vp); + return (&pefs_nodehash_tbl[v & pefs_nodehash_mask]); } /* @@ -164,13 +162,13 @@ * Lower vnode should be locked on entry and will be left locked on exit. */ static struct vnode * -pefs_hashget(struct mount *mp, struct vnode *lowervp) +pefs_nodehash_get(struct mount *mp, struct vnode *lowervp) { struct pefs_node_listhead *hd; struct pefs_node *a; struct vnode *vp; - ASSERT_VOP_LOCKED(lowervp, "pefs_hashget"); + ASSERT_VOP_LOCKED(lowervp, "pefs_nodehash_get"); /* * Find hash base, and then search the (two-way) linked @@ -178,7 +176,7 @@ * the lower vnode. If found, the increment the pefs_node * reference count (but NOT the lower vnode's VREF counter). */ - hd = pefs_node_hashlookup(lowervp); + hd = pefs_nodehash_gethead(lowervp); mtx_lock(&pefs_node_listmtx); LIST_FOREACH(a, hd, pn_listentry) { if (a->pn_lowervp == lowervp && PN_TO_VP(a)->v_mount == mp) { @@ -199,23 +197,23 @@ } /* - * Act like pefs_hashget, but add passed pefs_node to hash if no existing + * Act like pefs_nodehash_get, but add passed pefs_node to hash if no existing * node found. */ static struct vnode * -pefs_hashins(struct mount *mp, struct pefs_node *pn) +pefs_nodehash_insert(struct mount *mp, struct pefs_node *pn) { struct pefs_node_listhead *hd; struct pefs_node *oxp; struct vnode *ovp; - hd = pefs_node_hashlookup(pn->pn_lowervp); + hd = pefs_nodehash_gethead(pn->pn_lowervp); mtx_lock(&pefs_node_listmtx); LIST_FOREACH(oxp, hd, pn_listentry) { if (oxp->pn_lowervp == pn->pn_lowervp && PN_TO_VP(oxp)->v_mount == mp) { /* - * See pefs_hashget for a description of this + * See pefs_nodehash_get for a description of this * operation. */ ovp = PN_TO_VP(oxp); @@ -370,8 +368,8 @@ * ldvp is the lower directory vnode, used if no key specified * * The lvp assumed to be locked and having "spare" reference. This routine - * vrele lvp if pefs node was taken from hash. Otherwise it "transfers" - * the caller's "spare" reference to created pefs vnode. + * vrele lvp if pefs node was taken from hash. Otherwise it "transfers" the + * caller's "spare" reference to created pefs vnode. */ static int pefs_node_get(struct mount *mp, struct vnode *lvp, struct vnode **vpp, @@ -382,7 +380,7 @@ int error; /* Lookup the hash firstly */ - *vpp = pefs_hashget(mp, lvp); + *vpp = pefs_nodehash_get(mp, lvp); if (*vpp != NULL) { vrele(lvp); return (0); @@ -437,7 +435,7 @@ * Atomically insert our new node into the hash or vget existing * if someone else has beaten us to it. */ - *vpp = pefs_hashins(mp, pn); + *vpp = pefs_nodehash_insert(mp, pn); if (*vpp != NULL) { vrele(lvp); vp->v_vnlock = &vp->v_lock; @@ -445,6 +443,8 @@ vrele(vp); return (0); } + if (vp->v_type == VDIR) + pn->pn_dircache = pefs_dircache_get(); *vpp = vp; return (0); @@ -512,6 +512,7 @@ { PEFSDEBUG("pefs_node_asyncfree: free node %p\n", pn); pefs_key_release(pn->pn_tkey.ptk_key); + pefs_dircache_free(pn->pn_dircache); mtx_lock(&pefs_node_listmtx); pefs_nodes--; LIST_REMOVE(pn, pn_listentry); ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_vnops.c#22 (text+ko) ==== @@ -72,6 +72,7 @@ #include #include #include +#include #include #include #include @@ -86,6 +87,7 @@ #include #include +#include #define DIRENT_MINSIZE (sizeof(struct dirent) - (MAXNAMLEN + 1)) #define DIRENT_MAXSIZE (sizeof(struct dirent)) @@ -96,6 +98,43 @@ struct pefs_tkey pec_tkey; }; +static inline u_long +pefs_getgen(struct vnode *vp, struct ucred *cred) +{ + struct vattr va; + int error; + + error = VOP_GETATTR(PEFS_LOWERVP(vp), &va, cred); + if (error != 0) + return (0); + + return (va.va_gen); +} + +static struct pefs_dircache_entry * +pefs_cache_dirent(struct pefs_dircache *pd, struct dirent *de, + struct pefs_ctx *ctx, struct pefs_key *pk) +{ + struct pefs_dircache_entry *cache; + struct pefs_tkey ptk; + char buf[MAXNAMLEN + 1]; + int name_len; + + cache = pefs_dircache_enclookup(pd, de->d_name, de->d_namlen); + if (cache != NULL) { + pefs_dircache_update(cache); + } else { + name_len = pefs_name_decrypt(ctx, pk, &ptk, + de->d_name, de->d_namlen, buf, sizeof(buf)); + if (name_len <= 0) + return (NULL); + cache = pefs_dircache_insert(pd, &ptk, + buf, name_len, de->d_name, de->d_namlen); + } + + return (cache); +} + static inline int pefs_name_skip(char *name, int namelen) { @@ -205,17 +244,16 @@ return (error); } -static struct dirent* -pefs_enccn_lookup_dirent(struct pefs_key *pk, struct pefs_tkey *ptk, - void *mem, size_t sz, char *name, size_t namelen) +static void +pefs_enccn_parsedir(struct pefs_dircache *pd, struct pefs_ctx *ctx, + struct pefs_key *pk, void *mem, size_t sz, char *name, size_t name_len, + struct pefs_dircache_entry **retval) { - struct pefs_ctx *ctx; + struct pefs_dircache_entry *cache; struct dirent *de; - char buf[MAXNAMLEN + 1]; - int d_namelen; - PEFSDEBUG("pefs_enccn_lookup_dirent: lookup %.*s\n", (int)namelen, name); - ctx = pefs_ctx_get(); + PEFSDEBUG("pefs_enccn_parsedir: lookup %.*s\n", (int)name_len, name); + cache = NULL; for (de = (struct dirent*) mem; sz > DIRENT_MINSIZE; sz -= de->d_reclen, de = (struct dirent *)(((caddr_t)de) + de->d_reclen)) { @@ -224,29 +262,29 @@ continue; if (pefs_name_skip(de->d_name, de->d_namlen)) continue; - d_namelen = pefs_name_decrypt(ctx, pk, ptk, de->d_name, - de->d_namlen, buf, sizeof(buf)); - if (d_namelen == namelen && memcmp(name, buf, namelen) == 0) { - pefs_ctx_free(ctx); - return (de); + + cache = pefs_cache_dirent(pd, de, ctx, pk); + if (cache != NULL && *retval == NULL && + cache->pde_namelen == name_len && + memcmp(name, cache->pde_name, name_len) == 0) { + *retval = cache; } } - pefs_ctx_free(ctx); - return (NULL); } static int pefs_enccn_lookup(struct pefs_enccn *pec, struct vnode *dvp, struct componentname *cnp) { - struct dirent *de; struct uio *uio; struct vnode *ldvp = PEFS_LOWERVP(dvp); struct pefs_node *dpn = VP_TO_PN(dvp); struct pefs_chunk pc; + struct pefs_ctx *ctx; + struct pefs_dircache_entry *cache; struct pefs_key *dpn_key; - struct pefs_tkey ptk; off_t offset; + u_long dgen; int eofflag, error; MPASS(pec != NULL && dvp != NULL && cnp != NULL); @@ -261,13 +299,23 @@ PEFSDEBUG("pefs_enccn_lookup: name=%.*s op=%d\n", (int)cnp->cn_namelen, cnp->cn_nameptr, (int) cnp->cn_nameiop); - pefs_chunk_create(&pc, dpn, PAGE_SIZE); + error = 0; + dgen = pefs_getgen(dvp, cnp->cn_cred); + pefs_dircache_lock(dpn->pn_dircache); + if (pefs_dircache_enable && + pefs_dircache_valid(dpn->pn_dircache, dgen)) { + cache = pefs_dircache_lookup(dpn->pn_dircache, + cnp->cn_nameptr, cnp->cn_namelen); + goto out; + } + offset = 0; eofflag = 0; - error = 0; - de = NULL; - ptk.ptk_key = NULL; + cache = NULL; + ctx = pefs_ctx_get(); + pefs_chunk_create(&pc, dpn, PAGE_SIZE); dpn_key = pefs_node_key(dpn); + pefs_dircache_beginupdate(dpn->pn_dircache, dgen); while (!eofflag) { uio = pefs_chunk_uio(&pc, offset, UIO_READ); error = VOP_READDIR(ldvp, uio, cnp->cn_cred, &eofflag, @@ -277,23 +325,25 @@ offset = uio->uio_offset; pefs_chunk_setsize(&pc, pc.pc_size - uio->uio_resid); - de = pefs_enccn_lookup_dirent(dpn_key, &ptk, - pc.pc_base, pc.pc_size, - cnp->cn_nameptr, cnp->cn_namelen); - if (de != NULL) - break; + pefs_enccn_parsedir(dpn->pn_dircache, ctx, dpn_key, + pc.pc_base, pc.pc_size, cnp->cn_nameptr, cnp->cn_namelen, + &cache); pefs_chunk_restore(&pc); } + pefs_dircache_endupdate(dpn->pn_dircache); - if (de != NULL && error == 0) { - pefs_enccn_set(pec, &ptk, de->d_name, de->d_namlen, cnp); - } - + pefs_ctx_free(ctx); pefs_key_release(dpn_key); pefs_chunk_free(&pc, dpn); +out: + if (cache != NULL && error == 0) + pefs_enccn_set(pec, &cache->pde_tkey, + cache->pde_encname, cache->pde_encnamelen, cnp); + else if (cache == NULL && error == 0) + error = ENOENT; + + pefs_dircache_unlock(dpn->pn_dircache); - if (de == NULL && error == 0) - return (ENOENT); return (error); } @@ -1132,15 +1182,13 @@ } static void -pefs_readdir_decrypt(struct pefs_key *pk, int dflags, void *mem, size_t *psize) +pefs_readdir_decrypt(struct pefs_dircache *pd, struct pefs_ctx *ctx, + struct pefs_key *pk, int dflags, void *mem, size_t *psize) { - struct pefs_ctx *ctx; + struct pefs_dircache_entry *cache; struct dirent *de, *de_next; - char buf[MAXNAMLEN + 1]; size_t sz; - int d_namelen; - ctx = pefs_ctx_get(); for (de = (struct dirent*) mem, sz = *psize; sz > DIRENT_MINSIZE; de = de_next) { MPASS(de->d_reclen <= sz); @@ -1148,22 +1196,20 @@ de_next = (struct dirent *)(((caddr_t)de) + de->d_reclen); if (de->d_type == DT_WHT) continue; - if (pefs_name_skip(de->d_name, de->d_namlen)) continue; - d_namelen = pefs_name_decrypt(ctx, pk, NULL, - de->d_name, de->d_namlen, buf, sizeof(buf)); - if (d_namelen > 0) { + cache = pefs_cache_dirent(pd, de, ctx, pk); + if (cache != NULL) { /* Do not change d_reclen */ - strlcpy(de->d_name, buf, de->d_namlen + 1); - de->d_namlen = d_namelen; + MPASS(cache->pde_namelen <= de->d_namlen); + memcpy(de->d_name, cache->pde_name, cache->pde_namelen + 1); + de->d_namlen = cache->pde_encnamelen; } else if (dflags & PN_HASKEY) { *psize -= de->d_reclen; memcpy(de, de_next, sz); de_next = de; } } - pefs_ctx_free(ctx); } static int @@ -1178,8 +1224,10 @@ struct pefs_node *pn = VP_TO_PN(vp); struct pefs_key *pn_key; struct pefs_chunk pc; + struct pefs_ctx *ctx; + size_t mem_size; + u_long gen; int error; - size_t mem_size; int r_ncookies = 0, r_ncookies_max = 0, ncookies = 0; u_long *r_cookies = NULL, *cookies = NULL; int *a_ncookies; @@ -1199,8 +1247,14 @@ a_cookies = &cookies; } + gen = pefs_getgen(vp, cred); + ctx = pefs_ctx_get(); pefs_chunk_create(&pc, pn, qmin(uio->uio_resid, DFLTPHYS)); pn_key = pefs_node_key(pn); + pefs_dircache_lock(pn->pn_dircache); + if (!pefs_dircache_valid(pn->pn_dircache, gen) && uio->uio_offset != 0) + gen = 0; + pefs_dircache_beginupdate(pn->pn_dircache, gen); while (1) { if (uio->uio_resid < pc.pc_size) pefs_chunk_setsize(&pc, uio->uio_resid); @@ -1214,7 +1268,9 @@ break; pefs_chunk_setsize(&pc, pc.pc_size - puio->uio_resid); mem_size = pc.pc_size; - pefs_readdir_decrypt(pn_key, pn->pn_flags, + if (!*eofflag) + pefs_dircache_abortupdate(pn->pn_dircache); + pefs_readdir_decrypt(pn->pn_dircache, ctx, pn_key, pn->pn_flags, pc.pc_base, &mem_size); pefs_chunk_setsize(&pc, mem_size); pefs_chunk_copy(&pc, uio); @@ -1253,6 +1309,10 @@ pefs_chunk_restore(&pc); } + if (*eofflag && error == 0) + pefs_dircache_endupdate(pn->pn_dircache); + else + pefs_dircache_abortupdate(pn->pn_dircache); if (error == 0 && a_cookies != NULL) { if (r_cookies != NULL) { @@ -1264,6 +1324,8 @@ } } + pefs_dircache_unlock(pn->pn_dircache); + pefs_ctx_free(ctx); pefs_key_release(pn_key); pefs_chunk_free(&pc, pn); ==== //depot/projects/soc2009/gk_pefs/sys/modules/pefs/Makefile#8 (text+ko) ==== @@ -5,6 +5,7 @@ KMOD= pefs SRCS= vnode_if.h \ pefs_subr.c pefs_vfsops.c pefs_vnops.c pefs_xbase64.c pefs_crypto.c \ + pefs_dircache.c \ pefs_hmac.c vmac.c DEBUG_FLAGS+= -g #DEBUG_FLAGS+= -DPEFS_DEBUG From owner-p4-projects@FreeBSD.ORG Tue Oct 13 00:24:16 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 76AD51065679; Tue, 13 Oct 2009 00:24:16 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3A8B51065672 for ; Tue, 13 Oct 2009 00:24:16 +0000 (UTC) (envelope-from yohanes@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 291458FC0A for ; Tue, 13 Oct 2009 00:24:16 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9D0OGqu008584 for ; Tue, 13 Oct 2009 00:24:16 GMT (envelope-from yohanes@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9D0OGZs008582 for perforce@freebsd.org; Tue, 13 Oct 2009 00:24:16 GMT (envelope-from yohanes@FreeBSD.org) Date: Tue, 13 Oct 2009 00:24:16 GMT Message-Id: <200910130024.n9D0OGZs008582@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to yohanes@FreeBSD.org using -f From: Yohanes Nugroho To: Perforce Change Reviews Cc: Subject: PERFORCE change 169443 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Oct 2009 00:24:17 -0000 http://perforce.freebsd.org/chv.cgi?CH=169443 Change 169443 by yohanes@econa on 2009/10/13 00:23:59 dmamap sync Affected files ... .. //depot/projects/str91xx/src/sys/arm/econa/if_ece.c#6 edit Differences ... ==== //depot/projects/str91xx/src/sys/arm/econa/if_ece.c#6 (text+ko) ==== @@ -67,8 +67,8 @@ #include "miibus_if.h" -#define ECE_MAX_TX_BUFFERS 256 -#define ECE_MAX_RX_BUFFERS 256 +#define ECE_MAX_TX_BUFFERS 128 +#define ECE_MAX_RX_BUFFERS 128 #define MAX_FRAGMENT 32 @@ -99,11 +99,10 @@ struct callout tick_ch; /* Tick callout */ - bus_dmamap_t dmamap_tx; - bus_dmamap_t dmamap_rx; + bus_dmamap_t dmamap_ring_tx; + bus_dmamap_t dmamap_ring_rx; - bus_dmamap_t sparemap_rx; eth_tx_desc_t* desc_tx; @@ -112,6 +111,10 @@ bus_dma_tag_t dmatag_ring_tx; bus_dma_tag_t dmatag_ring_rx; + bus_dma_tag_t dmatag_data_tx; + bus_dma_tag_t dmatag_data_rx; + + bus_addr_t ring_paddr_tx; bus_addr_t ring_paddr_rx; bus_dmamap_t dmap_tx[ECE_MAX_TX_BUFFERS]; @@ -120,8 +123,6 @@ struct mbuf* buffer_tx[ECE_MAX_TX_BUFFERS]; struct mbuf* buffer_rx[ECE_MAX_RX_BUFFERS]; - bus_dma_tag_t dmatag_tx; - bus_dma_tag_t dmatag_rx; uint32_t desc_curr_tx; @@ -627,27 +628,27 @@ sizeof(eth_tx_desc_t)*ECE_MAX_TX_BUFFERS, 1, /* maxsize, nsegments */ sizeof(eth_tx_desc_t)*ECE_MAX_TX_BUFFERS, 0, /* maxsegsz, flags */ NULL, NULL, /* lockfunc, lockfuncarg */ - &sc->dmatag_tx); /* dmat */ + &sc->dmatag_data_tx); /* dmat */ - error = bus_dmamem_alloc(sc->dmatag_tx, + error = bus_dmamem_alloc(sc->dmatag_data_tx, (void**)&(sc->desc_tx), BUS_DMA_NOWAIT | BUS_DMA_ZERO | BUS_DMA_COHERENT, - &(sc->dmamap_tx)); + &(sc->dmamap_ring_tx)); if (error) { if_printf(sc->ifp, "failed to allocate DMA memory\n"); return (ENXIO); } - error = bus_dmamap_load(sc->dmatag_tx, sc->dmamap_tx, + error = bus_dmamap_load(sc->dmatag_data_tx, sc->dmamap_ring_tx, sc->desc_tx, sizeof(eth_tx_desc_t)*ECE_MAX_TX_BUFFERS, ece_getaddr, &(sc->ring_paddr_tx), BUS_DMA_NOWAIT); if (error) { if_printf(sc->ifp, "can't load descriptor\n"); - bus_dmamem_free(sc->dmatag_tx, sc->desc_tx, - sc->dmamap_tx); + bus_dmamem_free(sc->dmatag_data_tx, sc->desc_tx, + sc->dmamap_ring_tx); sc->desc_tx = NULL; return (ENXIO); } @@ -699,17 +700,17 @@ } } - if (sc->dmamap_tx) { - bus_dmamap_unload(sc->dmatag_tx, sc->dmamap_tx); + if (sc->dmamap_ring_tx) { + bus_dmamap_unload(sc->dmatag_data_tx, sc->dmamap_ring_tx); if (sc->desc_tx) { - bus_dmamem_free(sc->dmatag_tx, sc->desc_tx, sc->dmamap_tx); + bus_dmamem_free(sc->dmatag_data_tx, sc->desc_tx, sc->dmamap_ring_tx); } - sc->dmamap_tx = 0; + sc->dmamap_ring_tx = 0; } - if (sc->dmatag_tx) { - bus_dma_tag_destroy(sc->dmatag_tx); - sc->dmatag_tx = 0; + if (sc->dmatag_data_tx) { + bus_dma_tag_destroy(sc->dmatag_data_tx); + sc->dmatag_data_tx = 0; } if (sc->dmatag_ring_tx) { @@ -744,27 +745,27 @@ sizeof(eth_rx_desc_t)*ECE_MAX_RX_BUFFERS, 1, /* maxsize, nsegments */ sizeof(eth_rx_desc_t)*ECE_MAX_RX_BUFFERS, 0, /* maxsegsz, flags */ NULL, NULL, /* lockfunc, lockfuncarg */ - &sc->dmatag_rx); /* dmat */ + &sc->dmatag_data_rx); /* dmat */ - error = bus_dmamem_alloc(sc->dmatag_rx, + error = bus_dmamem_alloc(sc->dmatag_data_rx, (void**)&(sc->desc_rx), BUS_DMA_NOWAIT | BUS_DMA_ZERO | BUS_DMA_COHERENT, - &(sc->dmamap_rx)); + &(sc->dmamap_ring_rx)); if (error) { if_printf(sc->ifp, "failed to allocate DMA memory\n"); return (ENXIO); } - error = bus_dmamap_load(sc->dmatag_rx, sc->dmamap_rx, + error = bus_dmamap_load(sc->dmatag_data_rx, sc->dmamap_ring_rx, sc->desc_rx, sizeof(eth_rx_desc_t)*ECE_MAX_RX_BUFFERS, ece_getaddr, &(sc->ring_paddr_rx), BUS_DMA_NOWAIT); if (error) { if_printf(sc->ifp, "can't load descriptor\n"); - bus_dmamem_free(sc->dmatag_rx, sc->desc_rx, - sc->dmamap_rx); + bus_dmamem_free(sc->dmatag_data_rx, sc->desc_rx, + sc->dmamap_ring_rx); sc->desc_rx = NULL; return (ENXIO); } @@ -791,8 +792,6 @@ } - error = bus_dmamap_create(sc->dmatag_ring_rx, 0, &sc->sparemap_rx); - for (int i =0; idmatag_ring_rx, 0, &sc->dmap_rx[i]); if (error) { @@ -820,13 +819,13 @@ } } - if (sc->dmatag_rx) { - bus_dmamap_unload(sc->dmatag_rx, sc->dmamap_rx); - bus_dmamem_free(sc->dmatag_rx, sc->desc_rx, - sc->dmamap_rx); - bus_dma_tag_destroy(sc->dmatag_rx); - sc->dmatag_rx = 0; - sc->dmamap_rx = 0; + if (sc->dmatag_data_rx) { + bus_dmamap_unload(sc->dmatag_data_rx, sc->dmamap_ring_rx); + bus_dmamem_free(sc->dmatag_data_rx, sc->desc_rx, + sc->dmamap_ring_rx); + bus_dma_tag_destroy(sc->dmatag_data_rx); + sc->dmatag_data_rx = 0; + sc->dmamap_ring_rx = 0; sc->desc_rx = 0; } @@ -928,7 +927,7 @@ for (i = 0; i < ECE_MAX_RX_BUFFERS; i++) { descrx = (eth_rx_desc_t *)&(sc->desc_rx[i]); memset(descrx, 0, sizeof(eth_rx_desc_t)); - ece_new_rxbuf(sc->dmatag_ring_rx, &sc->sparemap_rx, + ece_new_rxbuf(sc->dmatag_ring_rx, &sc->dmap_rx[i], &(sc->buffer_rx[i]), (bus_addr_t *)&(descrx->data_ptr)); descrx->length = sc->buffer_rx[i]->m_len; @@ -1580,6 +1579,11 @@ } } + bus_dmamap_sync(sc->dmatag_ring_rx, + sc->dmamap_ring_rx, + BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); + + for (i= 0; icown; @@ -1588,13 +1592,12 @@ int idx = sc->desc_curr_rx; - bus_dmamap_sync(sc->dmatag_rx, sc->dmap_rx[idx], - BUS_DMASYNC_PREREAD); + bus_dmamap_sync(sc->dmatag_data_rx, sc->dmap_rx[idx], + BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE); mb = m_devget((void *)sc->buffer_rx[idx]->m_data, desc->length+16, - 0, ifp, NULL); - + 0, ifp, NULL); if (mb) { mb->m_data += 2; @@ -1628,6 +1631,10 @@ desc++; } } + bus_dmamap_sync(sc->dmatag_ring_rx, + sc->dmamap_ring_rx, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); + return; } @@ -1701,6 +1708,10 @@ int start = sc->curr_tx_mbuf - 1; if (start<0) start = ECE_MAX_TX_BUFFERS-1; + bus_dmamap_sync(sc->dmatag_ring_tx, + sc->dmamap_ring_tx, + BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); + desc_idx = sc->sent_position[start]; while (desc_idx!=-1) { //bus_dmamap_sync(sc->dmatag_ring_tx, sc->dmap_tx[desc_idx], BUS_DMASYNC_PREREAD); @@ -1708,6 +1719,9 @@ if (desc->cown != 0) { if (sc->buffer_tx[start]) { //printf("freeing\n"); + bus_dmamap_sync(sc->dmatag_data_tx, sc->dmap_tx[desc_idx], + BUS_DMASYNC_POSTWRITE); + bus_dmamap_unload(sc->dmatag_data_tx, sc->dmap_tx[desc_idx]); m_freem(sc->buffer_tx[start]); sc->buffer_tx[start] = 0; @@ -1816,7 +1830,7 @@ /* Fetch unused map */ desc_no = sc->desc_curr_tx; - mapp = sc->dmamap_tx; + mapp = sc->dmap_tx[desc_no]; //cpu_dcache_wbinv_all(); /* Create mapping in DMA memory */ error = bus_dmamap_load_mbuf_sg(sc->dmatag_ring_tx, mapp, m0, segs, &nsegs, @@ -1905,7 +1919,8 @@ } - bus_dmamap_sync(sc->dmatag_ring_tx, mapp, BUS_DMASYNC_PREWRITE); + bus_dmamap_sync(sc->dmatag_data_tx, mapp, BUS_DMASYNC_PREWRITE); + return (0); } @@ -1928,6 +1943,10 @@ IFF_DRV_RUNNING) return; + bus_dmamap_sync(sc->dmatag_ring_tx, + sc->dmamap_ring_tx, + BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); + //WR4(sc, TS_DMA_CONTROL, 0); for (;;) { /* Get packet from the queue */ @@ -1944,6 +1963,7 @@ BPF_MTAP(ifp, m0); } if (queued) { + bus_dmamap_sync(sc->dmatag_ring_tx, sc->dmamap_ring_tx, BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); WR4(sc, TS_DMA_CONTROL, 1); } } From owner-p4-projects@FreeBSD.ORG Tue Oct 13 07:42:14 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B1D6F1065676; Tue, 13 Oct 2009 07:42:14 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 765661065670 for ; Tue, 13 Oct 2009 07:42:14 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 49D0D8FC12 for ; Tue, 13 Oct 2009 07:42:14 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9D7gElE067209 for ; Tue, 13 Oct 2009 07:42:14 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9D7gEpX067207 for perforce@freebsd.org; Tue, 13 Oct 2009 07:42:14 GMT (envelope-from mav@freebsd.org) Date: Tue, 13 Oct 2009 07:42:14 GMT Message-Id: <200910130742.n9D7gEpX067207@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Cc: Subject: PERFORCE change 169445 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Oct 2009 07:42:14 -0000 http://perforce.freebsd.org/chv.cgi?CH=169445 Change 169445 by mav@mav_mavtest on 2009/10/13 07:42:01 Freeze devices CCB queues on errors. Previos approach with just SIM freeze is not enough for proper recovery, as it dropped just before recovery, not after, creating window for another request to run between. Affected files ... .. //depot/projects/scottl-camlock/src/sys/dev/siis/siis.c#8 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/dev/siis/siis.c#8 (text+ko) ==== @@ -752,7 +752,12 @@ if (ch->frozen) { union ccb *fccb = ch->frozen; ch->frozen = NULL; - fccb->ccb_h.status = CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ; + fccb->ccb_h.status &= ~CAM_STATUS_MASK; + fccb->ccb_h.status |= CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ; + if (!(fccb->ccb_h.status & CAM_DEV_QFRZN)) { + xpt_freeze_devq(fccb->ccb_h.path, 1); + fccb->ccb_h.status |= CAM_DEV_QFRZN; + } xpt_done(fccb); } if (estatus == SIIS_P_CMDERR_DEV || @@ -986,7 +991,12 @@ if (ch->frozen) { union ccb *fccb = ch->frozen; ch->frozen = NULL; - fccb->ccb_h.status = CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ; + fccb->ccb_h.status &= ~CAM_STATUS_MASK; + fccb->ccb_h.status |= CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ; + if (!(fccb->ccb_h.status & CAM_DEV_QFRZN)) { + xpt_freeze_devq(fccb->ccb_h.path, 1); + fccb->ccb_h.status |= CAM_DEV_QFRZN; + } xpt_done(fccb); } /* Handle command with timeout. */ @@ -1044,11 +1054,17 @@ bus_dmamap_unload(ch->dma.data_tag, slot->dma.data_map); } /* Set proper result status. */ - ccb->ccb_h.status &= ~CAM_STATUS_MASK; if (et != SIIS_ERR_NONE || ch->recovery) { ch->eslots |= (1 << slot->slot); ccb->ccb_h.status |= CAM_RELEASE_SIMQ; } + /* In case of error, freeze device for proper recovery. */ + if (et != SIIS_ERR_NONE && + !(ccb->ccb_h.status & CAM_DEV_QFRZN)) { + xpt_freeze_devq(ccb->ccb_h.path, 1); + ccb->ccb_h.status |= CAM_DEV_QFRZN; + } + ccb->ccb_h.status &= ~CAM_STATUS_MASK; switch (et) { case SIIS_ERR_NONE: ccb->ccb_h.status |= CAM_REQ_CMP; @@ -1062,6 +1078,7 @@ ccb->ccb_h.status |= CAM_REQUEUE_REQ; break; case SIIS_ERR_TFE: + case SIIS_ERR_NCQ: if (ccb->ccb_h.func_code == XPT_SCSI_IO) { ccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR; ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND; @@ -1075,9 +1092,6 @@ case SIIS_ERR_TIMEOUT: ccb->ccb_h.status |= CAM_CMD_TIMEOUT; break; - case SIIS_ERR_NCQ: - ccb->ccb_h.status |= CAM_ATA_STATUS_ERROR; - break; default: ccb->ccb_h.status |= CAM_REQ_CMP_ERR; } @@ -1281,7 +1295,12 @@ if (ch->frozen) { union ccb *fccb = ch->frozen; ch->frozen = NULL; - fccb->ccb_h.status = CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ; + fccb->ccb_h.status &= ~CAM_STATUS_MASK; + fccb->ccb_h.status |= CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ; + if (!(fccb->ccb_h.status & CAM_DEV_QFRZN)) { + xpt_freeze_devq(fccb->ccb_h.path, 1); + fccb->ccb_h.status |= CAM_DEV_QFRZN; + } xpt_done(fccb); } /* Disable port interrupts */ From owner-p4-projects@FreeBSD.ORG Tue Oct 13 09:13:55 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id CC8451065672; Tue, 13 Oct 2009 09:13:54 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9103F106566B for ; Tue, 13 Oct 2009 09:13:54 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 7EBCE8FC0C for ; Tue, 13 Oct 2009 09:13:54 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9D9DsbV085869 for ; Tue, 13 Oct 2009 09:13:54 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9D9DsMD085867 for perforce@freebsd.org; Tue, 13 Oct 2009 09:13:54 GMT (envelope-from mav@freebsd.org) Date: Tue, 13 Oct 2009 09:13:54 GMT Message-Id: <200910130913.n9D9DsMD085867@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Cc: Subject: PERFORCE change 169446 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Oct 2009 09:13:55 -0000 http://perforce.freebsd.org/chv.cgi?CH=169446 Change 169446 by mav@mav_mavtest on 2009/10/13 09:13:48 Improve timeout handling to avoid false positives, when command with small timeout waiting one with bigger. Submitted by: avg Affected files ... .. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#68 edit .. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#23 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#68 (text+ko) ==== @@ -1236,7 +1236,7 @@ return; } /* Start command execution timeout */ - callout_reset(&slot->timeout, (int)ccb->ccb_h.timeout * hz / 1000, + callout_reset(&slot->timeout, (int)ccb->ccb_h.timeout * hz / 2000, (timeout_t*)ahci_timeout, slot); return; } @@ -1247,11 +1247,28 @@ { device_t dev = slot->dev; struct ahci_channel *ch = device_get_softc(dev); + uint32_t sstatus; + int ccs; int i; /* Check for stale timeout. */ - if (slot->state != AHCI_SLOT_RUNNING) + if (slot->state < AHCI_SLOT_RUNNING) + return; + + /* Check if slot was not being executed last time we checked. */ + if (slot->state < AHCI_SLOT_EXECUTING) { + /* Check if slot started executing. */ + sstatus = ATA_INL(ch->r_mem, AHCI_P_SACT); + ccs = (ATA_INL(ch->r_mem, AHCI_P_CMD) & AHCI_P_CMD_CCS_MASK) + >> AHCI_P_CMD_CCS_SHIFT; + if ((sstatus & (1 << slot->slot)) != 0 || ccs == slot->slot) + slot->state = AHCI_SLOT_EXECUTING; + + callout_reset(&slot->timeout, + (int)slot->ccb->ccb_h.timeout * hz / 2000, + (timeout_t*)ahci_timeout, slot); return; + } device_printf(dev, "Timeout on slot %d\n", slot->slot); device_printf(dev, "%s is %08x cs %08x ss %08x rs %08x tfd %02x serr %08x\n", ==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#23 (text+ko) ==== @@ -328,7 +328,7 @@ AHCI_SLOT_EMPTY, AHCI_SLOT_LOADING, AHCI_SLOT_RUNNING, - AHCI_SLOT_WAITING + AHCI_SLOT_EXECUTING }; struct ahci_slot { From owner-p4-projects@FreeBSD.ORG Tue Oct 13 20:32:17 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1A5DE1065679; Tue, 13 Oct 2009 20:32:17 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D33C91065670 for ; Tue, 13 Oct 2009 20:32:16 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id A6EFF8FC1C for ; Tue, 13 Oct 2009 20:32:16 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9DKWG8g066867 for ; Tue, 13 Oct 2009 20:32:16 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9DKWGpg066865 for perforce@freebsd.org; Tue, 13 Oct 2009 20:32:16 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 13 Oct 2009 20:32:16 GMT Message-Id: <200910132032.n9DKWGpg066865@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 169466 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Oct 2009 20:32:17 -0000 http://perforce.freebsd.org/chv.cgi?CH=169466 Change 169466 by rwatson@rwatson_freebsd_capabilities on 2009/10/13 20:31:45 printf() size_t's using %zu to please 64-bit builds. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/usr.bin/gzip/gzsandbox.c#9 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/usr.bin/gzip/gzsandbox.c#9 (text+ko) ==== @@ -145,7 +145,7 @@ fdarray, 2, &iov_rep, 1, &len, NULL, NULL) < 0) err(-1, "lch_rpc_rights"); if (len != sizeof(rep)) - errx(-1, "lch_rpc_rights len %d", len); + errx(-1, "lch_rpc_rights len %zu", len); if (gsizep != NULL) *gsizep = rep.hgc_rep_gsize; close(fdarray[0]); @@ -162,7 +162,7 @@ struct iovec iov; if (len != sizeof(req)) - err(-1, "sandbox_gz_compress_buffer: len %d", len); + err(-1, "sandbox_gz_compress_buffer: len %zu", len); bcopy(buffer, &req, sizeof(req)); bzero(&rep, sizeof(rep)); @@ -226,7 +226,7 @@ fdarray, 2, &iov_rep, 1, &len, NULL, NULL) < 0) err(-1, "lch_rpc_rights"); if (len != sizeof(rep)) - errx(-1, "lch_rpc_rights len %d", len); + errx(-1, "lch_rpc_rights len %zu", len); if (gsizep != NULL) *gsizep = rep.hgu_rep_gsize; close(fdarray[0]); @@ -244,7 +244,7 @@ char *pre; if (len != sizeof(req)) - err(-1, "sandbox_gz_uncompress_buffer: len %d", len); + err(-1, "sandbox_gz_uncompress_buffer: len %zu", len); bcopy(buffer, &req, sizeof(req)); pre = buffer + sizeof(req); @@ -306,7 +306,7 @@ fdarray, 2, &iov_rep, 1, &len, NULL, NULL) < 0) err(-1, "lch_rpc_rights"); if (len != sizeof(rep)) - errx(-1, "lch_rpc_rights len %d", len); + errx(-1, "lch_rpc_rights len %zu", len); if (bytes_in != NULL) *bytes_in = rep.hub_rep_bytes_in; close(fdarray[0]); @@ -324,7 +324,7 @@ char *pre; if (len != sizeof(req)) - err(-1, "sandbox_gz_uncompress_buffer: len %d", len); + err(-1, "sandbox_gz_uncompress_buffer: len %zu", len); bcopy(buffer, &req, sizeof(req)); pre = buffer + sizeof(req); From owner-p4-projects@FreeBSD.ORG Tue Oct 13 22:26:21 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 89E2C106568D; Tue, 13 Oct 2009 22:26:21 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4E7E61065672 for ; Tue, 13 Oct 2009 22:26:21 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 3BFE48FC14 for ; Tue, 13 Oct 2009 22:26:21 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9DMQLgY011077 for ; Tue, 13 Oct 2009 22:26:21 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9DMQLO5011075 for perforce@freebsd.org; Tue, 13 Oct 2009 22:26:21 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 13 Oct 2009 22:26:21 GMT Message-Id: <200910132226.n9DMQLO5011075@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 169468 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Oct 2009 22:26:21 -0000 http://perforce.freebsd.org/chv.cgi?CH=169468 Change 169468 by rwatson@rwatson_cinnamon on 2009/10/13 22:26:18 Declare new cap/procdesc system calls NOPROTO in the compat32 syscall table. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/sys/compat/freebsd32/syscalls.master#15 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/sys/compat/freebsd32/syscalls.master#15 (text+ko) ==== @@ -901,13 +901,13 @@ 512 AUE_SHMCTL STD { int freebsd32_shmctl(int shmid, int cmd, \ struct shmid_ds32 *buf); } 513 AUE_LPATHCONF NOPROTO { int lpathconf(char *path, int name); } -514 AUE_CAP_NEW STD { int cap_new(int fd, u_int64_t rights); } -515 AUE_CAP_GETRIGHTS STD { int cap_getrights(int fd, \ +514 AUE_CAP_NEW NOPROTO { int cap_new(int fd, u_int64_t rights); } +515 AUE_CAP_GETRIGHTS NOPROTO { int cap_getrights(int fd, \ u_int64_t *rightsp); } -516 AUE_CAP_ENTER STD { int cap_enter(void); } -517 AUE_CAP_GETMODE STD { int cap_getmode(u_int *modep); } -518 AUE_NULL STD { int pdfork(int *fdp); } -519 AUE_NULL STD { int pdkill(int fd, int signum); } -520 AUE_NULL STD { int pdgetpid(int fd, pid_t *pidp); } -521 AUE_NULL STD { int pdwait(int fd, int *status, \ +516 AUE_CAP_ENTER NOPROTO { int cap_enter(void); } +517 AUE_CAP_GETMODE NOPROTO { int cap_getmode(u_int *modep); } +518 AUE_NULL NOPROTO { int pdfork(int *fdp); } +519 AUE_NULL NOPROTO { int pdkill(int fd, int signum); } +520 AUE_NULL NOPROTO { int pdgetpid(int fd, pid_t *pidp); } +521 AUE_NULL NOPROTO { int pdwait(int fd, int *status, \ int options, struct rusage *rusage); } From owner-p4-projects@FreeBSD.ORG Tue Oct 13 22:27:23 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id DC4171065672; Tue, 13 Oct 2009 22:27:22 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 88840106568D for ; Tue, 13 Oct 2009 22:27:22 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 7607B8FC17 for ; Tue, 13 Oct 2009 22:27:22 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9DMRMrW011136 for ; Tue, 13 Oct 2009 22:27:22 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9DMRM46011134 for perforce@freebsd.org; Tue, 13 Oct 2009 22:27:22 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 13 Oct 2009 22:27:22 GMT Message-Id: <200910132227.n9DMRM46011134@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 169469 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Oct 2009 22:27:23 -0000 http://perforce.freebsd.org/chv.cgi?CH=169469 Change 169469 by rwatson@rwatson_cinnamon on 2009/10/13 22:26:54 Regenerate. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/sys/compat/freebsd32/freebsd32_proto.h#19 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/sys/compat/freebsd32/freebsd32_proto.h#19 (text+ko) ==== @@ -453,37 +453,6 @@ char cmd_l_[PADL_(int)]; int cmd; char cmd_r_[PADR_(int)]; char buf_l_[PADL_(struct shmid_ds32 *)]; struct shmid_ds32 * buf; char buf_r_[PADR_(struct shmid_ds32 *)]; }; -struct cap_new_args { - char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; - char rights_l_[PADL_(u_int64_t)]; u_int64_t rights; char rights_r_[PADR_(u_int64_t)]; -}; -struct cap_getrights_args { - char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; - char rightsp_l_[PADL_(u_int64_t *)]; u_int64_t * rightsp; char rightsp_r_[PADR_(u_int64_t *)]; -}; -struct cap_enter_args { - register_t dummy; -}; -struct cap_getmode_args { - char modep_l_[PADL_(u_int *)]; u_int * modep; char modep_r_[PADR_(u_int *)]; -}; -struct pdfork_args { - char fdp_l_[PADL_(int *)]; int * fdp; char fdp_r_[PADR_(int *)]; -}; -struct pdkill_args { - char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; - char signum_l_[PADL_(int)]; int signum; char signum_r_[PADR_(int)]; -}; -struct pdgetpid_args { - char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; - char pidp_l_[PADL_(pid_t *)]; pid_t * pidp; char pidp_r_[PADR_(pid_t *)]; -}; -struct pdwait_args { - char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; - char status_l_[PADL_(int *)]; int * status; char status_r_[PADR_(int *)]; - char options_l_[PADL_(int)]; int options; char options_r_[PADR_(int)]; - char rusage_l_[PADL_(struct rusage *)]; struct rusage * rusage; char rusage_r_[PADR_(struct rusage *)]; -}; int freebsd32_wait4(struct thread *, struct freebsd32_wait4_args *); int freebsd32_recvmsg(struct thread *, struct freebsd32_recvmsg_args *); int freebsd32_sendmsg(struct thread *, struct freebsd32_sendmsg_args *); @@ -567,14 +536,6 @@ int freebsd32_semctl(struct thread *, struct freebsd32_semctl_args *); int freebsd32_msgctl(struct thread *, struct freebsd32_msgctl_args *); int freebsd32_shmctl(struct thread *, struct freebsd32_shmctl_args *); -int cap_new(struct thread *, struct cap_new_args *); -int cap_getrights(struct thread *, struct cap_getrights_args *); -int cap_enter(struct thread *, struct cap_enter_args *); -int cap_getmode(struct thread *, struct cap_getmode_args *); -int pdfork(struct thread *, struct pdfork_args *); -int pdkill(struct thread *, struct pdkill_args *); -int pdgetpid(struct thread *, struct pdgetpid_args *); -int pdwait(struct thread *, struct pdwait_args *); #ifdef COMPAT_43 @@ -853,14 +814,6 @@ #define FREEBSD32_SYS_AUE_freebsd32_semctl AUE_SEMCTL #define FREEBSD32_SYS_AUE_freebsd32_msgctl AUE_MSGCTL #define FREEBSD32_SYS_AUE_freebsd32_shmctl AUE_SHMCTL -#define FREEBSD32_SYS_AUE_cap_new AUE_CAP_NEW -#define FREEBSD32_SYS_AUE_cap_getrights AUE_CAP_GETRIGHTS -#define FREEBSD32_SYS_AUE_cap_enter AUE_CAP_ENTER -#define FREEBSD32_SYS_AUE_cap_getmode AUE_CAP_GETMODE -#define FREEBSD32_SYS_AUE_pdfork AUE_NULL -#define FREEBSD32_SYS_AUE_pdkill AUE_NULL -#define FREEBSD32_SYS_AUE_pdgetpid AUE_NULL -#define FREEBSD32_SYS_AUE_pdwait AUE_NULL #undef PAD_ #undef PADL_ From owner-p4-projects@FreeBSD.ORG Wed Oct 14 09:41:47 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 890C7106566C; Wed, 14 Oct 2009 09:41:47 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4DB1B1065670 for ; Wed, 14 Oct 2009 09:41:47 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 3ABD48FC1A for ; Wed, 14 Oct 2009 09:41:47 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9E9flKU001292 for ; Wed, 14 Oct 2009 09:41:47 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9E9fl8D001290 for perforce@freebsd.org; Wed, 14 Oct 2009 09:41:47 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Wed, 14 Oct 2009 09:41:47 GMT Message-Id: <200910140941.n9E9fl8D001290@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169482 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 09:41:47 -0000 http://p4web.freebsd.org/chv.cgi?CH=169482 Change 169482 by rwatson@rwatson_cinnamon on 2009/10/14 09:41:06 Add missing capability.h include for amd64 build. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/sys/amd64/linux32/linux32_machdep.c#7 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/sys/amd64/linux32/linux32_machdep.c#7 (text+ko) ==== @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include From owner-p4-projects@FreeBSD.ORG Wed Oct 14 10:17:23 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6733A1065696; Wed, 14 Oct 2009 10:17:23 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2B99D106568D for ; Wed, 14 Oct 2009 10:17:23 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 19A778FC18 for ; Wed, 14 Oct 2009 10:17:23 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9EAHMYc004754 for ; Wed, 14 Oct 2009 10:17:22 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9EAHMDN004752 for perforce@freebsd.org; Wed, 14 Oct 2009 10:17:22 GMT (envelope-from mav@freebsd.org) Date: Wed, 14 Oct 2009 10:17:22 GMT Message-Id: <200910141017.n9EAHMDN004752@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169483 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 10:17:23 -0000 http://p4web.freebsd.org/chv.cgi?CH=169483 Change 169483 by mav@mav_mavbook on 2009/10/14 10:16:51 Remove stale comments. Affected files ... .. //depot/projects/scottl-camlock/src/sys/cam/ata/ata_da.c#27 edit .. //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_da.c#46 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/cam/ata/ata_da.c#27 (text+ko) ==== @@ -327,12 +327,6 @@ cam_periph_lock(periph); /* - * Mask interrupts so that the pack cannot be invalidated until - * after we are in the queue. Otherwise, we might not properly - * clean up one of the buffers. - */ - - /* * If the device has been made invalid, error out */ if ((softc->flags & ADA_FLAG_PACK_INVALID)) { ==== //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_da.c#46 (text+ko) ==== @@ -821,12 +821,6 @@ #endif /* - * Mask interrupts so that the pack cannot be invalidated until - * after we are in the queue. Otherwise, we might not properly - * clean up one of the buffers. - */ - - /* * If the device has been made invalid, error out */ if ((softc->flags & DA_FLAG_PACK_INVALID)) { From owner-p4-projects@FreeBSD.ORG Wed Oct 14 11:18:24 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 179BD106568B; Wed, 14 Oct 2009 11:18:24 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CFA4A10656A5 for ; Wed, 14 Oct 2009 11:18:23 +0000 (UTC) (envelope-from gk@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id BCA538FC30 for ; Wed, 14 Oct 2009 11:18:23 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9EBINeL010317 for ; Wed, 14 Oct 2009 11:18:23 GMT (envelope-from gk@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9EBINbn010315 for perforce@freebsd.org; Wed, 14 Oct 2009 11:18:23 GMT (envelope-from gk@FreeBSD.org) Date: Wed, 14 Oct 2009 11:18:23 GMT Message-Id: <200910141118.n9EBINbn010315@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gk@FreeBSD.org using -f From: Gleb Kurtsou To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169484 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 11:18:24 -0000 http://p4web.freebsd.org/chv.cgi?CH=169484 Change 169484 by gk@gk_h1 on 2009/10/14 11:17:55 introduce pefs tests (runs tests on top of tmpfs) various fixes spotted by tests: pefs_lookup, pefs_rename, pefs_write add pefs showkeys -t option (only test. do not print) fix i386 warning Affected files ... .. //depot/projects/soc2009/gk_pefs/sbin/pefs/pefs_ctl.c#11 edit .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_crypto.c#16 edit .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_subr.c#17 edit .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_vnops.c#23 edit .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/vmac.c#2 edit .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/Makefile#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/h_funcs.subr#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/h_tools.c#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_create#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_dots#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_exec#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_link#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_mkdir#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_mount#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_pipes#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_read_write#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_readdir#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_remove#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_rename#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_rmdir#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_setattr#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_sizes#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_sockets#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_statvfs#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_symlink#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_times#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_trail_slash#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_truncate#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_vnd#1 add .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_vnode_leak#1 add Differences ... ==== //depot/projects/soc2009/gk_pefs/sbin/pefs/pefs_ctl.c#11 (text+ko) ==== @@ -407,10 +407,14 @@ pefs_showkeys(int argc, char *argv[]) { struct pefs_xkey k; + int testonly = 0; int fd, i; - while ((i = getopt(argc, argv, "")) != -1) + while ((i = getopt(argc, argv, "t")) != -1) switch(i) { + case 't': + testonly = 1; + break; case '?': default: pefs_usage(); @@ -428,11 +432,19 @@ bzero(&k, sizeof(k)); if (ioctl(fd, PEFS_GETKEY, &k) == -1) { + if (testonly) { + close(fd); + return (EX_DATAERR); + } if (errno == ENOENT) printf("No keys specified\n"); else err(EX_IOERR, "cannot list keys"); } else { + if (testonly) { + close(fd); + return (0); + } printf("Keys:\n"); while (1) { pefs_key_show(&k, k.pxk_index); @@ -833,7 +845,7 @@ " pefs setkey [-cCpvx] [-a alg] [-i iterations] [-k keyfile] directory\n" " pefs delkey [-cCpv] [-i iterations] [-k keyfile] filesystem\n" " pefs flushkeys filesystem\n" -" pefs showkeys filesystem\n" +" pefs showkeys [-t] filesystem\n" " pefs addchain [-pPvZ] [-a alg] [-i iterations] [-k keyfile]\n" " [-A alg] [-I iterations] [-K keyfile] filesystem\n" " pefs delchain [-pv] [-i iterations] [-k keyfile] filesystem\n" ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_crypto.c#16 (text+ko) ==== @@ -558,8 +558,8 @@ return (-ENAMETOOLONG); } if (enc_size < r) { - printf("pefs: name encryption buffer is too small: length %ld, required %d\n", - enc_size, r); + printf("pefs: name encryption buffer is too small: length %jd, required %d\n", + (intmax_t)enc_size, r); return (-EOVERFLOW); } @@ -610,8 +610,8 @@ (r - PEFS_NAME_CSUM_SIZE) % PEFS_NAME_BLOCK_SIZE != 0) return (-EINVAL); if (plain_size < r) { - printf("pefs: name decryption buffer is too small: length %ld, required %d\n", - plain_size, r); + printf("pefs: name decryption buffer is too small: length %jd, required %d\n", + (intmax_t)plain_size, r); return (-EOVERFLOW); } ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_subr.c#17 (text+ko) ==== @@ -561,7 +561,7 @@ if (size > DFLTPHYS) panic("pefs_chunk_create: requested buffer is too large %jd", - size); + (intmax_t)size); nodebuf = 0; wantbufsize = (size <= PAGE_SIZE ? PAGE_SIZE : DFLTPHYS); ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_vnops.c#23 (text+ko) ==== @@ -458,8 +458,8 @@ int nokey_lookup, skip_lookup; int error; - PEFSDEBUG("pefs_lookup: cn_nameiop=%lx, cn_nameptr=%.*s %p\n", - cnp->cn_nameiop, (int)cnp->cn_namelen, cnp->cn_nameptr, cnp->cn_nameptr); + PEFSDEBUG("pefs_lookup: op=%lx, name=%.*s\n", + cnp->cn_nameiop, (int)cnp->cn_namelen, cnp->cn_nameptr); pefs_enccn_init(&enccn); @@ -474,8 +474,6 @@ if (((dpn->pn_flags & PN_HASKEY) == 0 || skip_lookup)) { error = VOP_LOOKUP(ldvp, &lvp, cnp); if (skip_lookup || error == 0 || - (error == EJUSTRETURN && - !((flags & ISLASTCN) && cnp->cn_nameiop == CREATE)) || pefs_no_keys(dvp)) nokey_lookup = 1; } @@ -557,8 +555,9 @@ if (!nokey_lookup) pefs_enccn_free(&enccn); - PEFSDEBUG("pefs_lookup: cn_nameiop=%lx, cn_nameptr=%.*s %p\n", - cnp->cn_nameiop, (int)cnp->cn_namelen, cnp->cn_nameptr, cnp->cn_nameptr); + PEFSDEBUG("pefs_lookup: op=%lx, name=%.*s error=%d vp=%p\n", + cnp->cn_nameiop, (int)cnp->cn_namelen, cnp->cn_nameptr, error, + *ap->a_vpp); return (error); } @@ -639,7 +638,7 @@ pefs_data_encrypt_update(ctx, &pn->pn_tkey, &pc); puio = pefs_chunk_uio(&pc, offset, UIO_WRITE); PEFSDEBUG("pefs_tryextend: resizing file; filling with zeros: offset=0x%jx, resid=0x%jx\n", - offset, bsize); + offset, (intmax_t)bsize); error = VOP_WRITE(lvp, puio, 0, cred); if (error != 0) { /* try to reset */ @@ -798,6 +797,19 @@ } static int +pefs_close(struct vop_close_args *ap) +{ + struct vnode *vp = ap->a_vp; + struct vnode *lvp = PEFS_LOWERVP(vp); + int error; + + ap->a_vp = lvp; + error = VOP_CLOSE_AP(ap); + ap->a_vp = vp; + return (error); +} + +static int pefs_rename(struct vop_rename_args *ap) { struct vnode *fdvp = ap->a_fdvp; @@ -808,7 +820,6 @@ struct vnode *ltdvp = PEFS_LOWERVP(tdvp); struct vnode *tvp = ap->a_tvp; struct vnode *ltvp = (tvp == NULL ? NULL : PEFS_LOWERVP(tvp)); - struct vnode *tovp = NULL; struct componentname *fcnp = ap->a_fcnp; struct componentname *tcnp = ap->a_tcnp; struct pefs_enccn fenccn; @@ -826,6 +837,14 @@ goto bad; } + /* Handle '.' and '..' rename attempt */ + if ((fcnp->cn_namelen == 1 && fcnp->cn_nameptr[0] == '.') || + (fcnp->cn_flags & ISDOTDOT) || (tcnp->cn_flags & ISDOTDOT) || + fdvp == fvp) { + error = EINVAL; + goto bad; + } + if (pefs_no_keys(tdvp)) { error = EROFS; goto bad; @@ -859,55 +878,108 @@ if (error != 0) { goto bad; } - error = pefs_enccn_create(&tenccn, fenccn.pec_tkey.ptk_key, - fenccn.pec_tkey.ptk_tweak, tcnp); - if (error != 0) { - pefs_enccn_free(&fenccn); - goto bad; - } +#ifdef PEFS_DEBUG_EXTRA if (tvp == NULL) { tcnp->cn_nameiop = DELETE; - error = VOP_LOOKUP(tdvp, &tovp, tcnp); + error = VOP_LOOKUP(tdvp, &tvp, tcnp); tcnp->cn_nameiop = RENAME; - PEFSDEBUG("pefs_rename: lookup target vnode: %s: error=%d, tovp=%p\n", - tcnp->cn_nameptr, error, tovp); - if (error == ENOENT) + MPASS(error != 0); + if (error == ENOENT) { error = 0; + } else { + PEFSDEBUG("pefs_rename: lookup target vnode: %s: error=%d, tvp=%p\n", + tcnp->cn_nameptr, error, tvp); + if (error == 0) + vput(tvp); + tvp = NULL; + error = EINVAL; + pefs_enccn_free(&fenccn); + goto bad; + } } +#endif + if (tvp != NULL) { + if (fvp->v_type == VDIR && tvp->v_type == VDIR) { + /* + * Lower level is to check if tvp directory is empty. + * After rename fvp will contain invalid key/tweak + * because it is rename of fvp. + */ + error = pefs_enccn_get(&tenccn, tvp, tcnp); + } else if (fvp->v_type == VDIR && tvp->v_type != VDIR) { + error = ENOTDIR; + } else if (fvp->v_type != VDIR && tvp->v_type == VDIR) { + error = EISDIR; + } else { + /* + * (fvp->v_type != VDIR && tvp->v_type != VDIR): + * We end up having 2 files with same name but + * different tweaks/keys. Remove the old one. + * Set ltvp to zero here because we rename to new name + * and then remove old one + */ + error = pefs_enccn_create(&tenccn, + fenccn.pec_tkey.ptk_key, fenccn.pec_tkey.ptk_tweak, + tcnp); + if (error == 0) + ltvp = NULL; + } + } else { + error = pefs_enccn_create(&tenccn, fenccn.pec_tkey.ptk_key, + fenccn.pec_tkey.ptk_tweak, tcnp); + } if (error != 0) { pefs_enccn_free(&fenccn); - pefs_enccn_free(&tenccn); goto bad; } vref(lfdvp); vref(lfvp); vref(ltdvp); - if (ltvp != NULL) + ASSERT_VOP_LOCKED(ltdvp, "pefs_rename"); + if (ltvp != NULL) { + ASSERT_VOP_LOCKED(ltvp, "pefs_rename"); vref(ltvp); + } error = VOP_RENAME(lfdvp, lfvp, &fenccn.pec_cn, ltdvp, ltvp, &tenccn.pec_cn); - pefs_enccn_free(&fenccn); - pefs_enccn_free(&tenccn); - if (error == 0) { - if (tovp != NULL) { - MPASS(tovp->v_type == VREG); + if (tvp != NULL && tvp->v_type != VDIR) { + /* + * Remove old file. Double rename is not performed to + * save data in case of error + */ + pefs_enccn_free(&tenccn); + ASSERT_VOP_UNLOCKED(tdvp, "pefs_rename"); + ASSERT_VOP_LOCKED(tvp, "pefs_rename"); vn_lock(tdvp, LK_EXCLUSIVE | LK_RETRY); - tcnp->cn_nameiop = DELETE; - error = VOP_REMOVE(tdvp, tovp, tcnp); - tcnp->cn_nameiop = RENAME; + error = pefs_enccn_get(&tenccn, tvp, tcnp); + if (error == 0) { + error = VOP_REMOVE(ltdvp, PEFS_LOWERVP(tvp), + &tenccn.pec_cn); + PEFSDEBUG("pefs_rename: remove old: %s\n", + tenccn.pec_cn.cn_nameptr); + VP_TO_PN(tvp)->pn_flags |= PN_WANTRECYCLE; + cache_purge(tvp); + vgone(tvp); + } VOP_UNLOCK(tdvp, 0); - vput(tovp); + VOP_UNLOCK(tvp, 0); } cache_purge(fdvp); cache_purge(fvp); - } else { - if (tovp != NULL) - vput(tovp); + if (tvp != NULL && tvp->v_type == VDIR) { + vn_lock(fvp, LK_EXCLUSIVE | LK_RETRY); + VP_TO_PN(fvp)->pn_flags |= PN_WANTRECYCLE; + vgone(fvp); + VOP_UNLOCK(fvp, 0); + } } + pefs_enccn_free(&tenccn); + pefs_enccn_free(&fenccn); + done: ASSERT_VOP_UNLOCKED(tdvp, "pefs_rename"); vrele(fdvp); @@ -1691,7 +1763,7 @@ vm_page_busy(m); VM_OBJECT_UNLOCK(vp->v_object); PEFSDEBUG("pefs_read: mapped: offset=0x%jx moffset=0x%jx msize=0x%jx\n", - uio->uio_offset, moffset, msize); + uio->uio_offset, (intmax_t)moffset, (intmax_t)msize); error = uiomove_fromphys(&m, moffset, msize, uio); VM_OBJECT_LOCK(vp->v_object); vm_page_wakeup(m); @@ -1711,7 +1783,7 @@ } PEFSDEBUG("pefs_read: mapped=%d m=%d offset=0x%jx size=0x%jx\n", - mapped, m != NULL, uio->uio_offset, pc.pc_size); + mapped, m != NULL, uio->uio_offset, (intmax_t)pc.pc_size); puio = pefs_chunk_uio(&pc, uio->uio_offset, uio->uio_rw); error = VOP_READ(lvp, puio, ioflag, cred); if (error != 0) @@ -1829,7 +1901,7 @@ vm_page_unlock_queues(); VM_OBJECT_UNLOCK(vp->v_object); PEFSDEBUG("pefs_write: mapped: offset=0x%jx moffset=0x%jx msize=0x%jx\n", - offset, moffset, msize); + offset, (intmax_t)moffset, (intmax_t)msize); sched_pin(); sf = sf_buf_alloc(m, SFB_CPUPRIVATE); ma = (char *)sf_buf_kva(sf); @@ -1866,7 +1938,7 @@ pefs_chunk_copy(&pc, uio); lower_update: PEFSDEBUG("pefs_write: mapped=%d m=%d offset=0x%jx size=0x%jx\n", - mapped, m != NULL, offset, pc.pc_size); + mapped, m != NULL, offset, (intmax_t)pc.pc_size); if (restart_encrypt) { restart_encrypt = 0; pefs_data_encrypt_start(ctx, &pn->pn_tkey, offset); @@ -1876,13 +1948,29 @@ /* IO_APPEND handled above to prevent offset change races. */ error = VOP_WRITE(lvp, puio, ioflag, cred); - if (error != 0) + if (error != 0) { + /* + * XXX Original uio is not preserved thus can't be + * restored. Cloning entire uio structure is too + * inefficient. uio shouldn't be reused after error, but + * uid_resid and uio_offset should remain valid. + * Partially destroy uio, so that using it further + * would result in panic. + * + * Correct solution is to implement uiocopy that + * doesn't change uio and iovec. + */ + uio->uio_iov = NULL; + uio->uio_iovcnt = 0; + uio->uio_rw = -1; + uio->uio_resid += pc.pc_size; + uio->uio_offset -= pc.pc_size; break; + } MPASS(puio->uio_resid == 0); resid -= pc.pc_size; offset += pc.pc_size; - } pefs_ctx_free(ctx); pefs_chunk_free(&pc, pn); @@ -2085,6 +2173,7 @@ .vop_default = &default_vnodeops, .vop_access = pefs_access, .vop_accessx = pefs_accessx, + .vop_close = pefs_close, .vop_getattr = pefs_getattr, .vop_getwritemount = pefs_getwritemount, .vop_inactive = pefs_inactive, ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/vmac.c#2 (text+ko) ==== @@ -251,17 +251,17 @@ #define a1 *(((uint32_t*)alo)+INDEX_HIGH) #define a2 *(((uint32_t*)ahi)+INDEX_LOW) #define a3 *(((uint32_t*)ahi)+INDEX_HIGH) -#define k0 *(((uint32_t*)kl)+INDEX_LOW) -#define k1 *(((uint32_t*)kl)+INDEX_HIGH) -#define k2 *(((uint32_t*)kh)+INDEX_LOW) -#define k3 *(((uint32_t*)kh)+INDEX_HIGH) +#define k0 *(((const uint32_t*)kl)+INDEX_LOW) +#define k1 *(((const uint32_t*)kl)+INDEX_HIGH) +#define k2 *(((const uint32_t*)kh)+INDEX_LOW) +#define k3 *(((const uint32_t*)kh)+INDEX_HIGH) uint64_t p, q, t; uint32_t t2; p = MUL32(a3, k3); p += p; - p += *(uint64_t *)mh; + p += *(const uint64_t *)mh; p += MUL32(a0, k2); p += MUL32(a1, k1); p += MUL32(a2, k0); @@ -273,7 +273,7 @@ p += MUL32(a3, k0); t |= ((uint64_t)((uint32_t)p & 0x7fffffff)) << 32; p >>= 31; - p += (uint64_t)(((uint32_t*)ml)[INDEX_LOW]); + p += (uint64_t)(((const uint32_t*)ml)[INDEX_LOW]); p += MUL32(a0, k0); q = MUL32(a1, k3); q += MUL32(a2, k2); @@ -282,7 +282,7 @@ p += q; t2 = (uint32_t)(p); p >>= 32; - p += (uint64_t)(((uint32_t*)ml)[INDEX_HIGH]); + p += (uint64_t)(((const uint32_t*)ml)[INDEX_HIGH]); p += MUL32(a0, k1); p += MUL32(a1, k0); q = MUL32(a2, k3); From owner-p4-projects@FreeBSD.ORG Wed Oct 14 11:21:27 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 43898106568D; Wed, 14 Oct 2009 11:21:27 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0789D106566B for ; Wed, 14 Oct 2009 11:21:27 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id E9BBE8FC1D for ; Wed, 14 Oct 2009 11:21:26 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9EBLQxA010577 for ; Wed, 14 Oct 2009 11:21:26 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9EBLQFW010575 for perforce@freebsd.org; Wed, 14 Oct 2009 11:21:26 GMT (envelope-from mav@freebsd.org) Date: Wed, 14 Oct 2009 11:21:26 GMT Message-Id: <200910141121.n9EBLQFW010575@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169485 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 11:21:27 -0000 http://p4web.freebsd.org/chv.cgi?CH=169485 Change 169485 by mav@mav_mavbook on 2009/10/14 11:20:29 No need to lock PMP, just reference it. We can't lock it in async handler, as it may try to sleep. Affected files ... .. //depot/projects/scottl-camlock/src/sys/cam/ata/ata_pmp.c#7 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/cam/ata/ata_pmp.c#7 (text+ko) ==== @@ -252,7 +252,7 @@ if (code == AC_SENT_BDR || code == AC_BUS_RESET) softc->found = 0; /* We have to reset everything. */ softc->state = PMP_STATE_PORTS; - (void)cam_periph_hold(periph, PRIBIO); + cam_periph_acquire(periph); xpt_schedule(periph, CAM_PRIORITY_BUS); break; default: @@ -348,7 +348,7 @@ * to finish the probe. The reference will be dropped in pmpdone at * the end of probe. */ - (void)cam_periph_hold(periph, PRIBIO); + (void)cam_periph_acquire(periph); xpt_schedule(periph, CAM_PRIORITY_BUS); return(CAM_REQ_CMP); @@ -682,7 +682,7 @@ break; } softc->state = PMP_STATE_NORMAL; - cam_periph_unhold(periph); + cam_periph_release_locked(periph); } #endif /* _KERNEL */ From owner-p4-projects@FreeBSD.ORG Wed Oct 14 11:33:39 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 8EE881065692; Wed, 14 Oct 2009 11:33:39 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 534481065676 for ; Wed, 14 Oct 2009 11:33:39 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 415C88FC17 for ; Wed, 14 Oct 2009 11:33:39 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9EBXdma011390 for ; Wed, 14 Oct 2009 11:33:39 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9EBXdbB011388 for perforce@freebsd.org; Wed, 14 Oct 2009 11:33:39 GMT (envelope-from mav@freebsd.org) Date: Wed, 14 Oct 2009 11:33:39 GMT Message-Id: <200910141133.n9EBXdbB011388@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169486 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 11:33:39 -0000 http://p4web.freebsd.org/chv.cgi?CH=169486 Change 169486 by mav@mav_mavbook on 2009/10/14 11:33:00 Compact comments. Affected files ... .. //depot/projects/scottl-camlock/src/sys/cam/ata/ata_da.c#28 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/cam/ata/ata_da.c#28 (text+ko) ==== @@ -933,14 +933,10 @@ error = adaerror(done_ccb, 0, 0); if (error == ERESTART) { - /* - * A retry was scheuled, so - * just return. - */ + /* A retry was scheduled, so just return. */ return; } if (error != 0) { - if (error == ENXIO) { /* * Catastrophic error. Mark our pack as @@ -1010,10 +1006,7 @@ error = adaerror(done_ccb, 0, 0); if (error == ERESTART) { - /* - * A retry was scheuled, so - * just return. - */ + /* A retry was scheduled, so just return. */ return; } } From owner-p4-projects@FreeBSD.ORG Wed Oct 14 11:49:56 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id EA1501065672; Wed, 14 Oct 2009 11:49:55 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AE906106566C for ; Wed, 14 Oct 2009 11:49:55 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 9B5C58FC16 for ; Wed, 14 Oct 2009 11:49:55 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9EBntl9012646 for ; Wed, 14 Oct 2009 11:49:55 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9EBnt2E012644 for perforce@freebsd.org; Wed, 14 Oct 2009 11:49:55 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Wed, 14 Oct 2009 11:49:55 GMT Message-Id: <200910141149.n9EBnt2E012644@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169487 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 11:49:56 -0000 http://p4web.freebsd.org/chv.cgi?CH=169487 Change 169487 by rwatson@rwatson_cinnamon on 2009/10/14 11:49:26 Add missing capability argument to fget(9) for 32-bit FreeBSD compatibility code. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/sys/compat/freebsd32/freebsd32_ioctl.c#3 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/sys/compat/freebsd32/freebsd32_ioctl.c#3 (text+ko) ==== @@ -33,6 +33,7 @@ #include "opt_compat.h" #include +#include #include #include #include @@ -207,7 +208,7 @@ struct file *fp; int error; - if ((error = fget(td, uap->fd, &fp)) != 0) + if ((error = fget(td, uap->fd, CAP_IOCTL, &fp)) != 0) return (error); if ((fp->f_flag & (FREAD | FWRITE)) == 0) { fdrop(fp, td); From owner-p4-projects@FreeBSD.ORG Wed Oct 14 15:28:35 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4522C1065693; Wed, 14 Oct 2009 15:28:35 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 09AC6106568F for ; Wed, 14 Oct 2009 15:28:35 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id E9E238FC17 for ; Wed, 14 Oct 2009 15:28:34 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9EFSYSf043883 for ; Wed, 14 Oct 2009 15:28:34 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9EFSYEb043881 for perforce@freebsd.org; Wed, 14 Oct 2009 15:28:34 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Wed, 14 Oct 2009 15:28:34 GMT Message-Id: <200910141528.n9EFSYEb043881@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169494 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 15:28:35 -0000 http://p4web.freebsd.org/chv.cgi?CH=169494 Change 169494 by rwatson@rwatson_cinnamon on 2009/10/14 15:28:30 Align 64-bit capability field at a 64-bit offset in struct kinfo_file, otherwise the compiler will introduce additional padding, changing the size of the overall structure. Spotted by: Jonathan Anderson Affected files ... .. //depot/projects/trustedbsd/capabilities/src/sys/sys/user.h#15 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/sys/sys/user.h#15 (text+ko) ==== @@ -333,8 +333,9 @@ struct sockaddr_storage kf_sa_local; /* Socket address. */ struct sockaddr_storage kf_sa_peer; /* Peer address. */ pid_t kf_pid; /* Process identifier. */ + int _kf_ispare0; /* Space for more stuff. */ cap_rights_t kf_cap_rights; /* Capabiity rights. */ - int _kf_ispare[13]; /* Space for more stuff. */ + int _kf_ispare[12]; /* Space for more stuff. */ /* Truncated before copyout in sysctl */ char kf_path[PATH_MAX]; /* Path to file, if any. */ }; From owner-p4-projects@FreeBSD.ORG Wed Oct 14 19:21:28 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 378D11065692; Wed, 14 Oct 2009 19:21:28 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EBF0D106568B for ; Wed, 14 Oct 2009 19:21:27 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id D91A48FC14 for ; Wed, 14 Oct 2009 19:21:27 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9EJLR50075533 for ; Wed, 14 Oct 2009 19:21:27 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9EJLRnO075531 for perforce@freebsd.org; Wed, 14 Oct 2009 19:21:27 GMT (envelope-from pgj@FreeBSD.org) Date: Wed, 14 Oct 2009 19:21:27 GMT Message-Id: <200910141921.n9EJLRnO075531@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169498 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 19:21:28 -0000 http://p4web.freebsd.org/chv.cgi?CH=169498 Change 169498 by pgj@beehive on 2009/10/14 19:20:48 IFC Affected files ... .. //depot/projects/docproj_hu/doc/share/pgpkeys/philip.key#2 integrate .. //depot/projects/docproj_hu/www/en/news/status/report-2009-04-2009-09.xml#4 integrate .. //depot/projects/docproj_hu/www/en/platforms/ppc.sgml#4 integrate .. //depot/projects/docproj_hu/www/hu/share/sgml/news.xml#57 integrate Differences ... ==== //depot/projects/docproj_hu/doc/share/pgpkeys/philip.key#2 (text+ko) ==== @@ -1,4 +1,4 @@ - + @@ -10,8 +10,8 @@ uid Philip Paeps uid Philip Paeps uid Philip Paeps -sub 1024D/035EFC58 2006-10-22 [expires: 2008-10-21] -sub 2048g/6E5FD7D6 2006-10-22 [expires: 2008-11-17] +sub 1024D/035EFC58 2006-10-22 [expires: 2010-10-13] +sub 2048g/6E5FD7D6 2006-10-22 [expires: 2010-10-14] ]]> >> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Wed Oct 14 20:06:13 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 38DDC10656A3; Wed, 14 Oct 2009 20:06:13 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F13381065692 for ; Wed, 14 Oct 2009 20:06:12 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id C64138FC22 for ; Wed, 14 Oct 2009 20:06:12 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9EK6CTp079754 for ; Wed, 14 Oct 2009 20:06:12 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9EK6CnK079752 for perforce@freebsd.org; Wed, 14 Oct 2009 20:06:12 GMT (envelope-from pgj@FreeBSD.org) Date: Wed, 14 Oct 2009 20:06:12 GMT Message-Id: <200910142006.n9EK6CnK079752@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169500 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 20:06:13 -0000 http://p4web.freebsd.org/chv.cgi?CH=169500 Change 169500 by pgj@beehive on 2009/10/14 20:05:21 MFen (www): 1.22 -> 1.23 hu/platforms/ppc.sgml Affected files ... .. //depot/projects/docproj_hu/www/hu/platforms/ppc.sgml#13 edit Differences ... ==== //depot/projects/docproj_hu/www/hu/platforms/ppc.sgml#13 (text+ko) ==== @@ -10,7 +10,7 @@ @@ -111,7 +111,8 @@

    Támogatott hardverek

    A &os;/ppc portnak mûködnie kell minden új - számítógépen. A + (tehát bármilyen beépített USB porttal + rendelkezõ Apple) számítógépen. A felhasználók a következõ számítógépeken futtatták sikeresen a &os;-t:

    @@ -183,14 +184,16 @@

    Ismert problémák

      -
    • Nincs AltiVec támogatás.
    • -
    • A G5 processzorokat nem támogatjuk.
    • -
    • Az SMP támogatása egyelõre csak a -CURRENT - ágban érhetõ el.
    • -
    • Az fdisk nem mûködik.
    • +
    • A G5 processzorok csak a 8.0-RELEASE és + késõbbi kiadásokban támogatottak.
    • +
    • Az SMP támogatása egyelõre csak G4 + rendszerekre, és csak a 8.0-RELEASE és + késõbbi kiadásokban érhetõ el.
    • +
    • A sysinstall nem tud rendesen lemezeket + particionálni.
    • Az ADB billentyûzetek (hasonlóan az Apple - laptopokéhoz) jelenleg csak a -CURRENT ágban - támogatottak.
    • + laptopokéhoz) csak a 8.0-RELEASE és + késõbbi kiadásokban támogatottak.
    • Az ATI kártyás gépek esetén vissza kell fogni az ofw syscons mûködéséhez kötõdõ ellenõrzéseket a From owner-p4-projects@FreeBSD.ORG Wed Oct 14 21:06:57 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 697991065679; Wed, 14 Oct 2009 21:06:57 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 157C61065670 for ; Wed, 14 Oct 2009 21:06:57 +0000 (UTC) (envelope-from gk@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 031D38FC0C for ; Wed, 14 Oct 2009 21:06:57 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9EL6txF095341 for ; Wed, 14 Oct 2009 21:06:55 GMT (envelope-from gk@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9EL6tGU095339 for perforce@freebsd.org; Wed, 14 Oct 2009 21:06:55 GMT (envelope-from gk@FreeBSD.org) Date: Wed, 14 Oct 2009 21:06:55 GMT Message-Id: <200910142106.n9EL6tGU095339@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gk@FreeBSD.org using -f From: Gleb Kurtsou To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169505 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 21:06:57 -0000 http://p4web.freebsd.org/chv.cgi?CH=169505 Change 169505 by gk@gk_h1 on 2009/10/14 21:06:44 support ioctls on read-only filesystem enable ro mount test Affected files ... .. //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_vnops.c#24 edit .. //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_mount#2 edit Differences ... ==== //depot/projects/soc2009/gk_pefs/sys/fs/pefs/pefs_vnops.c#24 (text+ko) ==== @@ -70,6 +70,7 @@ #include #include #include +#include #include #include #include @@ -753,11 +754,8 @@ case VDIR: case VLNK: case VREG: - /* - * Do not check pefs_no_keys(vp) here because ioctls - * expect filesystem to be writable right after mount - */ - if (vp->v_mount->mnt_flag & MNT_RDONLY) + if ((vp->v_mount->mnt_flag & MNT_RDONLY) != 0 || + pefs_no_keys(vp)) return (EROFS); break; default: @@ -2029,17 +2027,19 @@ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); vdrop(dvp); /* vhold by vn_vptocnp */ - error = pefs_enccn_get(&fenccn, vp, &cn); + error = VOP_ACCESS(vp, VWRITE, cred, td); + if (error == 0) + error = pefs_enccn_get(&fenccn, vp, &cn); if (error != 0) { - VOP_UNLOCK(lvp, 0); - VOP_UNLOCK(ldvp, 0); + VOP_UNLOCK(vp, 0); + VOP_UNLOCK(dvp, 0); PEFSDEBUG("pefs_setkey: pefs_enccn_get failed: %d\n", error); goto out; } error = pefs_enccn_create(&tenccn, pk, NULL, &cn); if (error != 0) { - VOP_UNLOCK(lvp, 0); - VOP_UNLOCK(ldvp, 0); + VOP_UNLOCK(vp, 0); + VOP_UNLOCK(dvp, 0); pefs_enccn_free(&fenccn); goto out; } @@ -2072,16 +2072,24 @@ pefs_ioctl(struct vop_ioctl_args *ap) { struct vnode *vp = ap->a_vp; - struct pefs_mount *pm = VFS_TO_PEFS(vp->v_mount); struct pefs_xkey *xk = ap->a_data; + struct ucred *cred = ap->a_cred; + struct thread *td = ap->a_td; + struct mount *mp = vp->v_mount; + struct pefs_mount *pm = VFS_TO_PEFS(mp); struct pefs_key *pk; - int error, i; + int error = 0, i; - vn_lock(pm->pm_rootvp, LK_SHARED | LK_RETRY); - error = VOP_ACCESS(pm->pm_rootvp, VWRITE, ap->a_cred, ap->a_td); - VOP_UNLOCK(pm->pm_rootvp, 0); - if (error != 0) - return (error); + if (mp->mnt_cred->cr_uid != cred->cr_uid) { + error = priv_check_cred(cred, PRIV_VFS_ADMIN, 0); + if (error != 0 && (mp->mnt_flag & MNT_RDONLY) == 0) { + vn_lock(pm->pm_rootvp, LK_SHARED | LK_RETRY); + error = VOP_ACCESS(mp->mnt_vnodecovered, VWRITE, cred, td); + VOP_UNLOCK(pm->pm_rootvp, 0); + } + if (error != 0) + return (error); + } /* * Recycle all unused vnodes after adding/deleting keys to cleanup @@ -2114,7 +2122,7 @@ pefs_key_ref(pk); mtx_unlock(&pm->pm_keys_lock); if (pk != NULL) { - error = pefs_setkey(vp, pk, ap->a_cred, ap->a_td); + error = pefs_setkey(vp, pk, cred, td); pefs_key_release(pk); } else { PEFSDEBUG("pefs_ioctl: key not found\n"); @@ -2132,7 +2140,7 @@ } error = pefs_key_add(pm, xk->pxk_index, pk); if (error == 0) - pefs_flushkey(vp->v_mount, ap->a_td, 0, NULL); + pefs_flushkey(mp, td, 0, NULL); else pefs_key_release(pk); break; @@ -2144,7 +2152,7 @@ pefs_key_ref(pk); pefs_key_remove(pm, pk); mtx_unlock(&pm->pm_keys_lock); - pefs_flushkey(vp->v_mount, ap->a_td, 0, pk); + pefs_flushkey(mp, td, 0, pk); pefs_key_release(pk); } else { mtx_unlock(&pm->pm_keys_lock); @@ -2154,8 +2162,7 @@ case PEFS_FLUSHKEYS: PEFSDEBUG("pefs_ioctl: flush keys\n"); if (pefs_key_remove_all(pm)) { - pefs_flushkey(vp->v_mount, ap->a_td, - PEFS_FLUSHKEY_ALL, NULL); + pefs_flushkey(mp, td, PEFS_FLUSHKEY_ALL, NULL); } break; default: ==== //depot/projects/soc2009/gk_pefs/tools/regression/pefs/t_mount#2 (text+ko) ==== @@ -55,11 +55,10 @@ test_name "File-system can be unmounted" test_unmount - # XXX - #test_name "File-system mount options work" - #test_mount -o ro - #mount | grep ${Work_Dir} | grep -q read-only || die - #test_unmount + test_name "File-system mount options work" + test_mount -o ro + mount | grep ${Work_Dir} | grep -q read-only || die + test_unmount test_name "Root directory attributes are set correctly" test_mount -o "uid=1000,gid=100,mode=755" From owner-p4-projects@FreeBSD.ORG Wed Oct 14 21:26:15 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7640D10656C5; Wed, 14 Oct 2009 21:26:15 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3AE0810656C3 for ; Wed, 14 Oct 2009 21:26:15 +0000 (UTC) (envelope-from truncs@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 28A248FC15 for ; Wed, 14 Oct 2009 21:26:15 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9ELQF54096736 for ; Wed, 14 Oct 2009 21:26:15 GMT (envelope-from truncs@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9ELQF4d096734 for perforce@freebsd.org; Wed, 14 Oct 2009 21:26:15 GMT (envelope-from truncs@FreeBSD.org) Date: Wed, 14 Oct 2009 21:26:15 GMT Message-Id: <200910142126.n9ELQF4d096734@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to truncs@FreeBSD.org using -f From: Aditya Sarawgi To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169506 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 21:26:15 -0000 http://p4web.freebsd.org/chv.cgi?CH=169506 Change 169506 by truncs@aditya on 2009/10/14 21:25:28 Initialize the mutex has done in FFS. Affected files ... .. //depot/projects/soc2009/soc_ext2fs/src/sys/fs/ext2fs/ext2_vfsops.c#8 edit Differences ... ==== //depot/projects/soc2009/soc_ext2fs/src/sys/fs/ext2fs/ext2_vfsops.c#8 (text+ko) ==== @@ -577,6 +577,7 @@ M_EXT2MNT, M_WAITOK); ump->um_e2fs->e2fs = malloc(sizeof(struct ext2fs), M_EXT2MNT, M_WAITOK); + mtx_init(EXT2_MTX(ump), "EXT2FS", "EXT2FS Lock", MTX_DEF); bcopy(es, ump->um_e2fs->e2fs, (u_int)sizeof(struct ext2fs)); if ((error = compute_sb_data(devvp, ump->um_e2fs->e2fs, ump->um_e2fs))) goto out; @@ -629,6 +630,7 @@ PICKUP_GIANT(); } if (ump) { + mtx_destroy(EXT2_MTX(ump)); free(ump->um_e2fs->e2fs_gd, M_EXT2MNT); free(ump->um_e2fs->e2fs_contigdirs, M_EXT2MNT); free(ump->um_e2fs->e2fs, M_EXT2MNT); From owner-p4-projects@FreeBSD.ORG Thu Oct 15 02:53:42 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 72855106568F; Thu, 15 Oct 2009 02:53:42 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 34B6F106566B for ; Thu, 15 Oct 2009 02:53:42 +0000 (UTC) (envelope-from thompsa@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 1FF378FC35 for ; Thu, 15 Oct 2009 02:53:42 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9F2rgqu035321 for ; Thu, 15 Oct 2009 02:53:42 GMT (envelope-from thompsa@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9F2re6E035319 for perforce@freebsd.org; Thu, 15 Oct 2009 02:53:40 GMT (envelope-from thompsa@freebsd.org) Date: Thu, 15 Oct 2009 02:53:40 GMT Message-Id: <200910150253.n9F2re6E035319@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to thompsa@freebsd.org using -f From: Andrew Thompson To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169509 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Oct 2009 02:53:42 -0000 http://p4web.freebsd.org/chv.cgi?CH=169509 Change 169509 by thompsa@thompsa_burger on 2009/10/15 02:53:30 IFC Affected files ... .. //depot/projects/usb/src/sys/amd64/acpica/acpi_machdep.c#6 integrate .. //depot/projects/usb/src/sys/amd64/acpica/acpi_wakecode.S#4 integrate .. //depot/projects/usb/src/sys/amd64/acpica/acpi_wakeup.c#6 integrate .. //depot/projects/usb/src/sys/amd64/acpica/madt.c#8 integrate .. //depot/projects/usb/src/sys/amd64/amd64/elf_machdep.c#9 integrate .. //depot/projects/usb/src/sys/amd64/amd64/initcpu.c#8 integrate .. //depot/projects/usb/src/sys/amd64/amd64/machdep.c#26 integrate .. //depot/projects/usb/src/sys/amd64/amd64/pmap.c#31 integrate .. //depot/projects/usb/src/sys/amd64/amd64/trap.c#18 integrate .. //depot/projects/usb/src/sys/amd64/conf/GENERIC#32 integrate .. //depot/projects/usb/src/sys/amd64/conf/NOTES#22 integrate .. //depot/projects/usb/src/sys/amd64/include/acpica_machdep.h#3 integrate .. //depot/projects/usb/src/sys/amd64/include/apm_bios.h#1 branch .. //depot/projects/usb/src/sys/amd64/include/atomic.h#5 integrate .. //depot/projects/usb/src/sys/amd64/include/cpufunc.h#7 integrate .. //depot/projects/usb/src/sys/amd64/include/elf.h#5 integrate .. //depot/projects/usb/src/sys/amd64/pci/pci_cfgreg.c#6 integrate .. //depot/projects/usb/src/sys/arm/arm/cpufunc.c#11 integrate .. //depot/projects/usb/src/sys/arm/arm/elf_machdep.c#9 integrate .. //depot/projects/usb/src/sys/arm/arm/identcpu.c#8 integrate .. //depot/projects/usb/src/sys/arm/arm/pmap.c#21 integrate .. //depot/projects/usb/src/sys/arm/conf/HL200#10 integrate .. //depot/projects/usb/src/sys/arm/conf/KB920X#21 integrate .. //depot/projects/usb/src/sys/arm/include/elf.h#6 integrate .. //depot/projects/usb/src/sys/arm/include/md_var.h#4 integrate .. //depot/projects/usb/src/sys/arm/xscale/i80321/i80321_timer.c#5 integrate .. //depot/projects/usb/src/sys/arm/xscale/xscalereg.h#2 delete .. //depot/projects/usb/src/sys/arm/xscale/xscalevar.h#2 delete .. //depot/projects/usb/src/sys/boot/forth/loader.conf#22 integrate .. //depot/projects/usb/src/sys/boot/i386/zfsboot/zfsboot.c#4 integrate .. //depot/projects/usb/src/sys/bsm/audit_kevents.h#15 integrate .. //depot/projects/usb/src/sys/cam/ata/ata_all.c#3 integrate .. //depot/projects/usb/src/sys/cam/ata/ata_da.c#4 integrate .. //depot/projects/usb/src/sys/cam/cam_periph.c#12 integrate .. //depot/projects/usb/src/sys/cddl/compat/opensolaris/kern/opensolaris_policy.c#6 integrate .. //depot/projects/usb/src/sys/cddl/compat/opensolaris/sys/policy.h#4 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/gfs.c#5 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c#9 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/fletcher.c#2 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h#5 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h#3 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c#5 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c#6 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c#9 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#9 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#15 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c#9 integrate .. //depot/projects/usb/src/sys/compat/freebsd32/freebsd32_proto.h#21 integrate .. //depot/projects/usb/src/sys/compat/freebsd32/freebsd32_syscall.h#20 integrate .. //depot/projects/usb/src/sys/compat/freebsd32/freebsd32_syscalls.c#20 integrate .. //depot/projects/usb/src/sys/compat/freebsd32/freebsd32_sysent.c#21 integrate .. //depot/projects/usb/src/sys/compat/freebsd32/syscalls.master#20 integrate .. //depot/projects/usb/src/sys/compat/ia32/ia32_sysvec.c#13 integrate .. //depot/projects/usb/src/sys/compat/x86bios/x86bios.c#1 branch .. //depot/projects/usb/src/sys/compat/x86bios/x86bios.h#1 branch .. //depot/projects/usb/src/sys/compat/x86bios/x86bios_alloc.c#1 branch .. //depot/projects/usb/src/sys/conf/files#82 integrate .. //depot/projects/usb/src/sys/conf/files.amd64#25 integrate .. //depot/projects/usb/src/sys/conf/files.i386#30 integrate .. //depot/projects/usb/src/sys/conf/files.pc98#20 integrate .. //depot/projects/usb/src/sys/conf/newvers.sh#13 integrate .. //depot/projects/usb/src/sys/ddb/db_ps.c#7 integrate .. //depot/projects/usb/src/sys/dev/acpi_support/acpi_aiboost.c#3 integrate .. //depot/projects/usb/src/sys/dev/acpi_support/acpi_ibm.c#10 integrate .. //depot/projects/usb/src/sys/dev/acpica/acpi.c#23 integrate .. //depot/projects/usb/src/sys/dev/acpica/acpi_acad.c#4 integrate .. //depot/projects/usb/src/sys/dev/acpica/acpi_video.c#4 integrate .. //depot/projects/usb/src/sys/dev/acpica/acpivar.h#12 integrate .. //depot/projects/usb/src/sys/dev/ae/if_ae.c#6 integrate .. //depot/projects/usb/src/sys/dev/age/if_age.c#11 integrate .. //depot/projects/usb/src/sys/dev/agp/agp_i810.c#10 integrate .. //depot/projects/usb/src/sys/dev/ahci/ahci.c#3 integrate .. //depot/projects/usb/src/sys/dev/alc/if_alc.c#5 integrate .. //depot/projects/usb/src/sys/dev/ale/if_ale.c#6 integrate .. //depot/projects/usb/src/sys/dev/ata/chipsets/ata-ati.c#4 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ah_eeprom_v4k.c#1 branch .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ah_eeprom_v4k.h#1 branch .. //depot/projects/usb/src/sys/dev/atkbdc/atkbd.c#6 integrate .. //depot/projects/usb/src/sys/dev/bge/if_bge.c#21 integrate .. //depot/projects/usb/src/sys/dev/bge/if_bgereg.h#11 integrate .. //depot/projects/usb/src/sys/dev/cxgb/common/cxgb_ael1002.c#11 integrate .. //depot/projects/usb/src/sys/dev/cxgb/common/cxgb_aq100x.c#1 branch .. //depot/projects/usb/src/sys/dev/cxgb/common/cxgb_common.h#11 integrate .. //depot/projects/usb/src/sys/dev/cxgb/common/cxgb_mv88e1xxx.c#6 integrate .. //depot/projects/usb/src/sys/dev/cxgb/common/cxgb_regs.h#4 integrate .. //depot/projects/usb/src/sys/dev/cxgb/common/cxgb_t3_hw.c#13 integrate .. //depot/projects/usb/src/sys/dev/cxgb/common/cxgb_tn1010.c#3 integrate .. //depot/projects/usb/src/sys/dev/cxgb/common/cxgb_vsc8211.c#7 integrate .. //depot/projects/usb/src/sys/dev/cxgb/common/cxgb_xgmac.c#10 integrate .. //depot/projects/usb/src/sys/dev/cxgb/cxgb_adapter.h#13 integrate .. //depot/projects/usb/src/sys/dev/cxgb/cxgb_main.c#23 integrate .. //depot/projects/usb/src/sys/dev/cxgb/cxgb_osdep.h#11 integrate .. //depot/projects/usb/src/sys/dev/cxgb/cxgb_t3fw.h#3 integrate .. //depot/projects/usb/src/sys/dev/de/if_de.c#8 integrate .. //depot/projects/usb/src/sys/dev/de/if_devar.h#4 integrate .. //depot/projects/usb/src/sys/dev/dpms/dpms.c#2 integrate .. //depot/projects/usb/src/sys/dev/drm/drm_pciids.h#12 integrate .. //depot/projects/usb/src/sys/dev/drm/i915_drv.h#10 integrate .. //depot/projects/usb/src/sys/dev/drm/r600_blit.c#3 integrate .. //depot/projects/usb/src/sys/dev/drm/radeon_cs.c#2 integrate .. //depot/projects/usb/src/sys/dev/drm/radeon_drv.h#10 integrate .. //depot/projects/usb/src/sys/dev/drm/radeon_irq.c#10 integrate .. //depot/projects/usb/src/sys/dev/drm/radeon_state.c#6 integrate .. //depot/projects/usb/src/sys/dev/fb/vesa.c#2 integrate .. //depot/projects/usb/src/sys/dev/fdc/fdc.c#9 integrate .. //depot/projects/usb/src/sys/dev/fxp/if_fxp.c#16 integrate .. //depot/projects/usb/src/sys/dev/hwpmc/pmc_events.h#7 integrate .. //depot/projects/usb/src/sys/dev/if_ndis/if_ndis.c#33 integrate .. //depot/projects/usb/src/sys/dev/jme/if_jme.c#8 integrate .. //depot/projects/usb/src/sys/dev/lindev/full.c#1 branch .. //depot/projects/usb/src/sys/dev/lindev/lindev.c#1 branch .. //depot/projects/usb/src/sys/dev/lindev/lindev.h#1 branch .. //depot/projects/usb/src/sys/dev/mii/e1000phy.c#10 integrate .. //depot/projects/usb/src/sys/dev/mii/e1000phyreg.h#6 integrate .. //depot/projects/usb/src/sys/dev/msk/if_msk.c#15 integrate .. //depot/projects/usb/src/sys/dev/msk/if_mskreg.h#10 integrate .. //depot/projects/usb/src/sys/dev/mwl/if_mwl.c#7 integrate .. //depot/projects/usb/src/sys/dev/mxge/if_mxge.c#17 integrate .. //depot/projects/usb/src/sys/dev/mxge/if_mxge_var.h#15 integrate .. //depot/projects/usb/src/sys/dev/pci/pcireg.h#15 integrate .. //depot/projects/usb/src/sys/dev/ppbus/lpt.c#9 integrate .. //depot/projects/usb/src/sys/dev/ppbus/vpo.c#9 integrate .. //depot/projects/usb/src/sys/dev/siis/siis.c#3 integrate .. //depot/projects/usb/src/sys/dev/sound/pci/hda/hda_reg.h#3 integrate .. //depot/projects/usb/src/sys/dev/sound/pci/hda/hdac.c#37 integrate .. //depot/projects/usb/src/sys/dev/syscons/scmouse.c#5 integrate .. //depot/projects/usb/src/sys/dev/syscons/scterm-teken.c#9 integrate .. //depot/projects/usb/src/sys/dev/syscons/syscons.c#16 integrate .. //depot/projects/usb/src/sys/dev/syscons/syscons.h#9 integrate .. //depot/projects/usb/src/sys/dev/twa/tw_cl_io.c#4 integrate .. //depot/projects/usb/src/sys/dev/twa/tw_cl_share.h#4 integrate .. //depot/projects/usb/src/sys/dev/twe/twe.c#5 integrate .. //depot/projects/usb/src/sys/dev/twe/twevar.h#2 integrate .. //depot/projects/usb/src/sys/dev/uart/uart_bus.h#3 integrate .. //depot/projects/usb/src/sys/dev/uart/uart_core.c#6 integrate .. //depot/projects/usb/src/sys/dev/uart/uart_tty.c#7 integrate .. //depot/projects/usb/src/sys/dev/usb/controller/atmegadci.c#40 integrate .. //depot/projects/usb/src/sys/dev/usb/controller/ehci.c#36 integrate .. //depot/projects/usb/src/sys/dev/usb/controller/ehci_pci.c#14 integrate .. //depot/projects/usb/src/sys/dev/usb/controller/usb_controller.c#34 integrate .. //depot/projects/usb/src/sys/dev/usb/input/ukbd.c#34 integrate .. //depot/projects/usb/src/sys/dev/usb/net/if_axe.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb/net/if_cdcereg.h#6 integrate .. //depot/projects/usb/src/sys/dev/usb/quirk/usb_quirk.c#8 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/u3g.c#21 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/uark.c#12 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/ubsa.c#13 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/ubser.c#16 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/uch341.c#4 branch .. //depot/projects/usb/src/sys/dev/usb/serial/uchcom.c#15 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/ucycom.c#15 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/ufoma.c#14 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/uftdi.c#16 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/ugensa.c#15 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/uipaq.c#16 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/umct.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/umodem.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/umoscom.c#13 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/uplcom.c#15 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/usb_serial.c#14 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/usb_serial.h#8 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/uslcom.c#13 integrate .. //depot/projects/usb/src/sys/dev/usb/serial/uvscom.c#13 integrate .. //depot/projects/usb/src/sys/dev/usb/storage/umass.c#34 integrate .. //depot/projects/usb/src/sys/dev/usb/usb.h#48 integrate .. //depot/projects/usb/src/sys/dev/usb/usb_bus.h#17 integrate .. //depot/projects/usb/src/sys/dev/usb/usb_cdc.h#14 integrate .. //depot/projects/usb/src/sys/dev/usb/usb_device.c#56 integrate .. //depot/projects/usb/src/sys/dev/usb/usb_device.h#32 integrate .. //depot/projects/usb/src/sys/dev/usb/usb_hub.c#34 integrate .. //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#169 integrate .. //depot/projects/usb/src/sys/dev/usb/usbdevs#81 integrate .. //depot/projects/usb/src/sys/dev/usb/wlan/if_rum.c#19 integrate .. //depot/projects/usb/src/sys/dev/usb/wlan/if_uath.c#16 integrate .. //depot/projects/usb/src/sys/dev/usb/wlan/if_upgt.c#17 integrate .. //depot/projects/usb/src/sys/dev/usb/wlan/if_ural.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb/wlan/if_urtw.c#9 integrate .. //depot/projects/usb/src/sys/dev/usb/wlan/if_zyd.c#23 integrate .. //depot/projects/usb/src/sys/dev/x86bios/x86bios.c#2 delete .. //depot/projects/usb/src/sys/dev/x86bios/x86bios.h#2 delete .. //depot/projects/usb/src/sys/dev/x86bios/x86bios_alloc.c#2 delete .. //depot/projects/usb/src/sys/fs/fifofs/fifo_vnops.c#15 integrate .. //depot/projects/usb/src/sys/fs/nfs/nfs_commonacl.c#4 integrate .. //depot/projects/usb/src/sys/fs/procfs/procfs.c#7 integrate .. //depot/projects/usb/src/sys/fs/procfs/procfs.h#2 integrate .. //depot/projects/usb/src/sys/fs/procfs/procfs_osrel.c#1 branch .. //depot/projects/usb/src/sys/fs/tmpfs/tmpfs.h#8 integrate .. //depot/projects/usb/src/sys/fs/tmpfs/tmpfs_subr.c#11 integrate .. //depot/projects/usb/src/sys/fs/tmpfs/tmpfs_vnops.c#12 integrate .. //depot/projects/usb/src/sys/geom/concat/g_concat.c#5 integrate .. //depot/projects/usb/src/sys/geom/label/g_label.c#6 integrate .. //depot/projects/usb/src/sys/geom/part/g_part.c#21 integrate .. //depot/projects/usb/src/sys/geom/part/g_part_ebr.c#7 integrate .. //depot/projects/usb/src/sys/geom/part/g_part_gpt.c#14 integrate .. //depot/projects/usb/src/sys/geom/shsec/g_shsec.c#3 integrate .. //depot/projects/usb/src/sys/geom/stripe/g_stripe.c#6 integrate .. //depot/projects/usb/src/sys/geom/uzip/g_uzip.c#3 integrate .. //depot/projects/usb/src/sys/geom/vinum/geom_vinum_create.c#3 integrate .. //depot/projects/usb/src/sys/geom/vinum/geom_vinum_events.c#3 integrate .. //depot/projects/usb/src/sys/geom/vinum/geom_vinum_init.c#5 integrate .. //depot/projects/usb/src/sys/geom/vinum/geom_vinum_move.c#4 integrate .. //depot/projects/usb/src/sys/geom/vinum/geom_vinum_rm.c#7 integrate .. //depot/projects/usb/src/sys/geom/vinum/geom_vinum_subr.c#7 integrate .. //depot/projects/usb/src/sys/i386/acpica/acpi_machdep.c#13 integrate .. //depot/projects/usb/src/sys/i386/acpica/madt.c#9 integrate .. //depot/projects/usb/src/sys/i386/conf/GENERIC#31 integrate .. //depot/projects/usb/src/sys/i386/conf/NOTES#26 integrate .. //depot/projects/usb/src/sys/i386/i386/elf_machdep.c#10 integrate .. //depot/projects/usb/src/sys/i386/i386/initcpu.c#9 integrate .. //depot/projects/usb/src/sys/i386/i386/machdep.c#23 integrate .. //depot/projects/usb/src/sys/i386/i386/vm_machdep.c#14 integrate .. //depot/projects/usb/src/sys/i386/include/acpica_machdep.h#3 integrate .. //depot/projects/usb/src/sys/i386/include/apm_bios.h#2 integrate .. //depot/projects/usb/src/sys/i386/include/atomic.h#6 integrate .. //depot/projects/usb/src/sys/i386/include/cpufunc.h#11 integrate .. //depot/projects/usb/src/sys/i386/include/elf.h#5 integrate .. //depot/projects/usb/src/sys/i386/pci/pci_cfgreg.c#7 integrate .. //depot/projects/usb/src/sys/i386/xen/xen_machdep.c#9 integrate .. //depot/projects/usb/src/sys/ia64/ia64/elf_machdep.c#10 integrate .. //depot/projects/usb/src/sys/ia64/include/elf.h#5 integrate .. //depot/projects/usb/src/sys/kern/imgact_elf.c#15 integrate .. //depot/projects/usb/src/sys/kern/init_main.c#16 integrate .. //depot/projects/usb/src/sys/kern/init_sysent.c#17 integrate .. //depot/projects/usb/src/sys/kern/kern_descrip.c#26 integrate .. //depot/projects/usb/src/sys/kern/kern_event.c#13 integrate .. //depot/projects/usb/src/sys/kern/kern_exec.c#22 integrate .. //depot/projects/usb/src/sys/kern/kern_exit.c#24 integrate .. //depot/projects/usb/src/sys/kern/kern_lock.c#20 integrate .. //depot/projects/usb/src/sys/kern/kern_proc.c#23 integrate .. //depot/projects/usb/src/sys/kern/kern_rwlock.c#18 integrate .. //depot/projects/usb/src/sys/kern/kern_sig.c#18 integrate .. //depot/projects/usb/src/sys/kern/kern_sx.c#19 integrate .. //depot/projects/usb/src/sys/kern/kern_thr.c#14 integrate .. //depot/projects/usb/src/sys/kern/kern_umtx.c#12 integrate .. //depot/projects/usb/src/sys/kern/subr_acl_posix1e.c#6 integrate .. //depot/projects/usb/src/sys/kern/subr_bus.c#31 integrate .. //depot/projects/usb/src/sys/kern/subr_trap.c#12 integrate .. //depot/projects/usb/src/sys/kern/syscalls.c#16 integrate .. //depot/projects/usb/src/sys/kern/syscalls.master#16 integrate .. //depot/projects/usb/src/sys/kern/uipc_socket.c#29 integrate .. //depot/projects/usb/src/sys/kern/uipc_syscalls.c#20 integrate .. //depot/projects/usb/src/sys/kern/uipc_usrreq.c#21 integrate .. //depot/projects/usb/src/sys/kern/vfs_acl.c#7 integrate .. //depot/projects/usb/src/sys/kern/vfs_default.c#15 integrate .. //depot/projects/usb/src/sys/kern/vfs_export.c#12 integrate .. //depot/projects/usb/src/sys/kern/vfs_subr.c#26 integrate .. //depot/projects/usb/src/sys/kern/vfs_vnops.c#23 integrate .. //depot/projects/usb/src/sys/mips/include/elf.h#4 integrate .. //depot/projects/usb/src/sys/mips/mips/elf64_machdep.c#4 integrate .. //depot/projects/usb/src/sys/mips/mips/elf_machdep.c#8 integrate .. //depot/projects/usb/src/sys/modules/Makefile#44 integrate .. //depot/projects/usb/src/sys/modules/acpi/acpi/Makefile#10 integrate .. //depot/projects/usb/src/sys/modules/cxgb/cxgb/Makefile#8 integrate .. //depot/projects/usb/src/sys/modules/lindev/Makefile#1 branch .. //depot/projects/usb/src/sys/modules/nfsclient/Makefile#8 integrate .. //depot/projects/usb/src/sys/modules/nfslockd/Makefile#4 integrate .. //depot/projects/usb/src/sys/modules/pf/Makefile#7 integrate .. //depot/projects/usb/src/sys/modules/procfs/Makefile#3 integrate .. //depot/projects/usb/src/sys/modules/ubser/Makefile#6 integrate .. //depot/projects/usb/src/sys/modules/usb/Makefile#22 integrate .. //depot/projects/usb/src/sys/modules/usb/uch341/Makefile#3 branch .. //depot/projects/usb/src/sys/modules/x86bios/Makefile#2 integrate .. //depot/projects/usb/src/sys/net/flowtable.c#12 integrate .. //depot/projects/usb/src/sys/net/flowtable.h#8 integrate .. //depot/projects/usb/src/sys/net/if_bridge.c#20 integrate .. //depot/projects/usb/src/sys/net/if_enc.c#10 integrate .. //depot/projects/usb/src/sys/net/if_ethersubr.c#24 integrate .. //depot/projects/usb/src/sys/net/pfil.c#4 integrate .. //depot/projects/usb/src/sys/net/route.c#25 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211.h#18 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_hwmp.c#4 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_mesh.c#4 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_mesh.h#4 integrate .. //depot/projects/usb/src/sys/netgraph/ng_bridge.c#6 integrate .. //depot/projects/usb/src/sys/netinet/in.c#37 integrate .. //depot/projects/usb/src/sys/netinet/ip_fastfwd.c#15 integrate .. //depot/projects/usb/src/sys/netinet/ip_icmp.c#20 integrate .. //depot/projects/usb/src/sys/netinet/ip_input.c#31 integrate .. //depot/projects/usb/src/sys/netinet/ip_output.c#29 integrate .. //depot/projects/usb/src/sys/netinet/ip_var.h#15 integrate .. //depot/projects/usb/src/sys/netinet/ipfw/ip_fw2.c#12 integrate .. //depot/projects/usb/src/sys/netinet/ipfw/ip_fw_pfil.c#5 integrate .. //depot/projects/usb/src/sys/netinet/raw_ip.c#30 integrate .. //depot/projects/usb/src/sys/netinet/sctp_bsd_addr.c#13 integrate .. //depot/projects/usb/src/sys/netinet/sctp_os_bsd.h#21 integrate .. //depot/projects/usb/src/sys/netinet/sctp_output.c#24 integrate .. //depot/projects/usb/src/sys/netinet/sctp_pcb.c#20 integrate .. //depot/projects/usb/src/sys/netinet/tcp_input.c#29 integrate .. //depot/projects/usb/src/sys/netinet6/icmp6.c#28 integrate .. //depot/projects/usb/src/sys/netinet6/in6_ifattach.c#31 integrate .. //depot/projects/usb/src/sys/netinet6/ip6_forward.c#15 integrate .. //depot/projects/usb/src/sys/netinet6/ip6_input.c#31 integrate .. //depot/projects/usb/src/sys/netinet6/ip6_output.c#21 integrate .. //depot/projects/usb/src/sys/netinet6/ip6_var.h#17 integrate .. //depot/projects/usb/src/sys/netipsec/xform_esp.c#12 integrate .. //depot/projects/usb/src/sys/nfsclient/nfs_kdtrace.c#3 integrate .. //depot/projects/usb/src/sys/nfsserver/nfs_serv.c#17 integrate .. //depot/projects/usb/src/sys/nlm/nlm.h#5 integrate .. //depot/projects/usb/src/sys/nlm/nlm_prot_impl.c#9 integrate .. //depot/projects/usb/src/sys/nlm/nlm_prot_server.c#4 integrate .. //depot/projects/usb/src/sys/pc98/conf/GENERIC#22 integrate .. //depot/projects/usb/src/sys/pc98/conf/NOTES#18 integrate .. //depot/projects/usb/src/sys/powerpc/aim/swtch.S#6 integrate .. //depot/projects/usb/src/sys/powerpc/aim/trap_subr.S#7 integrate .. //depot/projects/usb/src/sys/powerpc/include/elf.h#5 integrate .. //depot/projects/usb/src/sys/powerpc/powerpc/elf_machdep.c#8 integrate .. //depot/projects/usb/src/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c#4 integrate .. //depot/projects/usb/src/sys/sparc64/conf/GENERIC#24 integrate .. //depot/projects/usb/src/sys/sparc64/include/elf.h#5 integrate .. //depot/projects/usb/src/sys/sparc64/sparc64/elf_machdep.c#10 integrate .. //depot/projects/usb/src/sys/sun4v/include/elf.h#4 integrate .. //depot/projects/usb/src/sys/sys/ata.h#6 integrate .. //depot/projects/usb/src/sys/sys/errno.h#2 integrate .. //depot/projects/usb/src/sys/sys/event.h#8 integrate .. //depot/projects/usb/src/sys/sys/fcntl.h#6 integrate .. //depot/projects/usb/src/sys/sys/param.h#46 integrate .. //depot/projects/usb/src/sys/sys/pmc.h#8 integrate .. //depot/projects/usb/src/sys/sys/rwlock.h#12 integrate .. //depot/projects/usb/src/sys/sys/signalvar.h#5 integrate .. //depot/projects/usb/src/sys/sys/sx.h#12 integrate .. //depot/projects/usb/src/sys/sys/syscall.h#16 integrate .. //depot/projects/usb/src/sys/sys/syscall.mk#16 integrate .. //depot/projects/usb/src/sys/sys/sysproto.h#17 integrate .. //depot/projects/usb/src/sys/sys/vnode.h#26 integrate .. //depot/projects/usb/src/sys/teken/sequences#2 integrate .. //depot/projects/usb/src/sys/teken/teken.c#3 integrate .. //depot/projects/usb/src/sys/teken/teken.h#3 integrate .. //depot/projects/usb/src/sys/teken/teken_demo.c#3 integrate .. //depot/projects/usb/src/sys/teken/teken_scs.h#2 integrate .. //depot/projects/usb/src/sys/teken/teken_stress.c#2 integrate .. //depot/projects/usb/src/sys/teken/teken_subr.h#3 integrate .. //depot/projects/usb/src/sys/teken/teken_subr_compat.h#3 integrate .. //depot/projects/usb/src/sys/ufs/ufs/ufs_gjournal.c#4 integrate .. //depot/projects/usb/src/sys/vm/vm_map.c#20 integrate .. //depot/projects/usb/src/sys/vm/vm_mmap.c#22 integrate .. //depot/projects/usb/src/sys/vm/vm_page.c#20 integrate .. //depot/projects/usb/src/sys/vm/vm_page.h#13 integrate Differences ... ==== //depot/projects/usb/src/sys/amd64/acpica/acpi_machdep.c#6 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/acpica/acpi_machdep.c,v 1.21 2009/06/05 18:44:36 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/acpica/acpi_machdep.c,v 1.24 2009/10/08 17:41:53 jkim Exp $"); #include #include @@ -33,12 +33,35 @@ #include #include +#include +#include + #include +#include +#include #include #include +/* + * APM driver emulation + */ + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include + SYSCTL_DECL(_debug_acpi); int acpi_resume_beep; @@ -50,7 +73,432 @@ TUNABLE_INT("hw.acpi.reset_video", &acpi_reset_video); static int intr_model = ACPI_INTR_PIC; -static struct apm_clone_data acpi_clone; +static int apm_active; +static struct clonedevs *apm_clones; + +MALLOC_DEFINE(M_APMDEV, "apmdev", "APM device emulation"); + +static d_open_t apmopen; +static d_close_t apmclose; +static d_write_t apmwrite; +static d_ioctl_t apmioctl; +static d_poll_t apmpoll; +static d_kqfilter_t apmkqfilter; +static void apmreadfiltdetach(struct knote *kn); +static int apmreadfilt(struct knote *kn, long hint); +static struct filterops apm_readfiltops = { + .f_isfd = 1, + .f_detach = apmreadfiltdetach, + .f_event = apmreadfilt, +}; + +static struct cdevsw apm_cdevsw = { + .d_version = D_VERSION, + .d_flags = D_TRACKCLOSE | D_NEEDMINOR, + .d_open = apmopen, + .d_close = apmclose, + .d_write = apmwrite, + .d_ioctl = apmioctl, + .d_poll = apmpoll, + .d_name = "apm", + .d_kqfilter = apmkqfilter +}; + +static int +acpi_capm_convert_battstate(struct acpi_battinfo *battp) +{ + int state; + + state = APM_UNKNOWN; + + if (battp->state & ACPI_BATT_STAT_DISCHARG) { + if (battp->cap >= 50) + state = 0; /* high */ + else + state = 1; /* low */ + } + if (battp->state & ACPI_BATT_STAT_CRITICAL) + state = 2; /* critical */ + if (battp->state & ACPI_BATT_STAT_CHARGING) + state = 3; /* charging */ + + /* If still unknown, determine it based on the battery capacity. */ + if (state == APM_UNKNOWN) { + if (battp->cap >= 50) + state = 0; /* high */ + else + state = 1; /* low */ + } + + return (state); +} + +static int +acpi_capm_convert_battflags(struct acpi_battinfo *battp) +{ + int flags; + + flags = 0; + + if (battp->cap >= 50) + flags |= APM_BATT_HIGH; + else { + if (battp->state & ACPI_BATT_STAT_CRITICAL) + flags |= APM_BATT_CRITICAL; + else + flags |= APM_BATT_LOW; + } + if (battp->state & ACPI_BATT_STAT_CHARGING) + flags |= APM_BATT_CHARGING; + if (battp->state == ACPI_BATT_STAT_NOT_PRESENT) + flags = APM_BATT_NOT_PRESENT; + + return (flags); +} + +static int +acpi_capm_get_info(apm_info_t aip) +{ + int acline; + struct acpi_battinfo batt; + + aip->ai_infoversion = 1; + aip->ai_major = 1; + aip->ai_minor = 2; + aip->ai_status = apm_active; + aip->ai_capabilities= 0xff00; /* unknown */ + + if (acpi_acad_get_acline(&acline)) + aip->ai_acline = APM_UNKNOWN; /* unknown */ + else + aip->ai_acline = acline; /* on/off */ + + if (acpi_battery_get_battinfo(NULL, &batt) != 0) { + aip->ai_batt_stat = APM_UNKNOWN; + aip->ai_batt_life = APM_UNKNOWN; + aip->ai_batt_time = -1; /* unknown */ + aip->ai_batteries = ~0U; /* unknown */ + } else { + aip->ai_batt_stat = acpi_capm_convert_battstate(&batt); + aip->ai_batt_life = batt.cap; + aip->ai_batt_time = (batt.min == -1) ? -1 : batt.min * 60; + aip->ai_batteries = acpi_battery_get_units(); + } + + return (0); +} + +static int +acpi_capm_get_pwstatus(apm_pwstatus_t app) +{ + device_t dev; + int acline, unit, error; + struct acpi_battinfo batt; + + if (app->ap_device != PMDV_ALLDEV && + (app->ap_device < PMDV_BATT0 || app->ap_device > PMDV_BATT_ALL)) + return (1); + + if (app->ap_device == PMDV_ALLDEV) + error = acpi_battery_get_battinfo(NULL, &batt); + else { + unit = app->ap_device - PMDV_BATT0; + dev = devclass_get_device(devclass_find("battery"), unit); + if (dev != NULL) + error = acpi_battery_get_battinfo(dev, &batt); + else + error = ENXIO; + } + if (error) + return (1); + + app->ap_batt_stat = acpi_capm_convert_battstate(&batt); + app->ap_batt_flag = acpi_capm_convert_battflags(&batt); + app->ap_batt_life = batt.cap; + app->ap_batt_time = (batt.min == -1) ? -1 : batt.min * 60; + + if (acpi_acad_get_acline(&acline)) + app->ap_acline = APM_UNKNOWN; + else + app->ap_acline = acline; /* on/off */ + + return (0); +} + +/* Create single-use devices for /dev/apm and /dev/apmctl. */ +static void +apm_clone(void *arg, struct ucred *cred, char *name, int namelen, + struct cdev **dev) +{ + int ctl_dev, unit; + + if (*dev != NULL) + return; + if (strcmp(name, "apmctl") == 0) + ctl_dev = TRUE; + else if (strcmp(name, "apm") == 0) + ctl_dev = FALSE; + else + return; + + /* Always create a new device and unit number. */ + unit = -1; + if (clone_create(&apm_clones, &apm_cdevsw, &unit, dev, 0)) { + if (ctl_dev) { + *dev = make_dev(&apm_cdevsw, unit, + UID_ROOT, GID_OPERATOR, 0660, "apmctl%d", unit); + } else { + *dev = make_dev(&apm_cdevsw, unit, + UID_ROOT, GID_OPERATOR, 0664, "apm%d", unit); + } + if (*dev != NULL) { + dev_ref(*dev); + (*dev)->si_flags |= SI_CHEAPCLONE; + } + } +} + +/* Create a struct for tracking per-device suspend notification. */ +static struct apm_clone_data * +apm_create_clone(struct cdev *dev, struct acpi_softc *acpi_sc) +{ + struct apm_clone_data *clone; + + clone = malloc(sizeof(*clone), M_APMDEV, M_WAITOK); + clone->cdev = dev; + clone->acpi_sc = acpi_sc; + clone->notify_status = APM_EV_NONE; + bzero(&clone->sel_read, sizeof(clone->sel_read)); + knlist_init_mtx(&clone->sel_read.si_note, &acpi_mutex); + + /* + * The acpi device is always managed by devd(8) and is considered + * writable (i.e., ack is required to allow suspend to proceed.) + */ + if (strcmp("acpi", devtoname(dev)) == 0) + clone->flags = ACPI_EVF_DEVD | ACPI_EVF_WRITE; + else + clone->flags = ACPI_EVF_NONE; + + ACPI_LOCK(acpi); + STAILQ_INSERT_TAIL(&acpi_sc->apm_cdevs, clone, entries); + ACPI_UNLOCK(acpi); + return (clone); +} + +static int +apmopen(struct cdev *dev, int flag, int fmt, struct thread *td) +{ + struct acpi_softc *acpi_sc; + struct apm_clone_data *clone; + + acpi_sc = devclass_get_softc(devclass_find("acpi"), 0); + clone = apm_create_clone(dev, acpi_sc); + dev->si_drv1 = clone; + + /* If the device is opened for write, record that. */ + if ((flag & FWRITE) != 0) + clone->flags |= ACPI_EVF_WRITE; + + return (0); +} + +static int +apmclose(struct cdev *dev, int flag, int fmt, struct thread *td) +{ + struct apm_clone_data *clone; + struct acpi_softc *acpi_sc; + + clone = dev->si_drv1; + acpi_sc = clone->acpi_sc; + + /* We are about to lose a reference so check if suspend should occur */ + if (acpi_sc->acpi_next_sstate != 0 && + clone->notify_status != APM_EV_ACKED) + acpi_AckSleepState(clone, 0); + + /* Remove this clone's data from the list and free it. */ + ACPI_LOCK(acpi); + STAILQ_REMOVE(&acpi_sc->apm_cdevs, clone, apm_clone_data, entries); + knlist_destroy(&clone->sel_read.si_note); + ACPI_UNLOCK(acpi); + free(clone, M_APMDEV); + destroy_dev_sched(dev); + return (0); +} + +static int +apmioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread *td) +{ + int error; + struct apm_clone_data *clone; + struct acpi_softc *acpi_sc; + struct apm_info info; + struct apm_event_info *ev_info; + apm_info_old_t aiop; + + error = 0; + clone = dev->si_drv1; + acpi_sc = clone->acpi_sc; + + switch (cmd) { + case APMIO_SUSPEND: + if ((flag & FWRITE) == 0) + return (EPERM); + if (acpi_sc->acpi_next_sstate == 0) { + if (acpi_sc->acpi_suspend_sx != ACPI_STATE_S5) { + error = acpi_ReqSleepState(acpi_sc, + acpi_sc->acpi_suspend_sx); + } else { + printf( + "power off via apm suspend not supported\n"); + error = ENXIO; + } + } else + error = acpi_AckSleepState(clone, 0); + break; + case APMIO_STANDBY: + if ((flag & FWRITE) == 0) + return (EPERM); + if (acpi_sc->acpi_next_sstate == 0) { + if (acpi_sc->acpi_standby_sx != ACPI_STATE_S5) { + error = acpi_ReqSleepState(acpi_sc, + acpi_sc->acpi_standby_sx); + } else { + printf( + "power off via apm standby not supported\n"); + error = ENXIO; + } + } else + error = acpi_AckSleepState(clone, 0); + break; + case APMIO_NEXTEVENT: + printf("apm nextevent start\n"); + ACPI_LOCK(acpi); + if (acpi_sc->acpi_next_sstate != 0 && clone->notify_status == + APM_EV_NONE) { + ev_info = (struct apm_event_info *)addr; + if (acpi_sc->acpi_next_sstate <= ACPI_STATE_S3) + ev_info->type = PMEV_STANDBYREQ; + else + ev_info->type = PMEV_SUSPENDREQ; + ev_info->index = 0; + clone->notify_status = APM_EV_NOTIFIED; + printf("apm event returning %d\n", ev_info->type); + } else + error = EAGAIN; + ACPI_UNLOCK(acpi); + break; + case APMIO_GETINFO_OLD: + if (acpi_capm_get_info(&info)) + error = ENXIO; + aiop = (apm_info_old_t)addr; + aiop->ai_major = info.ai_major; + aiop->ai_minor = info.ai_minor; + aiop->ai_acline = info.ai_acline; + aiop->ai_batt_stat = info.ai_batt_stat; + aiop->ai_batt_life = info.ai_batt_life; + aiop->ai_status = info.ai_status; + break; + case APMIO_GETINFO: + if (acpi_capm_get_info((apm_info_t)addr)) + error = ENXIO; + break; + case APMIO_GETPWSTATUS: + if (acpi_capm_get_pwstatus((apm_pwstatus_t)addr)) + error = ENXIO; + break; + case APMIO_ENABLE: + if ((flag & FWRITE) == 0) + return (EPERM); + apm_active = 1; + break; + case APMIO_DISABLE: + if ((flag & FWRITE) == 0) + return (EPERM); + apm_active = 0; + break; + case APMIO_HALTCPU: + break; + case APMIO_NOTHALTCPU: + break; + case APMIO_DISPLAY: + if ((flag & FWRITE) == 0) + return (EPERM); + break; + case APMIO_BIOS: + if ((flag & FWRITE) == 0) + return (EPERM); + bzero(addr, sizeof(struct apm_bios_arg)); + break; + default: + error = EINVAL; + break; + } + + return (error); +} + +static int +apmwrite(struct cdev *dev, struct uio *uio, int ioflag) +{ + return (uio->uio_resid); +} + +static int +apmpoll(struct cdev *dev, int events, struct thread *td) +{ + struct apm_clone_data *clone; + int revents; + + revents = 0; + ACPI_LOCK(acpi); + clone = dev->si_drv1; + if (clone->acpi_sc->acpi_next_sstate) + revents |= events & (POLLIN | POLLRDNORM); + else + selrecord(td, &clone->sel_read); + ACPI_UNLOCK(acpi); + return (revents); +} + +static int +apmkqfilter(struct cdev *dev, struct knote *kn) +{ + struct apm_clone_data *clone; + + ACPI_LOCK(acpi); + clone = dev->si_drv1; + kn->kn_hook = clone; + kn->kn_fop = &apm_readfiltops; + knlist_add(&clone->sel_read.si_note, kn, 0); + ACPI_UNLOCK(acpi); + return (0); +} + +static void +apmreadfiltdetach(struct knote *kn) +{ + struct apm_clone_data *clone; + + ACPI_LOCK(acpi); + clone = kn->kn_hook; + knlist_remove(&clone->sel_read.si_note, kn, 0); + ACPI_UNLOCK(acpi); +} + +static int +apmreadfilt(struct knote *kn, long hint) +{ + struct apm_clone_data *clone; + int sleeping; + + ACPI_LOCK(acpi); + clone = kn->kn_hook; + sleeping = clone->acpi_sc->acpi_next_sstate ? 1 : 0; + ACPI_UNLOCK(acpi); + return (sleeping); +} int acpi_machdep_init(device_t dev) @@ -59,15 +507,11 @@ sc = devclass_get_softc(devclass_find("acpi"), 0); - /* Create a fake clone for /dev/acpi. */ + /* Create a clone for /dev/acpi also. */ STAILQ_INIT(&sc->apm_cdevs); - acpi_clone.cdev = sc->acpi_dev_t; - acpi_clone.acpi_sc = sc; - ACPI_LOCK(acpi); - STAILQ_INSERT_TAIL(&sc->apm_cdevs, &acpi_clone, entries); - ACPI_UNLOCK(acpi); - sc->acpi_clone = &acpi_clone; - acpi_install_wakeup_handler(sc); + sc->acpi_clone = apm_create_clone(sc->acpi_dev_t, sc); + clone_setup(&apm_clones); + EVENTHANDLER_REGISTER(dev_clone, apm_clone, 0, 1000); if (intr_model != ACPI_INTR_PIC) acpi_SetIntrModel(intr_model); @@ -100,6 +544,246 @@ } /* + * Support for mapping ACPI tables during early boot. Currently this + * uses the crashdump map to map each table. However, the crashdump + * map is created in pmap_bootstrap() right after the direct map, so + * we should be able to just use pmap_mapbios() here instead. + * + * This makes the following assumptions about how we use this KVA: + * pages 0 and 1 are used to map in the header of each table found via + * the RSDT or XSDT and pages 2 to n are used to map in the RSDT or + * XSDT. This has to use 2 pages for the table headers in case a + * header spans a page boundary. + * + * XXX: We don't ensure the table fits in the available address space + * in the crashdump map. + */ + +/* + * Map some memory using the crashdump map. 'offset' is an offset in + * pages into the crashdump map to use for the start of the mapping. + */ +static void * +table_map(vm_paddr_t pa, int offset, vm_offset_t length) +{ + vm_offset_t va, off; + void *data; + + off = pa & PAGE_MASK; + length = roundup(length + off, PAGE_SIZE); + pa = pa & PG_FRAME; + va = (vm_offset_t)pmap_kenter_temporary(pa, offset) + + (offset * PAGE_SIZE); + data = (void *)(va + off); + length -= PAGE_SIZE; + while (length > 0) { + va += PAGE_SIZE; + pa += PAGE_SIZE; + length -= PAGE_SIZE; + pmap_kenter(va, pa); + invlpg(va); + } + return (data); +} + +/* Unmap memory previously mapped with table_map(). */ +static void +table_unmap(void *data, vm_offset_t length) +{ + vm_offset_t va, off; + + va = (vm_offset_t)data; + off = va & PAGE_MASK; + length = roundup(length + off, PAGE_SIZE); + va &= ~PAGE_MASK; + while (length > 0) { + pmap_kremove(va); + invlpg(va); + va += PAGE_SIZE; + length -= PAGE_SIZE; + } +} + +/* + * Map a table at a given offset into the crashdump map. It first + * maps the header to determine the table length and then maps the + * entire table. + */ +static void * +map_table(vm_paddr_t pa, int offset, const char *sig) +{ + ACPI_TABLE_HEADER *header; + vm_offset_t length; + void *table; + + header = table_map(pa, offset, sizeof(ACPI_TABLE_HEADER)); + if (strncmp(header->Signature, sig, ACPI_NAME_SIZE) != 0) { + table_unmap(header, sizeof(ACPI_TABLE_HEADER)); + return (NULL); + } + length = header->Length; + table_unmap(header, sizeof(ACPI_TABLE_HEADER)); + table = table_map(pa, offset, length); + if (ACPI_FAILURE(AcpiTbChecksum(table, length))) { + if (bootverbose) + printf("ACPI: Failed checksum for table %s\n", sig); + table_unmap(table, length); + return (NULL); + } + return (table); +} + +/* + * See if a given ACPI table is the requested table. Returns the + * length of the able if it matches or zero on failure. + */ +static int +probe_table(vm_paddr_t address, const char *sig) +{ + ACPI_TABLE_HEADER *table; + + table = table_map(address, 0, sizeof(ACPI_TABLE_HEADER)); + if (table == NULL) { + if (bootverbose) + printf("ACPI: Failed to map table at 0x%jx\n", + (uintmax_t)address); + return (0); + } + if (bootverbose) + printf("Table '%.4s' at 0x%jx\n", table->Signature, + (uintmax_t)address); + + if (strncmp(table->Signature, sig, ACPI_NAME_SIZE) != 0) { + table_unmap(table, sizeof(ACPI_TABLE_HEADER)); + return (0); + } + table_unmap(table, sizeof(ACPI_TABLE_HEADER)); + return (1); +} + +/* + * Try to map a table at a given physical address previously returned + * by acpi_find_table(). + */ +void * +acpi_map_table(vm_paddr_t pa, const char *sig) +{ + + return (map_table(pa, 0, sig)); +} + +/* Unmap a table previously mapped via acpi_map_table(). */ +void +acpi_unmap_table(void *table) +{ + ACPI_TABLE_HEADER *header; + + header = (ACPI_TABLE_HEADER *)table; + table_unmap(table, header->Length); +} + +/* + * Return the physical address of the requested table or zero if one + * is not found. + */ +vm_paddr_t +acpi_find_table(const char *sig) +{ + ACPI_PHYSICAL_ADDRESS rsdp_ptr; + ACPI_TABLE_RSDP *rsdp; + ACPI_TABLE_RSDT *rsdt; + ACPI_TABLE_XSDT *xsdt; >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Thu Oct 15 12:16:04 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B495D1065676; Thu, 15 Oct 2009 12:16:04 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7907A1065670 for ; Thu, 15 Oct 2009 12:16:04 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 66CB58FC17 for ; Thu, 15 Oct 2009 12:16:04 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9FCG4aY005951 for ; Thu, 15 Oct 2009 12:16:04 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9FCG4F6005949 for perforce@freebsd.org; Thu, 15 Oct 2009 12:16:04 GMT (envelope-from mav@freebsd.org) Date: Thu, 15 Oct 2009 12:16:04 GMT Message-Id: <200910151216.n9FCG4F6005949@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169516 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Oct 2009 12:16:05 -0000 http://p4web.freebsd.org/chv.cgi?CH=169516 Change 169516 by mav@mav_mavtest on 2009/10/15 12:15:49 Use only cam_periph_acquire() instead of cam_periph_hold() on init and device reset async. We can't sleep in async handler. Affected files ... .. //depot/projects/scottl-camlock/src/sys/cam/ata/ata_da.c#29 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/cam/ata/ata_da.c#29 (text+ko) ==== @@ -555,13 +555,16 @@ { struct ada_softc *softc = (struct ada_softc *)periph->softc; + cam_periph_async(periph, code, path, arg); + if (softc->state != ADA_STATE_NORMAL) + break; /* * Restore device configuration. */ softc->state = ADA_STATE_SET_MULTI; - (void)cam_periph_hold(periph, PRIBIO); + cam_periph_acquire(periph); xpt_schedule(periph, CAM_PRIORITY_DEV); - /* FALLTHROUGH*/ + break; } default: cam_periph_async(periph, code, path, arg); @@ -737,7 +740,7 @@ * to finish the probe. The reference will be dropped in adadone at * the end of probe. */ - (void)cam_periph_hold(periph, PRIBIO); + cam_periph_acquire(periph); xpt_schedule(periph, CAM_PRIORITY_DEV); /* @@ -1020,7 +1023,11 @@ * operation. */ xpt_release_ccb(done_ccb); - cam_periph_unhold(periph); + if (bioq_first(&softc->bio_queue) != NULL) { + /* Have more work to do, so ensure we stay scheduled */ + xpt_schedule(periph, CAM_PRIORITY_NORMAL); + } + cam_periph_release_locked(periph); return; } case ADA_CCB_DUMP: From owner-p4-projects@FreeBSD.ORG Thu Oct 15 13:42:31 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1BE251065696; Thu, 15 Oct 2009 13:42:31 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D405F106568D for ; Thu, 15 Oct 2009 13:42:30 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id C14588FC20 for ; Thu, 15 Oct 2009 13:42:30 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9FDgUMr023284 for ; Thu, 15 Oct 2009 13:42:30 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9FDgUNw023282 for perforce@freebsd.org; Thu, 15 Oct 2009 13:42:30 GMT (envelope-from mav@freebsd.org) Date: Thu, 15 Oct 2009 13:42:30 GMT Message-Id: <200910151342.n9FDgUNw023282@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169517 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Oct 2009 13:42:31 -0000 http://p4web.freebsd.org/chv.cgi?CH=169517 Change 169517 by mav@mav_mavtest on 2009/10/15 13:41:46 Make PMP to freeze child devices while resetting/scanning. Affected files ... .. //depot/projects/scottl-camlock/src/sys/cam/ata/ata_pmp.c#8 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/cam/ata/ata_pmp.c#8 (text+ko) ==== @@ -93,6 +93,7 @@ int pm_step; int pm_try; int found; + int frozen; union ccb saved_ccb; struct task sysctl_task; struct sysctl_ctx_list sysctl_ctx; @@ -158,6 +159,49 @@ } static void +pmpfreeze(struct cam_periph *periph, int mask) +{ + struct pmp_softc *softc = (struct pmp_softc *)periph->softc; + struct cam_path *dpath; + int i; + + for (i = 0; i < 15; i++) { + if ((mask & (1 << i)) == 0) + continue; + if (xpt_create_path(&dpath, periph, + xpt_path_path_id(periph->path), + i, 0) == CAM_REQ_CMP) { +printf("PMP freeze: %d\n", i); + softc->frozen |= (1 << i); + cam_freeze_devq(dpath); + xpt_free_path(dpath); + } + } +} + +static void +pmprelease(struct cam_periph *periph, int mask) +{ + struct pmp_softc *softc = (struct pmp_softc *)periph->softc; + struct cam_path *dpath; + int i; + + mask &= softc->frozen; + for (i = 0; i < 15; i++) { + if ((mask & (1 << i)) == 0) + continue; + if (xpt_create_path(&dpath, periph, + xpt_path_path_id(periph->path), + i, 0) == CAM_REQ_CMP) { +printf("PMP release: %d\n", i); + softc->frozen &= ~(1 << i); + cam_release_devq(dpath, 0, 0, 0, FALSE); + xpt_free_path(dpath); + } + } +} + +static void pmponinvalidate(struct cam_periph *periph) { struct pmp_softc *softc; @@ -249,6 +293,7 @@ cam_periph_async(periph, code, path, arg); if (softc->state != PMP_STATE_NORMAL) break; + pmpfreeze(periph, softc->found); if (code == AC_SENT_BDR || code == AC_BUS_RESET) softc->found = 0; /* We have to reset everything. */ softc->state = PMP_STATE_PORTS; @@ -677,11 +722,13 @@ work_ccb->ccb_h.ppriv_ptr0 = done_ccb; work_ccb->crcn.flags = done_ccb->crcn.flags; xpt_action(work_ccb); + pmprelease(periph, 1 << softc->pm_step); return; default: break; } softc->state = PMP_STATE_NORMAL; + pmprelease(periph, -1); cam_periph_release_locked(periph); } From owner-p4-projects@FreeBSD.ORG Thu Oct 15 13:50:39 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 726E31065672; Thu, 15 Oct 2009 13:50:39 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 370F6106566C for ; Thu, 15 Oct 2009 13:50:39 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 0B3038FC12 for ; Thu, 15 Oct 2009 13:50:39 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9FDocYX023858 for ; Thu, 15 Oct 2009 13:50:38 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9FDocrQ023856 for perforce@freebsd.org; Thu, 15 Oct 2009 13:50:38 GMT (envelope-from mav@freebsd.org) Date: Thu, 15 Oct 2009 13:50:38 GMT Message-Id: <200910151350.n9FDocrQ023856@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169518 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Oct 2009 13:50:39 -0000 http://p4web.freebsd.org/chv.cgi?CH=169518 Change 169518 by mav@mav_mavtest on 2009/10/15 13:50:22 Do not freeze device if somehow happen. Affected files ... .. //depot/projects/scottl-camlock/src/sys/cam/ata/ata_pmp.c#9 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/cam/ata/ata_pmp.c#9 (text+ko) ==== @@ -165,6 +165,7 @@ struct cam_path *dpath; int i; + mask &= ~softc->frozen; for (i = 0; i < 15; i++) { if ((mask & (1 << i)) == 0) continue; From owner-p4-projects@FreeBSD.ORG Thu Oct 15 14:07:57 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id F1D041065695; Thu, 15 Oct 2009 14:07:56 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AECF5106568F for ; Thu, 15 Oct 2009 14:07:56 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 9C5588FC1A for ; Thu, 15 Oct 2009 14:07:56 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9FE7u6m026127 for ; Thu, 15 Oct 2009 14:07:56 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9FE7uWq026125 for perforce@freebsd.org; Thu, 15 Oct 2009 14:07:56 GMT (envelope-from mav@freebsd.org) Date: Thu, 15 Oct 2009 14:07:56 GMT Message-Id: <200910151407.n9FE7uWq026125@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169519 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Oct 2009 14:07:57 -0000 http://p4web.freebsd.org/chv.cgi?CH=169519 Change 169519 by mav@mav_mavtest on 2009/10/15 14:07:09 Clean debug messages a bit. Affected files ... .. //depot/projects/scottl-camlock/src/sys/cam/ata/ata_pmp.c#10 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/cam/ata/ata_pmp.c#10 (text+ko) ==== @@ -443,8 +443,8 @@ pmp_default_timeout * 1000); ata_pm_write_cmd(ataio, 2, softc->pm_step, (softc->found & (1 << softc->pm_step)) ? 0 : 1); -printf("PM RESET %d %04x %d\n", softc->pm_step, softc->found, - (softc->found & (1 << softc->pm_step)) ? 0 : 1); +printf("PM RESET %d%s\n", softc->pm_step, + (softc->found & (1 << softc->pm_step)) ? " skipping" : ""); break; case PMP_STATE_CONNECT: cam_fill_ataio(ataio, @@ -706,7 +706,6 @@ xpt_release_ccb(done_ccb); break; } -printf("XXX: scan %d %p %p\n", softc->pm_step, done_ccb, softc); if (xpt_create_path(&dpath, periph, done_ccb->ccb_h.path_id, softc->pm_step, 0) != CAM_REQ_CMP) { From owner-p4-projects@FreeBSD.ORG Thu Oct 15 15:48:38 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id BEF3E1065692; Thu, 15 Oct 2009 15:48:37 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8304B1065672 for ; Thu, 15 Oct 2009 15:48:37 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 6F2028FC17 for ; Thu, 15 Oct 2009 15:48:37 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9FFmb7d034549 for ; Thu, 15 Oct 2009 15:48:37 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9FFmbHP034547 for perforce@freebsd.org; Thu, 15 Oct 2009 15:48:37 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Thu, 15 Oct 2009 15:48:37 GMT Message-Id: <200910151548.n9FFmbHP034547@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169523 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Oct 2009 15:48:38 -0000 http://p4web.freebsd.org/chv.cgi?CH=169523 Change 169523 by rwatson@rwatson_cinnamon on 2009/10/15 15:48:00 Add __BEGIN_DECLS/__END_DECLS to capability.h to make it (more) C++-friendly. Submitted by: Jonathan Anderson Affected files ... .. //depot/projects/trustedbsd/capabilities/src/sys/sys/capability.h#25 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/sys/sys/capability.h#25 (text+ko) ==== @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/trustedbsd/capabilities/src/sys/sys/capability.h#24 $ + * $P4: //depot/projects/trustedbsd/capabilities/src/sys/sys/capability.h#25 $ */ /* @@ -39,6 +39,7 @@ #ifndef _SYS_CAPABILITY_H_ #define _SYS_CAPABILITY_H_ +#include #include /* @@ -159,6 +160,7 @@ #else /* !_KERNEL */ +__BEGIN_DECLS /* * cap_enter(): Cause the process to enter capability mode, which will * prevent it from directly accessing global namespaces. System calls will @@ -183,6 +185,7 @@ * cap_getrights(): Query the rights on a capability. */ int cap_getrights(int fd, cap_rights_t *rightsp); +__END_DECLS #endif /* !_KERNEL */ From owner-p4-projects@FreeBSD.ORG Thu Oct 15 16:36:25 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 91EAE1065679; Thu, 15 Oct 2009 16:36:25 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 566801065672 for ; Thu, 15 Oct 2009 16:36:25 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 42E5D8FC15 for ; Thu, 15 Oct 2009 16:36:25 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9FGaPjL039060 for ; Thu, 15 Oct 2009 16:36:25 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9FGaP9D039058 for perforce@freebsd.org; Thu, 15 Oct 2009 16:36:25 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Thu, 15 Oct 2009 16:36:25 GMT Message-Id: <200910151636.n9FGaP9D039058@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169524 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Oct 2009 16:36:25 -0000 http://p4web.freebsd.org/chv.cgi?CH=169524 Change 169524 by rwatson@rwatson_cinnamon on 2009/10/15 16:36:04 Clean up fexec test tool, no dependence on uncommitted headers yet. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/tools/cap/fexec/fexec.c#2 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/tools/cap/fexec/fexec.c#2 (text+ko) ==== @@ -1,7 +1,4 @@ #include -#include -#include -#include #include #include @@ -16,7 +13,7 @@ int fd_exec; if (argc < 2) - errx(-1, "usage: fdenter [commandline]"); + errx(-1, "usage: fexec [commandline]"); fd_exec = open(argv[1], O_RDONLY); if (fd_exec < 0) From owner-p4-projects@FreeBSD.ORG Thu Oct 15 16:40:29 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C23D31065679; Thu, 15 Oct 2009 16:40:29 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 87CD51065672 for ; Thu, 15 Oct 2009 16:40:29 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 745398FC15 for ; Thu, 15 Oct 2009 16:40:29 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9FGeTdR039365 for ; Thu, 15 Oct 2009 16:40:29 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9FGeTdQ039363 for perforce@freebsd.org; Thu, 15 Oct 2009 16:40:29 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Thu, 15 Oct 2009 16:40:29 GMT Message-Id: <200910151640.n9FGeTdQ039363@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169525 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Oct 2009 16:40:30 -0000 http://p4web.freebsd.org/chv.cgi?CH=169525 Change 169525 by rwatson@rwatson_vimage_client on 2009/10/15 16:39:49 Use more appropriate format strings for 64-bit. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/tools/cap/sandbox_echo/sandbox_echo.c#9 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/tools/cap/sandbox_echo/sandbox_echo.c#9 (text+ko) ==== @@ -70,7 +70,7 @@ if (lch_rpc(lcsp, 0, &iov, 1, &iov, 1, &len) < 0) err(-1, "lch_rpc"); if (len != sizeof(ch)) - errx(-1, "lch_rpc returned size %d not %d", len, + errx(-1, "lch_rpc returned size %zu not %zu", len, sizeof(ch)); if (ch != i) errx(-1, "lch_recv: expected %d and got %d", i, ch); From owner-p4-projects@FreeBSD.ORG Fri Oct 16 14:26:19 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5807D106568B; Fri, 16 Oct 2009 14:26:19 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 12333106566C for ; Fri, 16 Oct 2009 14:26:19 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id F28E08FC0C for ; Fri, 16 Oct 2009 14:26:18 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9GEQIFS015516 for ; Fri, 16 Oct 2009 14:26:18 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9GEQIKB015514 for perforce@freebsd.org; Fri, 16 Oct 2009 14:26:18 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Fri, 16 Oct 2009 14:26:18 GMT Message-Id: <200910161426.n9GEQIKB015514@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169535 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Oct 2009 14:26:19 -0000 http://p4web.freebsd.org/chv.cgi?CH=169535 Change 169535 by rwatson@rwatson_vimage_client on 2009/10/16 14:26:11 Fix types to build warning-free on amd64. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/tools/cap/sandbox_world/sandbox_world.c#5 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/tools/cap/sandbox_world/sandbox_world.c#5 (text+ko) ==== @@ -85,7 +85,7 @@ if (lch_rpc(lcsp, 0, &iov, 1, &iov, 1, &len) < 0) err(-1, "lch_rpc"); if (len != sizeof(ch)) - errx(-1, "lch_rpc returned size %d not %d", len, sizeof(ch)); + errx(-1, "lch_rpc returned size %zd not %zd", len, sizeof(ch)); if (ch != 'X') errx(-1, "lch_recv: expected %d and got %d", 'X', ch); From owner-p4-projects@FreeBSD.ORG Sat Oct 17 18:19:10 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 71DE31065679; Sat, 17 Oct 2009 18:19:10 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 351FA106566B for ; Sat, 17 Oct 2009 18:19:09 +0000 (UTC) (envelope-from rene@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id E19498FC14 for ; Sat, 17 Oct 2009 18:19:09 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9HIJ9CQ038846 for ; Sat, 17 Oct 2009 18:19:09 GMT (envelope-from rene@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9HIJ9f2038844 for perforce@freebsd.org; Sat, 17 Oct 2009 18:19:09 GMT (envelope-from rene@FreeBSD.org) Date: Sat, 17 Oct 2009 18:19:09 GMT Message-Id: <200910171819.n9HIJ9f2038844@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to rene@FreeBSD.org using -f From: Rene Ladan To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169547 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Oct 2009 18:19:10 -0000 http://p4web.freebsd.org/chv.cgi?CH=169547 Change 169547 by rene@rene_self on 2009/10/17 18:19:07 IFC Affected files ... .. //depot/projects/docproj_nl/en_US.ISO8859-1/articles/committers-guide/article.sgml#29 integrate .. //depot/projects/docproj_nl/share/pgpkeys/philip.key#2 integrate .. //depot/projects/docproj_nl/www/en/administration.sgml#9 integrate .. //depot/projects/docproj_nl/www/en/news/status/Makefile#7 integrate .. //depot/projects/docproj_nl/www/en/news/status/report-2009-04-2009-09.xml#2 integrate .. //depot/projects/docproj_nl/www/en/news/status/status.sgml#8 integrate .. //depot/projects/docproj_nl/www/en/platforms/ppc.sgml#3 integrate .. //depot/projects/docproj_nl/www/nl/administration.sgml#10 integrate .. //depot/projects/docproj_nl/www/share/sgml/news.xml#53 integrate Differences ... ==== //depot/projects/docproj_nl/en_US.ISO8859-1/articles/committers-guide/article.sgml#29 (text+ko) ==== @@ -9,7 +9,7 @@ The &os; Documentation Project - $FreeBSD: doc/en_US.ISO8859-1/articles/committers-guide/article.sgml,v 1.286 2009/08/13 15:51:59 rwatson Exp $ + $FreeBSD: doc/en_US.ISO8859-1/articles/committers-guide/article.sgml,v 1.287 2009/10/15 05:41:12 ale Exp $ 1999 @@ -127,7 +127,7 @@ RELENG_6 (6.X-STABLE), RELENG_7 (7.X-STABLE), - RELENG_8 (7.X-STABLE), + RELENG_8 (8.X-STABLE), HEAD (-CURRENT) ==== //depot/projects/docproj_nl/share/pgpkeys/philip.key#2 (text+ko) ==== @@ -1,4 +1,4 @@ - + @@ -10,8 +10,8 @@ uid Philip Paeps uid Philip Paeps uid Philip Paeps -sub 1024D/035EFC58 2006-10-22 [expires: 2008-10-21] -sub 2048g/6E5FD7D6 2006-10-22 [expires: 2008-11-17] +sub 1024D/035EFC58 2006-10-22 [expires: 2010-10-13] +sub 2048g/6E5FD7D6 2006-10-22 [expires: 2010-10-14] ]]> >> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Sat Oct 17 18:33:25 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 00399106566C; Sat, 17 Oct 2009 18:33:25 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A060E106568B for ; Sat, 17 Oct 2009 18:33:24 +0000 (UTC) (envelope-from rene@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 8E0C38FC0C for ; Sat, 17 Oct 2009 18:33:24 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n9HIXOYi039916 for ; Sat, 17 Oct 2009 18:33:24 GMT (envelope-from rene@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n9HIXO5M039914 for perforce@freebsd.org; Sat, 17 Oct 2009 18:33:24 GMT (envelope-from rene@FreeBSD.org) Date: Sat, 17 Oct 2009 18:33:24 GMT Message-Id: <200910171833.n9HIXO5M039914@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to rene@FreeBSD.org using -f From: Rene Ladan To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 169548 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Oct 2009 18:33:25 -0000 http://p4web.freebsd.org/chv.cgi?CH=169548 Change 169548 by rene@rene_self on 2009/10/17 18:33:23 [website] MFen nl/administration.sgml 1.26 -> 1.30 Affected files ... .. //depot/projects/docproj_nl/www/nl/administration.sgml#11 edit Differences ... ==== //depot/projects/docproj_nl/www/nl/administration.sgml#11 (text+ko) ==== @@ -7,7 +7,7 @@ &header; @@ -29,7 +29,6 @@
    • Uitgavebeheer

      &os; Port Beheerteam @@ -146,10 +145,10 @@

      Het Primaire Uitgave Beheerteam is onder andere verantwoordelijk voor het maken en publiceren van uitgaveschema's voor officiële projectuitgaven van &os;, het aankondigen van code freezes en het - beheren van RELENG_* takken. De uitgave - engineering team richtlijnen geven een gedetailleerdere beschrijving - van de plichten en verantwoordelijkheden van het Primaire Uitgave - Beheerteam.

      + beheren van RELENG_*-takken. De richtlijnen van het uitgave engineering + team geven een gedetailleerdere beschrijving van de plichten en + verantwoordelijkheden van het Primaire Uitgave Beheerteam.

      -

      &os;/alpha Uitgave Beheerteam - <re-alpha@FreeBSD.org>

      - -

      Het &os;/alpha Uitgave Beheerteam is verantwoordelijk voor specifieke - uitgavekwesties die aan het &os;/alpha-platform gerelateerd zijn.

      - - -

      &os;/amd64 Uitgave Beheerteam <re-amd64@FreeBSD.org>

      @@ -204,7 +191,6 @@ uitgavekwesties die aan het &os;/i386-platform gerelateerd zijn.

      @@ -241,7 +227,6 @@
    • &a.tmm; <tmm@FreeBSD.org>
    • &a.obrien; <obrien@FreeBSD.org>
    • &a.kensmith; <kensmith@FreeBSD.org>
    • -
    • &a.murray; <murray@FreeBSD.org>
    • &a.rwatson; <rwatson@FreeBSD.org>