linfeng
linfeng
对啊,基于unwind的panic会释放栈帧内的资源的啊
> # 问题 > File对象的add_epoll和remove_epoll方法,里面对文件类型进行了特判。 我认为可以统一处理这个事情,给IndexNode这个trait加add_epoll()和remove_epoll()函数会比较好。 > > @Godones 另一个问题,对于代码:https://github.com/DragonOS-Community/DragonOS/pull/894/files#diff-08d0c277f75d9d64222b3634cc6c86f177e35c79e7cda7ca1161a1211cde4922R522 不能认为,“不是pipe,且不是socket的,那么这种inode就是EventFdInode” 这个跟上面Add的时候的语义完全就对应不上,需要修改。 > > 抄送:@GnoCiYeH @Chiichen 这里并不是说“不是pipe,且不是socket的,那么这种inode就是EventFdInode”,因为这里只是尝试向下转换为EventFdInode,如果成功了,那它就是EventFdInode,如果不是,那就按照原来的方式返回SystemError::ENOSYS
给IndexNode这个trait加add_epoll()和remove_epoll()函数后,我觉得可以对这些进行统一,因为还有其它类型的Inode也会使用这些函数。
@GnoCiYeH 请问一下在进程进行epoll时,判断是否有就绪事件的代码如下: ``` // 判断epoll上有没有就绪事件 let mut available = epoll_guard.ep_events_available(); ``` 这只是简单判断了队列是否为空。这意味着如果一个文件有就绪事件,它需要主动把事件放到队列中。这是怎么实现的?
这个地方应该感觉需要做一个重构吧,内核中不止socket会产生事件。
是否可以在poll的时候主动轮询一下?
> > 是否可以在poll的时候主动轮询一下? > > epoll最核心的地方在于:有数据来才唤醒。在poll的时候主动轮询解决不了问题,因为poll这个动作是在唤醒epoll后来做的,但是问题在于该如何唤醒epoll? 我大概理解怎么唤醒了,按照现在的pipe相关的代码,在对特殊文件进行操作的时候,可以检查是否需要唤醒epoll,比如pipe文件就在读写操作的时候进行了唤醒。
@Chiichen @fslongjin 我重新整理了ebpf的提交代码,麻烦两位看看。
> @Godones 已经合并了最新的主线,麻烦解决一下冲突,对齐一下主线的实现,我记得在mmap的实现那部分(ucontext)逻辑是有冲突的 可以
@Chiichen 似乎合并主线后无法通过CI?