Skip to content

Commit e49929a

Browse files
shiqinggwenlingz
authored andcommitted
hv: ioapic: clean up HV_DEBUG usage
remove the usage of HV_DEBUG in ioapic.c Tracked-On: #861 Signed-off-by: Shiqing Gao <shiqing.gao@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
1 parent 9d529fb commit e49929a

File tree

3 files changed

+85
-87
lines changed

3 files changed

+85
-87
lines changed

hypervisor/arch/x86/ioapic.c

Lines changed: 3 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,8 @@
99
#define IOAPIC_MAX_PIN 240U
1010
#define IOAPIC_INVALID_PIN 0xffU
1111

12-
struct gsi_table {
13-
uint8_t ioapic_id;
14-
uint8_t pin;
15-
void *addr;
16-
};
17-
static struct gsi_table gsi_table[NR_MAX_GSI];
18-
static uint32_t nr_gsi;
12+
struct gsi_table gsi_table[NR_MAX_GSI];
13+
uint32_t nr_gsi;
1914
static spinlock_t ioapic_lock;
2015

2116
static union ioapic_rte saved_rte[NR_IOAPICS][IOAPIC_MAX_PIN];
@@ -134,9 +129,7 @@ get_ioapic_base(uint8_t apic_id)
134129
return addr[apic_id];
135130
}
136131

137-
static inline void
138-
ioapic_get_rte_entry(void *ioapic_addr,
139-
uint8_t pin, union ioapic_rte *rte)
132+
void ioapic_get_rte_entry(void *ioapic_addr, uint8_t pin, union ioapic_rte *rte)
140133
{
141134
uint32_t rte_addr = ((uint32_t)pin * 2U) + 0x10U;
142135
rte->u.lo_32 = ioapic_read_reg32(ioapic_addr, rte_addr);
@@ -425,67 +418,3 @@ void resume_ioapic(void)
425418
}
426419
}
427420
}
428-
429-
#ifdef HV_DEBUG
430-
static void get_rte_info(union ioapic_rte rte, bool *mask, bool *irr,
431-
bool *phys, uint32_t *delmode, bool *level, uint32_t *vector, uint32_t *dest)
432-
{
433-
*mask = ((rte.full & IOAPIC_RTE_INTMASK) == IOAPIC_RTE_INTMSET);
434-
*irr = ((rte.full & IOAPIC_RTE_REM_IRR) == IOAPIC_RTE_REM_IRR);
435-
*phys = ((rte.full & IOAPIC_RTE_DESTMOD) == IOAPIC_RTE_DESTPHY);
436-
*delmode = (uint32_t)(rte.full & IOAPIC_RTE_DELMOD);
437-
*level = ((rte.full & IOAPIC_RTE_TRGRLVL) != 0UL);
438-
*vector = (uint32_t)(rte.full & IOAPIC_RTE_INTVEC);
439-
*dest = (uint32_t)(rte.full >> APIC_ID_SHIFT);
440-
}
441-
442-
int get_ioapic_info(char *str_arg, size_t str_max_len)
443-
{
444-
char *str = str_arg;
445-
uint32_t irq;
446-
size_t len, size = str_max_len;
447-
448-
len = snprintf(str, size, "\r\nIRQ\tPIN\tRTE.HI32\tRTE.LO32\tVEC\tDST\tDM\tTM\tDELM\tIRR\tMASK");
449-
if (len >= size) {
450-
goto overflow;
451-
}
452-
size -= len;
453-
str += len;
454-
455-
for (irq = 0U; irq < nr_gsi; irq++) {
456-
void *addr = gsi_table[irq].addr;
457-
uint8_t pin = gsi_table[irq].pin;
458-
union ioapic_rte rte;
459-
460-
bool irr, phys, level, mask;
461-
uint32_t delmode, vector, dest;
462-
463-
ioapic_get_rte_entry(addr, pin, &rte);
464-
465-
get_rte_info(rte, &mask, &irr, &phys, &delmode, &level,
466-
&vector, &dest);
467-
468-
len = snprintf(str, size, "\r\n%03d\t%03hhu\t0x%08X\t0x%08X\t", irq, pin, rte.u.hi_32, rte.u.lo_32);
469-
if (len >= size) {
470-
goto overflow;
471-
}
472-
size -= len;
473-
str += len;
474-
475-
len = snprintf(str, size, "0x%02X\t0x%02X\t%s\t%s\t%u\t%d\t%d",
476-
vector, dest, phys ? "phys" : "logic", level ? "level" : "edge", delmode >> 8, irr, mask);
477-
if (len >= size) {
478-
goto overflow;
479-
}
480-
size -= len;
481-
str += len;
482-
}
483-
484-
snprintf(str, size, "\r\n");
485-
return 0;
486-
487-
overflow:
488-
printf("buffer size could not be enough! please check!\n");
489-
return 0;
490-
}
491-
#endif /* HV_DEBUG */

hypervisor/debug/shell.c

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,76 @@ static int shell_show_vioapic_info(int argc, char **argv)
790790
return -EINVAL;
791791
}
792792

