Lines Matching refs:dfa

197 static int verify_dfa(struct aa_dfa *dfa)  in verify_dfa()  argument
202 state_count = dfa->tables[YYTD_ID_BASE]->td_lolen; in verify_dfa()
203 trans_count = dfa->tables[YYTD_ID_NXT]->td_lolen; in verify_dfa()
207 if (!(BASE_TABLE(dfa)[i] & MATCH_FLAG_DIFF_ENCODE) && in verify_dfa()
208 (DEFAULT_TABLE(dfa)[i] >= state_count)) in verify_dfa()
210 if (BASE_TABLE(dfa)[i] & MATCH_FLAGS_INVALID) { in verify_dfa()
214 if ((BASE_TABLE(dfa)[i] & MATCH_FLAG_DIFF_ENCODE)) { in verify_dfa()
215 if (!(dfa->flags & YYTH_FLAG_DIFF_ENCODE)) { in verify_dfa()
220 if ((BASE_TABLE(dfa)[i] & MATCH_FLAG_OOB_TRANSITION)) { in verify_dfa()
221 if (base_idx(BASE_TABLE(dfa)[i]) < dfa->max_oob) { in verify_dfa()
225 if (!(dfa->flags & YYTH_FLAG_OOB_TRANS)) { in verify_dfa()
230 if (base_idx(BASE_TABLE(dfa)[i]) + 255 >= trans_count) { in verify_dfa()
237 if (NEXT_TABLE(dfa)[i] >= state_count) in verify_dfa() local
239 if (CHECK_TABLE(dfa)[i] >= state_count) in verify_dfa() local
248 (BASE_TABLE(dfa)[j] & MATCH_FLAG_DIFF_ENCODE) && in verify_dfa()
249 !(BASE_TABLE(dfa)[j] & MARK_DIFF_ENCODE); in verify_dfa()
251 k = DEFAULT_TABLE(dfa)[j]; in verify_dfa()
256 BASE_TABLE(dfa)[j] |= MARK_DIFF_ENCODE; in verify_dfa() local
271 static void dfa_free(struct aa_dfa *dfa) in dfa_free() argument
273 if (dfa) { in dfa_free()
276 for (i = 0; i < ARRAY_SIZE(dfa->tables); i++) { in dfa_free()
277 kvfree(dfa->tables[i]); in dfa_free()
278 dfa->tables[i] = NULL; in dfa_free()
280 kfree(dfa); in dfa_free()
290 struct aa_dfa *dfa = container_of(kref, struct aa_dfa, count); in aa_dfa_free_kref() local
291 dfa_free(dfa); in aa_dfa_free_kref()
312 struct aa_dfa *dfa = kzalloc(sizeof(struct aa_dfa), GFP_KERNEL); in aa_dfa_unpack() local
313 if (!dfa) in aa_dfa_unpack()
316 kref_init(&dfa->count); in aa_dfa_unpack()
331 dfa->flags = ntohs(*(__be16 *) (data + 12)); in aa_dfa_unpack()
332 if (dfa->flags & ~(YYTH_FLAGS)) in aa_dfa_unpack()
347 dfa->max_oob = 1; in aa_dfa_unpack()
384 if (dfa->tables[table->td_id]) in aa_dfa_unpack()
386 dfa->tables[table->td_id] = table; in aa_dfa_unpack()
391 error = verify_table_headers(dfa->tables, flags); in aa_dfa_unpack()
396 error = verify_dfa(dfa); in aa_dfa_unpack()
401 return dfa; in aa_dfa_unpack()
405 dfa_free(dfa); in aa_dfa_unpack()
439 unsigned int aa_dfa_match_len(struct aa_dfa *dfa, unsigned int start, in aa_dfa_match_len() argument
442 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_match_len()
443 u32 *base = BASE_TABLE(dfa); in aa_dfa_match_len()
444 u16 *next = NEXT_TABLE(dfa); in aa_dfa_match_len()
445 u16 *check = CHECK_TABLE(dfa); in aa_dfa_match_len()
452 if (dfa->tables[YYTD_ID_EC]) { in aa_dfa_match_len()
454 u8 *equiv = EQUIV_TABLE(dfa); in aa_dfa_match_len()
479 unsigned int aa_dfa_match(struct aa_dfa *dfa, unsigned int start, in aa_dfa_match() argument
482 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_match()
483 u32 *base = BASE_TABLE(dfa); in aa_dfa_match()
484 u16 *next = NEXT_TABLE(dfa); in aa_dfa_match()
485 u16 *check = CHECK_TABLE(dfa); in aa_dfa_match()
492 if (dfa->tables[YYTD_ID_EC]) { in aa_dfa_match()
494 u8 *equiv = EQUIV_TABLE(dfa); in aa_dfa_match()
518 unsigned int aa_dfa_next(struct aa_dfa *dfa, unsigned int state, in aa_dfa_next() argument
521 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_next()
522 u32 *base = BASE_TABLE(dfa); in aa_dfa_next()
523 u16 *next = NEXT_TABLE(dfa); in aa_dfa_next()
524 u16 *check = CHECK_TABLE(dfa); in aa_dfa_next()
527 if (dfa->tables[YYTD_ID_EC]) { in aa_dfa_next()
529 u8 *equiv = EQUIV_TABLE(dfa); in aa_dfa_next()
537 unsigned int aa_dfa_outofband_transition(struct aa_dfa *dfa, unsigned int state) in aa_dfa_outofband_transition() argument
539 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_outofband_transition()
540 u32 *base = BASE_TABLE(dfa); in aa_dfa_outofband_transition()
541 u16 *next = NEXT_TABLE(dfa); in aa_dfa_outofband_transition()
542 u16 *check = CHECK_TABLE(dfa); in aa_dfa_outofband_transition()
567 unsigned int aa_dfa_match_until(struct aa_dfa *dfa, unsigned int start, in aa_dfa_match_until() argument
570 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_match_until()
571 u32 *base = BASE_TABLE(dfa); in aa_dfa_match_until()
572 u16 *next = NEXT_TABLE(dfa); in aa_dfa_match_until()
573 u16 *check = CHECK_TABLE(dfa); in aa_dfa_match_until()
574 u32 *accept = ACCEPT_TABLE(dfa); in aa_dfa_match_until()
581 if (dfa->tables[YYTD_ID_EC]) { in aa_dfa_match_until()
583 u8 *equiv = EQUIV_TABLE(dfa); in aa_dfa_match_until()
628 unsigned int aa_dfa_matchn_until(struct aa_dfa *dfa, unsigned int start, in aa_dfa_matchn_until() argument
631 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_matchn_until()
632 u32 *base = BASE_TABLE(dfa); in aa_dfa_matchn_until()
633 u16 *next = NEXT_TABLE(dfa); in aa_dfa_matchn_until()
634 u16 *check = CHECK_TABLE(dfa); in aa_dfa_matchn_until()
635 u32 *accept = ACCEPT_TABLE(dfa); in aa_dfa_matchn_until()
643 if (dfa->tables[YYTD_ID_EC]) { in aa_dfa_matchn_until()
645 u8 *equiv = EQUIV_TABLE(dfa); in aa_dfa_matchn_until()
703 static unsigned int leftmatch_fb(struct aa_dfa *dfa, unsigned int start, in leftmatch_fb() argument
707 u16 *def = DEFAULT_TABLE(dfa); in leftmatch_fb()
708 u32 *base = BASE_TABLE(dfa); in leftmatch_fb()
709 u16 *next = NEXT_TABLE(dfa); in leftmatch_fb()
710 u16 *check = CHECK_TABLE(dfa); in leftmatch_fb()
713 AA_BUG(!dfa); in leftmatch_fb()
723 if (dfa->tables[YYTD_ID_EC]) { in leftmatch_fb()
725 u8 *equiv = EQUIV_TABLE(dfa); in leftmatch_fb()
737 state = aa_dfa_match(dfa, state, str); in leftmatch_fb()
756 state = aa_dfa_match(dfa, state, str); in leftmatch_fb()
784 unsigned int aa_dfa_leftmatch(struct aa_dfa *dfa, unsigned int start, in aa_dfa_leftmatch() argument
791 return leftmatch_fb(dfa, start, str, &wb, count); in aa_dfa_leftmatch()