Commit Graph
100 Commits
Author SHA1 Message Date
Michael Lotz 38a1d67039 Fix copy&paste typos. Thanks Urias for spotting!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33299 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-26 00:18:17 +00:00
Michael Lotz 04aa141beb Adding a VMWare mouse input server filter add-on. It supports the same io port
based protocol as the X vmmouse driver does. It yields proper absolute pointer
positions under both the normal VMWare console and using the builtin VNC server.
Therefore "fixes" the issue seen in #4630.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33298 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-26 00:09:13 +00:00
Michael Lotz eea7b7309f When writing a fresh MBR on initialization, also write boot code to it. It uses
the combined PMBR/MBR bootloader from FreeBSD done by André Braga. It will
chainload either a Haiku GUID partition or fallback to the partition marked
active in the MBR.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33263 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-24 15:24:46 +00:00
Michael Lotz c7980f8d06 Add a pseudo condvar implementation and two more functions, just enough to get
all the USB drivers working with this single compat header. Usefulness might
be questionable, but since I did the work anyway, why not check it in as well...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33243 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-23 05:39:03 +00:00
Michael Lotz e65227c272 * Error out on the num events ioctl in case the device was removed, otherwise
the original BeOS input_server will fail to detect the error and never close
  the device.
* Remove the empty kernel_cpp header and use the one from kernel util instead.
* Add some missing headers for completeness.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33242 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-23 05:30:04 +00:00
Michael Lotz ecd60dec1a Removing unused BeOS compatibility header.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33241 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-23 02:26:54 +00:00
Michael Lotz 8b6349fd32 * Add a missing result assign that would cause the synchronize ioctl to always
return an error.
* Properly use the name length instead of a hardcoded buffer size when composing
  the name of the raw device and ensure proper termination.
* Case new ioctls for Haiku as the target platform. Indeed this driver works
  fine on BeOS even though it was written natively for Haiku.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33240 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-23 02:16:47 +00:00
Michael Lotz 1393394ba6 We need to guarantee that when cancel returns that the callback won't be called
anymore. It could happen that the transfer was already in the process of being
finished, so wasn't in the list of pending transfers anymore. Cancel would then
return even though the callback wasn't called yet. This could lead to a callback
being called after a driver was already unloaded (even after it cleaned up the
pipes it used).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33239 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-23 01:59:05 +00:00
Michael Lotz be71ca4f57 Some minor updates just in case someone really tries to build on BeOS (with an external build system, as natively building is not supported anymore).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33238 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-22 22:02:57 +00:00
Michael Lotz 9142bf3404 * Just use memset instead of a custom loop to clear the code area.
* Also rename it from pad1 to code_area as that's what it is.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33146 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-15 16:45:26 +00:00
Michael Lotz 57301f6e20 We do not yet support frame sizes this large. This makes the ipw2100 driver
usable under Haiku.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33130 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-14 08:07:00 +00:00
Michael Lotz 1dd6c50cb3 When submitting transfers there is a race condition between adding the pending
transfer to the transfer list and scheduling the transfer descriptors on the
controller by switching the endpoint tail. Since we only check that the endpoint
head is equal to the endpoint tail to conclude that there are no active
transfers, we need to ensure that we don't accidently do that check before the
transfer descriptors are scheduled. Otherwise we could happen to processed a not
yet started transfer and finishing it before an actual transfer has taken place.
This would then lead to 0 byte transfers and toggle mismatches. To fix this we
now protect the transfer addition and tail switching as well as the check in the
finisher with a per-endpoint mutex. Note that we allocate the lock on the heap
and only store the pointer in the endpoint structure as this one is allocated
from the precious physical memory pool. Could fix #4067.
Also switched the Jamfile to UsePrivateKernelHeaders (for the MutexLocker) and
removed BeOS compatibility.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33129 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-14 06:26:54 +00:00
Michael Lotz 9b0a2ab24c No need to crash if we are deleted after not getting far enough to allocate the
configuration buffers.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33122 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-14 01:22:58 +00:00
Michael Lotz 40157e3fed Add ideinfo and idestatus only when building with the IDE stack.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33082 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-12 06:11:11 +00:00
Michael Lotz 09d5a191c2 Remove copyrighted icons from app and print server. They don't yet have a
replacement.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33080 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-12 05:59:16 +00:00
Michael Lotz 5e8b8e5c9e Remove copyrighted bitmaps. Adjusted the code to simply ignore them if they
can't be loaded.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33079 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-12 05:55:19 +00:00
Michael Lotz b4415503b6 * Removed copyrighted bitmaps.
* Draw a pseudo mouse instead of using the bitmap. It's ugly and should be done
  properly by someone with more of an artistic talent than me. But it should do
  for now.
