On 2014/10/17 16:43, zhanghailiang wrote: > On 2014/10/17 16:27, haifeng....@huawei.com wrote: >> From: linhaifeng <haifeng....@huawei.com> >> >> The VM start with share hugepage should close the hugefile fd >> when exit.Because the hugepage fd may be send to other process >> e.g vhost-user If qemu not close the fd the other process can >> not free the hugepage otherwise exit process,this is ugly,so >> qemu should close all shared fd when exit. >> >> Signed-off-by: linhaifeng <haifeng....@huawei.com> >> --- >> exec.c | 12 ++++++++++++ >> vl.c | 7 +++++++ >> 2 files changed, 19 insertions(+) >> >> diff --git a/exec.c b/exec.c >> index 759055d..d120b73 100644 >> --- a/exec.c >> +++ b/exec.c >> @@ -1535,6 +1535,18 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t >> length) >> } >> } >> } >> + >> +void qemu_close_all_ram_fd(void) >> +{ >> + RAMBlock *block; >> + >> + qemu_mutex_lock_ramlist(); >> + QTAILQ_FOREACH(block, &ram_list.blocks, next) { >> + close(block->fd); >> + } >> + qemu_mutex_unlock_ramlist(); >> +} >> + >> #endif /* !_WIN32 */ >> >> int qemu_get_ram_fd(ram_addr_t addr) >> diff --git a/vl.c b/vl.c >> index aee73e1..0b78f3f 100644 >> --- a/vl.c >> +++ b/vl.c >> @@ -1658,6 +1658,7 @@ static int qemu_shutdown_requested(void) >> return r; >> } >> >> +extern void qemu_close_all_ram_fd(void); >> static void qemu_kill_report(void) >> { >> if (!qtest_driver() && shutdown_signal != -1) { >> @@ -1671,6 +1672,12 @@ static void qemu_kill_report(void) >> fprintf(stderr, " from pid " FMT_pid "\n", shutdown_pid); >> } >> shutdown_signal = -1; >> + >> + /* Close all ram fd when exit. If the ram is shared by othter >> process > > s/othter/other/ >
OK.thank you. >> + * e.g vhost-user, it can free the hugepage by close fd after qemu >> exit, >> + * otherwise the process have to exit to free hugepage. >> + */ >> + qemu_close_all_ram_fd(); >> } >> } >> >> > > > > . > -- Regards, Haifeng