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
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
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
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
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
though it still has to be investigated why the font style isn't found.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31901 a95241bf-73f2-0310-859d-f6bbb57e9c96
writing lines that are printed below the previously cleared lines when paging.
Fixes bug #4145.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31865 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Make the key arrays take the full range of possible index values (32-bits).
* Forward all unmapped keys with their HID usage as keycode.
* Remove some superflous debug output.
With this many of the extra keys on keyboards should be forwarded as unmapped
keys. An application could now watch for them (B_UNMAPPED_KEY{UP|DOWN} messages)
and interpret them based on their keycode which matches the HID usage.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31838 a95241bf-73f2-0310-859d-f6bbb57e9c96
will show the next page after a timeout of 3 seconds instead of waiting for a key
to be pressed. This allows you to enjoy onscreen debug output even when you only
have a USB keyboard. Should be enough time to take a quick look or take a photo.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31814 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Make the allocations command available even without leak checking. The sizes
that are dumped aren't as accurate without leak checking info, but having the
address and max size is already helpful.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31811 a95241bf-73f2-0310-859d-f6bbb57e9c96
introduced earlier.
* Reworked the previous device classes to make them ProtocolHandlers handling
their respective input_server <-> driver protocol.
* Implement setting report item data and building/sending reports based on that.
* Remove the old HID parsing code.
This enables us to use all HID devices as we now parse and use the HID
descriptors/reports. Non-boot-porotocol devices should therefore work.
The next step will be to implement a generic input/output framework in userland
that can communicate with a generic protocol handler in usb_hid. This will then
enable applications to make use of all the non-mapped HID stuff directly.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31790 a95241bf-73f2-0310-859d-f6bbb57e9c96
probably meant to be. The call as it was made no sense at all, as it hardcoded
the endpoint number and tried to supply data to a non-data request. It also
wasn't using a synchronous call, possibly triggering the callback function with
an incompletely set-up device structure, depending on how quickly the request
would return. This caused bug #4107.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31666 a95241bf-73f2-0310-859d-f6bbb57e9c96
use B_* error codes, print most numbers as normal decimals or at least prefix
them with 0x where appropriate.
* When counting free clusters for FAT32 correctly ignore the uppermost 4 bits
when checking for free entries. Shouldn't matter, as those should always be
0 anyway.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31306 a95241bf-73f2-0310-859d-f6bbb57e9c96
* The active fat field is valid if fats aren't mirrored, not the other way
around.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31257 a95241bf-73f2-0310-859d-f6bbb57e9c96
Actual writing is not implemented though and some key functions aren't either.
Completely untested so far.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31032 a95241bf-73f2-0310-859d-f6bbb57e9c96
marked as read automatically I don't really want to get the notification alert.
This has been laying around on my drive for a long time now...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31028 a95241bf-73f2-0310-859d-f6bbb57e9c96
first run only set up uncacheable MTRRs and in the second run set the write-back
ones up. If this order is not followed, we could set too large ranges to
cacheable first and then limit it back to uncacheable later. On systems with
enough physical memory this would lead to a temporary situation in which areas
become cacheable that must not be, resulting in system hangs or other unexpected
behaviour. Fixes last part of #4018.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31027 a95241bf-73f2-0310-859d-f6bbb57e9c96
systems where the default is set to a cachable type and MTRRs are used to define
the uncacheable areas, everything would become cacheable after clearing them.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31026 a95241bf-73f2-0310-859d-f6bbb57e9c96
to the mask and then shifted, but as we don't do the shifting at all, we need
to add a page size instead of just 1.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31024 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Change the TRACE macro to use varargs and add a prefix for easier grepping.
* Some line length cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31023 a95241bf-73f2-0310-859d-f6bbb57e9c96
prevents tools that try to read other inquiry pages (like cdrecord) from getting
the required infos. This way the inquiry command is sent to the ATAPI device,
which seems to work fine (at least for the drive I have here).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31019 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Reset the port directly after executing a command failed instead of letting
the next call do the reset first. This is arbitrary but looks cleaner to me.
* Provide a way to check if a given sata_request is a SCSI_OP_TEST_UNIT_READY
over ATAPI and use this info to calm down all error output. This avoids
spamming the syslog with error output on each media status poll when no disk
is present in a ATAPI device.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31014 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Move notifications around so they are sent at the right time.
* Use notify_entry_moved() instead of generating a removal and creation
notification.
* Allow replacing entries.
* Added a TODO regarding non-empty directories.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30929 a95241bf-73f2-0310-859d-f6bbb57e9c96
original file and then overwriting it with what we have in memory, just linearly
fill the buffer, closing gaps between our buffers with original file content as
needed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30927 a95241bf-73f2-0310-859d-f6bbb57e9c96
case-sensitive one. If not, print out a message and a link to the guide that
describes how to set one up.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30913 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Create a file cache for created overlay nodes. It is unused and disabled, but
causes a vnode cache to be created. This is required for mapping a file, which
in turn is required for executables to be loaded. With that copied or newly
created executables should work on top of write_overlay. Will think about and
implement a more direct way of getting that cache later today.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30910 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Also make set_flags available for setting it. O_NONBLOCK is ignored as in BFS.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30903 a95241bf-73f2-0310-859d-f6bbb57e9c96
and not a status_t. In case of virtual files it would have wrongly returned
B_UNSUPPORTED, resulting in true instead of false.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30895 a95241bf-73f2-0310-859d-f6bbb57e9c96
The target vnode in link and the toDir vnode in rename were passed directly,
meaning that an attribute_overlay vnode was handed to the next layer causing
crashes when moving/renaming a file on ISO-only CDs for example. Fixes#3885.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30893 a95241bf-73f2-0310-859d-f6bbb57e9c96
invalidated since the creation of the object. If this is the case we have to
look it up again.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30889 a95241bf-73f2-0310-859d-f6bbb57e9c96
we want to ensure that we re-enumerate our environment when eventually writing
a new one as it has most probably changed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30888 a95241bf-73f2-0310-859d-f6bbb57e9c96
we will later remove the attribute backing file using this.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30887 a95241bf-73f2-0310-859d-f6bbb57e9c96
pointing to a relocated directory, we now re-initialize the node we are
initializing with the first entry of the pointed at directory. This ought to be
the "." entry containing the proper flags, start block number and data length.
As per the specs we do only keep the file id or alternate name of the
placeholder and take everything else from the relocated directory.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30886 a95241bf-73f2-0310-859d-f6bbb57e9c96
launching the console. Otherwise it will simply drop through to ejecting the CD
and rebooting as if the installer completed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30885 a95241bf-73f2-0310-859d-f6bbb57e9c96
skip it instead of returning the error and therefore aborting the directory
enumeration.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30876 a95241bf-73f2-0310-859d-f6bbb57e9c96
is considered dirty and only what we are really able to copy (which excludes all
possible dirty regions) is removed from that again. This is simpler and less
error prone than to remove more than we may copy and then add the old dirty
regions back. Fixes a few region copy related redraw issues most visible in case
of scrolling like non-updated parts when scrolling in Tracker or Terminal as in
bug #3803.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30840 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Reorganize how items are added to collections.
* Make collections useful for enumeration through that.
* Added printing out of collections, reports and report items for easier
verification of report parsing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30821 a95241bf-73f2-0310-859d-f6bbb57e9c96
would always overwrite existing settings with the defaults when a message not
containing settings arrived. But we only want to revert to defaults when there
have not been any settings yet. This should fix most translators forgetting
their settings.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30798 a95241bf-73f2-0310-859d-f6bbb57e9c96
BIconUtils to understand and render it. This makes it possible to use the
HVIFTranslator to also read Icon-O-Matic files out of the box. Will cleanup
now duplicated files next.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30794 a95241bf-73f2-0310-859d-f6bbb57e9c96
the full work twice in the worst case. Also since it only supports actual HVIF
format and not the Icon-O-Matic one directly it is not as useful as one might
think. Still it's a start. You could translate from a HVIF file to a PNG using
the command line translate tool with it (translate infile outfile 'PNG ').
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30792 a95241bf-73f2-0310-859d-f6bbb57e9c96
but the kernel part was missing. It is used to query for the buffer size that
can be retrieved using recv(). It returns the same value we use for the read
select().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30786 a95241bf-73f2-0310-859d-f6bbb57e9c96
finishing transfers. The host controller might still be using some of those
structures. In the (unlikely) case that a freed memory chunk would be
immediately re-used and filled with new values this would lead the controller
to either find invalid values and assert a process error or it could follow
invalid list links leading to host system errors. We have to wait with freeing
until the controller processing the next frame to make sure this cannot happen.
The unlikely case should also have been the cause of bug #2481.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30714 a95241bf-73f2-0310-859d-f6bbb57e9c96
* This also paves the way for a different way to handle transfer freeing.
* Also fixes that errors in reappending would previously not be propagated to
the caller.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30712 a95241bf-73f2-0310-859d-f6bbb57e9c96
again. Especially not because it'd likely fail because we are now most probably
in the kernel.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30711 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Use those to make sure the size is retrieved correctly in all cases (which
it wasn't in the short packet tests).
* Don't detect short packets for control transfers as we need the status packet
to finish the transfer and cannot quit earlier.
* Only check for short packets when we also have the short packet flag set.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30710 a95241bf-73f2-0310-859d-f6bbb57e9c96
so should be reusable for bluethooth HID as well (which is the same). The only
missing part so far is the logical collections that would allow nicer
enumeration of the report structure but is otherwise not useful. It should
support all of the HID specs except for usage aliases (even long items that
aren't actually defined should just work if they ever are). Not integrated into
the USB specific device framework and there are no actual drivers making use
of provided functionallity. The parsing was tested and works for all of the 3
devices I had available, but actual interpretation of data is not tested as the
driver side is missing. Will close that gap as a next step and then port the
mouse and keyboard drivers to that framework. Eventually a generic driver that
makes unknown fields available to userland apps in some way should be fairly
easy to implement with that.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30664 a95241bf-73f2-0310-859d-f6bbb57e9c96
explaining the reasons behind it. Oh well, at least the commit count raises...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30644 a95241bf-73f2-0310-859d-f6bbb57e9c96
* A CHS read error would previously be hidden by a successful disk system reset.
Not that it matters much because it'd have resulted in a non-booting system
anyway.
* Add some more debug output, minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30643 a95241bf-73f2-0310-859d-f6bbb57e9c96
children. Otherwise a driver that builds up a device hierarchy could run into
trouble when the parent hub is removed before its child devices. Not that there
were any drivers that do so, but it just seems more correct.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30641 a95241bf-73f2-0310-859d-f6bbb57e9c96
B_{LEFT|RIGHT}_*_KEYs is pressed for shift, command, control and option.
This fixes bug #3841.
* Only send a B_MODIFIERS_CHANGED message when the modifiers actually changed.
* Minor simplification to only check for the lock keys once.
* Minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30538 a95241bf-73f2-0310-859d-f6bbb57e9c96
emulated ones on CD-boot). One of my laptops returns bogus drive parameters
and another one silently fails the read, previously preventing CD-boot on both.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30389 a95241bf-73f2-0310-859d-f6bbb57e9c96
invalid value, assume the device is not present. Should fix long boot pauses
in VMWare and maybe also on some hardware.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30381 a95241bf-73f2-0310-859d-f6bbb57e9c96
anymore. This was the case for GCC4 already but is now also true for GCC2. We
might want to look into that again, or we can just ignore it as noone is really
using floppies anymore and for eltorito boot we can live with the 2.88 floppy
emulation.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30312 a95241bf-73f2-0310-859d-f6bbb57e9c96
clearly state that the other two bytes need to be 0x01 (and they always did,
even back to the very first ATA/ATAPI specs), I have one device here that
doesn't set the sector count register to 1. Since those two bytes are the unique
ones of the signatures anyway, it shouldn't harm to just ignore the others.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30311 a95241bf-73f2-0310-859d-f6bbb57e9c96
commands work that check this value (like the CDDA filesystem, so audio CDs
work now).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30288 a95241bf-73f2-0310-859d-f6bbb57e9c96
there is no device. Should fix long reset timeouts when only device 1 is
present and therefore device 0 can't be selected.
* In case a device reset error is reported, don't try to identify/use the device.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30286 a95241bf-73f2-0310-859d-f6bbb57e9c96
it's own target named ata and doesn't reuse the ide name. Because of that we
can also add it to the build by default.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30271 a95241bf-73f2-0310-859d-f6bbb57e9c96
verbose than the old one. Removed the latter.
* Put some of the hardcoded values into defines for more clearity.
* Report more detailed device type for ATAPI devices and report removable
media based on the bit in the infoblock as well.
* Rename the channel ID attributes back to ide to let the hack in scsi_periph
work that then publishes the devices under the disk/ata[pi] tree.
* Also disable command queueing for ATAPI devices.
* Remove remnants of CHS support.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30270 a95241bf-73f2-0310-859d-f6bbb57e9c96
error we do not reuse old values from a previous KDL session. This ensures that
we don't try to use a USB keyboard if it was un- and replugged on an unsupported
port.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30266 a95241bf-73f2-0310-859d-f6bbb57e9c96
only support UHCI for now. In case transfers aren't possible we therefore don't
make PS/2 keyboards unusable in KDL.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30265 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Cause scheduler invokation when we handled an interrupt as the transfering
thread can continue immediately. This brings small block transfer rates to
a comparable level to the old IDE bus_manager. For large block transfers there
is no speed difference at all.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30257 a95241bf-73f2-0310-859d-f6bbb57e9c96