* Downright removed the little icons. The code is still there, but since the
  icons aren't there anymore it will simply fail to load them and not use them.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33078 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-12 05:53:09 +00:00
Michael Lotz 5be3cdb679 Force uid and gid to 0 when building the CD. This avoids taking over foreign
user and group ids on build platforms that support them. Fixes #4458.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33066 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-11 18:12:16 +00:00
Michael Lotz 1bcca32a9e * Also take into account that the alignment due to B_ANY_KERNEL_BLOCK_ADDRESS
can cause overflows.
* Added a generic IS_VALID_SPOT() macro that checks for overflows and checks if
  the area will fit with the given constraints.
* Use the macro to simplify the places where these checks are necessary.
* Use the provided "end" limit instead of the address space end. It currently
  doesn't matter but makes more sense.
* Rename newBase variables to alignedBase as that's what they are.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33061 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-11 07:29:36 +00:00
Michael Lotz e717a35b6f * Change the way we check for enough available space when searching for spots
to insert areas so we don't overflow.
* Consequently use the area end (base + size - 1) where appropriate which
  prevents overflows in a few places.
* Properly check for reaching the address space end.
* If we've already found a spot we don't need to recheck if we've found one.
* Simplify the B_EXACT_ADDRESS checks down to a simpler single if statement
  instead of the four seperate ones.
* Properly calculate the search end for B_EXACT_ADDRESS as well, it's also
  base + size - 1.
* Block the full last page now that this actually works without overflowing.
* Some style changes and added spacing.

This should now really fix #2550. Previously the overflow protection didn't
actually work because on allocation we overflowed and completely missed the
protecting area.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33037 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 17:58:19 +00:00
Michael Lotz cb4a951f4c Also return B_NOT_A_DIRECTORY in write_overlay when appropriate.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33035 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 03:29:04 +00:00
Michael Lotz 5332eb402b Style fix. I really tried hard, but still failed...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33034 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 02:11:40 +00:00
Michael Lotz 65b5e4d7ed Make use of the address range blocking to guarantee that accessing 0xdeadbeef
and 0xcccccccc (and 64 pages thereafter) in any way will always lead to a crash.
Before it could happen that these ranges were allocated for an area and then
accessing these would not be as evident anymore. Only enabled when the
corresponding paranoid setting is enabled (which it currently is).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33033 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 02:09:16 +00:00
Michael Lotz 9aff7f1593 Block the very last page of kernel address space. The problem here is that non
of the VM functions handling areas are overflow safe. If an area is created that
spans across the last page many places will run into an integer overflow. This
mostly concerns the area allocation path in find_and_insert_area_slot() and also
vm_create_anonymous_area() where the loop for mapping pages for B_FULL_LOCK
areas overflows and runs more times than it should leading to #2550.
This could be seen as a workaround. The real fix would be to make everything
overflow safe. The thing is that this does also concern the user of the area
which could easily have forgotten to check for overflows as well, so I am a bit
uneasy with handing out areas that could easily lead to such hard to debug
problems. Since this is really an edge case and this single step safes quite a
bit of extra checks I'd actually be OK with keeping it that way.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33032 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 02:03:31 +00:00
Michael Lotz 3794518c2d Also check for read-protection of an area. Adjusted naming from read-only to
write-protected and read-protected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33031 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 01:47:22 +00:00
Michael Lotz 0f4242de40 Implement a vm_block_address_range() function which creates an area with no
mapped pages and a non-read and non-write protection to block a certain address
range from being used by anything.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33030 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 01:40:46 +00:00
Michael Lotz 1a053eedc0 Revert r32994 and add a comment to explain the intention. Thanks Ingo for the
clarification.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33001 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-08 16:24:43 +00:00
Michael Lotz fbcf5f3f92 Don't know what this was supposed to do, but with the VADDR_TO_PDENT() it would
end up as 0 again in any case. It certainly looks correct without it, removing
so it doesn't confuse the next one reading over it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32994 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-08 03:51:17 +00:00
Michael Lotz 58465926de Fix auto indent feature of BTextView. The indent was inserted before the line
break instead of after. Also whitespace after the cursor position wasn't
ignored.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32993 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-08 03:46:37 +00:00
Michael Lotz 50a8c7c63e Apply OptionalPackages9.diff by scottmc from #4363 to fix libiconv and libxml2
troubles. Fixes #4438.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32992 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-08 03:38:30 +00:00
Michael Lotz 3e513e1b8b Ignore negative start LBA values and assume 0 instead. At least VMWare Fusion
seems to incorrectly set pseconds to 0 for the first track, leading to an LBA of
-150 which messes up session recognition. Works around VMWare issue in #4439.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32990 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-08 00:45:16 +00:00
Michael Lotz 257f000bd2 * When reserving pages and there aren't yet enough free pages, only steal as
many pages as are actually missing, not the full count.
* Take into account that free_page_queue_count() can be less than sReservedPages
  (when some of the reserved pages have been allocated already) in
  vm_page_num_unused_pages(). Before it could return negative and therefore
  wrapped numbers.
