On Wed, 4 Jul 2007, jidong xiao wrote: > Still consider following piece of code, I see there is a change in > this part of code,here showed the same part of code but came from > different kernel version,one is sampled from kernel 2.6.10,while > another is sampled from kernel 2.6.21. > > inside hub_events() sampled from drivers/usb/core/hub.c, 2.6.10: > > 2594 /* deal with port status changes */ > 2595 for (i = 0; i < hub->descriptor->bNbrPorts; i++) { > 2596 connect_change = test_bit(i, > hub->change_bits); > 2597 if (!test_and_clear_bit(i+1, > hub->event_bits) && > 2598 !connect_change) > 2599 continue; > > This is the same part of code but just picked up from 2.6.21. > 2682 /* deal with port status changes */ > 2683 for (i = 1; i <= hub->descriptor->bNbrPorts; i++) { > 2684 if (test_bit(i, hub->busy_bits)) > 2685 continue; > 2686 connect_change = test_bit(i, > hub->change_bits); > 2687 if (!test_and_clear_bit(i, hub->event_bits) && > 2688 !connect_change && > !hub->activating) > 2689 continue; > > an interesting thing is, in the former one,we call > test_and_clear_bit(i+1, **), while in the latter one, we call > test_and_clear_bit(i, **),this change is somehow strange,is one of > them wrong?
Look again. In the first snippet i ranges from 0 to bNbrPorts-1, and in the second snippet i ranges from 1 to bNbrPorts. So the test_and_clear_bit calls do the same thing. > additionally,I am wondering the reason, for the change_bits map, we > just test, for the event_bits,besides test,we also need to clear the > bit, why? Both bits get cleared. Look in hub_port_connect_change() to see where change_bits is reset. Alan Stern ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel