mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-19 21:36:30 +00:00
增加epoll机制 (#455)
* ## 增加epoll机制 - 增加epoll机制 - 添加事件等待队列,提升socket性能 - 优化poll,删除不能poll的文件系统中的poll方法 * 添加细节注释 * 修复文件关闭后epoll还持有对应描述符的文件弱引用的bug * 将EPollEvent设计为POSIX标准 * 修改s到us转换的计算错误
This commit is contained in:
@ -4,7 +4,7 @@ use crate::filesystem::vfs::file::FileMode;
|
||||
use crate::filesystem::vfs::syscall::ModeType;
|
||||
use crate::filesystem::vfs::{
|
||||
core::generate_inode_id, make_rawdev, FilePrivateData, FileSystem, FileType, IndexNode,
|
||||
Metadata, PollStatus,
|
||||
Metadata,
|
||||
};
|
||||
use crate::syscall::SystemError;
|
||||
use crate::{libs::spinlock::SpinLock, time::TimeSpec};
|
||||
@ -108,10 +108,6 @@ impl IndexNode for LockedAhciInode {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
fn poll(&self) -> Result<PollStatus, SystemError> {
|
||||
return Ok(PollStatus::READ | PollStatus::WRITE);
|
||||
}
|
||||
|
||||
/// 读设备 - 应该调用设备的函数读写,而不是通过文件系统读写
|
||||
fn read_at(
|
||||
&self,
|
||||
|
@ -8,7 +8,7 @@ use crate::{
|
||||
devfs::{devfs_register, DevFS, DeviceINode},
|
||||
vfs::{
|
||||
core::generate_inode_id, file::FileMode, syscall::ModeType, FileType, IndexNode,
|
||||
Metadata, PollStatus,
|
||||
Metadata,
|
||||
},
|
||||
},
|
||||
include::bindings::bindings::vfs_file_operations_t,
|
||||
@ -152,10 +152,6 @@ impl IndexNode for LockedPS2KeyBoardInode {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
fn poll(&self) -> Result<PollStatus, SystemError> {
|
||||
return Ok(PollStatus::READ);
|
||||
}
|
||||
|
||||
fn metadata(&self) -> Result<Metadata, SystemError> {
|
||||
return Ok(self.0.read().metadata.clone());
|
||||
}
|
||||
|
@ -165,7 +165,7 @@ impl<T: Transport> phy::Device for VirtioNICDriver<T> {
|
||||
|
||||
fn transmit(&mut self, _timestamp: smoltcp::time::Instant) -> Option<Self::TxToken<'_>> {
|
||||
// kdebug!("VirtioNet: transmit");
|
||||
if self.inner.lock().can_send() {
|
||||
if self.inner.lock_irqsave().can_send() {
|
||||
// kdebug!("VirtioNet: can send");
|
||||
return Some(VirtioNetToken::new(self.clone(), None));
|
||||
} else {
|
||||
|
@ -214,10 +214,6 @@ impl IndexNode for TtyDevice {
|
||||
return Err(SystemError::EIO);
|
||||
}
|
||||
|
||||
fn poll(&self) -> Result<crate::filesystem::vfs::PollStatus, SystemError> {
|
||||
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
|
||||
}
|
||||
|
||||
fn fs(&self) -> Arc<dyn crate::filesystem::vfs::FileSystem> {
|
||||
return self.fs.read().upgrade().unwrap();
|
||||
}
|
||||
|
Reference in New Issue
Block a user