event_attributes_test.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /*
  2. * Copyright 2014, Michael Ellerman, IBM Corp.
  3. * Licensed under GPLv2.
  4. */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include "ebb.h"
  8. /*
  9. * Test various attributes of the EBB event are enforced.
  10. */
  11. int event_attributes(void)
  12. {
  13. struct event event, leader;
  14. SKIP_IF(!ebb_is_supported());
  15. event_init(&event, 0x1001e);
  16. event_leader_ebb_init(&event);
  17. /* Expected to succeed */
  18. FAIL_IF(event_open(&event));
  19. event_close(&event);
  20. event_init(&event, 0x001e); /* CYCLES - no PMC specified */
  21. event_leader_ebb_init(&event);
  22. /* Expected to fail, no PMC specified */
  23. FAIL_IF(event_open(&event) == 0);
  24. event_init(&event, 0x2001e);
  25. event_leader_ebb_init(&event);
  26. event.attr.exclusive = 0;
  27. /* Expected to fail, not exclusive */
  28. FAIL_IF(event_open(&event) == 0);
  29. event_init(&event, 0x3001e);
  30. event_leader_ebb_init(&event);
  31. event.attr.freq = 1;
  32. /* Expected to fail, sets freq */
  33. FAIL_IF(event_open(&event) == 0);
  34. event_init(&event, 0x4001e);
  35. event_leader_ebb_init(&event);
  36. event.attr.sample_period = 1;
  37. /* Expected to fail, sets sample_period */
  38. FAIL_IF(event_open(&event) == 0);
  39. event_init(&event, 0x1001e);
  40. event_leader_ebb_init(&event);
  41. event.attr.enable_on_exec = 1;
  42. /* Expected to fail, sets enable_on_exec */
  43. FAIL_IF(event_open(&event) == 0);
  44. event_init(&event, 0x1001e);
  45. event_leader_ebb_init(&event);
  46. event.attr.inherit = 1;
  47. /* Expected to fail, sets inherit */
  48. FAIL_IF(event_open(&event) == 0);
  49. event_init(&leader, 0x1001e);
  50. event_leader_ebb_init(&leader);
  51. FAIL_IF(event_open(&leader));
  52. event_init(&event, 0x20002);
  53. event_ebb_init(&event);
  54. /* Expected to succeed */
  55. FAIL_IF(event_open_with_group(&event, leader.fd));
  56. event_close(&leader);
  57. event_close(&event);
  58. event_init(&leader, 0x1001e);
  59. event_leader_ebb_init(&leader);
  60. FAIL_IF(event_open(&leader));
  61. event_init(&event, 0x20002);
  62. /* Expected to fail, event doesn't request EBB, leader does */
  63. FAIL_IF(event_open_with_group(&event, leader.fd) == 0);
  64. event_close(&leader);
  65. event_init(&leader, 0x1001e);
  66. event_leader_ebb_init(&leader);
  67. /* Clear the EBB flag */
  68. leader.attr.config &= ~(1ull << 63);
  69. FAIL_IF(event_open(&leader));
  70. event_init(&event, 0x20002);
  71. event_ebb_init(&event);
  72. /* Expected to fail, leader doesn't request EBB */
  73. FAIL_IF(event_open_with_group(&event, leader.fd) == 0);
  74. event_close(&leader);
  75. event_init(&leader, 0x1001e);
  76. event_leader_ebb_init(&leader);
  77. leader.attr.exclusive = 0;
  78. /* Expected to fail, leader isn't exclusive */
  79. FAIL_IF(event_open(&leader) == 0);
  80. event_init(&leader, 0x1001e);
  81. event_leader_ebb_init(&leader);
  82. leader.attr.pinned = 0;
  83. /* Expected to fail, leader isn't pinned */
  84. FAIL_IF(event_open(&leader) == 0);
  85. event_init(&event, 0x1001e);
  86. event_leader_ebb_init(&event);
  87. /* Expected to fail, not a task event */
  88. SKIP_IF(require_paranoia_below(1));
  89. FAIL_IF(event_open_with_cpu(&event, 0) == 0);
  90. return 0;
  91. }
  92. int main(void)
  93. {
  94. return test_harness(event_attributes, "event_attributes");
  95. }