From 873eb687b0c2e6ba1c27bfad3a86c7875b112aa3 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Mon, 11 Oct 2021 11:22:40 +0200 Subject: [PATCH] genode_c_api: reduce USB session ram requirements Ref #4294 --- repos/os/src/lib/genode_c_api/usb.cc | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/repos/os/src/lib/genode_c_api/usb.cc b/repos/os/src/lib/genode_c_api/usb.cc index 0b0e6cebd6..ddf340bd01 100644 --- a/repos/os/src/lib/genode_c_api/usb.cc +++ b/repos/os/src/lib/genode_c_api/usb.cc @@ -55,12 +55,9 @@ class genode_usb_session : public Usb::Session_rpc_object friend class ::Root; - enum { MAX_PACKETS_IN_FLY = 32 }; + enum { MAX_PACKETS_IN_FLY = 10 }; - struct Packet { - enum State { FREE, USED } state; - Usb::Packet_descriptor pd; - } packets[MAX_PACKETS_IN_FLY] { Packet::FREE, {} }; + Constructible packets[MAX_PACKETS_IN_FLY] { }; ::Root & _root; Attached_dataspace & _ds; @@ -354,7 +351,7 @@ bool genode_usb_session::request(genode_usb_request_callbacks & req, void * data /* find free packet slot */ for (idx = 0; idx < MAX_PACKETS_IN_FLY; idx++) { - if (packets[idx].state == Packet::FREE) + if (!packets[idx].constructed()) break; } if (idx == MAX_PACKETS_IN_FLY) @@ -389,20 +386,17 @@ bool genode_usb_session::request(genode_usb_request_callbacks & req, void * data addr, p.size(), data), p); break; case Packet_descriptor::BULK: - packets[idx].state = Packet::USED; - packets[idx].pd = p; + packets[idx].construct(p); req.transfer_fn((genode_usb_request_transfer*)&p.transfer, BULK, _id, idx, addr, p.size(), data); break; case Packet_descriptor::IRQ: - packets[idx].state = Packet::USED; - packets[idx].pd = p; + packets[idx].construct(p); req.transfer_fn((genode_usb_request_transfer*)&p.transfer, IRQ, _id, idx, addr, p.size(), data); break; case Packet_descriptor::ISOC: - packets[idx].state = Packet::USED; - packets[idx].pd = p; + packets[idx].construct(p); req.transfer_fn((genode_usb_request_transfer*)&p.transfer, ISOC, _id, idx, addr, p.size(), data); break; @@ -429,9 +423,10 @@ void genode_usb_session::handle_response(genode_usb_request_handle_t id, genode_usb_response_t callback, void * callback_data) { - Usb::Packet_descriptor p = packets[id].pd; - _ack(callback((genode_usb_request_transfer*)&p.transfer, callback_data), p); - packets[id].state = Packet::FREE; + Usb::Packet_descriptor p = *packets[id]; + _ack(callback((genode_usb_request_transfer*)&p.transfer, + callback_data), p); + packets[id].destruct(); }