* Simplify the page scrubber loop by continuing early. Also avoids a needless
  interrupt spin lock acquisition when there's nothing to do.
* Some minor coding style cleanup.
* Fix a typo.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32980 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-07 02:08:09 +00:00
Michael Lotz 156b8d5d2d * Initialize member variables.
* Remove some unused members.
* Avoid initializing the mouse position to non-integer coordinates.
* The frame right/bottom are width/height - 1.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32979 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-07 01:37:22 +00:00
Michael Lotz 1dd6345561 If the boot volume is BFS and read-only mount it with the write_overlay. This
allows for BFS based LiveCDs. Still this whole name matching feels hacky.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32976 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-06 23:15:23 +00:00
Michael Lotz aad5c04223 Add valloc() and posix_memalign() to malloc debug heap.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32954 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-06 05:13:01 +00:00
Michael Lotz a712373138 Apply fix of r32951 to malloc debug heap as well.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32953 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-06 05:11:48 +00:00
Michael Lotz da3412492a When we actually delete the area, we can obviously not access the next pointer
stored in there anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32951 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-06 05:04:55 +00:00
Michael Lotz 9ae89b8373 * Implement attribute support in write_overlay. It mostly uses the same backends
as the other node operations.
* Differentiate between data and metadata modification, so that changes to
  attributes or stat fields (other than size) dont't prevent direct IO relay.
* Suppress child finish notifications when sending subrequests to the
  underlaying filesystem. Otherwise the request can be gone by the time we
  try to complete it.
* Fix offsets used for IORequest::CopyData().
* Some refactoring.
* Added locking.

With that a write_overlay can be put on attribute enabled filesystems to either
make them writeable or snapshot them. This allows for example for a working
BFS based LiveCD.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32937 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-05 01:54:40 +00:00
Michael Lotz c39414002f Give an IORequest user the possibility to suppress child finish notifications.
This allows for synchronous uses where subrequests are forked off and waited on.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32936 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-05 01:16:56 +00:00
Michael Lotz c24f6c7b06 When deleting all subrequests the pending children count should probably be
reset as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32935 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-05 00:26:29 +00:00
Michael Lotz 60a981fbbe When a focus locked window is hidden, we need to remove the focus lock.
Otherwise the focus cannot be changed to another window. In one case this could
have a severe sideeffect: When a window is quit it is hidden to remove focus and
remove it from screen. If this didn't work due to the focus lock, the fFocus
member would become a stale pointer after the window was quit and deleted. The
app_server would crash or corrupt memory on the next focus change. Easily seen
when moderately quickly clicking away a few alert windows.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32929 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-04 03:51:15 +00:00
Michael Lotz edb6254810 When an app is going down and the windows are destroyed, all views are detached.
On detaching the views remove themselves from the app local token space. Since
the ServerApp only waits for all ServerWindows to be removed from the window
list and not for their actual destruction, it can happen that the ServerApp is
deleted before the window destruction and hence the view detaching has finished.
The views would then access a stale ServerApp pointer and try to remove their
token from the deleted token space. To avoid that we set the ServerApp pointer
to NULL when the window is removed from the app (as after that the app can be
gone any time) and check for that case when detaching.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32927 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-03 22:56:30 +00:00
Michael Lotz 98f77afdb7 We need to notify the request also in the error case.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32915 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-03 05:41:53 +00:00
Michael Lotz 230153f133 Reset the error variable to B_OK in case we want to continue after allocating
only some sub requests worked. Previously we would have simply canceled all
of the subrequests in the loop because we cancel after the first error.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32914 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-03 05:40:06 +00:00
Michael Lotz b2350565ba Fix two problems in devfs_io:
* An off by one error prevented the very last block of a device to be accessed
  through IO.
* In case of error the request wasn't notified causing anyone (the page writer
  for example) to wait forever for the request to complete.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32913 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-03 05:36:23 +00:00
Michael Lotz 44fbca2790 Implement the rest of the IO hook. We now do directly satisfy write requests
by writing them into our buffers and directly satisfy read requests by copying
our buffers, filling any gaps by spawning off subrequests to the underlaying
filesystem.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32900 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-02 03:09:28 +00:00
Michael Lotz 271b9ad49a Enable the IO hook for both attribute and write overlay. Attribute overlay isn't
concerned by it as it does not do file data, it simply passes the hook through.
In the write_overlay case we check for write operations and for modified nodes.
In both cases we return B_NOT_SUPPORTED which will cause a fallback to
synchronous IO. The main problem with the fallback is not that it is synchronous
but that the physical buffers of the request will be mapped and filled page
wise, which makes it slow for various reasons. In any case with this setup all
reads to write_overlay that can go through unmodified now do. This should speed
up CD boot as there is no physical to virtual translation overhead and no limit
to page wise reads. In the best case it should now read 256 blocks at the time
instead of always falling back to 2. My tests show no side effects on creating,
writing or partially modifying nodes so far.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32897 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-01 21:22:37 +00:00
Michael Lotz 185fd1c5d2 Ported over the kernel heap to libroot to make use of it's validation
capabilities to aid in debugging memory corruption issues.

It does:
* Initialize memory to 0xcc to help turn up use of uninitialized memory
* Set freed memory to 0xdeadbeef to help find accesses of freed memory
* Use the paranoid heap validation to turn up many cases of memory corruption
* Use a simplistic wall check to turn up memory overwrites past allocations
* Take extra steps to validate freed addresses to turn up misaligned frees

