public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH] IDE TCQ #4
@ 2002-04-15 19:28 Petr Vandrovec
  2002-04-16 10:25 ` Jens Axboe
  0 siblings, 1 reply; 7+ messages in thread
From: Petr Vandrovec @ 2002-04-15 19:28 UTC (permalink / raw)
  To: axboe; +Cc: linux-kernel

On 15 Apr 02 at 21:11, Petr Vandrovec wrote:
> On 15 Apr 02 at 21:00, Jens Axboe wrote:
> > > 
> > > NULL pointer ...
> > 
> > Could you decode that? It doesn't look like any of your drives support
> > TCQ, it should have enabled them right here:
> 
> They were already decoded... Also others reported that - after accessing
> /proc/ide/ide0/hda/identify system dies... I believe that passing
> hand-created request to ide_raw_taskfile corrupts drive->free_req,
> and so subsequent drive command after this cat finds that 
> drive->free_req.next is NULL and dies.

ide_raw_taskfile() sets rq.special to &ar - and &ar is on the stack,
in this function. Later it falls through to __ide_end_request(), which
does

  ar = rq->special;
  ...
  if (ar)
    ata_ar_put(drive, ar);
    
which adds this ar into drive's free_req chain unconditionally. Maybe 
ata_ar_put should check for ar_queue validity. And where ar_queue
member is initialized (or at least cleared) in this case at all?

Unfortunately here my knowledge ends.
                                                Petr Vandrovec
                                                vandrove@vc.cvut.cz
                                                

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] IDE TCQ #4
  2002-04-15 19:28 [PATCH] IDE TCQ #4 Petr Vandrovec
@ 2002-04-16 10:25 ` Jens Axboe
  2002-04-16 10:39   ` USB-Mouse-Bug in 2.4.16-8 ? mtopper
  2002-04-16 11:01   ` [PATCH] IDE TCQ #4 Martin Dalecki
  0 siblings, 2 replies; 7+ messages in thread
From: Jens Axboe @ 2002-04-16 10:25 UTC (permalink / raw)
  To: Petr Vandrovec; +Cc: linux-kernel

On Mon, Apr 15 2002, Petr Vandrovec wrote:
> On 15 Apr 02 at 21:11, Petr Vandrovec wrote:
> > On 15 Apr 02 at 21:00, Jens Axboe wrote:
> > > > 
> > > > NULL pointer ...
> > > 
> > > Could you decode that? It doesn't look like any of your drives support
> > > TCQ, it should have enabled them right here:
> > 
> > They were already decoded... Also others reported that - after accessing
> > /proc/ide/ide0/hda/identify system dies... I believe that passing
> > hand-created request to ide_raw_taskfile corrupts drive->free_req,
> > and so subsequent drive command after this cat finds that 
> > drive->free_req.next is NULL and dies.
> 
> ide_raw_taskfile() sets rq.special to &ar - and &ar is on the stack,
> in this function. Later it falls through to __ide_end_request(), which
> does
> 
>   ar = rq->special;
>   ...
>   if (ar)
>     ata_ar_put(drive, ar);
>     
> which adds this ar into drive's free_req chain unconditionally. Maybe 
> ata_ar_put should check for ar_queue validity. And where ar_queue
> member is initialized (or at least cleared) in this case at all?

yes this looks like a silly problem. the fix should be to have
ata_ar_get() set ATA_AR_RETURN in ar_flags:

        if (!list_empty(&drive->free_req)) {
                ar = list_ata_entry(drive->free_req.next);
                list_del(&ar->ar_queue);
                ata_ar_init(drive, ar);
                ar->ar_flags |= ATA_AR_RETURN;
        }

and then only have ata_ar_put() readd it to the list when it is set:

static inline void ata_ar_put(ide_drive_t *drive, struct ata_request
*ar)
{
        if (ar->ar_flags & ATA_AR_RETURN)
                list_add(&ar->ar_queue, &drive->free_req);
	...

Then you can also remove the ata_ar_put() conditional in
ide_end_drive_cmd(), just call ata_ar_put() unconditionally.

> Unfortunately here my knowledge ends.

it was very helpful :-)

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 7+ messages in thread

* USB-Mouse-Bug in 2.4.16-8 ?
  2002-04-16 10:25 ` Jens Axboe
@ 2002-04-16 10:39   ` mtopper
  2002-04-19 16:28     ` Greg KH
  2002-04-16 11:01   ` [PATCH] IDE TCQ #4 Martin Dalecki
  1 sibling, 1 reply; 7+ messages in thread
