Update spin lock users to lock_irq_disabled()

This commit is contained in:
Chuandong Li
2023-07-02 18:31:53 +08:00
committed by Tate, Hongliang Tian
parent ba4121cd6a
commit 78de1af348
15 changed files with 69 additions and 59 deletions

View File

@ -38,20 +38,20 @@ impl IfaceCommon {
}
}
pub(super) fn interface(&self) -> SpinLockGuard<smoltcp::iface::Interface> {
self.interface.lock()
pub(super) fn interface(&self) -> SpinLockIrqDisabledGuard<smoltcp::iface::Interface> {
self.interface.lock_irq_disabled()
}
pub(super) fn sockets(&self) -> SpinLockGuard<smoltcp::iface::SocketSet<'static>> {
self.sockets.lock()
pub(super) fn sockets(&self) -> SpinLockIrqDisabledGuard<smoltcp::iface::SocketSet<'static>> {
self.sockets.lock_irq_disabled()
}
pub(super) fn ipv4_addr(&self) -> Option<Ipv4Address> {
self.interface.lock().ipv4_addr()
self.interface.lock_irq_disabled().ipv4_addr()
}
pub(super) fn netmask(&self) -> Option<Ipv4Address> {
let interface = self.interface.lock();
let interface = self.interface.lock_irq_disabled();
let ip_addrs = interface.ip_addrs();
ip_addrs.first().map(|cidr| match cidr {
IpCidr::Ipv4(ipv4_cidr) => ipv4_cidr.netmask(),
@ -113,7 +113,7 @@ impl IfaceCommon {
}
let socket_family = socket.socket_family();
let pollee = socket.pollee();
let mut sockets = self.sockets.lock();
let mut sockets = self.sockets.lock_irq_disabled();
let handle = match socket.raw_socket_family() {
AnyRawSocket::Tcp(tcp_socket) => sockets.add(tcp_socket),
AnyRawSocket::Udp(udp_socket) => sockets.add(udp_socket),
@ -125,14 +125,14 @@ impl IfaceCommon {
/// Remove a socket from the interface
pub(super) fn remove_socket(&self, handle: SocketHandle) {
self.sockets.lock().remove(handle);
self.sockets.lock_irq_disabled().remove(handle);
}
pub(super) fn poll<D: Device + ?Sized>(&self, device: &mut D) {
let mut interface = self.interface.lock();
let mut interface = self.interface.lock_irq_disabled();
let timestamp = get_network_timestamp();
let has_events = {
let mut sockets = self.sockets.lock();
let mut sockets = self.sockets.lock_irq_disabled();
interface.poll(timestamp, device, &mut sockets)
// drop sockets here to avoid deadlock
};
@ -143,7 +143,7 @@ impl IfaceCommon {
});
}
let sockets = self.sockets.lock();
let sockets = self.sockets.lock_irq_disabled();
if let Some(instant) = interface.poll_at(timestamp, &sockets) {
self.next_poll_at_ms
.store(instant.total_millis() as u64, Ordering::SeqCst);

View File

@ -65,11 +65,11 @@ mod internal {
pub trait IfaceInternal {
fn common(&self) -> &IfaceCommon;
/// The inner socket set
fn sockets(&self) -> SpinLockGuard<SocketSet<'static>> {
fn sockets(&self) -> SpinLockIrqDisabledGuard<SocketSet<'static>> {
self.common().sockets()
}
/// The inner iface.
fn iface_inner(&self) -> SpinLockGuard<smoltcp::iface::Interface> {
fn iface_inner(&self) -> SpinLockIrqDisabledGuard<smoltcp::iface::Interface> {
self.common().interface()
}
/// The time we should do another poll.

View File

@ -112,7 +112,7 @@ impl Iface for IfaceVirtio {
}
fn poll(&self) {
let mut driver = self.driver.lock();
let mut driver = self.driver.lock_irq_disabled();
self.common.poll(&mut *driver);
self.process_dhcp();
}