Commit Graph

66369 Commits

Author SHA1 Message Date
Augustin Cavalier
eb3126cba7 mixer: Delay starting until we have a valid time source.
BTimeSource::Now() uses the current real time to compute the
performance time, so if the performance time and last real time
are 0 in the time source data, we get a positive value that is
the same as the system time. That means we wind up waiting
a while to start the mixer unnecessarily, often equal to the
current system_time() when the mixer was started.

So, rather than checking the computed Now(), we instead check the
raw performance and real time values from the time source, and
wait for those to be valid before starting.

Also remove a comment about the BeOS R5 multi_audio node. It seems
that ours generates valid time values more quickly, but still starts
off with performance and real times of 0 (which are the default in
the time source anyway.) The new code would still work under such
broken nodes regardless.

This seems to fix sound output taking a long time to start after boot
(or even longer after restarting media services.)
2024-08-05 23:29:20 -04:00
Augustin Cavalier
b5142f7645 multi_audio: Add assertion in TimeComputer that realTime didn't go backwards.
Would have caught the problem fixed in the previous commit.
2024-08-05 23:24:06 -04:00
Augustin Cavalier
a62032d8d5 multi_audio: Don't add/publish timestamps of 0.
Otherwise they will mess up the time computer and then the published
times, giving huge or miniscule drift values (since the time computer
already has a non-zero real-time by this point, so it will compute
a negative difference if passed 0 for the current real time.)
2024-08-05 23:23:34 -04:00
Augustin Cavalier
30e70f48c1 multi_audio: Disable some unneeded prints. 2024-08-05 23:21:53 -04:00
Augustin Cavalier
ddffecccca BTimeSource: Call debugger() if someone tries to Publish a drift of 0.
Would have caught the problems fixed in the last commit.
2024-08-05 16:49:01 -04:00
Augustin Cavalier
dc718d1a4e media-add-ons: Do not publish times with drifts of 0.
The "drift" value is the ratio between performance and real time,
so it must never be 0. Specifying it as such would mean that the
consumers of the time source would wind up with wait times that were
extremely large, due to doing a float divide-by-zero.
2024-08-05 16:46:39 -04:00
Augustin Cavalier
8cfa2d5f89 app_server: Fix timeout computation in DelayedMessageSender.
While working on the kernel timer fixes, I noticed some timer events
that had very large, but not quite infinite, timeouts; and this was
one of them.

Should not constitute a behavioral change (since the nearly-infinite
timeouts would never be hit.)
2024-08-05 16:44:09 -04:00
Augustin Cavalier
6d1478af8c kernel/timer: The list does not need to be volatile.
We only access and modify these fields with the spinlock held,
so there's no need for volatile here.
2024-08-05 16:42:00 -04:00
Augustin Cavalier
f9f6083f41 kernel/timer: Fix scheduling of absolute-real-time timers.
The logic in add_timer was scheduling the timer using "scheduleTime",
the originally passed value, not "event->schedule_time", which
is adjusted inside add_timer to be relative to the system_time.
This meant that if the event was the first added to the list,
we would set the hardware clock for a very long time in the future
rather than the correct duration.

Since until recently cancel_timer reset the hardware clock every run
even if the cancelled timer wasn't at the head of the list, this
problem was covered up by that one, as usually the scheduler would
cancel a timer relatively frequently, and thus the hardware timer
would usually get set to the correct value relatively frequently.

But after c5a499a74b, this was not
the case anymore as we skip updating the hardware timer if we cancelled
any timer other than the one at the head of the list, exposing this bug.

The fix is simple: don't bother storing a local "scheduleTime" variable
separate from the event->schedule_time. This makes things less confusing
anyway.

Fixes #18967.
2024-08-05 15:42:25 -04:00
Augustin Cavalier
352548d0a3 kernel/thread: Do not rely on B_TIMED_OUT to cancel the unblock timer.
As anything can specify it as an unblock error code, not just the
unblock timer code. Also check < B_INFINITE_TIMEOUT not !=.
2024-08-05 15:36:25 -04:00
Augustin Cavalier
8266f4d7aa HaikuDepot: Shift pkg data fetch into processes
HD currently fetches changelog and user ratings for packages using
a thread from the window. In this change, the fetching of this
data is instead performed using process coordinators in order to
make background processing behaviour consistent and to prep for
future changes.

Change-Id: I7fd0f33c4b9a63fa4b999e2909ce320296db59b9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7928
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
2024-08-05 16:22:15 +00:00
Andrew Lindesay
4a52b9c7e3 HaikuDepot: Move Path Logic from Model
Change-Id: I575be693f6e1be5cf0a93184553535e3b7401372
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7927
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Haiku-Format: Haiku-format Bot <no-reply+haikuformatbot@haiku-os.org>
2024-08-05 16:21:59 +00:00
PulkoMandy
b9ec4108cc PCI ECAM: fix boundary check
The previous code (introduced in hrev57034) was correct for most accesses, but
would reject access to the last word of the configuration space using 8 or 16 bit
access.

May help with #18536

Change-Id: I3eecbdb187eca0ec57e0ce65e4d1eb0d7c43d00a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7929
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2024-08-05 16:21:20 +00:00
Zardshard
3644b442fa Do not clear a BBitmap with B_BITMAP_ACCEPTS_VIEWS
Unless, of course, it has the B_BITMAP_CLEAR_TO_WHITE flag as well.

From my testing, not clearing the BBitmap matches BeOS's behaviour
more closely (if not exactly) compared to clearing the BBitmap.

My test program created the BBitmap and BView, drew a diagonal red line
across it, and saved the result to a file.

The results:
* BeOS - transparent background; red line with no anti-aliasing
* Haiku, current behaviour - white background; red line
* Haiku, new behaviour - transparent background; red line with
  black pixels as artifacts of the anti-aliasing process.

The anti-aliasing artifacts, as PulkoMandy pointed out, are simply a
result of not using the B_OP_ALPHA and an appropriate blending mode,
and would happen on BeOS as well if the line had some transparency,
such as through anti-aliasing.

Change-Id: I09ac054eb0ce79e697b78ea48d1db4a15041e600
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7899
Haiku-Format: Haiku-format Bot <no-reply+haikuformatbot@haiku-os.org>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
2024-08-05 16:19:41 +00:00
Niklas Poslovski
a713770a18 Debugger: Make text in SourceView readable with dark theme
Change-Id: Ia3baead6676fca1a3454b821c405592da29f715c
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7936
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2024-08-05 11:38:05 +00:00
Augustin Cavalier
070b7ca96d TCP: Tolerate zero round-trip time.
TCP times are measured in milliseconds, and so on LAN (or on two
VMs on the same host) we can wind up with round trip times of
less than 1 ms, which thus come out to 0. Tolerate this appropriately
rather than taking 0 to be a magic value meaning "unknown".

Change-Id: Ica827ee4ea353208291cf4348e9da8af6214b507
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7926
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2024-08-05 04:29:58 +00:00
Augustin Cavalier
b60ddcdff1 TCP: Implement dynamic receive window sizing.
The basic idea: target a window size large enough to fit one
second's worth of data in it, using the round-trip time to
condition when we make the computations.

If we don't have SACK (to reduce retransmissions on packet loss)
or the user has specified a specific receive buffer size, then don't
scale at all.

Send window scaling isn't implemented yet, as that more-or-less
requires more careful management of congestion windows and SACK
processing which we do not currently implement.

Part of #15886.

Change-Id: Ia2480e6981324d2663e47cb17e8fc47ccc5f9aa0
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6364
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2024-08-05 04:29:58 +00:00
Augustin Cavalier
c2f5d5c290 TCP: Only send a window update in ReadData() if there's less than half left.
This is more important when window scaling is enabled as otherwise
we will send large amounts of window-update ACKs needlessly.

Ideally we would just use fReceiveWindow here, but due to a
TODO it stays constant (or increases only) at present, so we
have to compute the window size remainder inline. Another
similar computation elsewhere failed to take the case when
the window is 0 into account, so fix that too while at it.

Change-Id: Ibcca258472940d7de2d1adc9f986ddb7245438be
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7924
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Haiku-Format: Haiku-format Bot <no-reply+haikuformatbot@haiku-os.org>
2024-08-05 04:29:58 +00:00
Augustin Cavalier
e028d3f303 ethernet: Disable frame sizes larger than the ethernet maximum.
The network stack (TCP in particular) does not handle path MTU
discovery properly (or at all), so we should avoid trying to
send (or advertise support for) frames that large.

Now that we use net_buffers for receiving and sending directly,
this value really is only the "MTU"; it is entirely possible
to receive frames larger than this successfully. So this should
only fix things and not break anything at present.
2024-08-02 22:31:11 -04:00
Augustin Cavalier
7bdc5201fe ICMP: Remove an unused declaration.
This is already declared elsewhere as ICMP_CODE_FRAGMENTATION_NEEDED
and handled inline appropriately.
2024-08-02 22:28:25 -04:00
Augustin Cavalier
8b414b6da0 freebsd_network: if_mtu is reported only sans ETHER_HDR_LEN.
The CRC is handled within the driver and does not need to be accounted
for here (despite the fact that some of the constants used in MTU
assignment do include it in their computations.)
2024-08-02 22:20:42 -04:00
Augustin Cavalier
1139c01276 ethernet: Assign MTU from constants rather than a magic value.
ETHER_MAX_FRAME_SIZE - ETHER_HEADER_LENGTH is still 1500.
2024-08-02 22:19:47 -04:00
Augustin Cavalier
6cfbbceec3 ramfs: Style fixes to DataContainer.
No functional change.
2024-08-02 22:16:03 -04:00
Augustin Cavalier
3d393797ba ram_disk & ramfs: Use BStackOrHeapArray for the vm_page* arrays. 2024-08-02 22:15:45 -04:00
Augustin Cavalier
838fb559cb ram_disk & ramfs: Allocate cleared pages.
We need to not expose arbitrary previously-used memory contents
to userspace applications, but this also fixes a bug in that
POSIX specified partial pages in mmaped files should be zero-filled,
and without this, RAMFS did not adhere to that.

Should fix https://github.com/haikuports/haikuports/issues/10463
(which was earlier reported as #18903.)
2024-08-02 22:09:10 -04:00
Augustin Cavalier
ddfd8f81bc ram_disk & ramfs: Unify the _GetPages/_PutPages code.
Solves a TODO. No functional change intended.
2024-08-02 22:06:07 -04:00
Andrew Lindesay
d668d22749 HaikuDepot: Rework Languages Handling
Tidy up of the languages model handling.

Change-Id: Ie9f93dab0a91b4598da87e58cb065fc5272a7b74
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7925
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
2024-08-02 15:11:20 +00:00
Augustin Cavalier
71c7a4a482 WeakReferenceable: Remove magic value from Get().
"-11" looks like a special magic value, but as the first thing
the loop does is reset it, it's just a dead store. (Debugging leftover?)
2024-08-01 22:51:13 -04:00
Augustin Cavalier
d8405312ab TCP: Minor code and comment cleanups.
No functional change.
2024-08-01 22:31:07 -04:00
Augustin Cavalier
cb5415fa29 TCP: Print the socket pointer in Dump().
So that it can also be inspected in KDL.
2024-08-01 22:31:07 -04:00
Augustin Cavalier
1981214cd7 TCP: Initiate a send if the new window is larger than 3 default segments.
If the send maximum segment size is very large (as it is on loopback)
and we have receive scaling enabled, we can wind up in situations where
the advertised window will basically always be smaller than the maximum
segment size. In order to avoid stalling until timeouts occur in
this case, check the advertised window against the default segment
size times 3 (which is around the size of ethernet MTU.)
2024-08-01 22:31:07 -04:00
Augustin Cavalier
de6a7a3edf TCP: Do not start the TIME_WAIT timer in Free() if we are about to delete.
The TIME_WAIT timer, when it fires, either sets FLAG_DELETE_ON_CLOSE
(if FLAG_CLOSED is not set), or releases the socket reference directly
(if it is set.) As we set FLAG_CLOSED in Free(), we only want to start
the TIME_WAIT timer if FLAG_DELETE_ON_CLOSE is not set yet.

Probably harmless since the timer was cancelled on deletion anyway,
but it doesn't hurt to be clearer here.
2024-08-01 22:31:07 -04:00
Augustin Cavalier
cb98c7928c TCP: Send immediate ACKs for every out-of-order packet, plus...
...in-order packets following out-of-order ones.

This more or less undoes 04468d614b.
A closer reading of the specs indicates we should send duplicate ACKs
for every out-of-order packet even when SACK is enabled (and of course
send up-to-date SACK information with each duplicate ACK in that case.)
2024-08-01 22:31:07 -04:00
Máximo Castañeda
5c9ff09463 AboutSystem: terminate copyright list
Fixes: #18963
Change-Id: I525627ce9008aef43d3b99d231865fe5598e1994
2024-08-01 18:26:00 +02:00
Jérôme Duval
6aab5c47c2 XHCI: define the SuperSpeedPlus ID for 10Gbps connection speed
can be found on USB 3.1 xhci controllers in the PORTSC register

Change-Id: I11df7e22ca1ab71b42325f8c3db1e4745287feeb
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7923
Haiku-Format: Haiku-format Bot <no-reply+haikuformatbot@haiku-os.org>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2024-08-01 04:24:54 +00:00
Augustin Cavalier
0f73d13bda virtio_net: Fix logic inversion in VIRTIO_NET_CTRL_RX.
The onoff value should be set to 1 for "on" and 0 for "off",
based on the FreeBSD code.

Change-Id: I8da7c905bc4af815f51563b6d9696692b29771db
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7919
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Haiku-Format: Haiku-format Bot <no-reply+haikuformatbot@haiku-os.org>
2024-08-01 04:23:26 +00:00
Augustin Cavalier
173fb65a91 virtio_net: Implement receive checksum offloading.
virtio can pass us packets with some of the checksums incomplete.
For now we just pass these to the stack without completing their
checksums; the stack will check only the CHECKSUM_VALID flags.

Tested with QEMU on Linux (IPv4, UDP, TCP, ICMP), seems to work.

Change-Id: Ifc13d931278849b6c4eec550444344e7f1bf53d1
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7918
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
2024-08-01 04:23:26 +00:00
Máximo Castañeda
13e1bd391b app_server: lock font manager in PicturePlayers accesses
Change-Id: I0a5e59d7141167d8fb22d9cf23baeddd2ea8a8df
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7922
Haiku-Format: Haiku-format Bot <no-reply+haikuformatbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
2024-08-01 04:21:50 +00:00
Máximo Castañeda
78d164f7ee app_server: update font manager revision on font addition and removal
The revision number is used to know if the font list has changed, and
that's where it happens.

Fixes the revision going back when a font directory is removed.

Change-Id: Ib9bb0f463177aff11665c0083604f4a7e35395eb
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7921
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Haiku-Format: Haiku-format Bot <no-reply+haikuformatbot@haiku-os.org>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
2024-08-01 04:21:50 +00:00
Máximo Castañeda
e03d9e134c BFont: reset to plain font on font unload
It may not be ID 0 if it has been changed from the default.

Change-Id: I9aef328ee243d85c2cd37b47666440e0e54e66c7
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7920
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Haiku-Format: Haiku-format Bot <no-reply+haikuformatbot@haiku-os.org>
2024-08-01 04:21:50 +00:00
Augustin Cavalier
9888c3ce83 TCP: Skip updating round-trip time if it's <= 0.
Taken from https://review.haiku-os.org/c/haiku/+/6364.
2024-07-31 16:20:17 -04:00
Augustin Cavalier
04468d614b TCP: Don't send extra duplicate ACKs with SACK enabled.
If SACK is enabled, then we do not need to send a duplicate ACK
for every out-of-sequence packet, just the first one; following
ones will get delayed-acknowledge'd with SACK information.

Under those conditions, this reduces duplicate ACKs significantly.
2024-07-31 16:19:14 -04:00
Augustin Cavalier
e86e0ee4fd TCP: Fix operator precedence in SACK in _PrepareSendSegment().
?: is lower precedence than -.
Spotted by Clang.
2024-07-31 16:17:07 -04:00
Jim906
ffd9482847 FAT: Extend volume size limit
* Extend the volume size limit in bsd_device_init() from 32 GB to 256
  GB.
* Permit read-only access above this threshold.
* I would like to do more testing before allowing write access above
  256 GB.
* See #11119.

Change-Id: Ica7872d5f4c06415c1501f7a8ffb955785f91a29
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7911
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2024-07-31 16:25:42 +00:00
Augustin Cavalier
587c5ecdac kernel/fs: Check for missing vnode fields in get_vnode.
And issue a panic if they're unset on KDEBUG kernels.
This would've made the cause of #18838 much more apparent.
2024-07-30 20:57:31 -04:00
Augustin Cavalier
61f7048ea3 RAMFS: Properly set node->ops in ramfs_get_vnode.
Fixes #18838.
2024-07-30 20:54:33 -04:00
Augustin Cavalier
ff890d04b3 app_server: Acquire the lock in GlobalFontManager::GetStyle().
On debug builds, the assertion failed on picture playback.
So just use a BAutolock to acquire the lock (again) for
this method.
2024-07-30 20:54:00 -04:00
Augustin Cavalier
4448758b3e app_server & Interface Kit: Rework cursor reference management.
We can't allow applications to reference/unreference cursors,
this is a safety/security violation, and it being done improperly
lead to the reference counts becoming incorrect on the app_server
side.

Change AS_REFERENCE_CURSOR to AS_CLONE_CURSOR and adjust the Cursor
code appropriately. (In the future, copying BCursor without Clone'ing
the data in the case of custom cursors could be accomplished with
client-side reference counting.)

Then rework CursorManager to remove cursors at once on team deletion,
and otherwise clean up cursor reference management to let the
reference counting handle things.
2024-07-30 20:51:53 -04:00
Augustin Cavalier
917dcdfe75 app_server: Fix reference counting for cursors in Desktop class.
We need to acquire our own references to these Cursors.
Fixes assert failures after the addition of more Referenceable asserts,
and may help with #13464 and #18275.
2024-07-30 19:40:58 -04:00
Augustin Cavalier
ae302bcf80 launch_daemon: Change permissions of tmp and shared_memory to 0777.
This matches Linux. New files created in these folders will still
have rwxr-xr-x by default, of course, but the directories themselves
should be usable by all users.
2024-07-30 17:04:48 -04:00