DM: add deinit function to virtual keyboard device
old code has no deinit functionality for virtual keyboard device. Which will trigger resource leak when system is reboot. deinit function is added to: 1. deinit low ps2 based keyboard and mouse 2. release memory/io resource of virtual keyboard device NOTE: IRQ resource will be handed in pci irq module Signed-off-by: Yin Fengwei <fengwei.yin@intel.com> Acked-by: Eddie Dong <Eddie.dong@intel.com>
This commit is contained in:
parent
f6db755c7f
commit
80a9fe5b37
|
@ -542,6 +542,7 @@ do_close_post(struct vmctx *ctx)
|
|||
{
|
||||
pci_irq_deinit(ctx);
|
||||
deinit_pci(ctx);
|
||||
atkbdc_deinit(ctx);
|
||||
vm_destroy(ctx);
|
||||
vm_close(ctx);
|
||||
}
|
||||
|
|
|
@ -422,6 +422,7 @@ atkbdc_init(struct vmctx *ctx)
|
|||
assert(base != NULL);
|
||||
|
||||
base->ctx = ctx;
|
||||
ctx->atkbdc_base = base;
|
||||
|
||||
pthread_mutex_init(&base->mtx, NULL);
|
||||
|
||||
|
@ -457,6 +458,33 @@ atkbdc_init(struct vmctx *ctx)
|
|||
base->ps2mouse = ps2mouse_init(base);
|
||||
}
|
||||
|
||||
void
|
||||
atkbdc_deinit(struct vmctx *ctx)
|
||||
{
|
||||
struct inout_port iop;
|
||||
struct atkbdc_base *base = ctx->atkbdc_base;
|
||||
|
||||
ps2kbd_deinit(base);
|
||||
base->ps2kbd = NULL;
|
||||
ps2mouse_deinit(base);
|
||||
base->ps2mouse = NULL;
|
||||
|
||||
bzero(&iop, sizeof(struct inout_port));
|
||||
iop.name = "atkdbc";
|
||||
iop.port = KBD_DATA_PORT;
|
||||
iop.size = 1;
|
||||
unregister_inout(&iop);
|
||||
|
||||
bzero(&iop, sizeof(struct inout_port));
|
||||
iop.name = "atkdbc";
|
||||
iop.port = KBD_STS_CTL_PORT;
|
||||
iop.size = 1;
|
||||
unregister_inout(&iop);
|
||||
|
||||
free(base);
|
||||
ctx->atkbdc_base = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
atkbdc_dsdt(void)
|
||||
{
|
||||
|
|
|
@ -114,6 +114,7 @@ struct atkbdc_base {
|
|||
};
|
||||
|
||||
void atkbdc_init(struct vmctx *ctx);
|
||||
void atkbdc_deinit(struct vmctx *ctx);
|
||||
void atkbdc_event(struct atkbdc_base *base, int iskbd);
|
||||
|
||||
#endif /* _ATKBDC_H_ */
|
||||
|
|
|
@ -34,6 +34,8 @@
|
|||
#include "types.h"
|
||||
#include "vmm.h"
|
||||
|
||||
#include "atkbdc.h"
|
||||
|
||||
/*
|
||||
* API version for out-of-tree consumers for making compile time decisions.
|
||||
*/
|
||||
|
@ -54,6 +56,9 @@ struct vmctx {
|
|||
char *baseaddr;
|
||||
char *name;
|
||||
uuid_t vm_uuid;
|
||||
|
||||
/* fields to track virtual devices */
|
||||
struct atkbdc_base *atkbdc_base;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue