]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - arch/sparc/kernel/perf_event.c
Merge branch 'linus' into perf/core
[net-next-2.6.git] / arch / sparc / kernel / perf_event.c
index f9a70675936450239b7c7cc77d1a3a110f57f115..0d6deb55a2ae7e4189b5ab60aec81cd8df28adb6 100644 (file)
@@ -1076,13 +1076,24 @@ static int sparc_pmu_event_init(struct perf_event *event)
                break;
 
        case PERF_TYPE_RAW:
-               return -EOPNOTSUPP;
+               pmap = NULL;
+               break;
 
        default:
                return -ENOENT;
 
        }
 
+       if (pmap) {
+               hwc->event_base = perf_event_encode(pmap);
+       } else {
+               /*
+                * User gives us "(encoding << 16) | pic_mask" for
+                * PERF_TYPE_RAW events.
+                */
+               hwc->event_base = attr->config;
+       }
+
        /* We save the enable bits in the config_base.  */
        hwc->config_base = sparc_pmu->irq_bit;
        if (!attr->exclude_user)
@@ -1092,8 +1103,6 @@ static int sparc_pmu_event_init(struct perf_event *event)
        if (!attr->exclude_hv)
                hwc->config_base |= sparc_pmu->hv_bit;
 
-       hwc->event_base = perf_event_encode(pmap);
-
        n = 0;
        if (event->group_leader != event) {
                n = collect_events(event->group_leader,