Lines Matching refs:psf

130 #define for_each_psf_mclock(mc, psf)				\  argument
131 for (psf = mc_dereference((mc)->mca_sources, mc->idev); \
132 psf; \
133 psf = mc_dereference(psf->sf_next, mc->idev))
135 #define for_each_psf_rcu(mc, psf) \ argument
136 for (psf = rcu_dereference((mc)->mca_sources); \
137 psf; \
138 psf = rcu_dereference(psf->sf_next))
140 #define for_each_psf_tomb(mc, psf) \ argument
141 for (psf = mc_dereference((mc)->mca_tomb, mc->idev); \
142 psf; \
143 psf = mc_dereference(psf->sf_next, mc->idev))
753 struct ip6_sf_list *psf; in mld_add_delrec() local
762 for_each_psf_mclock(pmc, psf) in mld_add_delrec()
763 psf->sf_crcount = pmc->mca_crcount; in mld_add_delrec()
772 struct ip6_sf_list *psf, *sources, *tomb; in mld_del_delrec() local
802 for_each_psf_mclock(im, psf) in mld_del_delrec()
803 psf->sf_crcount = idev->mc_qrv; in mld_del_delrec()
830 struct ip6_sf_list *psf, *psf_next; in mld_clear_delrec() local
832 psf = mc_dereference(pmc->mca_tomb, idev); in mld_clear_delrec()
834 for (; psf; psf = psf_next) { in mld_clear_delrec()
835 psf_next = mc_dereference(psf->sf_next, idev); in mld_clear_delrec()
836 kfree_rcu(psf, rcu); in mld_clear_delrec()
1056 struct ip6_sf_list *psf; in ipv6_chk_mcast_addr() local
1058 for_each_psf_rcu(mc, psf) { in ipv6_chk_mcast_addr()
1059 if (ipv6_addr_equal(&psf->sf_addr, src_addr)) in ipv6_chk_mcast_addr()
1062 if (psf) in ipv6_chk_mcast_addr()
1063 rv = READ_ONCE(psf->sf_count[MCAST_INCLUDE]) || in ipv6_chk_mcast_addr()
1064 READ_ONCE(psf->sf_count[MCAST_EXCLUDE]) != in ipv6_chk_mcast_addr()
1174 struct ip6_sf_list *psf; in mld_xmarksources() local
1180 for_each_psf_mclock(pmc, psf) { in mld_xmarksources()
1185 if (psf->sf_count[MCAST_INCLUDE] || in mld_xmarksources()
1187 psf->sf_count[MCAST_EXCLUDE]) in mld_xmarksources()
1189 if (ipv6_addr_equal(&srcs[i], &psf->sf_addr)) { in mld_xmarksources()
1204 struct ip6_sf_list *psf; in mld_marksources() local
1215 for_each_psf_mclock(pmc, psf) { in mld_marksources()
1219 if (ipv6_addr_equal(&srcs[i], &psf->sf_addr)) { in mld_marksources()
1220 psf->sf_gsresp = 1; in mld_marksources()
1675 static bool is_in(struct ifmcaddr6 *pmc, struct ip6_sf_list *psf, int type, in is_in() argument
1683 if (!((pmc->mca_flags & MAF_GSQUERY) && !psf->sf_gsresp)) { in is_in()
1689 if (psf->sf_count[MCAST_INCLUDE]) in is_in()
1692 psf->sf_count[MCAST_EXCLUDE]; in is_in()
1698 return psf->sf_count[MCAST_INCLUDE] != 0; in is_in()
1703 psf->sf_count[MCAST_INCLUDE]) in is_in()
1706 psf->sf_count[MCAST_EXCLUDE]; in is_in()
1708 if (gdeleted || !psf->sf_crcount) in is_in()
1713 return gdeleted || (psf->sf_crcount && sdeleted); in is_in()
1714 return psf->sf_crcount && !gdeleted && !sdeleted; in is_in()
1722 struct ip6_sf_list *psf; in mld_scount() local
1725 for_each_psf_mclock(pmc, psf) { in mld_scount()
1726 if (!is_in(pmc, psf, type, gdeleted, sdeleted)) in mld_scount()
1907 struct ip6_sf_list *psf, *psf_prev, *psf_next; in add_grec() local
1950 for (psf = mc_dereference(*psf_list, idev); in add_grec()
1951 psf; in add_grec()
1952 psf = psf_next) { in add_grec()
1955 psf_next = mc_dereference(psf->sf_next, idev); in add_grec()
1957 if (!is_in(pmc, psf, type, gdeleted, sdeleted) && !crsend) { in add_grec()
1958 psf_prev = psf; in add_grec()
1968 type == MLD2_BLOCK_OLD_SOURCES) && psf->sf_crcount) in add_grec()
1973 psf->sf_gsresp = 0; in add_grec()
1994 *psrc = psf->sf_addr; in add_grec()
1997 type == MLD2_BLOCK_OLD_SOURCES) && psf->sf_crcount) { in add_grec()
1999 psf->sf_crcount--; in add_grec()
2000 if ((sdeleted || gdeleted) && psf->sf_crcount == 0) { in add_grec()
2003 mc_dereference(psf->sf_next, idev)); in add_grec()
2006 mc_dereference(psf->sf_next, idev)); in add_grec()
2007 kfree_rcu(psf, rcu); in add_grec()
2011 psf_prev = psf; in add_grec()
2067 struct ip6_sf_list *psf_prev, *psf_next, *psf; in mld_clear_zeros() local
2070 for (psf = mc_dereference(*ppsf, idev); in mld_clear_zeros()
2071 psf; in mld_clear_zeros()
2072 psf = psf_next) { in mld_clear_zeros()
2073 psf_next = mc_dereference(psf->sf_next, idev); in mld_clear_zeros()
2074 if (psf->sf_crcount == 0) { in mld_clear_zeros()
2077 mc_dereference(psf->sf_next, idev)); in mld_clear_zeros()
2080 mc_dereference(psf->sf_next, idev)); in mld_clear_zeros()
2081 kfree_rcu(psf, rcu); in mld_clear_zeros()
2083 psf_prev = psf; in mld_clear_zeros()
2308 struct ip6_sf_list *psf, *psf_prev; in ip6_mc_del1_src() local
2314 for_each_psf_mclock(pmc, psf) { in ip6_mc_del1_src()
2315 if (ipv6_addr_equal(&psf->sf_addr, psfsrc)) in ip6_mc_del1_src()
2317 psf_prev = psf; in ip6_mc_del1_src()
2319 if (!psf || psf->sf_count[sfmode] == 0) { in ip6_mc_del1_src()
2323 WRITE_ONCE(psf->sf_count[sfmode], psf->sf_count[sfmode] - 1); in ip6_mc_del1_src()
2324 if (!psf->sf_count[MCAST_INCLUDE] && !psf->sf_count[MCAST_EXCLUDE]) { in ip6_mc_del1_src()
2330 mc_dereference(psf->sf_next, idev)); in ip6_mc_del1_src()
2333 mc_dereference(psf->sf_next, idev)); in ip6_mc_del1_src()
2335 if (psf->sf_oldin && !(pmc->mca_flags & MAF_NOREPORT) && in ip6_mc_del1_src()
2337 psf->sf_crcount = idev->mc_qrv; in ip6_mc_del1_src()
2338 rcu_assign_pointer(psf->sf_next, in ip6_mc_del1_src()
2340 rcu_assign_pointer(pmc->mca_tomb, psf); in ip6_mc_del1_src()
2343 kfree_rcu(psf, rcu); in ip6_mc_del1_src()
2387 struct ip6_sf_list *psf; in ip6_mc_del_src() local
2393 for_each_psf_mclock(pmc, psf) in ip6_mc_del_src()
2394 psf->sf_crcount = 0; in ip6_mc_del_src()
2407 struct ip6_sf_list *psf, *psf_prev; in ip6_mc_add1_src() local
2412 for_each_psf_mclock(pmc, psf) { in ip6_mc_add1_src()
2413 if (ipv6_addr_equal(&psf->sf_addr, psfsrc)) in ip6_mc_add1_src()
2415 psf_prev = psf; in ip6_mc_add1_src()
2417 if (!psf) { in ip6_mc_add1_src()
2418 psf = kzalloc_obj(*psf); in ip6_mc_add1_src()
2419 if (!psf) in ip6_mc_add1_src()
2422 psf->sf_addr = *psfsrc; in ip6_mc_add1_src()
2424 rcu_assign_pointer(psf_prev->sf_next, psf); in ip6_mc_add1_src()
2426 rcu_assign_pointer(pmc->mca_sources, psf); in ip6_mc_add1_src()
2429 WRITE_ONCE(psf->sf_count[sfmode], psf->sf_count[sfmode] + 1); in ip6_mc_add1_src()
2436 struct ip6_sf_list *psf; in sf_markstate() local
2440 for_each_psf_mclock(pmc, psf) { in sf_markstate()
2442 psf->sf_oldin = mca_xcount == in sf_markstate()
2443 psf->sf_count[MCAST_EXCLUDE] && in sf_markstate()
2444 !psf->sf_count[MCAST_INCLUDE]; in sf_markstate()
2446 psf->sf_oldin = psf->sf_count[MCAST_INCLUDE] != 0; in sf_markstate()
2454 struct ip6_sf_list *psf, *dpsf; in sf_setstate() local
2461 for_each_psf_mclock(pmc, psf) { in sf_setstate()
2463 new_in = mca_xcount == psf->sf_count[MCAST_EXCLUDE] && in sf_setstate()
2464 !psf->sf_count[MCAST_INCLUDE]; in sf_setstate()
2466 new_in = psf->sf_count[MCAST_INCLUDE] != 0; in sf_setstate()
2468 if (!psf->sf_oldin) { in sf_setstate()
2473 &psf->sf_addr)) in sf_setstate()
2488 psf->sf_crcount = qrv; in sf_setstate()
2491 } else if (psf->sf_oldin) { in sf_setstate()
2492 psf->sf_crcount = 0; in sf_setstate()
2500 &psf->sf_addr)) in sf_setstate()
2506 *dpsf = *psf; in sf_setstate()
2559 struct ip6_sf_list *psf; in ip6_mc_add_src() local
2570 for_each_psf_mclock(pmc, psf) in ip6_mc_add_src()
2571 psf->sf_crcount = 0; in ip6_mc_add_src()
2581 struct ip6_sf_list *psf, *nextpsf; in ip6_mc_clear_src() local
2585 for (psf = mc_dereference(pmc->mca_tomb, pmc->idev); in ip6_mc_clear_src()
2586 psf; in ip6_mc_clear_src()
2587 psf = nextpsf) { in ip6_mc_clear_src()
2588 nextpsf = mc_dereference(psf->sf_next, pmc->idev); in ip6_mc_clear_src()
2589 kfree_rcu(psf, rcu); in ip6_mc_clear_src()
2592 for (psf = mc_dereference(pmc->mca_sources, pmc->idev); in ip6_mc_clear_src()
2593 psf; in ip6_mc_clear_src()
2594 psf = nextpsf) { in ip6_mc_clear_src()
2595 nextpsf = mc_dereference(psf->sf_next, pmc->idev); in ip6_mc_clear_src()
2596 kfree_rcu(psf, rcu); in ip6_mc_clear_src()
3014 struct ip6_sf_list *psf = NULL; in igmp6_mcf_get_first() local
3029 psf = rcu_dereference(im->mca_sources); in igmp6_mcf_get_first()
3030 if (likely(psf)) { in igmp6_mcf_get_first()
3037 return psf; in igmp6_mcf_get_first()
3040 static struct ip6_sf_list *igmp6_mcf_get_next(struct seq_file *seq, struct ip6_sf_list *psf) in igmp6_mcf_get_next() argument
3044 psf = rcu_dereference(psf->sf_next); in igmp6_mcf_get_next()
3045 while (!psf) { in igmp6_mcf_get_next()
3058 psf = rcu_dereference(state->im->mca_sources); in igmp6_mcf_get_next()
3061 return psf; in igmp6_mcf_get_next()
3066 struct ip6_sf_list *psf = igmp6_mcf_get_first(seq); in igmp6_mcf_get_idx() local
3067 if (psf) in igmp6_mcf_get_idx()
3068 while (pos && (psf = igmp6_mcf_get_next(seq, psf)) != NULL) in igmp6_mcf_get_idx()
3070 return pos ? NULL : psf; in igmp6_mcf_get_idx()
3082 struct ip6_sf_list *psf; in igmp6_mcf_seq_next() local
3084 psf = igmp6_mcf_get_first(seq); in igmp6_mcf_seq_next()
3086 psf = igmp6_mcf_get_next(seq, v); in igmp6_mcf_seq_next()
3088 return psf; in igmp6_mcf_seq_next()
3107 struct ip6_sf_list *psf = (struct ip6_sf_list *)v; in igmp6_mcf_seq_show() local
3117 &psf->sf_addr, in igmp6_mcf_seq_show()
3118 READ_ONCE(psf->sf_count[MCAST_INCLUDE]), in igmp6_mcf_seq_show()
3119 READ_ONCE(psf->sf_count[MCAST_EXCLUDE])); in igmp6_mcf_seq_show()