mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-24 01:09:38 -05:00
IB/rdmavt: Add driver notification for new AH
Drivers may need to do some work once an address handle has been created. Add a driver function for this purpose. Reviewed-by: Ira Weiny <ira.weiny@intel.com> Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Reviewed-by: Harish Chegondi <harish.chegondi@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
f3d01bbcdc
commit
b036db83c0
2 changed files with 31 additions and 19 deletions
|
@ -83,8 +83,8 @@ int rvt_check_ah(struct ib_device *ibdev,
|
||||||
!(ah_attr->ah_flags & IB_AH_GRH))
|
!(ah_attr->ah_flags & IB_AH_GRH))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
if (rdi->driver_f.check_ah(ibdev, ah_attr))
|
if (rdi->driver_f.check_ah)
|
||||||
return -EINVAL;
|
return rdi->driver_f.check_ah(ibdev, ah_attr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(rvt_check_ah);
|
EXPORT_SYMBOL(rvt_check_ah);
|
||||||
|
@ -123,6 +123,9 @@ struct ib_ah *rvt_create_ah(struct ib_pd *pd,
|
||||||
ah->attr = *ah_attr;
|
ah->attr = *ah_attr;
|
||||||
atomic_set(&ah->refcount, 0);
|
atomic_set(&ah->refcount, 0);
|
||||||
|
|
||||||
|
if (dev->driver_f.notify_new_ah)
|
||||||
|
dev->driver_f.notify_new_ah(pd->device, ah_attr, ah);
|
||||||
|
|
||||||
return &ah->ibah;
|
return &ah->ibah;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -467,23 +467,6 @@ struct rvt_driver_params {
|
||||||
int nports;
|
int nports;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* Functions that drivers are required to support
|
|
||||||
*/
|
|
||||||
struct rvt_dev_info;
|
|
||||||
struct rvt_driver_provided {
|
|
||||||
/*
|
|
||||||
* The work to create port files in /sys/class Infiniband is different
|
|
||||||
* depending on the driver. This should not be extracted away and
|
|
||||||
* instead drivers are responsible for setting the correct callback for
|
|
||||||
* this.
|
|
||||||
*/
|
|
||||||
int (*port_callback)(struct ib_device *, u8, struct kobject *);
|
|
||||||
const char * (*get_card_name)(struct rvt_dev_info *rdi);
|
|
||||||
struct pci_dev * (*get_pci_dev)(struct rvt_dev_info *rdi);
|
|
||||||
int (*check_ah)(struct ib_device *, struct ib_ah_attr *);
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Protection domain */
|
/* Protection domain */
|
||||||
struct rvt_pd {
|
struct rvt_pd {
|
||||||
struct ib_pd ibpd;
|
struct ib_pd ibpd;
|
||||||
|
@ -495,6 +478,32 @@ struct rvt_ah {
|
||||||
struct ib_ah ibah;
|
struct ib_ah ibah;
|
||||||
struct ib_ah_attr attr;
|
struct ib_ah_attr attr;
|
||||||
atomic_t refcount;
|
atomic_t refcount;
|
||||||
|
u8 vl;
|
||||||
|
u8 log_pmtu;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct rvt_dev_info;
|
||||||
|
struct rvt_driver_provided {
|
||||||
|
/*
|
||||||
|
* The work to create port files in /sys/class Infiniband is different
|
||||||
|
* depending on the driver. This should not be extracted away and
|
||||||
|
* instead drivers are responsible for setting the correct callback for
|
||||||
|
* this.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* -------------------*/
|
||||||
|
/* Required functions */
|
||||||
|
/* -------------------*/
|
||||||
|
int (*port_callback)(struct ib_device *, u8, struct kobject *);
|
||||||
|
const char * (*get_card_name)(struct rvt_dev_info *rdi);
|
||||||
|
struct pci_dev * (*get_pci_dev)(struct rvt_dev_info *rdi);
|
||||||
|
|
||||||
|
/*--------------------*/
|
||||||
|
/* Optional functions */
|
||||||
|
/*--------------------*/
|
||||||
|
int (*check_ah)(struct ib_device *, struct ib_ah_attr *);
|
||||||
|
void (*notify_new_ah)(struct ib_device *, struct ib_ah_attr *,
|
||||||
|
struct rvt_ah *);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct rvt_dev_info {
|
struct rvt_dev_info {
|
||||||
|
|
Loading…
Add table
Reference in a new issue