Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright 2014, Michael Ellerman, IBM Corp.
0004  */
0005 
0006 #include <stdio.h>
0007 #include <stdlib.h>
0008 
0009 #include "ebb.h"
0010 
0011 
0012 /*
0013  * Test various attributes of the EBB event are enforced.
0014  */
0015 int event_attributes(void)
0016 {
0017     struct event event, leader;
0018 
0019     SKIP_IF(!ebb_is_supported());
0020 
0021     event_init(&event, 0x1001e);
0022     event_leader_ebb_init(&event);
0023     /* Expected to succeed */
0024     FAIL_IF(event_open(&event));
0025     event_close(&event);
0026 
0027 
0028     event_init(&event, 0x001e); /* CYCLES - no PMC specified */
0029     event_leader_ebb_init(&event);
0030     /* Expected to fail, no PMC specified */
0031     FAIL_IF(event_open(&event) == 0);
0032 
0033 
0034     event_init(&event, 0x2001e);
0035     event_leader_ebb_init(&event);
0036     event.attr.exclusive = 0;
0037     /* Expected to fail, not exclusive */
0038     FAIL_IF(event_open(&event) == 0);
0039 
0040 
0041     event_init(&event, 0x3001e);
0042     event_leader_ebb_init(&event);
0043     event.attr.freq = 1;
0044     /* Expected to fail, sets freq */
0045     FAIL_IF(event_open(&event) == 0);
0046 
0047 
0048     event_init(&event, 0x4001e);
0049     event_leader_ebb_init(&event);
0050     event.attr.sample_period = 1;
0051     /* Expected to fail, sets sample_period */
0052     FAIL_IF(event_open(&event) == 0);
0053 
0054 
0055     event_init(&event, 0x1001e);
0056     event_leader_ebb_init(&event);
0057     event.attr.enable_on_exec = 1;
0058     /* Expected to fail, sets enable_on_exec */
0059     FAIL_IF(event_open(&event) == 0);
0060 
0061 
0062     event_init(&event, 0x1001e);
0063     event_leader_ebb_init(&event);
0064     event.attr.inherit = 1;
0065     /* Expected to fail, sets inherit */
0066     FAIL_IF(event_open(&event) == 0);
0067 
0068 
0069     event_init(&leader, 0x1001e);
0070     event_leader_ebb_init(&leader);
0071     FAIL_IF(event_open(&leader));
0072 
0073     event_init(&event, 0x20002);
0074     event_ebb_init(&event);
0075 
0076     /* Expected to succeed */
0077     FAIL_IF(event_open_with_group(&event, leader.fd));
0078     event_close(&leader);
0079     event_close(&event);
0080 
0081 
0082     event_init(&leader, 0x1001e);
0083     event_leader_ebb_init(&leader);
0084     FAIL_IF(event_open(&leader));
0085 
0086     event_init(&event, 0x20002);
0087 
0088     /* Expected to fail, event doesn't request EBB, leader does */
0089     FAIL_IF(event_open_with_group(&event, leader.fd) == 0);
0090     event_close(&leader);
0091 
0092 
0093     event_init(&leader, 0x1001e);
0094     event_leader_ebb_init(&leader);
0095     /* Clear the EBB flag */
0096     leader.attr.config &= ~(1ull << 63);
0097 
0098     FAIL_IF(event_open(&leader));
0099 
0100     event_init(&event, 0x20002);
0101     event_ebb_init(&event);
0102 
0103     /* Expected to fail, leader doesn't request EBB */
0104     FAIL_IF(event_open_with_group(&event, leader.fd) == 0);
0105     event_close(&leader);
0106 
0107 
0108     event_init(&leader, 0x1001e);
0109     event_leader_ebb_init(&leader);
0110     leader.attr.exclusive = 0;
0111     /* Expected to fail, leader isn't exclusive */
0112     FAIL_IF(event_open(&leader) == 0);
0113 
0114 
0115     event_init(&leader, 0x1001e);
0116     event_leader_ebb_init(&leader);
0117     leader.attr.pinned = 0;
0118     /* Expected to fail, leader isn't pinned */
0119     FAIL_IF(event_open(&leader) == 0);
0120 
0121     event_init(&event, 0x1001e);
0122     event_leader_ebb_init(&event);
0123     /* Expected to fail, not a task event */
0124     SKIP_IF(require_paranoia_below(1));
0125     FAIL_IF(event_open_with_cpu(&event, 0) == 0);
0126 
0127     return 0;
0128 }
0129 
0130 int main(void)
0131 {
0132     return test_harness(event_attributes, "event_attributes");
0133 }