@@ -589,37 +589,59 @@ func (k *Kmod) filterAliasesForRequiredModules(conf *generatorConfig) ([]alias,
589
589
}
590
590
}
591
591
592
- if ! k .universal {
593
- devAliases , err := conf .readDeviceAliases () // list of current host aliases as reported by /sys/devices
592
+ if k .universal {
593
+ return filteredAliases , nil
594
+ }
595
+
596
+ // for a non-universal mode filter out only aliases known to kernel
597
+ uniqAliases := make (map [alias ]bool )
598
+
599
+ devAliases , err := conf .readDeviceAliases () // list of current host aliases as reported by /sys/devices
600
+ if err != nil {
601
+ return nil , err
602
+ }
603
+ for a := range devAliases {
604
+ matched , err := matchAlias (a , filteredAliases )
594
605
if err != nil {
595
606
return nil , err
596
607
}
608
+ if len (matched ) == 0 {
609
+ debug ("no matches found for a device alias '%s'" , a )
610
+ continue
611
+ }
597
612
598
- // filter out only aliases known to kernel
599
- var newFilteredAliases []alias // aliases for the given devices
600
- uniqAliases := make (map [alias ]bool )
601
- for a := range devAliases {
602
- matched , err := matchAlias (a , filteredAliases )
603
- if err != nil {
604
- return nil , err
605
- }
606
- if len (matched ) == 0 {
607
- debug ("no matches found for a device alias '%s'" , a )
608
- continue
609
- }
613
+ for _ , m := range matched {
614
+ uniqAliases [m ] = true
615
+ }
616
+ }
610
617
611
- for _ , m := range matched {
612
- if _ , exists := uniqAliases [m ]; exists {
613
- continue
614
- }
615
- uniqAliases [m ] = true
616
- newFilteredAliases = append (newFilteredAliases , m )
618
+ // quirk: some modules do not report modaliases they use at /sysfs so we just add all aliases for specified modules.
619
+ addAllAliasesForModules := []string {
620
+ // mmc bus sends an udev event modalias 'mmc:block' (see Linux drivers/mmc/core/bus.c)
621
+ // but it seems that this modalias is not reported anywhere under /sys/devices, see https://github.com/anatol/booster/issues/90
622
+ "mmc_block" ,
623
+ // uas does not report alias for its USB_PR_BULK interface https://github.com/anatol/booster/issues/121
624
+ "uas" ,
625
+ }
626
+ for _ , m := range addAllAliasesForModules {
627
+ if ! k .requiredModules [m ] {
628
+ continue
629
+ }
630
+
631
+ for _ , a := range filteredAliases {
632
+ if a .module != m {
633
+ continue
617
634
}
635
+ uniqAliases [a ] = true
618
636
}
619
- filteredAliases = newFilteredAliases
620
637
}
621
638
622
- return filteredAliases , nil
639
+ newFilteredAliases := make ([]alias , len (uniqAliases )) // aliases for the given devices
640
+ for a , _ := range uniqAliases {
641
+ newFilteredAliases = append (newFilteredAliases , a )
642
+ }
643
+
644
+ return newFilteredAliases , nil
623
645
}
624
646
625
647
func readDeviceAliases () (set , error ) {
@@ -650,12 +672,6 @@ func readDeviceAliases() (set, error) {
650
672
return nil
651
673
})
652
674
653
- // Buses might have associated modaliases e.g. mmc bus sends an udev event modalias 'mmc:block' (see Linux drivers/mmc/core/bus.c)
654
- // But it seems that this modalias is not reported anywhere under /sys/devices, see https://github.com/anatol/booster/issues/90
655
-
656
- // insert implicit modaliases. TODO: find a more straightforward way to detect all buses modaliases
657
- aliases ["mmc:block" ] = true
658
-
659
675
return aliases , err
660
676
}
661
677
0 commit comments