Merge pull request #220 from liuchao173/master
irqbalance-ui: can't change window when in editing state
This commit is contained in:
commit
06aa516aa2
|
@ -16,11 +16,16 @@
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
|
|
||||||
|
|
||||||
|
enum states {
|
||||||
|
STATE_TREE,
|
||||||
|
STATE_SETTINGS,
|
||||||
|
STATE_SETUP_IRQS
|
||||||
|
};
|
||||||
|
int state;
|
||||||
int irqbalance_pid = -1;
|
int irqbalance_pid = -1;
|
||||||
GList *tree = NULL;
|
GList *tree = NULL;
|
||||||
setup_t setup;
|
setup_t setup;
|
||||||
GMainLoop *main_loop;
|
GMainLoop *main_loop;
|
||||||
int is_tree = 1;
|
|
||||||
static int default_bufsz = 8192;
|
static int default_bufsz = 8192;
|
||||||
|
|
||||||
struct msghdr * create_credentials_msg()
|
struct msghdr * create_credentials_msg()
|
||||||
|
@ -359,7 +364,7 @@ gboolean rescan_tree(gpointer data __attribute__((unused)))
|
||||||
parse_setup(setup_data);
|
parse_setup(setup_data);
|
||||||
char *irqbalance_data = get_data(STATS);
|
char *irqbalance_data = get_data(STATS);
|
||||||
parse_into_tree(irqbalance_data);
|
parse_into_tree(irqbalance_data);
|
||||||
if(is_tree) {
|
if(state == STATE_TREE) {
|
||||||
display_tree();
|
display_tree();
|
||||||
}
|
}
|
||||||
free(setup_data);
|
free(setup_data);
|
||||||
|
@ -375,16 +380,35 @@ gboolean key_loop(gpointer data __attribute__((unused)))
|
||||||
close_window(0);
|
close_window(0);
|
||||||
break;
|
break;
|
||||||
case KEY_F(3):
|
case KEY_F(3):
|
||||||
is_tree = 1;
|
if (state == STATE_SETTINGS || state == STATE_SETUP_IRQS) {
|
||||||
display_tree();
|
state = STATE_TREE;
|
||||||
|
display_tree();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_F(4):
|
case KEY_F(4):
|
||||||
is_tree = 0;
|
if (state == STATE_TREE || state == STATE_SETUP_IRQS) {
|
||||||
|
state = STATE_SETTINGS;
|
||||||
|
settings();
|
||||||
|
}
|
||||||
settings();
|
settings();
|
||||||
break;
|
break;
|
||||||
case KEY_F(5):
|
case KEY_F(5):
|
||||||
is_tree = 0;
|
if (state == STATE_TREE || state == STATE_SETTINGS) {
|
||||||
setup_irqs();
|
state = STATE_SETUP_IRQS;
|
||||||
|
setup_irqs();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
if (state == STATE_SETTINGS)
|
||||||
|
handle_cpu_banning();
|
||||||
|
break;
|
||||||
|
case 'i':
|
||||||
|
if (state == STATE_SETUP_IRQS)
|
||||||
|
handle_irq_banning();
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
if (state == STATE_SETTINGS)
|
||||||
|
handle_sleep_setting();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -437,6 +461,7 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
state = STATE_TREE;
|
||||||
init();
|
init();
|
||||||
|
|
||||||
main_loop = g_main_loop_new(NULL, FALSE);
|
main_loop = g_main_loop_new(NULL, FALSE);
|
||||||
|
|
137
ui/ui.c
137
ui/ui.c
|
@ -273,7 +273,8 @@ void handle_cpu_banning()
|
||||||
attrset(COLOR_PAIR(5));
|
attrset(COLOR_PAIR(5));
|
||||||
mvprintw(LINES - 2, 1,
|
mvprintw(LINES - 2, 1,
|
||||||
"Press <S> for changing sleep setup, <C> for CPU ban setup. ");
|
"Press <S> for changing sleep setup, <C> for CPU ban setup. ");
|
||||||
move(LINES - 1, COLS - 1);
|
show_frame();
|
||||||
|
show_footer();
|
||||||
refresh();
|
refresh();
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
|
@ -287,8 +288,8 @@ void handle_cpu_banning()
|
||||||
attrset(COLOR_PAIR(5));
|
attrset(COLOR_PAIR(5));
|
||||||
mvprintw(LINES - 2, 1,
|
mvprintw(LINES - 2, 1,
|
||||||
"Press <S> for changing sleep setup, <C> for CPU ban setup. ");
|
"Press <S> for changing sleep setup, <C> for CPU ban setup. ");
|
||||||
attrset(COLOR_PAIR(3));
|
show_frame();
|
||||||
move(LINES - 1, COLS - 1);
|
show_footer();
|
||||||
refresh();
|
refresh();
|
||||||
char settings_string[1024] = "settings cpus \0";
|
char settings_string[1024] = "settings cpus \0";
|
||||||
for_each_cpu(all_cpus, get_new_cpu_ban_values, settings_string);
|
for_each_cpu(all_cpus, get_new_cpu_ban_values, settings_string);
|
||||||
|
@ -302,16 +303,6 @@ void handle_cpu_banning()
|
||||||
processing = 0;
|
processing = 0;
|
||||||
close_window(0);
|
close_window(0);
|
||||||
break;
|
break;
|
||||||
case KEY_F(3):
|
|
||||||
is_tree = 1;
|
|
||||||
processing = 0;
|
|
||||||
display_tree();
|
|
||||||
break;
|
|
||||||
case KEY_F(5):
|
|
||||||
is_tree = 0;
|
|
||||||
processing = 0;
|
|
||||||
setup_irqs();
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -475,7 +466,8 @@ void handle_irq_banning()
|
||||||
attrset(COLOR_PAIR(5));
|
attrset(COLOR_PAIR(5));
|
||||||
mvprintw(LINES - 2, 1, "Press <I> for setting up IRQ banning.\
|
mvprintw(LINES - 2, 1, "Press <I> for setting up IRQ banning.\
|
||||||
");
|
");
|
||||||
move(LINES - 1, COLS - 1);
|
show_frame();
|
||||||
|
show_footer();
|
||||||
refresh();
|
refresh();
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
|
@ -490,7 +482,8 @@ void handle_irq_banning()
|
||||||
mvprintw(LINES - 2, 1, "Press <I> for setting up IRQ banning.\
|
mvprintw(LINES - 2, 1, "Press <I> for setting up IRQ banning.\
|
||||||
");
|
");
|
||||||
attrset(COLOR_PAIR(3));
|
attrset(COLOR_PAIR(3));
|
||||||
move(LINES - 1, COLS - 1);
|
show_frame();
|
||||||
|
show_footer();
|
||||||
refresh();
|
refresh();
|
||||||
char settings_string[1024] = BAN_IRQS;
|
char settings_string[1024] = BAN_IRQS;
|
||||||
for_each_irq(all_irqs, get_new_irq_ban_values, settings_string);
|
for_each_irq(all_irqs, get_new_irq_ban_values, settings_string);
|
||||||
|
@ -504,22 +497,35 @@ void handle_irq_banning()
|
||||||
processing = 0;
|
processing = 0;
|
||||||
close_window(0);
|
close_window(0);
|
||||||
break;
|
break;
|
||||||
case KEY_F(3):
|
|
||||||
is_tree = 1;
|
|
||||||
processing = 0;
|
|
||||||
display_tree();
|
|
||||||
break;
|
|
||||||
case KEY_F(4):
|
|
||||||
is_tree = 0;
|
|
||||||
processing = 0;
|
|
||||||
settings();
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void handle_sleep_setting()
|
||||||
|
{
|
||||||
|
char info[128] = "Current sleep interval between rebalancing: \0";
|
||||||
|
uint8_t sleep_input_offset = strlen(info) + 3;
|
||||||
|
mvprintw(LINES - 1, 1, "Press ESC for discarding your input.\
|
||||||
|
");
|
||||||
|
attrset(COLOR_PAIR(0));
|
||||||
|
mvprintw(LINES - 2, 1, " \
|
||||||
|
");
|
||||||
|
uint64_t new_sleep = get_valid_sleep_input(sleep_input_offset);
|
||||||
|
if(new_sleep != setup.sleep) {
|
||||||
|
setup.sleep = new_sleep;
|
||||||
|
char settings_data[128];
|
||||||
|
snprintf(settings_data, 128, "%s %" PRIu64, SET_SLEEP, new_sleep);
|
||||||
|
send_settings(settings_data);
|
||||||
|
}
|
||||||
|
attrset(COLOR_PAIR(5));
|
||||||
|
mvprintw(LINES - 2, 1, "Press <S> for changing sleep setup, <C> for CPU ban setup. ");
|
||||||
|
show_frame();
|
||||||
|
show_footer();
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
|
||||||
void init()
|
void init()
|
||||||
{
|
{
|
||||||
signal(SIGINT, close_window);
|
signal(SIGINT, close_window);
|
||||||
|
@ -563,60 +569,15 @@ void settings()
|
||||||
parse_setup(setup_data);
|
parse_setup(setup_data);
|
||||||
|
|
||||||
char info[128] = "Current sleep interval between rebalancing: \0";
|
char info[128] = "Current sleep interval between rebalancing: \0";
|
||||||
uint8_t sleep_input_offset = strlen(info) + 3;
|
|
||||||
snprintf(info + strlen(info), 128 - strlen(info), "%" PRIu64 "\n", setup.sleep);
|
snprintf(info + strlen(info), 128 - strlen(info), "%" PRIu64 "\n", setup.sleep);
|
||||||
attrset(COLOR_PAIR(1));
|
attrset(COLOR_PAIR(1));
|
||||||
mvprintw(2, 3, "%s", info);
|
mvprintw(2, 3, "%s", info);
|
||||||
print_all_cpus();
|
print_all_cpus();
|
||||||
|
attrset(COLOR_PAIR(5));
|
||||||
int user_input = 1;
|
mvprintw(LINES - 2, 1, "Press <S> for changing sleep setup, <C> for CPU ban setup. ");
|
||||||
while(user_input) {
|
show_frame();
|
||||||
attrset(COLOR_PAIR(5));
|
show_footer();
|
||||||
mvprintw(LINES - 2, 1,
|
refresh();
|
||||||
"Press <S> for changing sleep setup, <C> for CPU ban setup. ");
|
|
||||||
show_frame();
|
|
||||||
show_footer();
|
|
||||||
refresh();
|
|
||||||
int c = getch();
|
|
||||||
switch(c) {
|
|
||||||
case 's': {
|
|
||||||
mvprintw(LINES - 1, 1, "Press ESC for discarding your input.\
|
|
||||||
");
|
|
||||||
attrset(COLOR_PAIR(0));
|
|
||||||
mvprintw(LINES - 2, 1, " \
|
|
||||||
");
|
|
||||||
uint64_t new_sleep = get_valid_sleep_input(sleep_input_offset);
|
|
||||||
if(new_sleep != setup.sleep) {
|
|
||||||
setup.sleep = new_sleep;
|
|
||||||
char settings_data[128];
|
|
||||||
snprintf(settings_data, 128, "%s %" PRIu64, SET_SLEEP, new_sleep);
|
|
||||||
send_settings(settings_data);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 'c':
|
|
||||||
handle_cpu_banning();
|
|
||||||
break;
|
|
||||||
/* We need to include window changing options as well because the
|
|
||||||
* related char was eaten up by getch() already */
|
|
||||||
case 'q':
|
|
||||||
user_input = 0;
|
|
||||||
close_window(0);
|
|
||||||
break;
|
|
||||||
case KEY_F(3):
|
|
||||||
is_tree = 1;
|
|
||||||
user_input = 0;
|
|
||||||
display_tree();
|
|
||||||
break;
|
|
||||||
case KEY_F(5):
|
|
||||||
is_tree = 0;
|
|
||||||
user_input = 0;
|
|
||||||
setup_irqs();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(setup_data);
|
free(setup_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -631,32 +592,6 @@ void setup_irqs()
|
||||||
show_frame();
|
show_frame();
|
||||||
show_footer();
|
show_footer();
|
||||||
refresh();
|
refresh();
|
||||||
|
|
||||||
int user_input = 1;
|
|
||||||
while(user_input) {
|
|
||||||
int c = getch();
|
|
||||||
switch(c) {
|
|
||||||
case 'i':
|
|
||||||
handle_irq_banning();
|
|
||||||
break;
|
|
||||||
case 'q':
|
|
||||||
user_input = 0;
|
|
||||||
close_window(0);
|
|
||||||
break;
|
|
||||||
case KEY_F(3):
|
|
||||||
is_tree = 1;
|
|
||||||
user_input = 0;
|
|
||||||
display_tree();
|
|
||||||
break;
|
|
||||||
case KEY_F(4):
|
|
||||||
is_tree = 0;
|
|
||||||
user_input = 0;
|
|
||||||
settings();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_tree_node_irqs(irq_t *irq, void *data)
|
void display_tree_node_irqs(irq_t *irq, void *data)
|
||||||
|
|
2
ui/ui.h
2
ui/ui.h
|
@ -13,7 +13,6 @@
|
||||||
|
|
||||||
extern GList *tree;
|
extern GList *tree;
|
||||||
extern setup_t setup;
|
extern setup_t setup;
|
||||||
extern int is_tree;
|
|
||||||
|
|
||||||
void show_frame();
|
void show_frame();
|
||||||
void show_footer();
|
void show_footer();
|
||||||
|
@ -29,6 +28,7 @@ void display_banned_cpus();
|
||||||
int toggle_cpu(GList *cpu_list, int cpu_number);
|
int toggle_cpu(GList *cpu_list, int cpu_number);
|
||||||
void get_new_cpu_ban_values(cpu_ban_t *cpu, void *data);
|
void get_new_cpu_ban_values(cpu_ban_t *cpu, void *data);
|
||||||
void get_cpu();
|
void get_cpu();
|
||||||
|
void handle_sleep_setting();
|
||||||
void handle_cpu_banning();
|
void handle_cpu_banning();
|
||||||
|
|
||||||
void copy_assigned_obj(int *number, void *data);
|
void copy_assigned_obj(int *number, void *data);
|
||||||
|
|
Loading…
Reference in a new issue