From: mtopper @ 2002-04-16 10:39 UTC (permalink / raw)
  To: support; +Cc: linux-kernel@vger.kernel.org


Dear Mailing List, 

I've discovered that even if I insmod (or modprobe) the proper USB modules
for my 2.4.16 kernel, and if I use the USB mouse afterwards,
"lsmod" reveals that the modules seem to be "(0) unused" - despite the USB
mouse is in action!

Users of the 2.4.18-kernel affirmed same kernel behaviour.

If I rmmod the USB modules, they subsequently allow to be removed from
kernelspace, and the USB mouse cursor , ofcourse , stops instantly -
despite he was just in use. 

Is this a bug or a feature? :-)

Yours, Alex



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] IDE TCQ #4
  2002-04-16 10:25 ` Jens Axboe
  2002-04-16 10:39   ` USB-Mouse-Bug in 2.4.16-8 ? mtopper
@ 2002-04-16 11:01   ` Martin Dalecki
  2002-04-16 12:28     ` Jens Axboe
  1 sibling, 1 reply; 7+ messages in thread
From: Martin Dalecki @ 2002-04-16 11:01 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Petr Vandrovec, linux-kernel

Jens Axboe wrote:


> yes this looks like a silly problem. the fix should be to have
> ata_ar_get() set ATA_AR_RETURN in ar_flags:
> 
>         if (!list_empty(&drive->free_req)) {
>                 ar = list_ata_entry(drive->free_req.next);
>                 list_del(&ar->ar_queue);
>                 ata_ar_init(drive, ar);
>                 ar->ar_flags |= ATA_AR_RETURN;
>         }
> 
> and then only have ata_ar_put() readd it to the list when it is set:
> 
> static inline void ata_ar_put(ide_drive_t *drive, struct ata_request
> *ar)
> {
>         if (ar->ar_flags & ATA_AR_RETURN)
>                 list_add(&ar->ar_queue, &drive->free_req);
> 	...
> 
> Then you can also remove the ata_ar_put() conditional in
> ide_end_drive_cmd(), just call ata_ar_put() unconditionally.

Well something similar is already in IDE 37... I have just
invented a flag ATA_AR_STATIC which get's set in ide_raw_taskfile
ata_ar_put ich then checking for if (!(ar->ar_flags & ATA_AR_STATIC))...

It has the desired effect in practice.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] IDE TCQ #4
  2002-04-16 12:28     ` Jens Axboe
@ 2002-04-16 11:44       ` Martin Dalecki
  0 siblings, 0 replies; 7+ messages in thread
From: Martin Dalecki @ 2002-04-16 11:44 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Petr Vandrovec, linux-kernel