793+
static void get_rte_info(union ioapic_rte rte, bool *mask, bool *irr,
794+
bool *phys, uint32_t *delmode, bool *level, uint32_t *vector, uint32_t *dest)
795+
{
796+
*mask = ((rte.full & IOAPIC_RTE_INTMASK) == IOAPIC_RTE_INTMSET);
797+
*irr = ((rte.full & IOAPIC_RTE_REM_IRR) == IOAPIC_RTE_REM_IRR);
798+
*phys = ((rte.full & IOAPIC_RTE_DESTMOD) == IOAPIC_RTE_DESTPHY);
799+
*delmode = (uint32_t)(rte.full & IOAPIC_RTE_DELMOD);
800+
*level = ((rte.full & IOAPIC_RTE_TRGRLVL) != 0UL);
801+
*vector = (uint32_t)(rte.full & IOAPIC_RTE_INTVEC);
802+
*dest = (uint32_t)(rte.full >> APIC_ID_SHIFT);
803+
}
804+
805+
/**
806+
* @brief Get information of ioapic
807+
*
808+
* It's for debug only.
809+
*
810+
* @param[in] str_max_len The max size of the string containing
811+
* interrupt info
812+
* @param[inout] str_arg Pointer to the output information
813+
*/
814+
static int get_ioapic_info(char *str_arg, size_t str_max_len)
815+
{
816+
char *str = str_arg;
817+
uint32_t irq;
818+
size_t len, size = str_max_len;
819+
820+
len = snprintf(str, size, "\r\nIRQ\tPIN\tRTE.HI32\tRTE.LO32\tVEC\tDST\tDM\tTM\tDELM\tIRR\tMASK");
821+
if (len >= size) {
822+
goto overflow;
823+
}
824+
size -= len;
825+
str += len;
826+
827+
for (irq = 0U; irq < nr_gsi; irq++) {
828+
void *addr = gsi_table[irq].addr;
829+
uint8_t pin = gsi_table[irq].pin;
830+
union ioapic_rte rte;
831+
832+
bool irr, phys, level, mask;
833+
uint32_t delmode, vector, dest;
834+
835+
ioapic_get_rte_entry(addr, pin, &rte);
836+
837+
get_rte_info(rte, &mask, &irr, &phys, &delmode, &level, &vector, &dest);
838+
839+
len = snprintf(str, size, "\r\n%03d\t%03hhu\t0x%08X\t0x%08X\t", irq, pin, rte.u.hi_32, rte.u.lo_32);
840+
if (len >= size) {
841+
goto overflow;
842+
}
843+
size -= len;
844+
str += len;
845+
846+
len = snprintf(str, size, "0x%02X\t0x%02X\t%s\t%s\t%u\t%d\t%d",
847+
vector, dest, phys ? "phys" : "logic", level ? "level" : "edge", delmode >> 8, irr, mask);
848+
if (len >= size) {
849+
goto overflow;
850+
}
851+
size -= len;
852+
str += len;
853+
}
854+
855+
snprintf(str, size, "\r\n");
856+
return 0;
857+
858+
overflow:
859+
printf("buffer size could not be enough! please check!\n");
860+
return 0;
861+
}
862+
793863
static int shell_show_ioapic_info(__unused int argc, __unused char **argv)
794864
{
795865
int err = 0;

hypervisor/include/arch/x86/ioapic.h

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#ifndef IOAPIC_H
88
#define IOAPIC_H
99

10+
#include <bsp_extern.h>
11+
1012
/*
1113
* IOAPIC_MAX_LINES is architecturally defined.
1214
* The usable RTEs may be a subset of the total on a per IO APIC basis.
@@ -56,19 +58,16 @@ void resume_ioapic(void);
5658
void gsi_mask_irq(uint32_t irq);
5759
void gsi_unmask_irq(uint32_t irq);
5860

59-
extern uint8_t pic_ioapic_pin_map[NR_LEGACY_PIN];
61+
void ioapic_get_rte_entry(void *ioapic_addr, uint8_t pin, union ioapic_rte *rte);
6062

61-
#ifdef HV_DEBUG
62-
/**
63-
* @brief Get information of ioapic
64-
*
65-
* It's for debug only.
66-
*
67-
* @param[in] str_max_len The max size of the string containing
68-
* interrupt info
69-
* @param[inout] str_arg Pointer to the output information
70-
*/
71-
int get_ioapic_info(char *str_arg, size_t str_max_len);
72-
#endif /* HV_DEBUG */
63+
struct gsi_table {
64+
uint8_t ioapic_id;
65+
uint8_t pin;
66+
void *addr;
67+
};
68+
69+
extern struct gsi_table gsi_table[NR_MAX_GSI];
70+
extern uint32_t nr_gsi;
71+
extern uint8_t pic_ioapic_pin_map[NR_LEGACY_PIN];
7372

7473
#endif /* IOAPIC_H */

0 commit comments

Comments
 (0)