equal
deleted
inserted
replaced
8828 { |
8828 { |
8829 alias_pair_t *pair; |
8829 alias_pair_t *pair; |
8830 char *curr; |
8830 char *curr; |
8831 dev_info_t *currdip = NULL; |
8831 dev_info_t *currdip = NULL; |
8832 char *aliasdup; |
8832 char *aliasdup; |
8833 int len; |
8833 int rv, len; |
8834 |
8834 |
8835 pair = &(ddi_aliases.dali_alias_pairs[i]); |
8835 pair = &(ddi_aliases.dali_alias_pairs[i]); |
8836 len = strlen(pair->pair_alias); |
8836 len = strlen(pair->pair_alias); |
8837 |
8837 |
8838 curr = NULL; |
8838 curr = NULL; |
8846 goto out; |
8846 goto out; |
8847 |
8847 |
8848 if (alias[len] != '/' && alias[len] != '\0') |
8848 if (alias[len] != '/' && alias[len] != '\0') |
8849 goto out; |
8849 goto out; |
8850 |
8850 |
8851 |
|
8852 curr = kmem_alloc(MAXPATHLEN, KM_NOSLEEP); |
8851 curr = kmem_alloc(MAXPATHLEN, KM_NOSLEEP); |
8853 if (curr == NULL) { |
8852 if (curr == NULL) { |
8854 cmn_err(CE_PANIC, "curr alloc failed"); |
8853 cmn_err(CE_PANIC, "curr alloc failed"); |
8855 /*NOTREACHED*/ |
8854 /*NOTREACHED*/ |
8856 } |
8855 } |
8862 |
8861 |
8863 currdip = path_to_dip(curr); |
8862 currdip = path_to_dip(curr); |
8864 |
8863 |
8865 out: |
8864 out: |
8866 if (currdip) { |
8865 if (currdip) { |
8867 (void) mod_hash_insert(ddi_aliases.dali_alias_TLB, |
8866 rv = mod_hash_insert(ddi_aliases.dali_alias_TLB, |
8868 (mod_hash_key_t)aliasdup, (mod_hash_val_t)curr); |
8867 (mod_hash_key_t)aliasdup, (mod_hash_val_t)curr); |
|
8868 if (rv != 0) { |
|
8869 kmem_free(curr, MAXPATHLEN); |
|
8870 strfree(aliasdup); |
|
8871 } |
8869 } else { |
8872 } else { |
8870 (void) mod_hash_insert(ddi_aliases.dali_alias_TLB, |
8873 rv = mod_hash_insert(ddi_aliases.dali_alias_TLB, |
8871 (mod_hash_key_t)aliasdup, (mod_hash_val_t)NULL); |
8874 (mod_hash_key_t)aliasdup, (mod_hash_val_t)NULL); |
|
8875 if (rv != 0) { |
|
8876 strfree(aliasdup); |
|
8877 } |
8872 if (curr) |
8878 if (curr) |
8873 kmem_free(curr, MAXPATHLEN); |
8879 kmem_free(curr, MAXPATHLEN); |
8874 } |
8880 } |
8875 |
8881 |
8876 return (currdip); |
8882 return (currdip); |
8881 { |
8887 { |
8882 alias_pair_t *pair; |
8888 alias_pair_t *pair; |
8883 char *alias; |
8889 char *alias; |
8884 char *currdup; |
8890 char *currdup; |
8885 int len; |
8891 int len; |
|
8892 int rv; |
8886 |
8893 |
8887 pair = &(ddi_aliases.dali_curr_pairs[i]); |
8894 pair = &(ddi_aliases.dali_curr_pairs[i]); |
8888 |
8895 |
8889 len = strlen(pair->pair_curr); |
8896 len = strlen(pair->pair_curr); |
8890 |
8897 |
8918 kmem_free(alias, MAXPATHLEN); |
8925 kmem_free(alias, MAXPATHLEN); |
8919 alias = NULL; |
8926 alias = NULL; |
8920 } |
8927 } |
8921 |
8928 |
8922 out: |
8929 out: |
8923 (void) mod_hash_insert(ddi_aliases.dali_curr_TLB, |
8930 rv = mod_hash_insert(ddi_aliases.dali_curr_TLB, |
8924 (mod_hash_key_t)currdup, (mod_hash_val_t)alias); |
8931 (mod_hash_key_t)currdup, (mod_hash_val_t)alias); |
|
8932 if (rv != 0) { |
|
8933 strfree(currdup); |
|
8934 } |
8925 |
8935 |
8926 return (alias); |
8936 return (alias); |
8927 } |
8937 } |
8928 |
8938 |
8929 dev_info_t * |
8939 dev_info_t * |
8930 ddi_alias_redirect(char *alias) |
8940 ddi_alias_redirect(char *alias) |
8931 { |
8941 { |
8932 char *curr; |
8942 char *curr; |
8933 char *aliasdup; |
|
8934 dev_info_t *currdip; |
8943 dev_info_t *currdip; |
8935 int i; |
8944 int i; |
8936 |
8945 |
8937 if (ddi_aliases_present == B_FALSE) |
8946 if (ddi_aliases_present == B_FALSE) |
8938 return (NULL); |
8947 return (NULL); |
8948 curr = NULL; |
8957 curr = NULL; |
8949 if (mod_hash_find(ddi_aliases.dali_alias_TLB, |
8958 if (mod_hash_find(ddi_aliases.dali_alias_TLB, |
8950 (mod_hash_key_t)alias, (mod_hash_val_t *)&curr) == 0) { |
8959 (mod_hash_key_t)alias, (mod_hash_val_t *)&curr) == 0) { |
8951 currdip = curr ? path_to_dip(curr) : NULL; |
8960 currdip = curr ? path_to_dip(curr) : NULL; |
8952 goto out; |
8961 goto out; |
8953 } |
|
8954 |
|
8955 aliasdup = ddi_strdup(alias, KM_NOSLEEP); |
|
8956 if (aliasdup == NULL) { |
|
8957 cmn_err(CE_PANIC, "aliasdup alloc failed"); |
|
8958 /*NOTREACHED*/ |
|
8959 } |
8962 } |
8960 |
8963 |
8961 /* The TLB has no translation, do it the hard way */ |
8964 /* The TLB has no translation, do it the hard way */ |
8962 currdip = NULL; |
8965 currdip = NULL; |
8963 for (i = ddi_aliases.dali_num_pairs - 1; i >= 0; i--) { |
8966 for (i = ddi_aliases.dali_num_pairs - 1; i >= 0; i--) { |