It has an interface to en-/disable paranoid validation and to start/stop regular
wall checking. Both are currently just enabled. At a later stage a debug version
of libroot could be used by an application and the checks enabled at will. Note
that due to the paranoid validation and the suboptimal locking this allocator
will perform horribly. Still to find memory corruption issues in the system or
also in your applications it can be helpful to build your installation with it
turned on. To enable it you currently need to edit the Jamfile to sub-include
the malloc_debug instead of the malloc directory.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32894 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-01 18:15:30 +00:00
Michael Lotz 419f2d6f3e Fix errors in maintaining the area list due to assumptions that are only true
for the page list but not the area one. Since multiple pages can be allocated
at once, even an area that is not at the top of the list can become empty. In
such a case the area list would previously have lost entries. Also because
we can remove more than one page from any area, not just the top one, we may
need to move forward in the list so that it stays ordered by free pages.
+alphabranch


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32880 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-01 08:46:39 +00:00
Michael Lotz 5bfffb9d94 The block size wasn't initialized, causing usages of an IOScheduler without
a DMAResource not to work.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32879 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-01 03:37:20 +00:00
Michael Lotz 88861a8888 Also test for the "no medium persent" case and don't tell B_DEV_MEDIA_CHANGED in
such a case as that would try to read info about a non-present medium.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32862 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-31 15:08:38 +00:00
Michael Lotz 1aa8877afe Don't read or write more bytes than the buffer you provide is large. On reading
it would overwrite memory and on writing it would crash further down when the
buffer is accessed. Fixes #4383.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32857 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-31 13:18:23 +00:00
Michael Lotz d548f1310f Adding a tool I use frequently to quickly decode UHCI status values.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32827 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-30 03:50:59 +00:00
Michael Lotz c1043ac95e When we truncate or resize the file we need to trim the write_buffers. Otherwise
we waste space, but we also incorrectly fail to update the size for all writes
that do not go beyond the previous file size.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32825 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-30 02:41:31 +00:00
Michael Lotz fbaa0b510d Take into account that we may look up "." or ".." and we must obviously not set
the parent directory in those cases. Also, when updating the parent directory
we need to update the ".." dirent if we already populated it with a different
value before.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32823 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-30 00:02:44 +00:00
Michael Lotz da249e74e9 Implement TODO: Check for non-empty directories before removing an entry. This
fixes #4358, there changing the Tracker preferences causes some default
directories to be created, like "home" and "config", which were previously
simply killing off the real ones.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32822 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-29 22:49:43 +00:00
Michael Lotz bd80259af5 If we create new nodes or modify existing ones, especially directories, we must
ensure that these nodes are never put. As they keep all changes in memory,
putting them and consequently freeing them destroys the modifications without
a way to get them back from the underlaying filesystem. In case a created node
was put but still had its entry in the parent directory this could also lead
to the situation where an invalid node was requested from the underlaying
filesystem, leading to #4347.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32815 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-29 16:24:33 +00:00
Michael Lotz d18b04298a Cleanup, remove needless line-break and trailing space. Also switched that "& "
to " &" as really the whole rest of the file uses that style.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32813 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-29 15:35:11 +00:00
Michael Lotz 35d1ffa9c4 That debug output was of course accidentally commited.
+alphabranch


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32773 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-28 00:46:18 +00:00
Michael Lotz fa1b1031d2 Not that I'd understand the problem GCC4 has with that while GCC2 doesn't care,
but this fixes the GCC4 build again, without breaking the function.
+alphabranch


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32772 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-28 00:44:34 +00:00
Michael Lotz 77093be11a Whatever r32042 was supposed to fix in that file, it really broke R5 message
unflattening if they included any target or reply info. Changing the reader
usage like this makes the first argument a pointer to a buffer. It would
therefore write to random locations, because it would use the literal value of
those header fields as pointers, crashing the using application.
Will check for GCC4 compliance next.
+alphabranch


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32771 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-28 00:37:36 +00:00
Michael Lotz 10c8ce934f Globally enabling the ATA stack now so we don't get inconsistent states between
the alpha and non-alpha profiles.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32768 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-27 20:55:26 +00:00
Michael Lotz 8d5e993169 mmlr+anevilyak:
Unconditionally release the reader sem when the previous buffer size was 0
instead of testing for fParserWaiting as there is a race condition between
setting it to true in the parser thread and checking for it in the reader
thread so a release_sem() could be missed causing #4343. To reduce the possible
side effect of needlessly looping through acquire_sem() for too many
unconditionally released sems, we eat them in the parser thread once we're sure
we can't miss an event because of that. Also added a TODO about a memcpy()
optimization as pointed out by Rene.
+alphabranch


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32733 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-27 02:15:20 +00:00
Michael Lotz 5fa8a19786 Actually don't report any failures of the TUR command, as for devices with no
media present they will always fail with the no media or media changed errors.
+alphabranch


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32732 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-27 01:41:07 +00:00
Michael Lotz de9aa21e08 If the device tells us that it doesn't support the Test Unit Ready (TUR) command,
don't try to use it for media status polling. In those cases we'll assume a
fixed device with no exchangable medias and therefore always return B_OK.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32731 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-27 01:38:20 +00:00
Michael Lotz 12f584636c Fix subtle but important error in transfer length calculation. That calculation
does calculate the remaining bytes, not the transferred ones, so obviously that
number has to be subtracted from the expected buffer size! Albeit severe, this
wasn't hit that often, because this calculation will only be used when the
transferred size doesn't match the handed in buffer size exactly. So things like
HID or mass storage, that mostly know the exact transfer size weren't affected.
But it could very well explain #4101 where the size isn't previously know.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32680 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-26 00:06:15 +00:00
Michael Lotz 46e94fad77 Initialize last part of byte to 0, just in case.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32633 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-23 17:20:20 +00:00
Michael Lotz b7f73c6e2a Update and enable the debugging device selection check. Might shed some light on
the problem in #4308.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32616 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-22 16:41:17 +00:00
Michael Lotz 7f5799140f Enlarge the timeout for data transfers. It was 2 seconds before and under a bit
of load, when using large enough block sizes or when simply having a slow device
this is by far not enough. It is now at 15 seconds, which should reduce timeout
problems to those cases where the device actually get's stuck (because of us
doing something wrong).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32615 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-22 16:12:36 +00:00
Michael Lotz f1a7a3752f * Use the locked version of inherit_parent_user_and_group() by moving the call
into the scope of the lock. Saves an InterruptsSpinLocker.
* Use an InterruptsSpinLocker() as in other places.
* When creating/forking a team fails because the kernel thread cannot be spawned
  balance the already sent TEAM_ADDED notification by sending a TEAM_REMOVED one.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32595 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-22 03:07:11 +00:00
Michael Lotz b5172954bb Better watch your bools in C code. In C99, the bool type of the argument to
send_bit() causes a type conversion from the value handed in to 0 or 1. This
clashed with the usage in send_byte(), that hands over a shifted byte. The
argument was converted to true when it had any value other than 0, whereas
before (where a bool simply was an int) it would have just handed over the value
directly. Therefore the logic in send_bit() that simply masked off the lowest
bit of the value would now not work anymore.
This fixes EDID failing on GCC4 and therefore fixes #2275, the last issue of
#4084 and may also affect #2780.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32593 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-22 01:03:10 +00:00
Michael Lotz c9c3b32d3b Rework incoming report handling. We need to notify all reports when one comes in
because all reports schedule transfers on the same endpoint and therefore need
to possibly reschedule. Previously if we got a report that we didn't listen on
all further reports would stop, because noone would schedule a new transfer.
This fixes extra keys not working on my natural keyboard.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32580 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 18:46:24 +00:00
Michael Lotz 29bd9bfd7d Remove SMP_MSG_RESCHEDULE_IF_IDLE as it is not used anymore.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32574 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 16:14:18 +00:00
Michael Lotz 861b223cf2 * Strip down scheduler_simple. Anything related to multiple CPU handling has
been removed. That includes CPU disabling and thread pinning, as that becomes
  pointless with only one CPU.
* Return a proper reschedule hint on enqueing a thread, based on the priority
  of the current thread vs. the enqueued one.
* Enable dynamic scheduler selection. With one CPU the simple scheduler will
  be used, otherwise affine is selected.
* Removed the scheduler type define as we now always auto-select it.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32573 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 16:10:27 +00:00
Michael Lotz 38516368ea Switching to the ATA stack for the @alpha targets. We need more widespread
testing to determine where we are at sooner than later now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32569 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 14:34:16 +00:00
Michael Lotz 2e7672a2a0 Adding a simple wake on LAN command line utility. It will broadcast a magic
packet that targets the MAC address supplied by argument.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32555 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 05:52:36 +00:00
Michael Lotz 9dbe55ebcc Fix typo.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32552 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 02:07:11 +00:00
Michael Lotz c265fd23cd We cannot use the condition codes to determine if a transfer descriptor is
processed. The controller may initialize it to any value when starting to
process the descriptor. If a controller did that it was possible that we thought
a transfer was already done even if it actually just started. Transfers would
then return that weren't processed, returning uninitialized buffers.
Instead of relying on the condition codes we now check that the head and tail
pointers are the same. This guarantees that all transfer descriptors of the
endpoint at hand are completed.
Reverted r32534 again as this one fixes the problem for real. The same things
that were mentioned there could happen here essentially, so in the worst case
the device or controller could stall because of freeing in-use structures.
Fixes #4067.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32551 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 00:14:50 +00:00
Michael Lotz 840cdc9efc When adding a transfer, the current tail descriptor of the endpoint will be
reused and overwritten by the first descriptor of the new transfer and the first
descriptor will become the new tail. We anticipate this situation in
_AddPendingTransfer() and set the first_descriptor of the transfer data to the
tail already. Since the tail was pretty much cleared to zero, this introduced
a race condition. After adding the pending transfer it can already be found
in the finisher thread. If this happened before actually switching the tail
and first descriptor it would find a descriptor with a condition of 0, meaning
"No Error" and would process the transfer incorrectly. Depending on the count
of descriptors and the timing of the switch taking place this could have
resulted in aborted transfers with actual length 0 or with the correct actual
length but invalid data. In the very worst case it could have freed things still
in use by the controller, resulting in all sorts of device errors. Sadly it
doesn't fix #4067.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32534 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-20 07:24:49 +00:00
Michael Lotz 5f92e39f7b That's actually not how it works. OHCI does the dirty work of splitting up the
transfer descriptors into individual packets. The descriptors are more a
logical thing. As such we do not generate one descriptor per packet but one
for each block of two pages at max. Therefore we only set the initial toggle bit
to the one we stored on the first descriptor and let OHCI use the carry bit for
subsequet descriptors. That error would only be visible on transfers above two
pages in size though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32532 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-20 04:45:13 +00:00
Michael Lotz b0a2e9e7aa Even though the specs say the toggle carry field contains the value of the last
retired descriptor, it actually contains the value that is to be used next.
Confirmed that by cross-referencing FreeBSD.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32531 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-20 02:43:40 +00:00
Michael Lotz abe8e8a2c2 A try at actual data toggle handling. Since we do not properly ensure that the
toggle carry stays valid, we better make sure we set it correctly. Additionally
even if the toggle carry wasn't clobbered, there are conditions the toggle is
reset without the controller being able to notice (as in clearing a halt state).
Since I don't have any OHCI hardware this is untested, but should fix bug #4067
if correct.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32510 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-19 04:45:02 +00:00
Michael Lotz 152132f08a mmlr+anevilyak:
* Keep track of the currently running threads.
* Make use of that info to decide if a thread that becomes ready should preempt
  the running thread.
* If we should preempt we send the target CPU a reschedule message.
* This preemption strategy makes keeping track of idle CPUs by means of a bitmap
  superflous and it is therefore removed.
* Right now only other CPUs are preempted though, not the current one.
* Add missing initialization of the quantum tracking code.
* Do not extend the quantum of the idle thread based quantum tracking as we want
  it to not run longer than necessary. Once the preemption works completely
  adding a quantum timer for the idle thread will become unnecessary though.
* Fix thread stealing code, it did missed the last thread in the run queue.
* When stealing, try to steal the highest priority thread that is currently
  waiting by taking priorities into account when finding the target run queue.
* Simplify stealing code a bit as well.
* Minor cleanups.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32503 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-19 03:19:17 +00:00
Michael Lotz 100487755f We explicitly remove the thread from the (priority sorted) run queue to
re-insert it at a new place, but by only setting the priority and not the
next_priority field, the thread would actually be enqueued at the same priority
level as before. Didn't cause any real damage, guess it was just an oversight.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32494 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-18 13:19:12 +00:00
Michael Lotz 65411f56b7 We can return directly as we use handy locker objects. Adjusted and added
comments.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32483 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-17 22:51:01 +00:00
Michael Lotz 40b708f776 Do not base the device number on the device count. Fixes bug #4267.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32474 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-17 17:51:26 +00:00
Michael Lotz 73c035dc11 * Set freed memory to 0xdeadbeef before returning it to page. This allows us to
not hold the bin lock while setting and only protect the actual freeing. May
  reduce bin lock contention a little bit.
* Tiny optimization for force-clearing 0xdeadbeef. Do it after setting to 0xcc,
  so that it's less likely we have to do it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32473 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-17 17:25:24 +00:00
Michael Lotz 699bf40942 Add scheduling notifications to scheduler_affine.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32463 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-17 14:51:07 +00:00
Michael Lotz 68b6dce107 We already panic to indicate that something's wrong, no real need to crash
afterwards instead of returning gracefully.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32293 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-13 02:00:49 +00:00
Michael Lotz 60a5ced394 Adding a disabled debug helper.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32217 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-09 19:54:41 +00:00
Michael Lotz 50d22f83ef The reference of the currently active translation map shouldn't be released
until the data it protects isn't in active use anymore. Previously it would
release the translation map and therefore the page directory reference while
the page dir was still set on the CPU, as only the actual call to
i386_context_switch() will replace the page directory in the control register.
This didn't cause any harm though, as during the context switch interrupts are
disabled and therefore the page directory would only be deferred_delete()ed and
not directly freed/overwritten. Still this is logically more correct.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32216 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-09 17:39:05 +00:00
Michael Lotz 685a77f905 Minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32187 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-07 14:39:15 +00:00
Michael Lotz ee280b59e9 Prevent the user TLB invalidation function from being preempted by turning off
interrupts when invoking it. The user TLB invalidation function essentially only
reads and writes back control register 3 (cr3) which holds the physical address
of the current page directory. Still a preemption between the read and the write
can cause problems when the last thread of a team dies and therefore the team
is deleted. The context switch on preemption would decrement the refcount of the
object that holds the page directory. Then the team address space is deleted
causing the context switch returning to that thread to not re-acquire a
reference to the object. At that point the page directory as set in cr3 is the
one of the previously run thread (which is fine, as all share the kernel space
mappings we need). Now when the preempted thread continues though, it would
overwrite cr3 with the physical page directory address from before the context
switch still stored in eax, therefore setting the page directory to the one of
the dying thread that now doesn't have the corresponding reference. Further
progressing the thread would release the last reference causing the deletion
of the object and freeing of the, now active again, page directory. The memory
getting overwritten (by deadbeef) now completely corrupts the page directory
causing basically any memory access to fault, in the end resulting in a
triplefault. This should fix bug #3399.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32118 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-04 23:15:05 +00:00
Michael Lotz 255c9104e5 * Rework the heap locking strategy. Use a read-write lock for the area lock to
allow for more parallelism. Also introduce seperate locks for the bins and
  for page allocation. This greatly reduces lock contention and reduces the
  duration the locks are held due to them overall protecting less code. Now only
  allocations of the same size hitting the same allocator or allocating larger
  chunks of memory should block. Previously, basically any allocation and also
  free would be mutually exclusive, making it scale pretty badely.
* Added memalign_nogrow(). As it uses heap_memalign() anyway, there's no real
  reason not to allow for an alignment.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32074 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-03 13:59:45 +00:00
Michael Lotz d7a16b238f * Fully switch to the Haiku message format so that it is also used for on-disk
storage.
* Remove reduntant information from the header (field_count vs. fields_size).
* Remove checksums previously used to validate the message passing by area
  mechanism.
* Move variables that are purely used by the instance out of the header and into
  the BMessage object.
* Use more sensible types for the different message fields.
* Reduce some field sizes to realistic values.
* Make size_t values into uint32 values so the message format will not change
  when later moving to 64 bits.
* Pack the structures used for flat message storage so it doesn't change
  because of padding.
* Fix message passing by area. It never worked because the created area was
  never actually filled with any data!
* Some more allocation checks with graceful fallbacks (should be all now).
* Some more checks for negative index values (should also be all now).
* Make printing more inline with how the rest of the class works and make some
  of the output more consistent.
* Also add the new unsigned types to PrintToStream() output.
* Fix printing of unknown types and invalid BMessages, it would always have
  printed only the first entry respectively the same error.
* Added some clarifying comments.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32039 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-31 22:19:36 +00:00
Michael Lotz 0fa107fd5d Don't spam for expected error returns. We do repeat key handling through
timeouts, so B_TIMED_OUT is expected at this point.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31974 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-30 15:18:45 +00:00
Michael Lotz d280260742 Add export to our default profile to ignore duplicate history entries.
Fixes enhancement #4156.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31953 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 23:49:16 +00:00
Michael Lotz 3b1e4fd549 Fix pointer access. Thanks to Blub for spotting, I would've certainly spent a
lot of time finding this one!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31940 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 20:36:54 +00:00
Michael Lotz 48a7b12ad8 Clear the padding to 0 when flattening to the R5 message format. Besides being
cleaner it allows for binary comparison of flattened messages.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31908 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 13:22:00 +00:00
Michael Lotz 1aab2b2717 If the font style isn't found, try to scan for fonts as well. The same is done
for families. This fixes the bug that when a font family was already loaded, but
some of its styles haven't been loaded yet, the app_server would fail to set
the system fonts to those styles. Fixes bug #4148.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31904 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 13:04:08 +00:00