event_attributes_test.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. event_init(&event, 0x1001e);
  15. event_leader_ebb_init(&event);
  16. /* Expected to succeed */
  17. FAIL_IF(event_open(&event));
  18. event_close(&event);
  19. event_init(&event, 0x001e); /* CYCLES - no PMC specified */
  20. event_leader_ebb_init(&event);
  21. /* Expected to fail, no PMC specified */
  22. FAIL_IF(event_open(&event) == 0);
  23. event_init(&event, 0x2001e);
  24. event_leader_ebb_init(&event);
  25. event.attr.exclusive = 0;
  26. /* Expected to fail, not exclusive */
  27. FAIL_IF(event_open(&event) == 0);
  28. event_init(&event, 0x3001e);
  29. event_leader_ebb_init(&event);
  30. event.attr.freq = 1;
  31. /* Expected to fail, sets freq */
  32. FAIL_IF(event_open(&event) == 0);
  33. event_init(&event, 0x4001e);
  34. event_leader_ebb_init(&event);
  35. event.attr.sample_period = 1;
  36. /* Expected to fail, sets sample_period */
  37. FAIL_IF(event_open(&event) == 0);
  38. event_init(&event, 0x1001e);
  39. event_leader_ebb_init(&event);
  40. event.attr.enable_on_exec = 1;
  41. /* Expected to fail, sets enable_on_exec */
  42. FAIL_IF(event_open(&event) == 0);
  43. event_init(&event, 0x1001e);
  44. event_leader_ebb_init(&event);
  45. event.attr.inherit = 1;
  46. /* Expected to fail, sets inherit */
  47. FAIL_IF(event_open(&event) == 0);
  48. event_init(&leader, 0x1001e);
  49. event_leader_ebb_init(&leader);
  50. FAIL_IF(event_open(&leader));
  51. event_init(&event, 0x20002);
  52. event_ebb_init(&event);
  53. /* Expected to succeed */
  54. FAIL_IF(event_open_with_group(&event, leader.fd));
  55. event_close(&leader);
  56. event_close(&event);
  57. event_init(&leader, 0x1001e);
  58. event_leader_ebb_init(&leader);
  59. FAIL_IF(event_open(&leader));
  60. event_init(&event, 0x20002);
  61. /* Expected to fail, event doesn't request EBB, leader does */
  62. FAIL_IF(event_open_with_group(&event, leader.fd) == 0);
  63. event_close(&leader);
  64. event_init(&leader, 0x1001e);
  65. event_leader_ebb_init(&leader);
  66. /* Clear the EBB flag */
  67. leader.attr.config &= ~(1ull << 63);
  68. FAIL_IF(event_open(&leader));
  69. event_init(&event, 0x20002);
  70. event_ebb_init(&event);
  71. /* Expected to fail, leader doesn't request EBB */
  72. FAIL_IF(event_open_with_group(&event, leader.fd) == 0);
  73. event_close(&leader);
  74. event_init(&leader, 0x1001e);
  75. event_leader_ebb_init(&leader);
  76. leader.attr.exclusive = 0;
  77. /* Expected to fail, leader isn't exclusive */
  78. FAIL_IF(event_open(&leader) == 0);
  79. event_init(&leader, 0x1001e);
  80. event_leader_ebb_init(&leader);
  81. leader.attr.pinned = 0;
  82. /* Expected to fail, leader isn't pinned */
  83. FAIL_IF(event_open(&leader) == 0);
  84. event_init(&event, 0x1001e);
  85. event_leader_ebb_init(&event);
  86. /* Expected to fail, not a task event */
  87. SKIP_IF(require_paranoia_below(1));
  88. FAIL_IF(event_open_with_cpu(&event, 0) == 0);
  89. return 0;
  90. }
  91. int main(void)
  92. {
  93. return test_harness(event_attributes, "event_attributes");
  94. }