Jens Axboe wrote:
> On Tue, Apr 16 2002, Martin Dalecki wrote:
> 
>>Jens Axboe wrote:
>>
>>
>>
>>>yes this looks like a silly problem. the fix should be to have
>>>ata_ar_get() set ATA_AR_RETURN in ar_flags:
>>>
>>>       if (!list_empty(&drive->free_req)) {
>>>               ar = list_ata_entry(drive->free_req.next);
>>>               list_del(&ar->ar_queue);
>>>               ata_ar_init(drive, ar);
>>>               ar->ar_flags |= ATA_AR_RETURN;
>>>       }
>>>
>>>and then only have ata_ar_put() readd it to the list when it is set:
>>>
>>>static inline void ata_ar_put(ide_drive_t *drive, struct ata_request
>>>*ar)
>>>{
>>>       if (ar->ar_flags & ATA_AR_RETURN)
>>>               list_add(&ar->ar_queue, &drive->free_req);
>>>	...
>>>
>>>Then you can also remove the ata_ar_put() conditional in
>>>ide_end_drive_cmd(), just call ata_ar_put() unconditionally.
>>
>>Well something similar is already in IDE 37... I have just
>>invented a flag ATA_AR_STATIC which get's set in ide_raw_taskfile
>>ata_ar_put ich then checking for if (!(ar->ar_flags & ATA_AR_STATIC))...
>>
>>It has the desired effect in practice.
> 
> 
> sure, just used ATA_AR_RETURN since it was there already. I'm not
> particularly fond of that name though, and ATA_AR_STATIC isn't too good
> either imo. how about ATA_AR_POOL? with the same semantics as
> ATA_AR_RETURN, ie return to pool if flag is set.

ATA_AR_POOL sounds good. It indicates where it's comming from and
where it is going to remain. BTW.> Have you noticed the tactile steps
forward I did in conversion of ide-cd.c to the new command submission in IDE 37?
Any suggestions? It isn't really that abvious how to get finally rid
of struct packt_command... but I think that I'm not far away now.
The only thing that has to be done is to move the sense data and failed
command used in ide-cd away from the packet command structure.
I will not pass it as pointer around but just copy it directly to struct
ata_devices driver_data field... I think.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] IDE TCQ #4
  2002-04-16 11:01   ` [PATCH] IDE TCQ #4 Martin Dalecki
@ 2002-04-16 12:28     ` Jens Axboe
  2002-04-16 11:44       ` Martin Dalecki
  0 siblings, 1 reply; 7+ messages in thread
From: Jens Axboe @ 2002-04-16 12:28 UTC (permalink / raw)
  To: Martin Dalecki; +Cc: Petr Vandrovec, linux-kernel

On Tue, Apr 16 2002, Martin Dalecki wrote:
> Jens Axboe wrote:
> 
> 
> >yes this looks like a silly problem. the fix should be to have
> >ata_ar_get() set ATA_AR_RETURN in ar_flags:
> >
> >        if (!list_empty(&drive->free_req)) {
> >                ar = list_ata_entry(drive->free_req.next);
> >                list_del(&ar->ar_queue);
> >                ata_ar_init(drive, ar);
> >                ar->ar_flags |= ATA_AR_RETURN;
> >        }
> >
> >and then only have ata_ar_put() readd it to the list when it is set:
> >
> >static inline void ata_ar_put(ide_drive_t *drive, struct ata_request
> >*ar)
> >{
> >        if (ar->ar_flags & ATA_AR_RETURN)
> >                list_add(&ar->ar_queue, &drive->free_req);
> >	...
> >
> >Then you can also remove the ata_ar_put() conditional in
> >ide_end_drive_cmd(), just call ata_ar_put() unconditionally.
> 
> Well something similar is already in IDE 37... I have just
> invented a flag ATA_AR_STATIC which get's set in ide_raw_taskfile
> ata_ar_put ich then checking for if (!(ar->ar_flags & ATA_AR_STATIC))...
> 
> It has the desired effect in practice.

sure, just used ATA_AR_RETURN since it was there already. I'm not
particularly fond of that name though, and ATA_AR_STATIC isn't too good
either imo. how about ATA_AR_POOL? with the same semantics as
ATA_AR_RETURN, ie return to pool if flag is set.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: USB-Mouse-Bug in 2.4.16-8 ?
  2002-04-16 10:39   ` USB-Mouse-Bug in 2.4.16-8 ? mtopper
@ 2002-04-19 16:28     ` Greg KH
  0 siblings, 0 replies; 7+ messages in thread
From: Greg KH @ 2002-04-19 16:28 UTC (permalink / raw)
  To: mtopper; +Cc: support, linux-kernel@vger.kernel.org

On Tue, Apr 16, 2002 at 12:39:07PM +0200, mtopper@xarch.tu-graz.ac.at wrote:
> 
> Dear Mailing List, 
> 
> I've discovered that even if I insmod (or modprobe) the proper USB modules
> for my 2.4.16 kernel, and if I use the USB mouse afterwards,
> "lsmod" reveals that the modules seem to be "(0) unused" - despite the USB
> mouse is in action!
> 
> Users of the 2.4.18-kernel affirmed same kernel behaviour.
> 
> If I rmmod the USB modules, they subsequently allow to be removed from
> kernelspace, and the USB mouse cursor , ofcourse , stops instantly -
> despite he was just in use. 
> 
> Is this a bug or a feature? :-)

This is the way the module was designed, so yes it's a feature :)

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2002-04-19 17:30 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-04-15 19:28 [PATCH] IDE TCQ #4 Petr Vandrovec
2002-04-16 10:25 ` Jens Axboe
2002-04-16 10:39   ` USB-Mouse-Bug in 2.4.16-8 ? mtopper
2002-04-19 16:28     ` Greg KH
2002-04-16 11:01   ` [PATCH] IDE TCQ #4 Martin Dalecki
2002-04-16 12:28     ` Jens Axboe
2002-04-16 11:44       ` Martin Dalecki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox